@underlayerdev/ui 0.13.4 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as i1 from '@angular/cdk/accordion';
|
|
2
2
|
import { CdkAccordionItem, CdkAccordion } from '@angular/cdk/accordion';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { inject, ElementRef, Component, input, DestroyRef, contentChildren, computed, ViewEncapsulation, signal, effect, Directive, output, model, booleanAttribute,
|
|
4
|
+
import { inject, ElementRef, Component, input, DestroyRef, contentChildren, computed, ViewEncapsulation, signal, effect, Directive, output, model, booleanAttribute, contentChild, HostListener, ViewChild, viewChild, Pipe, SecurityContext, Injectable, HostBinding } from '@angular/core';
|
|
5
5
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
6
6
|
import * as i1$1 from '@angular/common';
|
|
7
7
|
import { CommonModule, NgTemplateOutlet, CurrencyPipe } from '@angular/common';
|
|
8
8
|
import { RouterLink } from '@angular/router';
|
|
9
9
|
import { CdkMenuTrigger, CdkMenu, CdkMenuItem } from '@angular/cdk/menu';
|
|
10
|
+
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
10
11
|
import { fromEvent, map } from 'rxjs';
|
|
11
12
|
import { debounceTime } from 'rxjs/operators';
|
|
12
13
|
import { ImageCropperComponent as ImageCropperComponent$1 } from 'ngx-image-cropper';
|
|
13
|
-
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
14
14
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
15
15
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
16
16
|
|
|
@@ -1313,6 +1313,161 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
1313
1313
|
}, encapsulation: ViewEncapsulation.None, template: "@if (loading()) {\n <div class=\"ul-card__skeleton\">\n <div class=\"ul-card__media\">\n <ul-skeleton variant=\"rect\" borderRadius=\"lg\" [show]=\"true\" />\n </div>\n <div class=\"ul-card__content\">\n <div class=\"ul-card__content-title ul-card__content-title--single-line\">\n <ul-skeleton variant=\"text\" [lines]=\"2\" borderRadius=\"sm\" />\n </div>\n <div class=\"ul-card__content-subtitle ul-card__content-subtitle--single-line\">\n <ul-skeleton variant=\"text\" [lines]=\"1\" borderRadius=\"sm\" />\n </div>\n </div>\n </div>\n} @else {\n <div class=\"ul-card__media\">\n <ng-content select=\"[ulCardMedia]\" />\n <ng-content select=\"[ulCardMediaOverlay]\" />\n </div>\n <div class=\"ul-card__media-action\">\n <ng-content select=\"[ulCardMediaAction]\" />\n </div>\n\n <div class=\"ul-card__content\">\n @if (cardCaption()) {\n <div class=\"ul-card__content-caption\">\n {{ cardCaption() }}\n </div>\n }\n @if (cardTitle()) {\n <div\n class=\"ul-card__content-title\"\n [class.ul-card__content-title--single-line]=\"cardTitleSingleLine()\"\n >\n {{ cardTitle() }}\n </div>\n }\n @if (cardSubtitle()) {\n <div\n class=\"ul-card__content-subtitle\"\n [class.ul-card__content-subtitle--single-line]=\"cardSubtitleSingleLine()\"\n >\n {{ cardSubtitle() }}\n </div>\n }\n </div>\n\n <div class=\"ul-card__footer\">\n <ng-content select=\"[ulCardFooter]\" />\n </div>\n}\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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){.ul-card{min-width:100px}}@media(min-width:768px){.ul-card{min-width:180px}}@media(min-width:1280px){.ul-card{min-width:150px}}.ul-card:hover,.ul-card:focus,.ul-card:focus-within,.ul-card--focused{outline-color:#ffffff1a;background-color:#ffffff1a}.ul-card__media{position:relative;overflow:hidden;width:100%;background-color:#ffffff1a;border-radius:8px}@media(min-width:0px){.ul-card__media{min-height:100px}}@media(min-width:768px){.ul-card__media{min-height:180px}}@media(min-width:1280px){.ul-card__media{min-height:150px}}.ul-card__media>:first-child{width:100%;height:100%;display:block;object-fit:cover;filter:blur(var(--ul-card__media-blur, 0)) grayscale(var(--ul-card__media-grayscale, 0))}.ul-card__media>:nth-child(2){position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.ul-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){.ul-card__media-action{opacity:1}}.ul-card:hover .ul-card__media-action,.ul-card:focus .ul-card__media-action,.ul-card:focus-within .ul-card__media-action{opacity:1}.ul-card__content{flex:1}.ul-card__content-caption{color:#ffffff80;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.ul-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}.ul-card__content-title--single-line{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.ul-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}.ul-card__content-subtitle--single-line{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.ul-card__footer{display:flex;gap:8px}.ul-card--disabled{cursor:not-allowed;pointer-events:none;opacity:.5}.ul-card--caption-sm .ul-card__content-caption{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-card--footer-equal .ul-card__footer>*{flex:1}.ul-card--media-square .ul-card__media{aspect-ratio:1/1}.ul-card--media-portrait .ul-card__media{aspect-ratio:3/4}.ul-card__media img{width:100%;height:100%;object-fit:cover}.ul-card--media-blurred{--ul-card__media-blur: 16px}.ul-card--media-blurred .ul-card__media>:first-child{fill:#0000004d}.ul-card--media-grayscale{--ul-card__media-grayscale: 1}.ul-card--media-grayscale .ul-card__media>:first-child{opacity:.5;mix-blend-mode:luminosity}.ul-card__skeleton{display:flex;flex-direction:column;gap:12px;min-height:100px}.ul-card__skeleton>.ul-skeleton:first-child{width:100%;aspect-ratio:16/9}.ul-card__skeleton-body{margin-top:12px;display:flex;flex-direction:column;gap:8px}\n"] }]
|
|
1314
1314
|
}], 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 }] }] } });
|
|
1315
1315
|
|
|
1316
|
+
/**
|
|
1317
|
+
* A reusable input component that follows UDS design system guidelines.
|
|
1318
|
+
* Implements FormValueControl for use with Signal Forms [formField] directive.
|
|
1319
|
+
*
|
|
1320
|
+
* Use [(value)] for two-way binding, or bind with [formField]="myForm().email" for Signal Forms.
|
|
1321
|
+
*
|
|
1322
|
+
* Content projection: [ul-input-left-elements], [ul-input-right-elements].
|
|
1323
|
+
*/
|
|
1324
|
+
class InputComponent {
|
|
1325
|
+
type = input('text', /* @ts-ignore */
|
|
1326
|
+
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
1327
|
+
size = input('md', /* @ts-ignore */
|
|
1328
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
1329
|
+
/** Border/hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */
|
|
1330
|
+
appearance = input('border-only', /* @ts-ignore */
|
|
1331
|
+
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
1332
|
+
error = input(false, /* @ts-ignore */
|
|
1333
|
+
...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
1334
|
+
disabled = input(false, /* @ts-ignore */
|
|
1335
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1336
|
+
readOnly = input(false, /* @ts-ignore */
|
|
1337
|
+
...(ngDevMode ? [{ debugName: "readOnly" }] : /* istanbul ignore next */ []));
|
|
1338
|
+
required = input(false, /* @ts-ignore */
|
|
1339
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
1340
|
+
showRequiredIndicator = input(true, /* @ts-ignore */
|
|
1341
|
+
...(ngDevMode ? [{ debugName: "showRequiredIndicator" }] : /* istanbul ignore next */ []));
|
|
1342
|
+
placeholder = input('', /* @ts-ignore */
|
|
1343
|
+
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1344
|
+
label = input(null, /* @ts-ignore */
|
|
1345
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1346
|
+
helperText = input(null, /* @ts-ignore */
|
|
1347
|
+
...(ngDevMode ? [{ debugName: "helperText" }] : /* istanbul ignore next */ []));
|
|
1348
|
+
errorText = input(null, /* @ts-ignore */
|
|
1349
|
+
...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
|
|
1350
|
+
maxLength = input(/* @ts-ignore */
|
|
1351
|
+
...(ngDevMode ? [undefined, { debugName: "maxLength" }] : /* istanbul ignore next */ []));
|
|
1352
|
+
minLength = input(/* @ts-ignore */
|
|
1353
|
+
...(ngDevMode ? [undefined, { debugName: "minLength" }] : /* istanbul ignore next */ []));
|
|
1354
|
+
pattern = input([], /* @ts-ignore */
|
|
1355
|
+
...(ngDevMode ? [{ debugName: "pattern" }] : /* istanbul ignore next */ []));
|
|
1356
|
+
/** Native step for type="number". Defaults to 'any' (decimals allowed) rather than the
|
|
1357
|
+
* browser's own default of 1, which would silently reject e.g. "19.99" — pass an explicit
|
|
1358
|
+
* step (e.g. 1) to restrict to whole numbers. */
|
|
1359
|
+
step = input(undefined, /* @ts-ignore */
|
|
1360
|
+
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
1361
|
+
autocomplete = input('off', /* @ts-ignore */
|
|
1362
|
+
...(ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []));
|
|
1363
|
+
/** When provided (e.g. by a parent form field), the input element uses this id instead of the internal one. */
|
|
1364
|
+
controlId = input(/* @ts-ignore */
|
|
1365
|
+
...(ngDevMode ? [undefined, { debugName: "controlId" }] : /* istanbul ignore next */ []));
|
|
1366
|
+
/** Aria-label for the toggle button when the password is hidden (i.e. the action reveals it). */
|
|
1367
|
+
showPasswordLabel = input('Show password', /* @ts-ignore */
|
|
1368
|
+
...(ngDevMode ? [{ debugName: "showPasswordLabel" }] : /* istanbul ignore next */ []));
|
|
1369
|
+
/** Aria-label for the toggle button when the password is visible (i.e. the action hides it). */
|
|
1370
|
+
hidePasswordLabel = input('Hide password', /* @ts-ignore */
|
|
1371
|
+
...(ngDevMode ? [{ debugName: "hidePasswordLabel" }] : /* istanbul ignore next */ []));
|
|
1372
|
+
/** FormUiControl optional: bound by [formField] when invalid */
|
|
1373
|
+
invalid = input(false, /* @ts-ignore */
|
|
1374
|
+
...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
|
|
1375
|
+
/** FormUiControl optional: bound by [formField] for validation errors */
|
|
1376
|
+
errors = input([], /* @ts-ignore */
|
|
1377
|
+
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
1378
|
+
/** FormUiControl optional: control sets on blur */
|
|
1379
|
+
touched = model(false, /* @ts-ignore */
|
|
1380
|
+
...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
|
|
1381
|
+
/** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */
|
|
1382
|
+
touch = output();
|
|
1383
|
+
value = model('', /* @ts-ignore */
|
|
1384
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1385
|
+
ids = createFormFieldIds('ul-input');
|
|
1386
|
+
effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId, /* @ts-ignore */
|
|
1387
|
+
...(ngDevMode ? [{ debugName: "effectiveControlId" }] : /* istanbul ignore next */ []));
|
|
1388
|
+
effectiveHelperId = computed(() => this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId, /* @ts-ignore */
|
|
1389
|
+
...(ngDevMode ? [{ debugName: "effectiveHelperId" }] : /* istanbul ignore next */ []));
|
|
1390
|
+
effectiveErrorId = computed(() => this.controlId() ? `${this.controlId()}-error` : this.ids.errorId, /* @ts-ignore */
|
|
1391
|
+
...(ngDevMode ? [{ debugName: "effectiveErrorId" }] : /* istanbul ignore next */ []));
|
|
1392
|
+
isFocused = signal(false, /* @ts-ignore */
|
|
1393
|
+
...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
|
|
1394
|
+
hasError = computed(() => this.error() || this.invalid(), /* @ts-ignore */
|
|
1395
|
+
...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
|
|
1396
|
+
// [attr.pattern]="pattern()" would stringify an empty array to "" instead
|
|
1397
|
+
// of omitting the attribute — an empty native pattern matches only the
|
|
1398
|
+
// empty string, so every non-empty value would fail native validation.
|
|
1399
|
+
// Native <input pattern> only accepts one regex source, so multiple
|
|
1400
|
+
// patterns are combined as alternatives.
|
|
1401
|
+
nativePattern = computed(() => {
|
|
1402
|
+
const patterns = this.pattern();
|
|
1403
|
+
return patterns.length ? patterns.map((p) => p.source).join('|') : null;
|
|
1404
|
+
}, /* @ts-ignore */
|
|
1405
|
+
...(ngDevMode ? [{ debugName: "nativePattern" }] : /* istanbul ignore next */ []));
|
|
1406
|
+
nativeStep = computed(() => {
|
|
1407
|
+
const step = this.step();
|
|
1408
|
+
if (step !== undefined)
|
|
1409
|
+
return step;
|
|
1410
|
+
return this.type() === 'number' ? 'any' : null;
|
|
1411
|
+
}, /* @ts-ignore */
|
|
1412
|
+
...(ngDevMode ? [{ debugName: "nativeStep" }] : /* istanbul ignore next */ []));
|
|
1413
|
+
isPasswordType = computed(() => this.type() === 'password', /* @ts-ignore */
|
|
1414
|
+
...(ngDevMode ? [{ debugName: "isPasswordType" }] : /* istanbul ignore next */ []));
|
|
1415
|
+
passwordRevealed = signal(false, /* @ts-ignore */
|
|
1416
|
+
...(ngDevMode ? [{ debugName: "passwordRevealed" }] : /* istanbul ignore next */ []));
|
|
1417
|
+
effectiveType = computed(() => this.isPasswordType() && this.passwordRevealed() ? 'text' : this.type(), /* @ts-ignore */
|
|
1418
|
+
...(ngDevMode ? [{ debugName: "effectiveType" }] : /* istanbul ignore next */ []));
|
|
1419
|
+
passwordToggleIcon = computed(() => this.passwordRevealed() ? 'eye_on' : 'eye_dashed', /* @ts-ignore */
|
|
1420
|
+
...(ngDevMode ? [{ debugName: "passwordToggleIcon" }] : /* istanbul ignore next */ []));
|
|
1421
|
+
passwordToggleLabel = computed(() => this.passwordRevealed() ? this.hidePasswordLabel() : this.showPasswordLabel(), /* @ts-ignore */
|
|
1422
|
+
...(ngDevMode ? [{ debugName: "passwordToggleLabel" }] : /* istanbul ignore next */ []));
|
|
1423
|
+
describedBy = computed(() => getFormFieldDescribedBy(this.effectiveHelperId(), this.effectiveErrorId(), !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), /* @ts-ignore */
|
|
1424
|
+
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
1425
|
+
// Outputs
|
|
1426
|
+
inputBlur = output();
|
|
1427
|
+
inputFocus = output();
|
|
1428
|
+
/** Emitted when Enter is pressed in the field; typically used to submit a form. */
|
|
1429
|
+
inputEnter = output();
|
|
1430
|
+
onInput(event) {
|
|
1431
|
+
const value = event.target.value;
|
|
1432
|
+
this.value.set(value);
|
|
1433
|
+
}
|
|
1434
|
+
onBlur(event) {
|
|
1435
|
+
this.isFocused.set(false);
|
|
1436
|
+
this.touched.set(true);
|
|
1437
|
+
this.touch.emit();
|
|
1438
|
+
this.inputBlur.emit(event);
|
|
1439
|
+
}
|
|
1440
|
+
onFocus(event) {
|
|
1441
|
+
this.isFocused.set(true);
|
|
1442
|
+
this.inputFocus.emit(event);
|
|
1443
|
+
}
|
|
1444
|
+
onKeydown(event) {
|
|
1445
|
+
if (event.key === 'Enter') {
|
|
1446
|
+
this.inputEnter.emit(event);
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
togglePasswordVisibility() {
|
|
1450
|
+
this.passwordRevealed.update((revealed) => !revealed);
|
|
1451
|
+
}
|
|
1452
|
+
/**
|
|
1453
|
+
* Programmatically focuses the input element
|
|
1454
|
+
*/
|
|
1455
|
+
focus() {
|
|
1456
|
+
const inputEl = document.getElementById(this.effectiveControlId());
|
|
1457
|
+
inputEl?.focus();
|
|
1458
|
+
}
|
|
1459
|
+
select() {
|
|
1460
|
+
const inputEl = document.getElementById(this.effectiveControlId());
|
|
1461
|
+
inputEl?.select();
|
|
1462
|
+
}
|
|
1463
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1464
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: InputComponent, isStandalone: true, selector: "ul-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 }, showRequiredIndicator: { classPropertyName: "showRequiredIndicator", publicName: "showRequiredIndicator", 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 }, step: { classPropertyName: "step", publicName: "step", 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 }, showPasswordLabel: { classPropertyName: "showPasswordLabel", publicName: "showPasswordLabel", isSignal: true, isRequired: false, transformFunction: null }, hidePasswordLabel: { classPropertyName: "hidePasswordLabel", publicName: "hidePasswordLabel", 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", touch: "touch", value: "valueChange", inputBlur: "inputBlur", inputFocus: "inputFocus", inputEnter: "inputEnter" }, ngImport: i0, template: "<div\n class=\"ul-input ul-input--{{ size() }} ul-input--appearance-{{ appearance() }}\"\n [class.ul-input--error]=\"hasError()\"\n [class.ul-input--disabled]=\"disabled()\"\n [class.ul-input--read-only]=\"readOnly()\"\n [class.ul-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-input__group\" [class.ul-input__group--focused]=\"isFocused()\">\n <div class=\"ul-input__left-elements\">\n <ng-content select=\"[ul-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"effectiveType()\"\n class=\"ul-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"nativePattern()\"\n [attr.step]=\"nativeStep()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"ul-input__right-elements\">\n @if (isPasswordType()) {\n <ul-button\n class=\"ul-input__password-toggle\"\n theme=\"ghost-white\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"passwordToggleLabel()\"\n (buttonClick)=\"togglePasswordVisibility()\"\n >\n <ul-icon [icon]=\"passwordToggleIcon()\" />\n </ul-button>\n }\n <ng-content select=\"[ul-input-right-elements]\" />\n </div>\n </div>\n\n <ul-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: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-input{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;width:100%;gap:4px}.ul-input__group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent;color:#fff;transition:box-shadow .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}.ul-input__group--focused{box-shadow:inset 0 0 0 2px #ffffff80}.ul-input--appearance-border-only:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d}.ul-input--appearance-subtle-tint:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d;background-color:#ffffff0d}.ul-input__field{all:unset;flex:1}.ul-input__field::placeholder{color:#ffffff80}.ul-input__field:hover::placeholder{color:#fff}.ul-input__left-elements,.ul-input__right-elements{display:flex;align-items:center;gap:8px}.ul-input__left-elements ::ng-deep .ul-icon,.ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input__password-toggle ::ng-deep .ul-btn:hover,.ul-input__password-toggle ::ng-deep .ul-btn:active{background-color:transparent}.ul-input__password-toggle ::ng-deep .ul-btn:focus:not(:focus-visible){outline:none}.ul-input--sm .ul-input__group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-input--sm .ul-input__left-elements,.ul-input--sm .ul-input__right-elements{gap:4px}.ul-input--sm .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--sm .ul-input__right-elements ::ng-deep .ul-icon{font-size:20px;line-height:20px}.ul-input--md .ul-input__group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-input--md .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--md .ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input--lg .ul-input__group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-input--lg .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--lg .ul-input__right-elements ::ng-deep .ul-icon{font-size:28px;line-height:28px}.ul-input--xl .ul-input__group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.ul-input--xl .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--xl .ul-input__right-elements ::ng-deep .ul-icon{font-size:32px;line-height:32px}.ul-input--error .ul-input__group{box-shadow:inset 0 0 0 2px #f69d9d}.ul-input--disabled .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--disabled .ul-input__field,.ul-input--disabled .ul-input__field:disabled::placeholder{color:#ffffff4d}.ul-input--read-only .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--read-only .ul-input__field,.ul-input--read-only .ul-input__field:read-only::placeholder{color:#ffffffb3}\n"], dependencies: [{ kind: "component", type: FormFieldLabelComponent, selector: "ul-form-field-label", inputs: ["label", "required", "for", "size", "showRequiredIndicator"] }, { kind: "component", type: FormFieldHelperComponent, selector: "ul-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }, { kind: "component", type: ButtonComponent, selector: "ul-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }] });
|
|
1465
|
+
}
|
|
1466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: InputComponent, decorators: [{
|
|
1467
|
+
type: Component,
|
|
1468
|
+
args: [{ selector: 'ul-input', imports: [FormFieldLabelComponent, FormFieldHelperComponent, ButtonComponent, IconComponent], template: "<div\n class=\"ul-input ul-input--{{ size() }} ul-input--appearance-{{ appearance() }}\"\n [class.ul-input--error]=\"hasError()\"\n [class.ul-input--disabled]=\"disabled()\"\n [class.ul-input--read-only]=\"readOnly()\"\n [class.ul-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-input__group\" [class.ul-input__group--focused]=\"isFocused()\">\n <div class=\"ul-input__left-elements\">\n <ng-content select=\"[ul-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"effectiveType()\"\n class=\"ul-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"nativePattern()\"\n [attr.step]=\"nativeStep()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"ul-input__right-elements\">\n @if (isPasswordType()) {\n <ul-button\n class=\"ul-input__password-toggle\"\n theme=\"ghost-white\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"passwordToggleLabel()\"\n (buttonClick)=\"togglePasswordVisibility()\"\n >\n <ul-icon [icon]=\"passwordToggleIcon()\" />\n </ul-button>\n }\n <ng-content select=\"[ul-input-right-elements]\" />\n </div>\n </div>\n\n <ul-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: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-input{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;width:100%;gap:4px}.ul-input__group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent;color:#fff;transition:box-shadow .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}.ul-input__group--focused{box-shadow:inset 0 0 0 2px #ffffff80}.ul-input--appearance-border-only:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d}.ul-input--appearance-subtle-tint:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d;background-color:#ffffff0d}.ul-input__field{all:unset;flex:1}.ul-input__field::placeholder{color:#ffffff80}.ul-input__field:hover::placeholder{color:#fff}.ul-input__left-elements,.ul-input__right-elements{display:flex;align-items:center;gap:8px}.ul-input__left-elements ::ng-deep .ul-icon,.ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input__password-toggle ::ng-deep .ul-btn:hover,.ul-input__password-toggle ::ng-deep .ul-btn:active{background-color:transparent}.ul-input__password-toggle ::ng-deep .ul-btn:focus:not(:focus-visible){outline:none}.ul-input--sm .ul-input__group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-input--sm .ul-input__left-elements,.ul-input--sm .ul-input__right-elements{gap:4px}.ul-input--sm .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--sm .ul-input__right-elements ::ng-deep .ul-icon{font-size:20px;line-height:20px}.ul-input--md .ul-input__group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-input--md .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--md .ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input--lg .ul-input__group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-input--lg .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--lg .ul-input__right-elements ::ng-deep .ul-icon{font-size:28px;line-height:28px}.ul-input--xl .ul-input__group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.ul-input--xl .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--xl .ul-input__right-elements ::ng-deep .ul-icon{font-size:32px;line-height:32px}.ul-input--error .ul-input__group{box-shadow:inset 0 0 0 2px #f69d9d}.ul-input--disabled .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--disabled .ul-input__field,.ul-input--disabled .ul-input__field:disabled::placeholder{color:#ffffff4d}.ul-input--read-only .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--read-only .ul-input__field,.ul-input--read-only .ul-input__field:read-only::placeholder{color:#ffffffb3}\n"] }]
|
|
1469
|
+
}], 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 }] }], showRequiredIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredIndicator", 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 }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], controlId: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlId", required: false }] }], showPasswordLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPasswordLabel", required: false }] }], hidePasswordLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidePasswordLabel", 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"] }], touch: [{ type: i0.Output, args: ["touch"] }], 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"] }], inputEnter: [{ type: i0.Output, args: ["inputEnter"] }] } });
|
|
1470
|
+
|
|
1316
1471
|
/**
|
|
1317
1472
|
* Checkbox component. Implements FormCheckboxControl for Signal Forms [formField].
|
|
1318
1473
|
* Use [(checked)] or [formField]="myForm().acceptTerms". No value property.
|
|
@@ -1477,90 +1632,418 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
1477
1632
|
`, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-checkbox{display:flex;flex-direction:column;align-items:flex-start}.ul-checkbox__row{display:inline-flex;align-items:flex-start;cursor:pointer}.ul-checkbox__row:has(.ul-checkbox__input:disabled){cursor:not-allowed}.ul-checkbox__row:hover .ul-checkbox__input:not([disabled])+.ul-checkbox__pseudo-input{box-shadow:0 0 0 2px #ffffff1a;border-color:#fff}.ul-checkbox__row:hover .ul-checkbox__input:not([disabled]):indeterminate+.ul-checkbox__pseudo-input,.ul-checkbox__row:hover .ul-checkbox__input:not([disabled]):checked+.ul-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.ul-checkbox__row:hover .ul-checkbox__input:not([disabled]):indeterminate:active+.ul-checkbox__pseudo-input,.ul-checkbox__row:hover .ul-checkbox__input:not([disabled]):checked:active+.ul-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.ul-checkbox__row:has(.ul-checkbox__input:indeterminate) .ul-checkbox__pseudo-input:before{opacity:1}.ul-checkbox__row--accessible-zone{padding:12px}.ul-checkbox__row--visible-zone{padding:12px;background:#fff3;border-radius:12px}.ul-checkbox__row--checked-visible-zone{padding:12px;border-radius:12px;transition:background-color .25s cubic-bezier(.4,0,.2,1)}.ul-checkbox__row--checked-visible-zone:has(.ul-checkbox__input:checked){background:#fff3}.ul-checkbox__row--error .ul-checkbox__pseudo-input{border-color:#f69d9d}.ul-checkbox__row--error .ul-checkbox__input:focus-visible+.ul-checkbox__pseudo-input{border-color:#f69d9d}.ul-checkbox__row--error .ul-checkbox__input:not([disabled]):active+.ul-checkbox__pseudo-input[class]{border-color:#f69d9d}.ul-checkbox__row--error .ul-checkbox__input:not([disabled]):checked+.ul-checkbox__pseudo-input,.ul-checkbox__row--error .ul-checkbox__input:not([disabled]):indeterminate+.ul-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.ul-checkbox__row--error:hover .ul-checkbox__input:not([disabled])+.ul-checkbox__pseudo-input{box-shadow:0 0 0 2px #ffffff1a;border-color:#f69d9d}.ul-checkbox__row--error:hover .ul-checkbox__input:not([disabled]):indeterminate+.ul-checkbox__pseudo-input,.ul-checkbox__row--error:hover .ul-checkbox__input:not([disabled]):checked+.ul-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.ul-checkbox__row--error:hover .ul-checkbox__input:not([disabled]):indeterminate:active+.ul-checkbox__pseudo-input,.ul-checkbox__row--error:hover .ul-checkbox__input:not([disabled]):checked:active+.ul-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.ul-checkbox__row--lg .ul-checkbox__pseudo-input{width:24px;height:24px}.ul-checkbox__row--lg .ul-checkbox__pseudo-input:before{width:24px;height:24px;line-height:24px;font-size:24px}.ul-checkbox__input{position:absolute;opacity:0}.ul-checkbox__input:focus-visible+.ul-checkbox__pseudo-input{border-color:#ffffff80}.ul-checkbox__input:not([disabled]):active+.ul-checkbox__pseudo-input[class]{border-color:#fff;box-shadow:none}.ul-checkbox__input:not([disabled]):checked+.ul-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.ul-checkbox__input:not([disabled]):checked+.ul-checkbox__pseudo-input:before{opacity:1}.ul-checkbox__input:disabled+.ul-checkbox__pseudo-input{border-color:#ffffff1a}.ul-checkbox__input:disabled~.ul-checkbox__label{color:#ffffff4d}.ul-checkbox__input:disabled:checked+.ul-checkbox__pseudo-input{background-color:#ffffff0d;border-color:transparent}.ul-checkbox__input:disabled:checked+.ul-checkbox__pseudo-input:before{opacity:1;color:#ffffff4d}.ul-checkbox__input:indeterminate+.ul-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.ul-checkbox__input:indeterminate+.ul-checkbox__pseudo-input:before{content:\"minus_small\";opacity:1}.ul-checkbox__input[disabled]:indeterminate+.ul-checkbox__pseudo-input{background-color:#ffffff0d;border-color:transparent}.ul-checkbox__input[disabled]:indeterminate+.ul-checkbox__pseudo-input:before{opacity:1;color:#ffffff4d}.ul-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)}.ul-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}.ul-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}.ul-checkbox--sm .ul-checkbox__label{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-checkbox:not(.ul-checkbox--sm) .ul-checkbox__label{margin-top:-2px;margin-bottom:-2px}\n"] }]
|
|
1478
1633
|
}], 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 }] }], showRequiredIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredIndicator", 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 }] }] } });
|
|
1479
1634
|
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
*/
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
* @default 'text'
|
|
1497
|
-
*/
|
|
1498
|
-
variant = input('text', /* @ts-ignore */
|
|
1499
|
-
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
1500
|
-
/**
|
|
1501
|
-
* Controls the collapsed state of the component.
|
|
1502
|
-
* @default true
|
|
1503
|
-
*/
|
|
1504
|
-
collapsed = model(true, /* @ts-ignore */
|
|
1505
|
-
...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
1506
|
-
/**
|
|
1507
|
-
* Maximum height of the content when collapsed.
|
|
1508
|
-
* @default 200
|
|
1509
|
-
*/
|
|
1510
|
-
maxHeight = input.required(/* @ts-ignore */
|
|
1511
|
-
...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
|
|
1512
|
-
/**
|
|
1513
|
-
* Custom label for the expand action.
|
|
1514
|
-
* @default 'See more'
|
|
1515
|
-
*/
|
|
1516
|
-
expandLabel = input('See more', /* @ts-ignore */
|
|
1517
|
-
...(ngDevMode ? [{ debugName: "expandLabel" }] : /* istanbul ignore next */ []));
|
|
1518
|
-
/**
|
|
1519
|
-
* Custom label for the collapse action.
|
|
1520
|
-
* @default 'See less'
|
|
1521
|
-
*/
|
|
1522
|
-
collapseLabel = input('See less', /* @ts-ignore */
|
|
1523
|
-
...(ngDevMode ? [{ debugName: "collapseLabel" }] : /* istanbul ignore next */ []));
|
|
1524
|
-
/** Current full height of the content */
|
|
1525
|
-
fullHeight = signal(0, /* @ts-ignore */
|
|
1526
|
-
...(ngDevMode ? [{ debugName: "fullHeight" }] : /* istanbul ignore next */ []));
|
|
1527
|
-
/** Whether the content is collapsible based on its height */
|
|
1528
|
-
isCollapsible = computed(() => {
|
|
1529
|
-
const max = Math.max(0, this.maxHeight());
|
|
1530
|
-
return this.fullHeight() > max;
|
|
1531
|
-
}, /* @ts-ignore */
|
|
1532
|
-
...(ngDevMode ? [{ debugName: "isCollapsible" }] : /* istanbul ignore next */ []));
|
|
1533
|
-
ngAfterViewInit() {
|
|
1534
|
-
// Initial height calculation
|
|
1535
|
-
this.updateFullHeight();
|
|
1536
|
-
// Listen for window resize events to recalculate height
|
|
1537
|
-
const resizeSubscription = fromEvent(window, 'resize')
|
|
1538
|
-
.pipe(debounceTime(100))
|
|
1539
|
-
.subscribe(() => this.updateFullHeight());
|
|
1540
|
-
this.destroyRef.onDestroy(() => resizeSubscription.unsubscribe());
|
|
1541
|
-
}
|
|
1542
|
-
/** Updates the full height of the content */
|
|
1543
|
-
updateFullHeight() {
|
|
1544
|
-
if (this.content?.nativeElement) {
|
|
1545
|
-
this.fullHeight.set(this.content.nativeElement.scrollHeight);
|
|
1635
|
+
class ListItemComponent {
|
|
1636
|
+
checkbox = contentChild(CheckboxComponent, /* @ts-ignore */
|
|
1637
|
+
...(ngDevMode ? [{ debugName: "checkbox" }] : /* istanbul ignore next */ []));
|
|
1638
|
+
theme = input('ghost-white', /* @ts-ignore */
|
|
1639
|
+
...(ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []));
|
|
1640
|
+
disabled = input(false, /* @ts-ignore */
|
|
1641
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1642
|
+
hideFocusOutline = input(false, /* @ts-ignore */
|
|
1643
|
+
...(ngDevMode ? [{ debugName: "hideFocusOutline" }] : /* istanbul ignore next */ []));
|
|
1644
|
+
selected = input(false, /* @ts-ignore */
|
|
1645
|
+
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
1646
|
+
loading = input(false, /* @ts-ignore */
|
|
1647
|
+
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
1648
|
+
clickHandler() {
|
|
1649
|
+
if (this.disabled() || this.loading()) {
|
|
1650
|
+
return;
|
|
1546
1651
|
}
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
toggle() {
|
|
1550
|
-
this.collapsed.set(!this.collapsed());
|
|
1551
|
-
}
|
|
1552
|
-
onToggleKeydown(event) {
|
|
1553
|
-
if (event.key === ' ' || event.key === 'Enter') {
|
|
1554
|
-
event.preventDefault();
|
|
1555
|
-
this.toggle();
|
|
1652
|
+
if (!this.disabled()) {
|
|
1653
|
+
this.checkbox()?.checked.update((value) => !value);
|
|
1556
1654
|
}
|
|
1557
1655
|
}
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1656
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1657
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", type: ListItemComponent, isStandalone: true, selector: "ul-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: `
|
|
1658
|
+
<ul-skeleton [show]="loading()" variant="rect">
|
|
1659
|
+
<button
|
|
1660
|
+
type="button"
|
|
1661
|
+
class="ul-list-item ul-list-item--{{ theme() }}"
|
|
1662
|
+
[class.ul-list-item--no-focus-outline]="hideFocusOutline()"
|
|
1663
|
+
[class.ul-list-item--selected]="selected() || !!checkbox()?.checked()"
|
|
1664
|
+
(click)="clickHandler()"
|
|
1665
|
+
[disabled]="disabled() || loading()"
|
|
1666
|
+
>
|
|
1667
|
+
<div class="ul-list-item__before-label">
|
|
1668
|
+
<ng-content select="[ul-list-item-before-label]" />
|
|
1669
|
+
</div>
|
|
1670
|
+
<div class="ul-list-item__label">
|
|
1671
|
+
<ng-content select="[ul-list-item-label]" />
|
|
1672
|
+
</div>
|
|
1673
|
+
<div class="ul-list-item__after-label">
|
|
1674
|
+
<ng-content select="[ul-list-item-after-label]" />
|
|
1675
|
+
</div>
|
|
1676
|
+
</button>
|
|
1677
|
+
</ul-skeleton>
|
|
1678
|
+
`, isInline: true, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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}.ul-list-item:hover{background-color:#fff3}.ul-list-item:active{background-color:#ffffff1a}.ul-list-item:selected{background-color:#fff3}.ul-list-item{background-color:#fff0;color:inherit}.ul-list-item:disabled,.ul-list-item[disabled]{background-color:#fff0}.ul-list-item:focus-visible{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.ul-list-item--no-focus-outline:focus-visible{outline:none;outline-offset:0}.ul-list-item--selected{background-color:transparent}.ul-list-item--transparent-white{background-color:#ffffff1a;color:inherit}.ul-list-item--transparent-white:hover{background-color:#fff3}.ul-list-item--transparent-white:active{background-color:#ffffff1a}.ul-list-item--transparent-white:selected{background-color:#fff3}.ul-list-item--transparent-white:disabled,.ul-list-item--transparent-white[disabled]{background-color:#ffffff0d}.ul-list-item--transparent-white{background-color:transparent}.ul-list-item--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.ul-list-item--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.ul-list-item--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.ul-list-item--outline-white:disabled,.ul-list-item--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.ul-list-item--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:disabled,.ul-list-item--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--transparent-white.ul-list-item--selected{background-color:#fff3}.ul-list-item__label{flex:1;color:#fff}.ul-list-item__before-label,.ul-list-item__after-label{display:flex;align-items:center;gap:8px}.ul-list-item .ul--icon{color:#fff}.ul-list-item:disabled,.ul-list-item[disabled]{cursor:not-allowed;color:#ffffff4d}.ul-list-item:disabled .ul-list-item__label,.ul-list-item[disabled] .ul-list-item__label{color:#ffffff4d}\n"], dependencies: [{ kind: "component", type: SkeletonComponent, selector: "ul-skeleton", inputs: ["variant", "width", "height", "lines", "borderRadius", "show"] }] });
|
|
1679
|
+
}
|
|
1680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ListItemComponent, decorators: [{
|
|
1681
|
+
type: Component,
|
|
1682
|
+
args: [{ selector: 'ul-list-item', imports: [SkeletonComponent], template: `
|
|
1683
|
+
<ul-skeleton [show]="loading()" variant="rect">
|
|
1684
|
+
<button
|
|
1685
|
+
type="button"
|
|
1686
|
+
class="ul-list-item ul-list-item--{{ theme() }}"
|
|
1687
|
+
[class.ul-list-item--no-focus-outline]="hideFocusOutline()"
|
|
1688
|
+
[class.ul-list-item--selected]="selected() || !!checkbox()?.checked()"
|
|
1689
|
+
(click)="clickHandler()"
|
|
1690
|
+
[disabled]="disabled() || loading()"
|
|
1691
|
+
>
|
|
1692
|
+
<div class="ul-list-item__before-label">
|
|
1693
|
+
<ng-content select="[ul-list-item-before-label]" />
|
|
1694
|
+
</div>
|
|
1695
|
+
<div class="ul-list-item__label">
|
|
1696
|
+
<ng-content select="[ul-list-item-label]" />
|
|
1697
|
+
</div>
|
|
1698
|
+
<div class="ul-list-item__after-label">
|
|
1699
|
+
<ng-content select="[ul-list-item-after-label]" />
|
|
1700
|
+
</div>
|
|
1701
|
+
</button>
|
|
1702
|
+
</ul-skeleton>
|
|
1703
|
+
`, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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}.ul-list-item:hover{background-color:#fff3}.ul-list-item:active{background-color:#ffffff1a}.ul-list-item:selected{background-color:#fff3}.ul-list-item{background-color:#fff0;color:inherit}.ul-list-item:disabled,.ul-list-item[disabled]{background-color:#fff0}.ul-list-item:focus-visible{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.ul-list-item--no-focus-outline:focus-visible{outline:none;outline-offset:0}.ul-list-item--selected{background-color:transparent}.ul-list-item--transparent-white{background-color:#ffffff1a;color:inherit}.ul-list-item--transparent-white:hover{background-color:#fff3}.ul-list-item--transparent-white:active{background-color:#ffffff1a}.ul-list-item--transparent-white:selected{background-color:#fff3}.ul-list-item--transparent-white:disabled,.ul-list-item--transparent-white[disabled]{background-color:#ffffff0d}.ul-list-item--transparent-white{background-color:transparent}.ul-list-item--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.ul-list-item--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.ul-list-item--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.ul-list-item--outline-white:disabled,.ul-list-item--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.ul-list-item--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:disabled,.ul-list-item--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--transparent-white.ul-list-item--selected{background-color:#fff3}.ul-list-item__label{flex:1;color:#fff}.ul-list-item__before-label,.ul-list-item__after-label{display:flex;align-items:center;gap:8px}.ul-list-item .ul--icon{color:#fff}.ul-list-item:disabled,.ul-list-item[disabled]{cursor:not-allowed;color:#ffffff4d}.ul-list-item:disabled .ul-list-item__label,.ul-list-item[disabled] .ul-list-item__label{color:#ffffff4d}\n"] }]
|
|
1704
|
+
}], 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 }] }] } });
|
|
1705
|
+
|
|
1706
|
+
class ModalComponent {
|
|
1707
|
+
/** Whether the modal is open. Supports two-way binding with [(open)]. */
|
|
1708
|
+
open = model(false, /* @ts-ignore */
|
|
1709
|
+
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
1710
|
+
/** Visual variant: default, success, error, custom, or bottom-sheet (mobile-only layout). */
|
|
1711
|
+
variant = input('default', /* @ts-ignore */
|
|
1712
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
1713
|
+
/** Optional title shown in the header. */
|
|
1714
|
+
title = input(undefined, /* @ts-ignore */
|
|
1715
|
+
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
1716
|
+
/** Whether clicking the backdrop closes the modal. */
|
|
1717
|
+
closeOnBackdropClick = input(true, /* @ts-ignore */
|
|
1718
|
+
...(ngDevMode ? [{ debugName: "closeOnBackdropClick" }] : /* istanbul ignore next */ []));
|
|
1719
|
+
/** Whether to show the close button in the header. */
|
|
1720
|
+
showCloseButton = input(true, /* @ts-ignore */
|
|
1721
|
+
...(ngDevMode ? [{ debugName: "showCloseButton" }] : /* istanbul ignore next */ []));
|
|
1722
|
+
/** Label for the primary confirm action in the confirmation variant. */
|
|
1723
|
+
confirmLabel = input('Confirm', /* @ts-ignore */
|
|
1724
|
+
...(ngDevMode ? [{ debugName: "confirmLabel" }] : /* istanbul ignore next */ []));
|
|
1725
|
+
/** Label for the secondary cancel action in the confirmation variant. */
|
|
1726
|
+
cancelLabel = input('Cancel', /* @ts-ignore */
|
|
1727
|
+
...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
|
|
1728
|
+
/** Optional CSS class for the panel (e.g. for custom variant). */
|
|
1729
|
+
customClass = input(undefined, /* @ts-ignore */
|
|
1730
|
+
...(ngDevMode ? [{ debugName: "customClass" }] : /* istanbul ignore next */ []));
|
|
1731
|
+
/**
|
|
1732
|
+
* Below the phone breakpoint, fills the entire viewport edge-to-edge (no
|
|
1733
|
+
* margin, no rounded corners, no visible backdrop) instead of the default
|
|
1734
|
+
* bottom-pinned sheet every variant otherwise gets there. Has no effect
|
|
1735
|
+
* above that breakpoint — desktop/tablet layout is unchanged either way.
|
|
1736
|
+
*/
|
|
1737
|
+
fullScreenInMobile = input(false, /* @ts-ignore */
|
|
1738
|
+
...(ngDevMode ? [{ debugName: "fullScreenInMobile" }] : /* istanbul ignore next */ []));
|
|
1739
|
+
/** Emitted when the modal is closed (button, backdrop, or escape). */
|
|
1740
|
+
closed = output();
|
|
1741
|
+
/** Emitted when the user confirms in the confirmation variant. */
|
|
1742
|
+
confirmed = output();
|
|
1743
|
+
/** Emitted when the user cancels in the confirmation variant. */
|
|
1744
|
+
cancelled = output();
|
|
1745
|
+
panelClass = computed(() => {
|
|
1746
|
+
const variant = this.variant();
|
|
1747
|
+
const custom = this.customClass();
|
|
1748
|
+
const classes = ['ul-modal__panel', `ul-modal__panel--${variant}`];
|
|
1749
|
+
if (this.fullScreenInMobile()) {
|
|
1750
|
+
classes.push('ul-modal__panel--fullscreen-mobile');
|
|
1751
|
+
}
|
|
1752
|
+
if (custom) {
|
|
1753
|
+
classes.push(custom);
|
|
1754
|
+
}
|
|
1755
|
+
return classes.join(' ');
|
|
1756
|
+
}, /* @ts-ignore */
|
|
1757
|
+
...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
|
|
1758
|
+
isConfirmation = computed(() => this.variant() === 'confirmation', /* @ts-ignore */
|
|
1759
|
+
...(ngDevMode ? [{ debugName: "isConfirmation" }] : /* istanbul ignore next */ []));
|
|
1760
|
+
isSuccess = computed(() => this.variant() === 'success', /* @ts-ignore */
|
|
1761
|
+
...(ngDevMode ? [{ debugName: "isSuccess" }] : /* istanbul ignore next */ []));
|
|
1762
|
+
isError = computed(() => this.variant() === 'error', /* @ts-ignore */
|
|
1763
|
+
...(ngDevMode ? [{ debugName: "isError" }] : /* istanbul ignore next */ []));
|
|
1764
|
+
modalTitle = computed(() => (this.isSuccess() || this.isError() ? '' : this.title()), /* @ts-ignore */
|
|
1765
|
+
...(ngDevMode ? [{ debugName: "modalTitle" }] : /* istanbul ignore next */ []));
|
|
1766
|
+
titleId = `ul-modal-title-${Math.random().toString(36).slice(2, 11)}`;
|
|
1767
|
+
bodyId = `ul-modal-body-${Math.random().toString(36).slice(2, 11)}`;
|
|
1768
|
+
close() {
|
|
1769
|
+
this.open.set(false);
|
|
1770
|
+
this.closed.emit();
|
|
1771
|
+
}
|
|
1772
|
+
onConfirm() {
|
|
1773
|
+
if (!this.isConfirmation()) {
|
|
1774
|
+
return;
|
|
1775
|
+
}
|
|
1776
|
+
this.confirmed.emit();
|
|
1777
|
+
this.close();
|
|
1778
|
+
}
|
|
1779
|
+
onCancel() {
|
|
1780
|
+
if (!this.isConfirmation()) {
|
|
1781
|
+
return;
|
|
1782
|
+
}
|
|
1783
|
+
this.cancelled.emit();
|
|
1784
|
+
this.close();
|
|
1785
|
+
}
|
|
1786
|
+
onBackdropClick(event) {
|
|
1787
|
+
if (this.closeOnBackdropClick() && event.target === event.currentTarget) {
|
|
1788
|
+
this.close();
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
onEscape() {
|
|
1792
|
+
if (this.open()) {
|
|
1793
|
+
this.close();
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1797
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ModalComponent, isStandalone: true, selector: "ul-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 }, fullScreenInMobile: { classPropertyName: "fullScreenInMobile", publicName: "fullScreenInMobile", 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=\"ul-modal ul-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=\"ul-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"ul-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"ul-modal__close\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n </header>\n }\n <div class=\"ul-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"ul-modal__status\" aria-hidden=\"true\">\n <ul-icon\n class=\"ul-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=\"ul-modal__footer\">\n @if (isConfirmation()) {\n <ul-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </ul-button>\n <ul-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </ul-button>\n } @else {\n <ng-content select=\"[ul-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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)}.ul-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:#0a0a0a;padding:24px;border:1px solid rgba(255,255,255,.1)}.ul-modal__panel--confirmation{border:1px solid rgba(255,255,255,.1)}@media(max-width:767px){.ul-modal__panel--success{border:1px solid #7edc96}.ul-modal__panel--error{border:1px solid #f69d9d}}.ul-modal__panel--custom,.ul-modal__panel--bottom-sheet{border:1px solid rgba(255,255,255,.1)}.ul-modal__header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-shrink:0}.ul-modal__title{margin:0;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;color:#fff}.ul-modal__status{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:12px}.ul-modal__status-icon{flex-shrink:0}.ul-modal__close{flex-shrink:0;margin-left:auto}.ul-modal__body{flex:1 1 auto;min-height:0;color:#ffffffb3}.ul-modal__panel--success .ul-modal__status-icon{color:#7edc96}.ul-modal__panel--error .ul-modal__status-icon{color:#f69d9d}.ul-modal__panel--success .ul-modal__body,.ul-modal__panel--error .ul-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){.ul-modal--backdrop{padding:24px}.ul-modal__panel{width:100%;max-width:512px}}@media(max-width:767px){.ul-modal--backdrop{align-items:flex-end;padding:0}.ul-modal__panel{width:100%;max-width:100%;border-radius:24px 24px 0 0;max-height:calc(100dvh - 32px);margin-top:auto;border-bottom:none}.ul-modal__panel--bottom-sheet{border-bottom:none}.ul-modal__panel--fullscreen-mobile{position:fixed;inset:0;width:100%;max-width:100%;height:100dvh;max-height:100dvh;margin:0;border-radius:0;border:none}}.ul-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: "ul-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1798
|
+
}
|
|
1799
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ModalComponent, decorators: [{
|
|
1800
|
+
type: Component,
|
|
1801
|
+
args: [{ selector: 'ul-modal', imports: [CdkTrapFocus, ButtonComponent, IconComponent], encapsulation: ViewEncapsulation.None, host: {
|
|
1802
|
+
'[attr.aria-hidden]': '!open()',
|
|
1803
|
+
}, template: "@if (open()) {\n <div\n class=\"ul-modal ul-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=\"ul-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"ul-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"ul-modal__close\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n </header>\n }\n <div class=\"ul-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"ul-modal__status\" aria-hidden=\"true\">\n <ul-icon\n class=\"ul-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=\"ul-modal__footer\">\n @if (isConfirmation()) {\n <ul-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </ul-button>\n <ul-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </ul-button>\n } @else {\n <ng-content select=\"[ul-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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)}.ul-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:#0a0a0a;padding:24px;border:1px solid rgba(255,255,255,.1)}.ul-modal__panel--confirmation{border:1px solid rgba(255,255,255,.1)}@media(max-width:767px){.ul-modal__panel--success{border:1px solid #7edc96}.ul-modal__panel--error{border:1px solid #f69d9d}}.ul-modal__panel--custom,.ul-modal__panel--bottom-sheet{border:1px solid rgba(255,255,255,.1)}.ul-modal__header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-shrink:0}.ul-modal__title{margin:0;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;color:#fff}.ul-modal__status{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:12px}.ul-modal__status-icon{flex-shrink:0}.ul-modal__close{flex-shrink:0;margin-left:auto}.ul-modal__body{flex:1 1 auto;min-height:0;color:#ffffffb3}.ul-modal__panel--success .ul-modal__status-icon{color:#7edc96}.ul-modal__panel--error .ul-modal__status-icon{color:#f69d9d}.ul-modal__panel--success .ul-modal__body,.ul-modal__panel--error .ul-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){.ul-modal--backdrop{padding:24px}.ul-modal__panel{width:100%;max-width:512px}}@media(max-width:767px){.ul-modal--backdrop{align-items:flex-end;padding:0}.ul-modal__panel{width:100%;max-width:100%;border-radius:24px 24px 0 0;max-height:calc(100dvh - 32px);margin-top:auto;border-bottom:none}.ul-modal__panel--bottom-sheet{border-bottom:none}.ul-modal__panel--fullscreen-mobile{position:fixed;inset:0;width:100%;max-width:100%;height:100dvh;max-height:100dvh;margin:0;border-radius:0;border:none}}.ul-modal__footer{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:16px;flex-shrink:0;justify-content:flex-end}\n"] }]
|
|
1804
|
+
}], 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 }] }], fullScreenInMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullScreenInMobile", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], confirmed: [{ type: i0.Output, args: ["confirmed"] }], cancelled: [{ type: i0.Output, args: ["cancelled"] }], onEscape: [{
|
|
1805
|
+
type: HostListener,
|
|
1806
|
+
args: ['document:keydown.escape']
|
|
1807
|
+
}] } });
|
|
1808
|
+
|
|
1809
|
+
/**
|
|
1810
|
+
* Picker for a hierarchical category tree of unbounded depth: a closed field
|
|
1811
|
+
* that opens a drill-down + search modal (one level of children at a time,
|
|
1812
|
+
* with a breadcrumb trail back to root) and resolves to a single leaf
|
|
1813
|
+
* node's id. Implements FormValueControl for Signal Forms [formField]. Use
|
|
1814
|
+
* [(value)] for two-way binding.
|
|
1815
|
+
*
|
|
1816
|
+
* Rows are real buttons (ul-list-item), so Tab/Shift+Tab and Enter/Space
|
|
1817
|
+
* already give full keyboard access without extra arrow-key wiring — unlike
|
|
1818
|
+
* ul-search-select's single-line combobox overlay, there's no need for
|
|
1819
|
+
* ComboboxState here.
|
|
1820
|
+
*
|
|
1821
|
+
* @example
|
|
1822
|
+
* <ul-category-picker label="Category" [nodes]="categoryNodes" [(value)]="categoryId" />
|
|
1823
|
+
*/
|
|
1824
|
+
class CategoryPickerComponent {
|
|
1825
|
+
size = input('md', /* @ts-ignore */
|
|
1826
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
1827
|
+
label = input(null, /* @ts-ignore */
|
|
1828
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1829
|
+
helperText = input(null, /* @ts-ignore */
|
|
1830
|
+
...(ngDevMode ? [{ debugName: "helperText" }] : /* istanbul ignore next */ []));
|
|
1831
|
+
errorText = input(null, /* @ts-ignore */
|
|
1832
|
+
...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
|
|
1833
|
+
error = input(false, /* @ts-ignore */
|
|
1834
|
+
...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
1835
|
+
disabled = input(false, /* @ts-ignore */
|
|
1836
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1837
|
+
required = input(false, /* @ts-ignore */
|
|
1838
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
1839
|
+
showRequiredIndicator = input(true, /* @ts-ignore */
|
|
1840
|
+
...(ngDevMode ? [{ debugName: "showRequiredIndicator" }] : /* istanbul ignore next */ []));
|
|
1841
|
+
placeholder = input('Select a category', /* @ts-ignore */
|
|
1842
|
+
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1843
|
+
searchPlaceholder = input('Search categories', /* @ts-ignore */
|
|
1844
|
+
...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
1845
|
+
modalTitle = input('Select a category', /* @ts-ignore */
|
|
1846
|
+
...(ngDevMode ? [{ debugName: "modalTitle" }] : /* istanbul ignore next */ []));
|
|
1847
|
+
rootLabel = input('All categories', /* @ts-ignore */
|
|
1848
|
+
...(ngDevMode ? [{ debugName: "rootLabel" }] : /* istanbul ignore next */ []));
|
|
1849
|
+
noResultsText = input('No results', /* @ts-ignore */
|
|
1850
|
+
...(ngDevMode ? [{ debugName: "noResultsText" }] : /* istanbul ignore next */ []));
|
|
1851
|
+
nodes = input([], /* @ts-ignore */
|
|
1852
|
+
...(ngDevMode ? [{ debugName: "nodes" }] : /* istanbul ignore next */ []));
|
|
1853
|
+
invalid = input(false, /* @ts-ignore */
|
|
1854
|
+
...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
|
|
1855
|
+
errors = input([], /* @ts-ignore */
|
|
1856
|
+
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
1857
|
+
/** Emitted when the modal closes, whether or not a value was picked — mirrors ul-select's touch. */
|
|
1858
|
+
touch = output();
|
|
1859
|
+
value = model(null, /* @ts-ignore */
|
|
1860
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1861
|
+
ids = createFormFieldIds('ul-category-picker');
|
|
1862
|
+
open = signal(false, /* @ts-ignore */
|
|
1863
|
+
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
1864
|
+
currentParentId = signal(null, /* @ts-ignore */
|
|
1865
|
+
...(ngDevMode ? [{ debugName: "currentParentId" }] : /* istanbul ignore next */ []));
|
|
1866
|
+
query = signal('', /* @ts-ignore */
|
|
1867
|
+
...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
|
|
1868
|
+
hasError = computed(() => this.error() || this.invalid(), /* @ts-ignore */
|
|
1869
|
+
...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
|
|
1870
|
+
describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), /* @ts-ignore */
|
|
1871
|
+
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
1872
|
+
nodesById = computed(() => new Map(this.nodes().map((node) => [node.id, node])), /* @ts-ignore */
|
|
1873
|
+
...(ngDevMode ? [{ debugName: "nodesById" }] : /* istanbul ignore next */ []));
|
|
1874
|
+
selectedNode = computed(() => {
|
|
1875
|
+
const id = this.value();
|
|
1876
|
+
return id == null ? null : (this.nodesById().get(id) ?? null);
|
|
1877
|
+
}, /* @ts-ignore */
|
|
1878
|
+
...(ngDevMode ? [{ debugName: "selectedNode" }] : /* istanbul ignore next */ []));
|
|
1879
|
+
selectedLabel = computed(() => {
|
|
1880
|
+
const node = this.selectedNode();
|
|
1881
|
+
return node ? this.ancestorLabels(node.id).join(' › ') : '';
|
|
1882
|
+
}, /* @ts-ignore */
|
|
1883
|
+
...(ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []));
|
|
1884
|
+
currentChildren = computed(() => this.nodes().filter((node) => node.parentId === this.currentParentId()), /* @ts-ignore */
|
|
1885
|
+
...(ngDevMode ? [{ debugName: "currentChildren" }] : /* istanbul ignore next */ []));
|
|
1886
|
+
/** Root→current ancestor chain, for the breadcrumb trail (empty at the root level). */
|
|
1887
|
+
breadcrumb = computed(() => {
|
|
1888
|
+
const parentId = this.currentParentId();
|
|
1889
|
+
return parentId == null ? [] : this.ancestorNodes(parentId);
|
|
1890
|
+
}, /* @ts-ignore */
|
|
1891
|
+
...(ngDevMode ? [{ debugName: "breadcrumb" }] : /* istanbul ignore next */ []));
|
|
1892
|
+
normalizedQuery = computed(() => this.query().trim().toLowerCase(), /* @ts-ignore */
|
|
1893
|
+
...(ngDevMode ? [{ debugName: "normalizedQuery" }] : /* istanbul ignore next */ []));
|
|
1894
|
+
isSearching = computed(() => this.normalizedQuery().length > 0, /* @ts-ignore */
|
|
1895
|
+
...(ngDevMode ? [{ debugName: "isSearching" }] : /* istanbul ignore next */ []));
|
|
1896
|
+
searchResults = computed(() => {
|
|
1897
|
+
const q = this.normalizedQuery();
|
|
1898
|
+
if (!q)
|
|
1899
|
+
return [];
|
|
1900
|
+
return this.nodes()
|
|
1901
|
+
.filter((node) => node.isLeaf && node.label.toLowerCase().includes(q))
|
|
1902
|
+
.map((node) => ({
|
|
1903
|
+
node,
|
|
1904
|
+
breadcrumb: this.ancestorLabels(node.id).slice(0, -1).join(' › '),
|
|
1905
|
+
}));
|
|
1906
|
+
}, /* @ts-ignore */
|
|
1907
|
+
...(ngDevMode ? [{ debugName: "searchResults" }] : /* istanbul ignore next */ []));
|
|
1908
|
+
hasNoResults = computed(() => this.isSearching() && this.searchResults().length === 0, /* @ts-ignore */
|
|
1909
|
+
...(ngDevMode ? [{ debugName: "hasNoResults" }] : /* istanbul ignore next */ []));
|
|
1910
|
+
openPicker() {
|
|
1911
|
+
if (this.disabled())
|
|
1912
|
+
return;
|
|
1913
|
+
const selected = this.selectedNode();
|
|
1914
|
+
this.currentParentId.set(selected ? selected.parentId : null);
|
|
1915
|
+
this.query.set('');
|
|
1916
|
+
this.open.set(true);
|
|
1917
|
+
}
|
|
1918
|
+
closePicker() {
|
|
1919
|
+
this.open.set(false);
|
|
1920
|
+
this.touch.emit();
|
|
1921
|
+
}
|
|
1922
|
+
selectNode(node) {
|
|
1923
|
+
if (node.isLeaf) {
|
|
1924
|
+
this.value.set(node.id);
|
|
1925
|
+
this.closePicker();
|
|
1926
|
+
}
|
|
1927
|
+
else {
|
|
1928
|
+
this.currentParentId.set(node.id);
|
|
1929
|
+
this.query.set('');
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
goToBreadcrumb(parentId) {
|
|
1933
|
+
this.currentParentId.set(parentId);
|
|
1934
|
+
this.query.set('');
|
|
1935
|
+
}
|
|
1936
|
+
ancestorNodes(id) {
|
|
1937
|
+
const chain = [];
|
|
1938
|
+
let current = this.nodesById().get(id);
|
|
1939
|
+
while (current) {
|
|
1940
|
+
chain.unshift(current);
|
|
1941
|
+
current = current.parentId == null ? undefined : this.nodesById().get(current.parentId);
|
|
1942
|
+
}
|
|
1943
|
+
return chain;
|
|
1944
|
+
}
|
|
1945
|
+
ancestorLabels(id) {
|
|
1946
|
+
return this.ancestorNodes(id).map((node) => node.label);
|
|
1947
|
+
}
|
|
1948
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: CategoryPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1949
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: CategoryPickerComponent, isStandalone: true, selector: "ul-category-picker", 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 }, showRequiredIndicator: { classPropertyName: "showRequiredIndicator", publicName: "showRequiredIndicator", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, modalTitle: { classPropertyName: "modalTitle", publicName: "modalTitle", isSignal: true, isRequired: false, transformFunction: null }, rootLabel: { classPropertyName: "rootLabel", publicName: "rootLabel", isSignal: true, isRequired: false, transformFunction: null }, noResultsText: { classPropertyName: "noResultsText", publicName: "noResultsText", isSignal: true, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", 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: { touch: "touch", value: "valueChange" }, ngImport: i0, template: "<div\n class=\"ul-category-picker ul-category-picker--{{ size() }}\"\n [class.ul-category-picker--disabled]=\"disabled()\"\n [class.ul-category-picker--error]=\"hasError()\"\n [class.ul-category-picker--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"ul-category-picker__control\"\n [disabled]=\"disabled()\"\n (click)=\"openPicker()\"\n >\n <span\n class=\"ul-category-picker__control-text\"\n [class.ul-category-picker__control-text--placeholder]=\"!selectedNode()\"\n >\n {{ selectedLabel() || placeholder() }}\n </span>\n <ul-icon size=\"5\" icon=\"chevron_down\" />\n </button>\n\n <ul-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\n<ul-modal\n variant=\"bottom-sheet\"\n [fullScreenInMobile]=\"true\"\n [(open)]=\"open\"\n [title]=\"modalTitle()\"\n (closed)=\"closePicker()\"\n>\n @if (open()) {\n <div class=\"ul-category-picker__modal\">\n <ul-input\n [controlId]=\"ids.controlId + '-search'\"\n [value]=\"query()\"\n (valueChange)=\"query.set($event)\"\n [placeholder]=\"searchPlaceholder()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n @if (isSearching()) {\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @if (hasNoResults()) {\n <div class=\"ul-category-picker__empty\" role=\"status\">{{ noResultsText() }}</div>\n } @else {\n @for (result of searchResults(); track result.node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(result.node)\">\n <ng-container ul-list-item-before-label>\n @if (result.node.icon) {\n <ul-icon size=\"5\" [icon]=\"result.node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>\n <div class=\"ul-category-picker__option-label\">{{ result.node.label }}</div>\n @if (result.breadcrumb) {\n <div class=\"ul-category-picker__option-breadcrumb\">{{ result.breadcrumb }}</div>\n }\n </ng-container>\n </ul-list-item>\n }\n }\n </div>\n } @else {\n @if (breadcrumb().length) {\n <div class=\"ul-category-picker__breadcrumb\">\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(null)\"\n >\n {{ rootLabel() }}\n </button>\n @for (ancestor of breadcrumb(); track ancestor.id; let last = $last) {\n <ul-icon size=\"4\" icon=\"chevron_right\" />\n @if (last) {\n <span\n class=\"ul-category-picker__breadcrumb-item ul-category-picker__breadcrumb-item--current\"\n aria-current=\"page\"\n >\n {{ ancestor.label }}\n </span>\n } @else {\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(ancestor.id)\"\n >\n {{ ancestor.label }}\n </button>\n }\n }\n </div>\n }\n\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @for (node of currentChildren(); track node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(node)\">\n <ng-container ul-list-item-before-label>\n @if (node.icon) {\n <ul-icon size=\"5\" [icon]=\"node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>{{ node.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n @if (!node.isLeaf) {\n <ul-icon size=\"5\" icon=\"chevron_right\" />\n }\n </ng-container>\n </ul-list-item>\n }\n </div>\n }\n </div>\n }\n</ul-modal>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-category-picker{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;width:100%;gap:4px}.ul-category-picker__control{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:40px;padding:0 12px;border:2px solid rgba(255,255,255,.1);border-radius:8px;background-color:transparent;cursor:pointer;transition:border-color .25s cubic-bezier(.4,0,.2,1)}.ul-category-picker__control:hover{border-color:#ffffff4d}.ul-category-picker__control:focus-visible{border-color:#ffffff80}.ul-category-picker__control-text{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#fff;overflow:hidden;text-overflow:ellipsis}.ul-category-picker__control-text--placeholder{color:#ffffffb3}.ul-category-picker--disabled .ul-category-picker__control{opacity:.6;cursor:not-allowed}.ul-category-picker--disabled .ul-category-picker__control:hover,.ul-category-picker--disabled .ul-category-picker__control:focus-visible{border-color:#ffffff1a}.ul-category-picker--error .ul-category-picker__control{border-color:#f69d9d}.ul-category-picker__modal{display:flex;flex-direction:column;gap:12px;min-height:0}.ul-category-picker__breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.ul-category-picker__breadcrumb-item{font-weight:400;background:none;border:none;padding:0;color:#ffffffb3;cursor:pointer}.ul-category-picker__breadcrumb-item:hover{color:#fff}.ul-category-picker__breadcrumb-item--current{color:#fff;cursor:default}.ul-category-picker__list{display:flex;flex-direction:column;gap:4px;overflow-y:auto}.ul-category-picker__option-label{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-category-picker__option-breadcrumb{font-weight:400;color:#ffffffb3}.ul-category-picker__empty{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#ffffffb3;padding:12px}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: InputComponent, selector: "ul-input", inputs: ["type", "size", "appearance", "error", "disabled", "readOnly", "required", "showRequiredIndicator", "placeholder", "label", "helperText", "errorText", "maxLength", "minLength", "pattern", "step", "autocomplete", "controlId", "showPasswordLabel", "hidePasswordLabel", "invalid", "errors", "touched", "value"], outputs: ["touchedChange", "touch", "valueChange", "inputBlur", "inputFocus", "inputEnter"] }, { kind: "component", type: ListItemComponent, selector: "ul-list-item", inputs: ["theme", "disabled", "hideFocusOutline", "selected", "loading"] }, { kind: "component", type: ModalComponent, selector: "ul-modal", inputs: ["open", "variant", "title", "closeOnBackdropClick", "showCloseButton", "confirmLabel", "cancelLabel", "customClass", "fullScreenInMobile"], outputs: ["openChange", "closed", "confirmed", "cancelled"] }, { kind: "component", type: FormFieldLabelComponent, selector: "ul-form-field-label", inputs: ["label", "required", "for", "size", "showRequiredIndicator"] }, { kind: "component", type: FormFieldHelperComponent, selector: "ul-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1950
|
+
}
|
|
1951
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: CategoryPickerComponent, decorators: [{
|
|
1952
|
+
type: Component,
|
|
1953
|
+
args: [{ selector: 'ul-category-picker', imports: [
|
|
1954
|
+
IconComponent,
|
|
1955
|
+
InputComponent,
|
|
1956
|
+
ListItemComponent,
|
|
1957
|
+
ModalComponent,
|
|
1958
|
+
FormFieldLabelComponent,
|
|
1959
|
+
FormFieldHelperComponent,
|
|
1960
|
+
], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"ul-category-picker ul-category-picker--{{ size() }}\"\n [class.ul-category-picker--disabled]=\"disabled()\"\n [class.ul-category-picker--error]=\"hasError()\"\n [class.ul-category-picker--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"ul-category-picker__control\"\n [disabled]=\"disabled()\"\n (click)=\"openPicker()\"\n >\n <span\n class=\"ul-category-picker__control-text\"\n [class.ul-category-picker__control-text--placeholder]=\"!selectedNode()\"\n >\n {{ selectedLabel() || placeholder() }}\n </span>\n <ul-icon size=\"5\" icon=\"chevron_down\" />\n </button>\n\n <ul-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\n<ul-modal\n variant=\"bottom-sheet\"\n [fullScreenInMobile]=\"true\"\n [(open)]=\"open\"\n [title]=\"modalTitle()\"\n (closed)=\"closePicker()\"\n>\n @if (open()) {\n <div class=\"ul-category-picker__modal\">\n <ul-input\n [controlId]=\"ids.controlId + '-search'\"\n [value]=\"query()\"\n (valueChange)=\"query.set($event)\"\n [placeholder]=\"searchPlaceholder()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n @if (isSearching()) {\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @if (hasNoResults()) {\n <div class=\"ul-category-picker__empty\" role=\"status\">{{ noResultsText() }}</div>\n } @else {\n @for (result of searchResults(); track result.node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(result.node)\">\n <ng-container ul-list-item-before-label>\n @if (result.node.icon) {\n <ul-icon size=\"5\" [icon]=\"result.node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>\n <div class=\"ul-category-picker__option-label\">{{ result.node.label }}</div>\n @if (result.breadcrumb) {\n <div class=\"ul-category-picker__option-breadcrumb\">{{ result.breadcrumb }}</div>\n }\n </ng-container>\n </ul-list-item>\n }\n }\n </div>\n } @else {\n @if (breadcrumb().length) {\n <div class=\"ul-category-picker__breadcrumb\">\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(null)\"\n >\n {{ rootLabel() }}\n </button>\n @for (ancestor of breadcrumb(); track ancestor.id; let last = $last) {\n <ul-icon size=\"4\" icon=\"chevron_right\" />\n @if (last) {\n <span\n class=\"ul-category-picker__breadcrumb-item ul-category-picker__breadcrumb-item--current\"\n aria-current=\"page\"\n >\n {{ ancestor.label }}\n </span>\n } @else {\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(ancestor.id)\"\n >\n {{ ancestor.label }}\n </button>\n }\n }\n </div>\n }\n\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @for (node of currentChildren(); track node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(node)\">\n <ng-container ul-list-item-before-label>\n @if (node.icon) {\n <ul-icon size=\"5\" [icon]=\"node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>{{ node.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n @if (!node.isLeaf) {\n <ul-icon size=\"5\" icon=\"chevron_right\" />\n }\n </ng-container>\n </ul-list-item>\n }\n </div>\n }\n </div>\n }\n</ul-modal>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-category-picker{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;width:100%;gap:4px}.ul-category-picker__control{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:40px;padding:0 12px;border:2px solid rgba(255,255,255,.1);border-radius:8px;background-color:transparent;cursor:pointer;transition:border-color .25s cubic-bezier(.4,0,.2,1)}.ul-category-picker__control:hover{border-color:#ffffff4d}.ul-category-picker__control:focus-visible{border-color:#ffffff80}.ul-category-picker__control-text{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#fff;overflow:hidden;text-overflow:ellipsis}.ul-category-picker__control-text--placeholder{color:#ffffffb3}.ul-category-picker--disabled .ul-category-picker__control{opacity:.6;cursor:not-allowed}.ul-category-picker--disabled .ul-category-picker__control:hover,.ul-category-picker--disabled .ul-category-picker__control:focus-visible{border-color:#ffffff1a}.ul-category-picker--error .ul-category-picker__control{border-color:#f69d9d}.ul-category-picker__modal{display:flex;flex-direction:column;gap:12px;min-height:0}.ul-category-picker__breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.ul-category-picker__breadcrumb-item{font-weight:400;background:none;border:none;padding:0;color:#ffffffb3;cursor:pointer}.ul-category-picker__breadcrumb-item:hover{color:#fff}.ul-category-picker__breadcrumb-item--current{color:#fff;cursor:default}.ul-category-picker__list{display:flex;flex-direction:column;gap:4px;overflow-y:auto}.ul-category-picker__option-label{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-category-picker__option-breadcrumb{font-weight:400;color:#ffffffb3}.ul-category-picker__empty{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#ffffffb3;padding:12px}\n"] }]
|
|
1961
|
+
}], 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 }] }], showRequiredIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredIndicator", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], modalTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "modalTitle", required: false }] }], rootLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootLabel", required: false }] }], noResultsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsText", required: false }] }], nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touch: [{ type: i0.Output, args: ["touch"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
|
|
1962
|
+
|
|
1963
|
+
/**
|
|
1964
|
+
* A collapsible content component that supports both text and icon variants.
|
|
1965
|
+
* Uses CSS transitions for smooth animations and provides accessibility features.
|
|
1966
|
+
*
|
|
1967
|
+
* @example
|
|
1968
|
+
* ```html
|
|
1969
|
+
* <ul-collapse [maxHeight]="300" variant="text">
|
|
1970
|
+
* <div>Collapsible content here</div>
|
|
1971
|
+
* </ul-collapse>
|
|
1972
|
+
* ```
|
|
1973
|
+
*/
|
|
1974
|
+
class CollapseComponent {
|
|
1975
|
+
destroyRef = inject(DestroyRef);
|
|
1976
|
+
content;
|
|
1977
|
+
/**
|
|
1978
|
+
* The visual variant of the collapse toggle.
|
|
1979
|
+
* @default 'text'
|
|
1980
|
+
*/
|
|
1981
|
+
variant = input('text', /* @ts-ignore */
|
|
1982
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
1983
|
+
/**
|
|
1984
|
+
* Controls the collapsed state of the component.
|
|
1985
|
+
* @default true
|
|
1986
|
+
*/
|
|
1987
|
+
collapsed = model(true, /* @ts-ignore */
|
|
1988
|
+
...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
1989
|
+
/**
|
|
1990
|
+
* Maximum height of the content when collapsed.
|
|
1991
|
+
* @default 200
|
|
1992
|
+
*/
|
|
1993
|
+
maxHeight = input.required(/* @ts-ignore */
|
|
1994
|
+
...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
|
|
1995
|
+
/**
|
|
1996
|
+
* Custom label for the expand action.
|
|
1997
|
+
* @default 'See more'
|
|
1998
|
+
*/
|
|
1999
|
+
expandLabel = input('See more', /* @ts-ignore */
|
|
2000
|
+
...(ngDevMode ? [{ debugName: "expandLabel" }] : /* istanbul ignore next */ []));
|
|
2001
|
+
/**
|
|
2002
|
+
* Custom label for the collapse action.
|
|
2003
|
+
* @default 'See less'
|
|
2004
|
+
*/
|
|
2005
|
+
collapseLabel = input('See less', /* @ts-ignore */
|
|
2006
|
+
...(ngDevMode ? [{ debugName: "collapseLabel" }] : /* istanbul ignore next */ []));
|
|
2007
|
+
/** Current full height of the content */
|
|
2008
|
+
fullHeight = signal(0, /* @ts-ignore */
|
|
2009
|
+
...(ngDevMode ? [{ debugName: "fullHeight" }] : /* istanbul ignore next */ []));
|
|
2010
|
+
/** Whether the content is collapsible based on its height */
|
|
2011
|
+
isCollapsible = computed(() => {
|
|
2012
|
+
const max = Math.max(0, this.maxHeight());
|
|
2013
|
+
return this.fullHeight() > max;
|
|
2014
|
+
}, /* @ts-ignore */
|
|
2015
|
+
...(ngDevMode ? [{ debugName: "isCollapsible" }] : /* istanbul ignore next */ []));
|
|
2016
|
+
ngAfterViewInit() {
|
|
2017
|
+
// Initial height calculation
|
|
2018
|
+
this.updateFullHeight();
|
|
2019
|
+
// Listen for window resize events to recalculate height
|
|
2020
|
+
const resizeSubscription = fromEvent(window, 'resize')
|
|
2021
|
+
.pipe(debounceTime(100))
|
|
2022
|
+
.subscribe(() => this.updateFullHeight());
|
|
2023
|
+
this.destroyRef.onDestroy(() => resizeSubscription.unsubscribe());
|
|
2024
|
+
}
|
|
2025
|
+
/** Updates the full height of the content */
|
|
2026
|
+
updateFullHeight() {
|
|
2027
|
+
if (this.content?.nativeElement) {
|
|
2028
|
+
this.fullHeight.set(this.content.nativeElement.scrollHeight);
|
|
2029
|
+
}
|
|
2030
|
+
}
|
|
2031
|
+
/** Toggles the collapsed state */
|
|
2032
|
+
toggle() {
|
|
2033
|
+
this.collapsed.set(!this.collapsed());
|
|
2034
|
+
}
|
|
2035
|
+
onToggleKeydown(event) {
|
|
2036
|
+
if (event.key === ' ' || event.key === 'Enter') {
|
|
2037
|
+
event.preventDefault();
|
|
2038
|
+
this.toggle();
|
|
2039
|
+
}
|
|
2040
|
+
}
|
|
2041
|
+
computedClasses = computed(() => {
|
|
2042
|
+
return {
|
|
2043
|
+
'ul-collapse': true,
|
|
2044
|
+
'ul-collapse--collapsed': this.isCollapsible() && this.collapsed(),
|
|
2045
|
+
};
|
|
2046
|
+
}, /* @ts-ignore */
|
|
1564
2047
|
...(ngDevMode ? [{ debugName: "computedClasses" }] : /* istanbul ignore next */ []));
|
|
1565
2048
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: CollapseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1566
2049
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: CollapseComponent, isStandalone: true, selector: "ul-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.--ul-collapse-max-height.px": "maxHeight()", "style.--ul-collapse-full-height.px": "fullHeight()" } }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: `
|
|
@@ -1721,77 +2204,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
1721
2204
|
args: [{ selector: 'ul-dock-item', imports: [IconComponent], encapsulation: ViewEncapsulation.None, template: "<button\n type=\"button\"\n class=\"ul-dock-item\"\n [class.ul-dock-item--active]=\"active()\"\n [class.ul-dock-item--accent]=\"variant() === 'accent'\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n>\n @if (hasContentSlot()) {\n <ng-content select=\"[ul-dock-item-content]\" />\n } @else {\n <ul-icon [icon]=\"icon()!\" size=\"6\" />\n @if (label()) {\n <span class=\"ul-dock-item__label\">{{ label() }}</span>\n }\n }\n @if (badge()) {\n <span class=\"ul-dock-item__badge\">{{ badge() }}</span>\n }\n</button>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-dock-item{position:relative;cursor:pointer;border:none;background:none;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;flex:1;padding:4px;border-radius:8px;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-dock-item:focus-visible,.ul-dock-item:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.ul-dock-item--active{color:#c2a8ff}.ul-dock-item--accent{color:#fff}.ul-dock-item--accent .ul-icon{background-color:#6f3de0;border-radius:4096px;padding:8px;box-sizing:content-box}.ul-dock-item--accent:hover .ul-icon{background-color:#7e4af7}.ul-dock-item--accent.ul-dock-item--active .ul-icon{background-color:#5935af}.ul-dock-item__label{line-height:1}.ul-dock-item__badge{position:absolute;top:4px;right:calc(50% - 16px);min-width:16px;height:16px;padding:0 4px;border-radius:4096px;background-color:#6f3de0;color:#fff;font-size:10px;line-height:16px;text-align:center}.ul-dock-item:disabled,.ul-dock-item[disabled]{cursor:not-allowed;color:#ffffff4d}\n"] }]
|
|
1722
2205
|
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], contentSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DockItemContentSlotDirective), { isSignal: true }] }] } });
|
|
1723
2206
|
|
|
1724
|
-
class ListItemComponent {
|
|
1725
|
-
checkbox = contentChild(CheckboxComponent, /* @ts-ignore */
|
|
1726
|
-
...(ngDevMode ? [{ debugName: "checkbox" }] : /* istanbul ignore next */ []));
|
|
1727
|
-
theme = input('ghost-white', /* @ts-ignore */
|
|
1728
|
-
...(ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []));
|
|
1729
|
-
disabled = input(false, /* @ts-ignore */
|
|
1730
|
-
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1731
|
-
hideFocusOutline = input(false, /* @ts-ignore */
|
|
1732
|
-
...(ngDevMode ? [{ debugName: "hideFocusOutline" }] : /* istanbul ignore next */ []));
|
|
1733
|
-
selected = input(false, /* @ts-ignore */
|
|
1734
|
-
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
1735
|
-
loading = input(false, /* @ts-ignore */
|
|
1736
|
-
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
1737
|
-
clickHandler() {
|
|
1738
|
-
if (this.disabled() || this.loading()) {
|
|
1739
|
-
return;
|
|
1740
|
-
}
|
|
1741
|
-
if (!this.disabled()) {
|
|
1742
|
-
this.checkbox()?.checked.update((value) => !value);
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1746
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", type: ListItemComponent, isStandalone: true, selector: "ul-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: `
|
|
1747
|
-
<ul-skeleton [show]="loading()" variant="rect">
|
|
1748
|
-
<button
|
|
1749
|
-
type="button"
|
|
1750
|
-
class="ul-list-item ul-list-item--{{ theme() }}"
|
|
1751
|
-
[class.ul-list-item--no-focus-outline]="hideFocusOutline()"
|
|
1752
|
-
[class.ul-list-item--selected]="selected() || !!checkbox()?.checked()"
|
|
1753
|
-
(click)="clickHandler()"
|
|
1754
|
-
[disabled]="disabled() || loading()"
|
|
1755
|
-
>
|
|
1756
|
-
<div class="ul-list-item__before-label">
|
|
1757
|
-
<ng-content select="[ul-list-item-before-label]" />
|
|
1758
|
-
</div>
|
|
1759
|
-
<div class="ul-list-item__label">
|
|
1760
|
-
<ng-content select="[ul-list-item-label]" />
|
|
1761
|
-
</div>
|
|
1762
|
-
<div class="ul-list-item__after-label">
|
|
1763
|
-
<ng-content select="[ul-list-item-after-label]" />
|
|
1764
|
-
</div>
|
|
1765
|
-
</button>
|
|
1766
|
-
</ul-skeleton>
|
|
1767
|
-
`, isInline: true, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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}.ul-list-item:hover{background-color:#fff3}.ul-list-item:active{background-color:#ffffff1a}.ul-list-item:selected{background-color:#fff3}.ul-list-item{background-color:#fff0;color:inherit}.ul-list-item:disabled,.ul-list-item[disabled]{background-color:#fff0}.ul-list-item:focus-visible{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.ul-list-item--no-focus-outline:focus-visible{outline:none;outline-offset:0}.ul-list-item--selected{background-color:transparent}.ul-list-item--transparent-white{background-color:#ffffff1a;color:inherit}.ul-list-item--transparent-white:hover{background-color:#fff3}.ul-list-item--transparent-white:active{background-color:#ffffff1a}.ul-list-item--transparent-white:selected{background-color:#fff3}.ul-list-item--transparent-white:disabled,.ul-list-item--transparent-white[disabled]{background-color:#ffffff0d}.ul-list-item--transparent-white{background-color:transparent}.ul-list-item--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.ul-list-item--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.ul-list-item--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.ul-list-item--outline-white:disabled,.ul-list-item--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.ul-list-item--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:disabled,.ul-list-item--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--transparent-white.ul-list-item--selected{background-color:#fff3}.ul-list-item__label{flex:1;color:#fff}.ul-list-item__before-label,.ul-list-item__after-label{display:flex;align-items:center;gap:8px}.ul-list-item .ul--icon{color:#fff}.ul-list-item:disabled,.ul-list-item[disabled]{cursor:not-allowed;color:#ffffff4d}.ul-list-item:disabled .ul-list-item__label,.ul-list-item[disabled] .ul-list-item__label{color:#ffffff4d}\n"], dependencies: [{ kind: "component", type: SkeletonComponent, selector: "ul-skeleton", inputs: ["variant", "width", "height", "lines", "borderRadius", "show"] }] });
|
|
1768
|
-
}
|
|
1769
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ListItemComponent, decorators: [{
|
|
1770
|
-
type: Component,
|
|
1771
|
-
args: [{ selector: 'ul-list-item', imports: [SkeletonComponent], template: `
|
|
1772
|
-
<ul-skeleton [show]="loading()" variant="rect">
|
|
1773
|
-
<button
|
|
1774
|
-
type="button"
|
|
1775
|
-
class="ul-list-item ul-list-item--{{ theme() }}"
|
|
1776
|
-
[class.ul-list-item--no-focus-outline]="hideFocusOutline()"
|
|
1777
|
-
[class.ul-list-item--selected]="selected() || !!checkbox()?.checked()"
|
|
1778
|
-
(click)="clickHandler()"
|
|
1779
|
-
[disabled]="disabled() || loading()"
|
|
1780
|
-
>
|
|
1781
|
-
<div class="ul-list-item__before-label">
|
|
1782
|
-
<ng-content select="[ul-list-item-before-label]" />
|
|
1783
|
-
</div>
|
|
1784
|
-
<div class="ul-list-item__label">
|
|
1785
|
-
<ng-content select="[ul-list-item-label]" />
|
|
1786
|
-
</div>
|
|
1787
|
-
<div class="ul-list-item__after-label">
|
|
1788
|
-
<ng-content select="[ul-list-item-after-label]" />
|
|
1789
|
-
</div>
|
|
1790
|
-
</button>
|
|
1791
|
-
</ul-skeleton>
|
|
1792
|
-
`, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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}.ul-list-item:hover{background-color:#fff3}.ul-list-item:active{background-color:#ffffff1a}.ul-list-item:selected{background-color:#fff3}.ul-list-item{background-color:#fff0;color:inherit}.ul-list-item:disabled,.ul-list-item[disabled]{background-color:#fff0}.ul-list-item:focus-visible{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.ul-list-item--no-focus-outline:focus-visible{outline:none;outline-offset:0}.ul-list-item--selected{background-color:transparent}.ul-list-item--transparent-white{background-color:#ffffff1a;color:inherit}.ul-list-item--transparent-white:hover{background-color:#fff3}.ul-list-item--transparent-white:active{background-color:#ffffff1a}.ul-list-item--transparent-white:selected{background-color:#fff3}.ul-list-item--transparent-white:disabled,.ul-list-item--transparent-white[disabled]{background-color:#ffffff0d}.ul-list-item--transparent-white{background-color:transparent}.ul-list-item--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.ul-list-item--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.ul-list-item--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.ul-list-item--outline-white:disabled,.ul-list-item--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.ul-list-item--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.ul-list-item--outline-purple:disabled,.ul-list-item--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.ul-list-item--transparent-white.ul-list-item--selected{background-color:#fff3}.ul-list-item__label{flex:1;color:#fff}.ul-list-item__before-label,.ul-list-item__after-label{display:flex;align-items:center;gap:8px}.ul-list-item .ul--icon{color:#fff}.ul-list-item:disabled,.ul-list-item[disabled]{cursor:not-allowed;color:#ffffff4d}.ul-list-item:disabled .ul-list-item__label,.ul-list-item[disabled] .ul-list-item__label{color:#ffffff4d}\n"] }]
|
|
1793
|
-
}], 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 }] }] } });
|
|
1794
|
-
|
|
1795
2207
|
/**
|
|
1796
2208
|
* Renders `items` as `ul-list-item` + `cdkMenuItem` rows inside an
|
|
1797
2209
|
* already-open `cdkMenu` panel. Shared by `ul-dropdown` (which passes
|
|
@@ -2185,11 +2597,11 @@ class DropdownComponent {
|
|
|
2185
2597
|
this.closed.emit();
|
|
2186
2598
|
}
|
|
2187
2599
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2188
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", type: DropdownComponent, isStandalone: true, selector: "ul-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", closed: "closed" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MenuTriggerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ul-dropdown\">\n <ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"selectedItem().label\"\n [leftIcons]=\"selectedItem().leftIcons ?? []\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n />\n\n <ng-template #menu>\n <div class=\"ul-dropdown__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-dropdown__content ul-scrollable\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n [selectedIndex]=\"selectedIndex()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n </div>\n </ng-template>\n</div>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-dropdown{display:inline-flex;flex-direction:column;width:100%;gap:4px}.ul-dropdown__backdrop{display:none}@media(max-width:1023px){.ul-dropdown__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}.ul-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}@media(max-width:1023px){.ul-dropdown__content{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-dropdown__content ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}\n"], dependencies: [{ kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "component", type: MenuItemsComponent, selector: "ul-menu-items", inputs: ["items", "theme", "selectedIndex"], outputs: ["itemTriggered"] }, { kind: "component", type: MenuTriggerComponent, selector: "ul-menu-trigger", inputs: ["theme", "disabled", "iconOnly", "iconOnlyLabel", "label", "leftIcons", "rightIcons", "menuTemplate", "menuId", "isOpen"], outputs: ["opened", "closed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2600
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", type: DropdownComponent, isStandalone: true, selector: "ul-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", closed: "closed" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MenuTriggerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ul-dropdown\">\n <ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"selectedItem().label\"\n [leftIcons]=\"selectedItem().leftIcons ?? []\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n />\n\n <ng-template #menu>\n <div class=\"ul-dropdown__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-dropdown__content ul-scrollable\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n [selectedIndex]=\"selectedIndex()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n </div>\n </ng-template>\n</div>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-dropdown{display:inline-flex;flex-direction:column;width:100%;gap:4px}.ul-dropdown__backdrop{display:none}@media(max-width:1023px){.ul-dropdown__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}.ul-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}@media(max-width:1023px){.ul-dropdown__content{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;padding-bottom:8px;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-dropdown__content ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}\n"], dependencies: [{ kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "component", type: MenuItemsComponent, selector: "ul-menu-items", inputs: ["items", "theme", "selectedIndex"], outputs: ["itemTriggered"] }, { kind: "component", type: MenuTriggerComponent, selector: "ul-menu-trigger", inputs: ["theme", "disabled", "iconOnly", "iconOnlyLabel", "label", "leftIcons", "rightIcons", "menuTemplate", "menuId", "isOpen"], outputs: ["opened", "closed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2189
2601
|
}
|
|
2190
2602
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
2191
2603
|
type: Component,
|
|
2192
|
-
args: [{ selector: 'ul-dropdown', imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent], encapsulation: ViewEncapsulation.None, template: "<div class=\"ul-dropdown\">\n <ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"selectedItem().label\"\n [leftIcons]=\"selectedItem().leftIcons ?? []\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n />\n\n <ng-template #menu>\n <div class=\"ul-dropdown__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-dropdown__content ul-scrollable\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n [selectedIndex]=\"selectedIndex()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n </div>\n </ng-template>\n</div>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-dropdown{display:inline-flex;flex-direction:column;width:100%;gap:4px}.ul-dropdown__backdrop{display:none}@media(max-width:1023px){.ul-dropdown__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}.ul-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}@media(max-width:1023px){.ul-dropdown__content{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-dropdown__content ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}\n"] }]
|
|
2604
|
+
args: [{ selector: 'ul-dropdown', imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent], encapsulation: ViewEncapsulation.None, template: "<div class=\"ul-dropdown\">\n <ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"selectedItem().label\"\n [leftIcons]=\"selectedItem().leftIcons ?? []\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n />\n\n <ng-template #menu>\n <div class=\"ul-dropdown__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-dropdown__content ul-scrollable\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n [selectedIndex]=\"selectedIndex()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n </div>\n </ng-template>\n</div>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-dropdown{display:inline-flex;flex-direction:column;width:100%;gap:4px}.ul-dropdown__backdrop{display:none}@media(max-width:1023px){.ul-dropdown__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}.ul-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}@media(max-width:1023px){.ul-dropdown__content{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;padding-bottom:8px;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-dropdown__content ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}\n"] }]
|
|
2193
2605
|
}], 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"] }], closed: [{ type: i0.Output, args: ["closed"] }], trigger: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MenuTriggerComponent), { isSignal: true }] }] } });
|
|
2194
2606
|
|
|
2195
2607
|
/**
|
|
@@ -2484,201 +2896,98 @@ class HeroComponent {
|
|
|
2484
2896
|
...(ngDevMode ? [{ debugName: "badgesSlot" }] : /* istanbul ignore next */ []));
|
|
2485
2897
|
titleSlot = contentChild(PeHeroTitleSlotDirective, /* @ts-ignore */
|
|
2486
2898
|
...(ngDevMode ? [{ debugName: "titleSlot" }] : /* istanbul ignore next */ []));
|
|
2487
|
-
subtitleSlot = contentChild(PeHeroSubtitleSlotDirective, /* @ts-ignore */
|
|
2488
|
-
...(ngDevMode ? [{ debugName: "subtitleSlot" }] : /* istanbul ignore next */ []));
|
|
2489
|
-
actionsSlot = contentChild(PeHeroActionsSlotDirective, /* @ts-ignore */
|
|
2490
|
-
...(ngDevMode ? [{ debugName: "actionsSlot" }] : /* istanbul ignore next */ []));
|
|
2491
|
-
contentSlot = contentChild(PeHeroContentSlotDirective, /* @ts-ignore */
|
|
2492
|
-
...(ngDevMode ? [{ debugName: "contentSlot" }] : /* istanbul ignore next */ []));
|
|
2493
|
-
hasBadgesSlot = computed(() => !!this.badgesSlot(), /* @ts-ignore */
|
|
2494
|
-
...(ngDevMode ? [{ debugName: "hasBadgesSlot" }] : /* istanbul ignore next */ []));
|
|
2495
|
-
hasTitleSlot = computed(() => !!this.titleSlot(), /* @ts-ignore */
|
|
2496
|
-
...(ngDevMode ? [{ debugName: "hasTitleSlot" }] : /* istanbul ignore next */ []));
|
|
2497
|
-
hasSubtitleSlot = computed(() => !!this.subtitleSlot(), /* @ts-ignore */
|
|
2498
|
-
...(ngDevMode ? [{ debugName: "hasSubtitleSlot" }] : /* istanbul ignore next */ []));
|
|
2499
|
-
hasActionsSlot = computed(() => !!this.actionsSlot(), /* @ts-ignore */
|
|
2500
|
-
...(ngDevMode ? [{ debugName: "hasActionsSlot" }] : /* istanbul ignore next */ []));
|
|
2501
|
-
hasContentSlot = computed(() => !!this.contentSlot(), /* @ts-ignore */
|
|
2502
|
-
...(ngDevMode ? [{ debugName: "hasContentSlot" }] : /* istanbul ignore next */ []));
|
|
2503
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: HeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2504
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: HeroComponent, isStandalone: true, selector: "ul-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=\"ul-hero ul-hero-alignment-{{ alignment() }} ul-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.ul-hero--full-height]=\"fullHeight()\"\n [class.ul-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"ul-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"ul-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"ul-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"ul-hero__badges\">\n <ng-content select=\"[ul-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"ul-hero__badges\">\n @for (badge of badges(); track badge) {\n <ul-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </ul-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"ul-hero__title\">\n <ng-content select=\"[ul-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"ul-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"ul-hero__subtitle\">\n <ng-content select=\"[ul-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"ul-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"ul-hero__extra\">\n <ng-content select=\"[ul-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"ul-hero__actions\">\n <ng-content select=\"[ul-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"ul-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n }\n }\n </div>\n }\n </div>\n</section>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-hero{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;padding:32px 16px;color:#fff}.ul-hero--full-height{min-height:100vh}.ul-hero--has-background .ul-hero__content{position:relative;z-index:1}.ul-hero--alignment-left .ul-hero__content{align-items:flex-start;text-align:left}.ul-hero--alignment-left .ul-hero__badges,.ul-hero--alignment-left .ul-hero__actions{justify-content:flex-start}.ul-hero--alignment-center .ul-hero__content{align-items:center;text-align:center}.ul-hero--alignment-center .ul-hero__badges,.ul-hero--alignment-center .ul-hero__actions{justify-content:center}.ul-hero--alignment-right .ul-hero__content{align-items:flex-end;text-align:right}.ul-hero--alignment-right .ul-hero__badges,.ul-hero--alignment-right .ul-hero__actions{justify-content:flex-end}.ul-hero__background{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#232323}.ul-hero__overlay{position:absolute;inset:0;pointer-events:none}.ul-hero__content{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:100%}.ul-hero__badges{display:flex;flex-wrap:wrap;gap:8px}.ul-hero__title{margin:0;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-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%}.ul-hero__extra{display:flex;flex-direction:column;gap:16px;width:100%}.ul-hero__actions{display:flex;flex-wrap:wrap;gap:12px;flex-direction:column}.ul-hero__action-link{color:inherit;text-decoration:none;display:inline-flex}.ul-hero--size-sm{padding:24px 16px}.ul-hero--size-sm .ul-hero__content{gap:12px}.ul-hero--size-sm .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero--size-sm .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero--size-md .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero--size-md .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero--size-lg{padding:48px 16px}.ul-hero--size-lg .ul-hero__content{gap:24px}.ul-hero--size-lg .ul-hero__title{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-hero--size-lg .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(max-width:1279px){.ul-hero{padding:24px 16px}.ul-hero--size-sm{padding:16px}.ul-hero--size-lg{padding:32px 16px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:column;width:100%;max-width:100%}.ul-hero .ul-hero__action-link,.ul-hero .ul-hero__actions>ul-button{width:100%}.ul-hero .ul-hero__action-link ul-button{width:100%}}@media(min-width:1024px)and (max-width:1279px){.ul-hero{padding:32px 24px}.ul-hero--size-lg{padding:40px 24px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:row;flex-wrap:wrap}}@media(min-width:1280px){.ul-hero{padding:40px 32px}.ul-hero--size-sm{padding:24px 32px}.ul-hero--size-lg{padding:64px 32px}.ul-hero .ul-hero__content{max-width:800px}.ul-hero .ul-hero__actions{flex-direction:row}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ul-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: PillComponent, selector: "ul-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", "browserUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2505
|
-
}
|
|
2506
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: HeroComponent, decorators: [{
|
|
2507
|
-
type: Component,
|
|
2508
|
-
args: [{ selector: 'ul-hero', imports: [ButtonComponent, IconComponent, PillComponent, RouterLink], encapsulation: ViewEncapsulation.None, template: "<section\n class=\"ul-hero ul-hero-alignment-{{ alignment() }} ul-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.ul-hero--full-height]=\"fullHeight()\"\n [class.ul-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"ul-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"ul-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"ul-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"ul-hero__badges\">\n <ng-content select=\"[ul-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"ul-hero__badges\">\n @for (badge of badges(); track badge) {\n <ul-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </ul-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"ul-hero__title\">\n <ng-content select=\"[ul-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"ul-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"ul-hero__subtitle\">\n <ng-content select=\"[ul-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"ul-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"ul-hero__extra\">\n <ng-content select=\"[ul-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"ul-hero__actions\">\n <ng-content select=\"[ul-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"ul-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n }\n }\n </div>\n }\n </div>\n</section>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-hero{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;padding:32px 16px;color:#fff}.ul-hero--full-height{min-height:100vh}.ul-hero--has-background .ul-hero__content{position:relative;z-index:1}.ul-hero--alignment-left .ul-hero__content{align-items:flex-start;text-align:left}.ul-hero--alignment-left .ul-hero__badges,.ul-hero--alignment-left .ul-hero__actions{justify-content:flex-start}.ul-hero--alignment-center .ul-hero__content{align-items:center;text-align:center}.ul-hero--alignment-center .ul-hero__badges,.ul-hero--alignment-center .ul-hero__actions{justify-content:center}.ul-hero--alignment-right .ul-hero__content{align-items:flex-end;text-align:right}.ul-hero--alignment-right .ul-hero__badges,.ul-hero--alignment-right .ul-hero__actions{justify-content:flex-end}.ul-hero__background{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#232323}.ul-hero__overlay{position:absolute;inset:0;pointer-events:none}.ul-hero__content{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:100%}.ul-hero__badges{display:flex;flex-wrap:wrap;gap:8px}.ul-hero__title{margin:0;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-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%}.ul-hero__extra{display:flex;flex-direction:column;gap:16px;width:100%}.ul-hero__actions{display:flex;flex-wrap:wrap;gap:12px;flex-direction:column}.ul-hero__action-link{color:inherit;text-decoration:none;display:inline-flex}.ul-hero--size-sm{padding:24px 16px}.ul-hero--size-sm .ul-hero__content{gap:12px}.ul-hero--size-sm .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero--size-sm .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero--size-md .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero--size-md .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero--size-lg{padding:48px 16px}.ul-hero--size-lg .ul-hero__content{gap:24px}.ul-hero--size-lg .ul-hero__title{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-hero--size-lg .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(max-width:1279px){.ul-hero{padding:24px 16px}.ul-hero--size-sm{padding:16px}.ul-hero--size-lg{padding:32px 16px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:column;width:100%;max-width:100%}.ul-hero .ul-hero__action-link,.ul-hero .ul-hero__actions>ul-button{width:100%}.ul-hero .ul-hero__action-link ul-button{width:100%}}@media(min-width:1024px)and (max-width:1279px){.ul-hero{padding:32px 24px}.ul-hero--size-lg{padding:40px 24px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:row;flex-wrap:wrap}}@media(min-width:1280px){.ul-hero{padding:40px 32px}.ul-hero--size-sm{padding:24px 32px}.ul-hero--size-lg{padding:64px 32px}.ul-hero .ul-hero__content{max-width:800px}.ul-hero .ul-hero__actions{flex-direction:row}}\n"] }]
|
|
2509
|
-
}], 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 }] }] } });
|
|
2510
|
-
|
|
2511
|
-
/**
|
|
2512
|
-
* Directive to handle image loading errors and display placeholders
|
|
2513
|
-
*/
|
|
2514
|
-
class ImageNotFoundDirective {
|
|
2515
|
-
// Controls whether to show a placeholder when image fails to load
|
|
2516
|
-
showPlaceholder = input(true, /* @ts-ignore */
|
|
2517
|
-
...(ngDevMode ? [{ debugName: "showPlaceholder" }] : /* istanbul ignore next */ []));
|
|
2518
|
-
// Signal to track if image failed to load
|
|
2519
|
-
imageNotFound = signal(false, /* @ts-ignore */
|
|
2520
|
-
...(ngDevMode ? [{ debugName: "imageNotFound" }] : /* istanbul ignore next */ []));
|
|
2521
|
-
// Signal to control alt and icon visibility of broken images.
|
|
2522
|
-
visibility = signal('hidden', /* @ts-ignore */
|
|
2523
|
-
...(ngDevMode ? [{ debugName: "visibility" }] : /* istanbul ignore next */ []));
|
|
2524
|
-
/**
|
|
2525
|
-
* Handles image loading errors
|
|
2526
|
-
* Hides the image and optionally shows placeholder
|
|
2527
|
-
*/
|
|
2528
|
-
handleError() {
|
|
2529
|
-
this.visibility.set('hidden');
|
|
2530
|
-
if (this.showPlaceholder()) {
|
|
2531
|
-
this.imageNotFound.set(true);
|
|
2532
|
-
}
|
|
2533
|
-
}
|
|
2534
|
-
/**
|
|
2535
|
-
* Handles successful image load
|
|
2536
|
-
* Shows the image and removes placeholder
|
|
2537
|
-
*/
|
|
2538
|
-
handleLoad() {
|
|
2539
|
-
this.imageNotFound.set(false);
|
|
2540
|
-
this.visibility.set('visible');
|
|
2541
|
-
}
|
|
2542
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2543
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.0", type: ImageNotFoundDirective, isStandalone: true, selector: "[ulCatchImageNotFound]", inputs: { showPlaceholder: { classPropertyName: "showPlaceholder", publicName: "showPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "load": "handleLoad()", "error": "handleError()" }, properties: { "class.ul-image--not-found": "imageNotFound()", "style.visibility": "visibility()" } }, ngImport: i0 });
|
|
2544
|
-
}
|
|
2545
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundDirective, decorators: [{
|
|
2546
|
-
type: Directive,
|
|
2547
|
-
args: [{
|
|
2548
|
-
selector: '[ulCatchImageNotFound]',
|
|
2549
|
-
host: {
|
|
2550
|
-
'(load)': 'handleLoad()',
|
|
2551
|
-
'(error)': 'handleError()',
|
|
2552
|
-
'[class.ul-image--not-found]': 'imageNotFound()',
|
|
2553
|
-
'[style.visibility]': 'visibility()',
|
|
2554
|
-
},
|
|
2555
|
-
}]
|
|
2556
|
-
}], propDecorators: { showPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPlaceholder", required: false }] }] } });
|
|
2557
|
-
/**
|
|
2558
|
-
* Standalone placeholder for the case `ulCatchImageNotFound` can't cover: there is
|
|
2559
|
-
* no `<img>` to fail in the first place, because the source has no URL at all.
|
|
2560
|
-
* Renders the same icon-over-a-grey-box look as the directive's own placeholder —
|
|
2561
|
-
* both draw from the design system's `image_dashed` glyph and grey-lvl-1
|
|
2562
|
-
* background — so a "no image" listing and a "broken image" listing read
|
|
2563
|
-
* identically to a user.
|
|
2564
|
-
*
|
|
2565
|
-
* Positioned to fill its nearest positioned ancestor, same as the directive's
|
|
2566
|
-
* pseudo-element placeholder: the caller supplies a sized, `position: relative`
|
|
2567
|
-
* box (a gallery slot, a card's media area) and drops this in.
|
|
2568
|
-
*/
|
|
2569
|
-
class ImageNotFoundComponent {
|
|
2570
|
-
iconSize = input('12', /* @ts-ignore */
|
|
2571
|
-
...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
|
|
2572
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2573
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ImageNotFoundComponent, isStandalone: true, selector: "ul-image-not-found", inputs: { iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `<ul-icon icon="image_dashed" [size]="iconSize()" />`, isInline: true, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}:host{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#232323;color:#ffffff4d}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }] });
|
|
2574
|
-
}
|
|
2575
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundComponent, decorators: [{
|
|
2576
|
-
type: Component,
|
|
2577
|
-
args: [{ selector: 'ul-image-not-found', template: `<ul-icon icon="image_dashed" [size]="iconSize()" />`, imports: [IconComponent], styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}:host{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#232323;color:#ffffff4d}\n"] }]
|
|
2578
|
-
}], propDecorators: { iconSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSize", required: false }] }] } });
|
|
2579
|
-
|
|
2580
|
-
class ModalComponent {
|
|
2581
|
-
/** Whether the modal is open. Supports two-way binding with [(open)]. */
|
|
2582
|
-
open = model(false, /* @ts-ignore */
|
|
2583
|
-
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
2584
|
-
/** Visual variant: default, success, error, custom, or bottom-sheet (mobile-only layout). */
|
|
2585
|
-
variant = input('default', /* @ts-ignore */
|
|
2586
|
-
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2587
|
-
/** Optional title shown in the header. */
|
|
2588
|
-
title = input(undefined, /* @ts-ignore */
|
|
2589
|
-
...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
2590
|
-
/** Whether clicking the backdrop closes the modal. */
|
|
2591
|
-
closeOnBackdropClick = input(true, /* @ts-ignore */
|
|
2592
|
-
...(ngDevMode ? [{ debugName: "closeOnBackdropClick" }] : /* istanbul ignore next */ []));
|
|
2593
|
-
/** Whether to show the close button in the header. */
|
|
2594
|
-
showCloseButton = input(true, /* @ts-ignore */
|
|
2595
|
-
...(ngDevMode ? [{ debugName: "showCloseButton" }] : /* istanbul ignore next */ []));
|
|
2596
|
-
/** Label for the primary confirm action in the confirmation variant. */
|
|
2597
|
-
confirmLabel = input('Confirm', /* @ts-ignore */
|
|
2598
|
-
...(ngDevMode ? [{ debugName: "confirmLabel" }] : /* istanbul ignore next */ []));
|
|
2599
|
-
/** Label for the secondary cancel action in the confirmation variant. */
|
|
2600
|
-
cancelLabel = input('Cancel', /* @ts-ignore */
|
|
2601
|
-
...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
|
|
2602
|
-
/** Optional CSS class for the panel (e.g. for custom variant). */
|
|
2603
|
-
customClass = input(undefined, /* @ts-ignore */
|
|
2604
|
-
...(ngDevMode ? [{ debugName: "customClass" }] : /* istanbul ignore next */ []));
|
|
2605
|
-
/**
|
|
2606
|
-
* Below the phone breakpoint, fills the entire viewport edge-to-edge (no
|
|
2607
|
-
* margin, no rounded corners, no visible backdrop) instead of the default
|
|
2608
|
-
* bottom-pinned sheet every variant otherwise gets there. Has no effect
|
|
2609
|
-
* above that breakpoint — desktop/tablet layout is unchanged either way.
|
|
2610
|
-
*/
|
|
2611
|
-
fullScreenInMobile = input(false, /* @ts-ignore */
|
|
2612
|
-
...(ngDevMode ? [{ debugName: "fullScreenInMobile" }] : /* istanbul ignore next */ []));
|
|
2613
|
-
/** Emitted when the modal is closed (button, backdrop, or escape). */
|
|
2614
|
-
closed = output();
|
|
2615
|
-
/** Emitted when the user confirms in the confirmation variant. */
|
|
2616
|
-
confirmed = output();
|
|
2617
|
-
/** Emitted when the user cancels in the confirmation variant. */
|
|
2618
|
-
cancelled = output();
|
|
2619
|
-
panelClass = computed(() => {
|
|
2620
|
-
const variant = this.variant();
|
|
2621
|
-
const custom = this.customClass();
|
|
2622
|
-
const classes = ['ul-modal__panel', `ul-modal__panel--${variant}`];
|
|
2623
|
-
if (this.fullScreenInMobile()) {
|
|
2624
|
-
classes.push('ul-modal__panel--fullscreen-mobile');
|
|
2625
|
-
}
|
|
2626
|
-
if (custom) {
|
|
2627
|
-
classes.push(custom);
|
|
2628
|
-
}
|
|
2629
|
-
return classes.join(' ');
|
|
2630
|
-
}, /* @ts-ignore */
|
|
2631
|
-
...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
|
|
2632
|
-
isConfirmation = computed(() => this.variant() === 'confirmation', /* @ts-ignore */
|
|
2633
|
-
...(ngDevMode ? [{ debugName: "isConfirmation" }] : /* istanbul ignore next */ []));
|
|
2634
|
-
isSuccess = computed(() => this.variant() === 'success', /* @ts-ignore */
|
|
2635
|
-
...(ngDevMode ? [{ debugName: "isSuccess" }] : /* istanbul ignore next */ []));
|
|
2636
|
-
isError = computed(() => this.variant() === 'error', /* @ts-ignore */
|
|
2637
|
-
...(ngDevMode ? [{ debugName: "isError" }] : /* istanbul ignore next */ []));
|
|
2638
|
-
modalTitle = computed(() => (this.isSuccess() || this.isError() ? '' : this.title()), /* @ts-ignore */
|
|
2639
|
-
...(ngDevMode ? [{ debugName: "modalTitle" }] : /* istanbul ignore next */ []));
|
|
2640
|
-
titleId = `ul-modal-title-${Math.random().toString(36).slice(2, 11)}`;
|
|
2641
|
-
bodyId = `ul-modal-body-${Math.random().toString(36).slice(2, 11)}`;
|
|
2642
|
-
close() {
|
|
2643
|
-
this.open.set(false);
|
|
2644
|
-
this.closed.emit();
|
|
2645
|
-
}
|
|
2646
|
-
onConfirm() {
|
|
2647
|
-
if (!this.isConfirmation()) {
|
|
2648
|
-
return;
|
|
2649
|
-
}
|
|
2650
|
-
this.confirmed.emit();
|
|
2651
|
-
this.close();
|
|
2652
|
-
}
|
|
2653
|
-
onCancel() {
|
|
2654
|
-
if (!this.isConfirmation()) {
|
|
2655
|
-
return;
|
|
2656
|
-
}
|
|
2657
|
-
this.cancelled.emit();
|
|
2658
|
-
this.close();
|
|
2659
|
-
}
|
|
2660
|
-
onBackdropClick(event) {
|
|
2661
|
-
if (this.closeOnBackdropClick() && event.target === event.currentTarget) {
|
|
2662
|
-
this.close();
|
|
2899
|
+
subtitleSlot = contentChild(PeHeroSubtitleSlotDirective, /* @ts-ignore */
|
|
2900
|
+
...(ngDevMode ? [{ debugName: "subtitleSlot" }] : /* istanbul ignore next */ []));
|
|
2901
|
+
actionsSlot = contentChild(PeHeroActionsSlotDirective, /* @ts-ignore */
|
|
2902
|
+
...(ngDevMode ? [{ debugName: "actionsSlot" }] : /* istanbul ignore next */ []));
|
|
2903
|
+
contentSlot = contentChild(PeHeroContentSlotDirective, /* @ts-ignore */
|
|
2904
|
+
...(ngDevMode ? [{ debugName: "contentSlot" }] : /* istanbul ignore next */ []));
|
|
2905
|
+
hasBadgesSlot = computed(() => !!this.badgesSlot(), /* @ts-ignore */
|
|
2906
|
+
...(ngDevMode ? [{ debugName: "hasBadgesSlot" }] : /* istanbul ignore next */ []));
|
|
2907
|
+
hasTitleSlot = computed(() => !!this.titleSlot(), /* @ts-ignore */
|
|
2908
|
+
...(ngDevMode ? [{ debugName: "hasTitleSlot" }] : /* istanbul ignore next */ []));
|
|
2909
|
+
hasSubtitleSlot = computed(() => !!this.subtitleSlot(), /* @ts-ignore */
|
|
2910
|
+
...(ngDevMode ? [{ debugName: "hasSubtitleSlot" }] : /* istanbul ignore next */ []));
|
|
2911
|
+
hasActionsSlot = computed(() => !!this.actionsSlot(), /* @ts-ignore */
|
|
2912
|
+
...(ngDevMode ? [{ debugName: "hasActionsSlot" }] : /* istanbul ignore next */ []));
|
|
2913
|
+
hasContentSlot = computed(() => !!this.contentSlot(), /* @ts-ignore */
|
|
2914
|
+
...(ngDevMode ? [{ debugName: "hasContentSlot" }] : /* istanbul ignore next */ []));
|
|
2915
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: HeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2916
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: HeroComponent, isStandalone: true, selector: "ul-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=\"ul-hero ul-hero-alignment-{{ alignment() }} ul-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.ul-hero--full-height]=\"fullHeight()\"\n [class.ul-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"ul-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"ul-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"ul-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"ul-hero__badges\">\n <ng-content select=\"[ul-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"ul-hero__badges\">\n @for (badge of badges(); track badge) {\n <ul-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </ul-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"ul-hero__title\">\n <ng-content select=\"[ul-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"ul-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"ul-hero__subtitle\">\n <ng-content select=\"[ul-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"ul-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"ul-hero__extra\">\n <ng-content select=\"[ul-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"ul-hero__actions\">\n <ng-content select=\"[ul-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"ul-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n }\n }\n </div>\n }\n </div>\n</section>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-hero{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;padding:32px 16px;color:#fff}.ul-hero--full-height{min-height:100vh}.ul-hero--has-background .ul-hero__content{position:relative;z-index:1}.ul-hero--alignment-left .ul-hero__content{align-items:flex-start;text-align:left}.ul-hero--alignment-left .ul-hero__badges,.ul-hero--alignment-left .ul-hero__actions{justify-content:flex-start}.ul-hero--alignment-center .ul-hero__content{align-items:center;text-align:center}.ul-hero--alignment-center .ul-hero__badges,.ul-hero--alignment-center .ul-hero__actions{justify-content:center}.ul-hero--alignment-right .ul-hero__content{align-items:flex-end;text-align:right}.ul-hero--alignment-right .ul-hero__badges,.ul-hero--alignment-right .ul-hero__actions{justify-content:flex-end}.ul-hero__background{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#232323}.ul-hero__overlay{position:absolute;inset:0;pointer-events:none}.ul-hero__content{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:100%}.ul-hero__badges{display:flex;flex-wrap:wrap;gap:8px}.ul-hero__title{margin:0;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-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%}.ul-hero__extra{display:flex;flex-direction:column;gap:16px;width:100%}.ul-hero__actions{display:flex;flex-wrap:wrap;gap:12px;flex-direction:column}.ul-hero__action-link{color:inherit;text-decoration:none;display:inline-flex}.ul-hero--size-sm{padding:24px 16px}.ul-hero--size-sm .ul-hero__content{gap:12px}.ul-hero--size-sm .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero--size-sm .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero--size-md .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero--size-md .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero--size-lg{padding:48px 16px}.ul-hero--size-lg .ul-hero__content{gap:24px}.ul-hero--size-lg .ul-hero__title{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-hero--size-lg .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(max-width:1279px){.ul-hero{padding:24px 16px}.ul-hero--size-sm{padding:16px}.ul-hero--size-lg{padding:32px 16px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:column;width:100%;max-width:100%}.ul-hero .ul-hero__action-link,.ul-hero .ul-hero__actions>ul-button{width:100%}.ul-hero .ul-hero__action-link ul-button{width:100%}}@media(min-width:1024px)and (max-width:1279px){.ul-hero{padding:32px 24px}.ul-hero--size-lg{padding:40px 24px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:row;flex-wrap:wrap}}@media(min-width:1280px){.ul-hero{padding:40px 32px}.ul-hero--size-sm{padding:24px 32px}.ul-hero--size-lg{padding:64px 32px}.ul-hero .ul-hero__content{max-width:800px}.ul-hero .ul-hero__actions{flex-direction:row}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ul-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: PillComponent, selector: "ul-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", "browserUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2917
|
+
}
|
|
2918
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: HeroComponent, decorators: [{
|
|
2919
|
+
type: Component,
|
|
2920
|
+
args: [{ selector: 'ul-hero', imports: [ButtonComponent, IconComponent, PillComponent, RouterLink], encapsulation: ViewEncapsulation.None, template: "<section\n class=\"ul-hero ul-hero-alignment-{{ alignment() }} ul-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.ul-hero--full-height]=\"fullHeight()\"\n [class.ul-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"ul-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"ul-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"ul-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"ul-hero__badges\">\n <ng-content select=\"[ul-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"ul-hero__badges\">\n @for (badge of badges(); track badge) {\n <ul-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </ul-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"ul-hero__title\">\n <ng-content select=\"[ul-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"ul-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"ul-hero__subtitle\">\n <ng-content select=\"[ul-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"ul-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"ul-hero__extra\">\n <ng-content select=\"[ul-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"ul-hero__actions\">\n <ng-content select=\"[ul-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"ul-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n }\n }\n </div>\n }\n </div>\n</section>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-hero{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;padding:32px 16px;color:#fff}.ul-hero--full-height{min-height:100vh}.ul-hero--has-background .ul-hero__content{position:relative;z-index:1}.ul-hero--alignment-left .ul-hero__content{align-items:flex-start;text-align:left}.ul-hero--alignment-left .ul-hero__badges,.ul-hero--alignment-left .ul-hero__actions{justify-content:flex-start}.ul-hero--alignment-center .ul-hero__content{align-items:center;text-align:center}.ul-hero--alignment-center .ul-hero__badges,.ul-hero--alignment-center .ul-hero__actions{justify-content:center}.ul-hero--alignment-right .ul-hero__content{align-items:flex-end;text-align:right}.ul-hero--alignment-right .ul-hero__badges,.ul-hero--alignment-right .ul-hero__actions{justify-content:flex-end}.ul-hero__background{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#232323}.ul-hero__overlay{position:absolute;inset:0;pointer-events:none}.ul-hero__content{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:100%}.ul-hero__badges{display:flex;flex-wrap:wrap;gap:8px}.ul-hero__title{margin:0;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-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%}.ul-hero__extra{display:flex;flex-direction:column;gap:16px;width:100%}.ul-hero__actions{display:flex;flex-wrap:wrap;gap:12px;flex-direction:column}.ul-hero__action-link{color:inherit;text-decoration:none;display:inline-flex}.ul-hero--size-sm{padding:24px 16px}.ul-hero--size-sm .ul-hero__content{gap:12px}.ul-hero--size-sm .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero--size-sm .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero--size-md .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero--size-md .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero--size-lg{padding:48px 16px}.ul-hero--size-lg .ul-hero__content{gap:24px}.ul-hero--size-lg .ul-hero__title{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-hero--size-lg .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(max-width:1279px){.ul-hero{padding:24px 16px}.ul-hero--size-sm{padding:16px}.ul-hero--size-lg{padding:32px 16px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:column;width:100%;max-width:100%}.ul-hero .ul-hero__action-link,.ul-hero .ul-hero__actions>ul-button{width:100%}.ul-hero .ul-hero__action-link ul-button{width:100%}}@media(min-width:1024px)and (max-width:1279px){.ul-hero{padding:32px 24px}.ul-hero--size-lg{padding:40px 24px}.ul-hero .ul-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-hero .ul-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-hero .ul-hero__actions{flex-direction:row;flex-wrap:wrap}}@media(min-width:1280px){.ul-hero{padding:40px 32px}.ul-hero--size-sm{padding:24px 32px}.ul-hero--size-lg{padding:64px 32px}.ul-hero .ul-hero__content{max-width:800px}.ul-hero .ul-hero__actions{flex-direction:row}}\n"] }]
|
|
2921
|
+
}], 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 }] }] } });
|
|
2922
|
+
|
|
2923
|
+
/**
|
|
2924
|
+
* Directive to handle image loading errors and display placeholders
|
|
2925
|
+
*/
|
|
2926
|
+
class ImageNotFoundDirective {
|
|
2927
|
+
// Controls whether to show a placeholder when image fails to load
|
|
2928
|
+
showPlaceholder = input(true, /* @ts-ignore */
|
|
2929
|
+
...(ngDevMode ? [{ debugName: "showPlaceholder" }] : /* istanbul ignore next */ []));
|
|
2930
|
+
// Signal to track if image failed to load
|
|
2931
|
+
imageNotFound = signal(false, /* @ts-ignore */
|
|
2932
|
+
...(ngDevMode ? [{ debugName: "imageNotFound" }] : /* istanbul ignore next */ []));
|
|
2933
|
+
// Signal to control alt and icon visibility of broken images.
|
|
2934
|
+
visibility = signal('hidden', /* @ts-ignore */
|
|
2935
|
+
...(ngDevMode ? [{ debugName: "visibility" }] : /* istanbul ignore next */ []));
|
|
2936
|
+
/**
|
|
2937
|
+
* Handles image loading errors
|
|
2938
|
+
* Hides the image and optionally shows placeholder
|
|
2939
|
+
*/
|
|
2940
|
+
handleError() {
|
|
2941
|
+
this.visibility.set('hidden');
|
|
2942
|
+
if (this.showPlaceholder()) {
|
|
2943
|
+
this.imageNotFound.set(true);
|
|
2663
2944
|
}
|
|
2664
2945
|
}
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2946
|
+
/**
|
|
2947
|
+
* Handles successful image load
|
|
2948
|
+
* Shows the image and removes placeholder
|
|
2949
|
+
*/
|
|
2950
|
+
handleLoad() {
|
|
2951
|
+
this.imageNotFound.set(false);
|
|
2952
|
+
this.visibility.set('visible');
|
|
2669
2953
|
}
|
|
2670
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type:
|
|
2671
|
-
static
|
|
2954
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2955
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.0", type: ImageNotFoundDirective, isStandalone: true, selector: "[ulCatchImageNotFound]", inputs: { showPlaceholder: { classPropertyName: "showPlaceholder", publicName: "showPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "load": "handleLoad()", "error": "handleError()" }, properties: { "class.ul-image--not-found": "imageNotFound()", "style.visibility": "visibility()" } }, ngImport: i0 });
|
|
2672
2956
|
}
|
|
2673
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type:
|
|
2957
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundDirective, decorators: [{
|
|
2958
|
+
type: Directive,
|
|
2959
|
+
args: [{
|
|
2960
|
+
selector: '[ulCatchImageNotFound]',
|
|
2961
|
+
host: {
|
|
2962
|
+
'(load)': 'handleLoad()',
|
|
2963
|
+
'(error)': 'handleError()',
|
|
2964
|
+
'[class.ul-image--not-found]': 'imageNotFound()',
|
|
2965
|
+
'[style.visibility]': 'visibility()',
|
|
2966
|
+
},
|
|
2967
|
+
}]
|
|
2968
|
+
}], propDecorators: { showPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPlaceholder", required: false }] }] } });
|
|
2969
|
+
/**
|
|
2970
|
+
* Standalone placeholder for the case `ulCatchImageNotFound` can't cover: there is
|
|
2971
|
+
* no `<img>` to fail in the first place, because the source has no URL at all.
|
|
2972
|
+
* Renders the same icon-over-a-grey-box look as the directive's own placeholder —
|
|
2973
|
+
* both draw from the design system's `image_dashed` glyph and grey-lvl-1
|
|
2974
|
+
* background — so a "no image" listing and a "broken image" listing read
|
|
2975
|
+
* identically to a user.
|
|
2976
|
+
*
|
|
2977
|
+
* Positioned to fill its nearest positioned ancestor, same as the directive's
|
|
2978
|
+
* pseudo-element placeholder: the caller supplies a sized, `position: relative`
|
|
2979
|
+
* box (a gallery slot, a card's media area) and drops this in.
|
|
2980
|
+
*/
|
|
2981
|
+
class ImageNotFoundComponent {
|
|
2982
|
+
iconSize = input('12', /* @ts-ignore */
|
|
2983
|
+
...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
|
|
2984
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2985
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ImageNotFoundComponent, isStandalone: true, selector: "ul-image-not-found", inputs: { iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `<ul-icon icon="image_dashed" [size]="iconSize()" />`, isInline: true, styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}:host{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#232323;color:#ffffff4d}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }] });
|
|
2986
|
+
}
|
|
2987
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ImageNotFoundComponent, decorators: [{
|
|
2674
2988
|
type: Component,
|
|
2675
|
-
args: [{ selector: 'ul-
|
|
2676
|
-
|
|
2677
|
-
}, template: "@if (open()) {\n <div\n class=\"ul-modal ul-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=\"ul-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"ul-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"ul-modal__close\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n </header>\n }\n <div class=\"ul-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"ul-modal__status\" aria-hidden=\"true\">\n <ul-icon\n class=\"ul-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=\"ul-modal__footer\">\n @if (isConfirmation()) {\n <ul-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </ul-button>\n <ul-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </ul-button>\n } @else {\n <ng-content select=\"[ul-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-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)}.ul-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:#0a0a0a;padding:24px;border:1px solid rgba(255,255,255,.1)}.ul-modal__panel--confirmation{border:1px solid rgba(255,255,255,.1)}@media(max-width:767px){.ul-modal__panel--success{border:1px solid #7edc96}.ul-modal__panel--error{border:1px solid #f69d9d}}.ul-modal__panel--custom,.ul-modal__panel--bottom-sheet{border:1px solid rgba(255,255,255,.1)}.ul-modal__header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-shrink:0}.ul-modal__title{margin:0;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;color:#fff}.ul-modal__status{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:12px}.ul-modal__status-icon{flex-shrink:0}.ul-modal__close{flex-shrink:0;margin-left:auto}.ul-modal__body{flex:1 1 auto;min-height:0;color:#ffffffb3}.ul-modal__panel--success .ul-modal__status-icon{color:#7edc96}.ul-modal__panel--error .ul-modal__status-icon{color:#f69d9d}.ul-modal__panel--success .ul-modal__body,.ul-modal__panel--error .ul-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){.ul-modal--backdrop{padding:24px}.ul-modal__panel{width:100%;max-width:512px}}@media(max-width:767px){.ul-modal--backdrop{align-items:flex-end;padding:0}.ul-modal__panel{width:100%;max-width:100%;border-radius:24px 24px 0 0;max-height:calc(100dvh - 32px);margin-top:auto;border-bottom:none}.ul-modal__panel--bottom-sheet{border-bottom:none}.ul-modal__panel--fullscreen-mobile{position:fixed;inset:0;width:100%;max-width:100%;height:100dvh;max-height:100dvh;margin:0;border-radius:0;border:none}}.ul-modal__footer{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:16px;flex-shrink:0;justify-content:flex-end}\n"] }]
|
|
2678
|
-
}], 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 }] }], fullScreenInMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullScreenInMobile", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], confirmed: [{ type: i0.Output, args: ["confirmed"] }], cancelled: [{ type: i0.Output, args: ["cancelled"] }], onEscape: [{
|
|
2679
|
-
type: HostListener,
|
|
2680
|
-
args: ['document:keydown.escape']
|
|
2681
|
-
}] } });
|
|
2989
|
+
args: [{ selector: 'ul-image-not-found', template: `<ul-icon icon="image_dashed" [size]="iconSize()" />`, imports: [IconComponent], styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}:host{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#232323;color:#ffffff4d}\n"] }]
|
|
2990
|
+
}], propDecorators: { iconSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSize", required: false }] }] } });
|
|
2682
2991
|
|
|
2683
2992
|
const DEFAULT_MAX_OUTPUT_SIZE = 1024;
|
|
2684
2993
|
// Matches $spacing-spacing-60 (240px) — the longer side of the fixed crop
|
|
@@ -2890,161 +3199,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
2890
3199
|
args: [{ selector: 'ul-image-cropper', imports: [ImageCropperComponent$1, ModalComponent, ButtonComponent], template: "<ul-modal [(open)]=\"open\" variant=\"custom\" [title]=\"title()\" (closed)=\"onClosed()\">\n @if (imageFile()) {\n <div class=\"ul-image-cropper\">\n <image-cropper\n class=\"ul-image-cropper__frame\"\n [imageFile]=\"cropperImageFile()\"\n [maintainAspectRatio]=\"isLocked()\"\n [aspectRatio]=\"effectiveAspectRatio()\"\n [roundCropper]=\"isRound()\"\n [cropperStaticWidth]=\"frameWidth()\"\n [cropperStaticHeight]=\"frameHeight()\"\n [allowMoveImage]=\"isLocked()\"\n [transform]=\"transform()\"\n [resizeToWidth]=\"maxOutputSize()\"\n [resizeToHeight]=\"maxOutputSize()\"\n [cropperFrameAriaLabel]=\"frameAriaLabel()\"\n format=\"jpeg\"\n output=\"blob\"\n (cropperReady)=\"onCropperReady($event)\"\n (transformChange)=\"onTransformChange($event)\"\n (loadImageFailed)=\"loadFailed.emit()\"\n />\n\n @if (isLocked()) {\n <label class=\"ul-image-cropper__zoom\">\n <span class=\"ul-image-cropper__zoom-label\">{{ zoomLabel() }}</span>\n <input\n type=\"range\"\n class=\"ul-image-cropper__zoom-input\"\n [min]=\"minZoom\"\n [max]=\"maxZoom\"\n [step]=\"zoomStep\"\n [value]=\"zoom()\"\n (input)=\"onZoomInput($event)\"\n />\n </label>\n }\n </div>\n }\n\n <div class=\"ul-modal__foter-content\" ul-modal-footer>\n <ul-button\n theme=\"fill-purple\"\n size=\"md\"\n [disabled]=\"!cropperReady()\"\n (buttonClick)=\"onConfirm()\"\n >\n {{ confirmLabel() }}\n </ul-button>\n </div>\n</ul-modal>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-image-cropper{display:flex;flex-direction:column;align-items:center;gap:16px}.ul-image-cropper__frame{display:block;width:100%;height:320px;--cropper-overlay-color: rgba(10, 10, 10, .85);--cropper-outline-color: rgba(10, 10, 10, .85);--cropper-color: #6f3de0;--cropper-border: 2px solid #6f3de0;--cropper-hover-border: 2px solid #6f3de0;--cropper-focus-border: 2px solid #6f3de0;--cropper-resize-square-bg: #6f3de0;--cropper-resize-square-border: 1px solid #0a0a0a}.ul-image-cropper__zoom{display:flex;align-items:center;gap:12px;width:100%}.ul-image-cropper__zoom-label{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#ffffffb3;flex-shrink:0}.ul-image-cropper__zoom-input{flex:1;accent-color:#6f3de0}.ul-modal__foter-content{width:100%;margin-top:32px}\n"] }]
|
|
2891
3200
|
}], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], imageFile: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageFile", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], aspectRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspectRatio", required: false }] }], maxOutputSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxOutputSize", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], confirmLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "confirmLabel", required: false }] }], zoomLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zoomLabel", required: false }] }], frameAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "frameAriaLabel", required: false }] }], cropped: [{ type: i0.Output, args: ["cropped"] }], cancelled: [{ type: i0.Output, args: ["cancelled"] }], loadFailed: [{ type: i0.Output, args: ["loadFailed"] }], cropperRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => ImageCropperComponent$1), { isSignal: true }] }] } });
|
|
2892
3201
|
|
|
2893
|
-
/**
|
|
2894
|
-
* A reusable input component that follows UDS design system guidelines.
|
|
2895
|
-
* Implements FormValueControl for use with Signal Forms [formField] directive.
|
|
2896
|
-
*
|
|
2897
|
-
* Use [(value)] for two-way binding, or bind with [formField]="myForm().email" for Signal Forms.
|
|
2898
|
-
*
|
|
2899
|
-
* Content projection: [ul-input-left-elements], [ul-input-right-elements].
|
|
2900
|
-
*/
|
|
2901
|
-
class InputComponent {
|
|
2902
|
-
type = input('text', /* @ts-ignore */
|
|
2903
|
-
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
2904
|
-
size = input('md', /* @ts-ignore */
|
|
2905
|
-
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
2906
|
-
/** Border/hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */
|
|
2907
|
-
appearance = input('border-only', /* @ts-ignore */
|
|
2908
|
-
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
2909
|
-
error = input(false, /* @ts-ignore */
|
|
2910
|
-
...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
2911
|
-
disabled = input(false, /* @ts-ignore */
|
|
2912
|
-
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2913
|
-
readOnly = input(false, /* @ts-ignore */
|
|
2914
|
-
...(ngDevMode ? [{ debugName: "readOnly" }] : /* istanbul ignore next */ []));
|
|
2915
|
-
required = input(false, /* @ts-ignore */
|
|
2916
|
-
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
2917
|
-
showRequiredIndicator = input(true, /* @ts-ignore */
|
|
2918
|
-
...(ngDevMode ? [{ debugName: "showRequiredIndicator" }] : /* istanbul ignore next */ []));
|
|
2919
|
-
placeholder = input('', /* @ts-ignore */
|
|
2920
|
-
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
2921
|
-
label = input(null, /* @ts-ignore */
|
|
2922
|
-
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2923
|
-
helperText = input(null, /* @ts-ignore */
|
|
2924
|
-
...(ngDevMode ? [{ debugName: "helperText" }] : /* istanbul ignore next */ []));
|
|
2925
|
-
errorText = input(null, /* @ts-ignore */
|
|
2926
|
-
...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
|
|
2927
|
-
maxLength = input(/* @ts-ignore */
|
|
2928
|
-
...(ngDevMode ? [undefined, { debugName: "maxLength" }] : /* istanbul ignore next */ []));
|
|
2929
|
-
minLength = input(/* @ts-ignore */
|
|
2930
|
-
...(ngDevMode ? [undefined, { debugName: "minLength" }] : /* istanbul ignore next */ []));
|
|
2931
|
-
pattern = input([], /* @ts-ignore */
|
|
2932
|
-
...(ngDevMode ? [{ debugName: "pattern" }] : /* istanbul ignore next */ []));
|
|
2933
|
-
/** Native step for type="number". Defaults to 'any' (decimals allowed) rather than the
|
|
2934
|
-
* browser's own default of 1, which would silently reject e.g. "19.99" — pass an explicit
|
|
2935
|
-
* step (e.g. 1) to restrict to whole numbers. */
|
|
2936
|
-
step = input(undefined, /* @ts-ignore */
|
|
2937
|
-
...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
2938
|
-
autocomplete = input('off', /* @ts-ignore */
|
|
2939
|
-
...(ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []));
|
|
2940
|
-
/** When provided (e.g. by a parent form field), the input element uses this id instead of the internal one. */
|
|
2941
|
-
controlId = input(/* @ts-ignore */
|
|
2942
|
-
...(ngDevMode ? [undefined, { debugName: "controlId" }] : /* istanbul ignore next */ []));
|
|
2943
|
-
/** Aria-label for the toggle button when the password is hidden (i.e. the action reveals it). */
|
|
2944
|
-
showPasswordLabel = input('Show password', /* @ts-ignore */
|
|
2945
|
-
...(ngDevMode ? [{ debugName: "showPasswordLabel" }] : /* istanbul ignore next */ []));
|
|
2946
|
-
/** Aria-label for the toggle button when the password is visible (i.e. the action hides it). */
|
|
2947
|
-
hidePasswordLabel = input('Hide password', /* @ts-ignore */
|
|
2948
|
-
...(ngDevMode ? [{ debugName: "hidePasswordLabel" }] : /* istanbul ignore next */ []));
|
|
2949
|
-
/** FormUiControl optional: bound by [formField] when invalid */
|
|
2950
|
-
invalid = input(false, /* @ts-ignore */
|
|
2951
|
-
...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
|
|
2952
|
-
/** FormUiControl optional: bound by [formField] for validation errors */
|
|
2953
|
-
errors = input([], /* @ts-ignore */
|
|
2954
|
-
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
2955
|
-
/** FormUiControl optional: control sets on blur */
|
|
2956
|
-
touched = model(false, /* @ts-ignore */
|
|
2957
|
-
...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
|
|
2958
|
-
/** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */
|
|
2959
|
-
touch = output();
|
|
2960
|
-
value = model('', /* @ts-ignore */
|
|
2961
|
-
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2962
|
-
ids = createFormFieldIds('ul-input');
|
|
2963
|
-
effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId, /* @ts-ignore */
|
|
2964
|
-
...(ngDevMode ? [{ debugName: "effectiveControlId" }] : /* istanbul ignore next */ []));
|
|
2965
|
-
effectiveHelperId = computed(() => this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId, /* @ts-ignore */
|
|
2966
|
-
...(ngDevMode ? [{ debugName: "effectiveHelperId" }] : /* istanbul ignore next */ []));
|
|
2967
|
-
effectiveErrorId = computed(() => this.controlId() ? `${this.controlId()}-error` : this.ids.errorId, /* @ts-ignore */
|
|
2968
|
-
...(ngDevMode ? [{ debugName: "effectiveErrorId" }] : /* istanbul ignore next */ []));
|
|
2969
|
-
isFocused = signal(false, /* @ts-ignore */
|
|
2970
|
-
...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
|
|
2971
|
-
hasError = computed(() => this.error() || this.invalid(), /* @ts-ignore */
|
|
2972
|
-
...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
|
|
2973
|
-
// [attr.pattern]="pattern()" would stringify an empty array to "" instead
|
|
2974
|
-
// of omitting the attribute — an empty native pattern matches only the
|
|
2975
|
-
// empty string, so every non-empty value would fail native validation.
|
|
2976
|
-
// Native <input pattern> only accepts one regex source, so multiple
|
|
2977
|
-
// patterns are combined as alternatives.
|
|
2978
|
-
nativePattern = computed(() => {
|
|
2979
|
-
const patterns = this.pattern();
|
|
2980
|
-
return patterns.length ? patterns.map((p) => p.source).join('|') : null;
|
|
2981
|
-
}, /* @ts-ignore */
|
|
2982
|
-
...(ngDevMode ? [{ debugName: "nativePattern" }] : /* istanbul ignore next */ []));
|
|
2983
|
-
nativeStep = computed(() => {
|
|
2984
|
-
const step = this.step();
|
|
2985
|
-
if (step !== undefined)
|
|
2986
|
-
return step;
|
|
2987
|
-
return this.type() === 'number' ? 'any' : null;
|
|
2988
|
-
}, /* @ts-ignore */
|
|
2989
|
-
...(ngDevMode ? [{ debugName: "nativeStep" }] : /* istanbul ignore next */ []));
|
|
2990
|
-
isPasswordType = computed(() => this.type() === 'password', /* @ts-ignore */
|
|
2991
|
-
...(ngDevMode ? [{ debugName: "isPasswordType" }] : /* istanbul ignore next */ []));
|
|
2992
|
-
passwordRevealed = signal(false, /* @ts-ignore */
|
|
2993
|
-
...(ngDevMode ? [{ debugName: "passwordRevealed" }] : /* istanbul ignore next */ []));
|
|
2994
|
-
effectiveType = computed(() => this.isPasswordType() && this.passwordRevealed() ? 'text' : this.type(), /* @ts-ignore */
|
|
2995
|
-
...(ngDevMode ? [{ debugName: "effectiveType" }] : /* istanbul ignore next */ []));
|
|
2996
|
-
passwordToggleIcon = computed(() => this.passwordRevealed() ? 'eye_on' : 'eye_dashed', /* @ts-ignore */
|
|
2997
|
-
...(ngDevMode ? [{ debugName: "passwordToggleIcon" }] : /* istanbul ignore next */ []));
|
|
2998
|
-
passwordToggleLabel = computed(() => this.passwordRevealed() ? this.hidePasswordLabel() : this.showPasswordLabel(), /* @ts-ignore */
|
|
2999
|
-
...(ngDevMode ? [{ debugName: "passwordToggleLabel" }] : /* istanbul ignore next */ []));
|
|
3000
|
-
describedBy = computed(() => getFormFieldDescribedBy(this.effectiveHelperId(), this.effectiveErrorId(), !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), /* @ts-ignore */
|
|
3001
|
-
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
3002
|
-
// Outputs
|
|
3003
|
-
inputBlur = output();
|
|
3004
|
-
inputFocus = output();
|
|
3005
|
-
/** Emitted when Enter is pressed in the field; typically used to submit a form. */
|
|
3006
|
-
inputEnter = output();
|
|
3007
|
-
onInput(event) {
|
|
3008
|
-
const value = event.target.value;
|
|
3009
|
-
this.value.set(value);
|
|
3010
|
-
}
|
|
3011
|
-
onBlur(event) {
|
|
3012
|
-
this.isFocused.set(false);
|
|
3013
|
-
this.touched.set(true);
|
|
3014
|
-
this.touch.emit();
|
|
3015
|
-
this.inputBlur.emit(event);
|
|
3016
|
-
}
|
|
3017
|
-
onFocus(event) {
|
|
3018
|
-
this.isFocused.set(true);
|
|
3019
|
-
this.inputFocus.emit(event);
|
|
3020
|
-
}
|
|
3021
|
-
onKeydown(event) {
|
|
3022
|
-
if (event.key === 'Enter') {
|
|
3023
|
-
this.inputEnter.emit(event);
|
|
3024
|
-
}
|
|
3025
|
-
}
|
|
3026
|
-
togglePasswordVisibility() {
|
|
3027
|
-
this.passwordRevealed.update((revealed) => !revealed);
|
|
3028
|
-
}
|
|
3029
|
-
/**
|
|
3030
|
-
* Programmatically focuses the input element
|
|
3031
|
-
*/
|
|
3032
|
-
focus() {
|
|
3033
|
-
const inputEl = document.getElementById(this.effectiveControlId());
|
|
3034
|
-
inputEl?.focus();
|
|
3035
|
-
}
|
|
3036
|
-
select() {
|
|
3037
|
-
const inputEl = document.getElementById(this.effectiveControlId());
|
|
3038
|
-
inputEl?.select();
|
|
3039
|
-
}
|
|
3040
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3041
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: InputComponent, isStandalone: true, selector: "ul-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 }, showRequiredIndicator: { classPropertyName: "showRequiredIndicator", publicName: "showRequiredIndicator", 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 }, step: { classPropertyName: "step", publicName: "step", 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 }, showPasswordLabel: { classPropertyName: "showPasswordLabel", publicName: "showPasswordLabel", isSignal: true, isRequired: false, transformFunction: null }, hidePasswordLabel: { classPropertyName: "hidePasswordLabel", publicName: "hidePasswordLabel", 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", touch: "touch", value: "valueChange", inputBlur: "inputBlur", inputFocus: "inputFocus", inputEnter: "inputEnter" }, ngImport: i0, template: "<div\n class=\"ul-input ul-input--{{ size() }} ul-input--appearance-{{ appearance() }}\"\n [class.ul-input--error]=\"hasError()\"\n [class.ul-input--disabled]=\"disabled()\"\n [class.ul-input--read-only]=\"readOnly()\"\n [class.ul-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-input__group\" [class.ul-input__group--focused]=\"isFocused()\">\n <div class=\"ul-input__left-elements\">\n <ng-content select=\"[ul-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"effectiveType()\"\n class=\"ul-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"nativePattern()\"\n [attr.step]=\"nativeStep()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"ul-input__right-elements\">\n @if (isPasswordType()) {\n <ul-button\n class=\"ul-input__password-toggle\"\n theme=\"ghost-white\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"passwordToggleLabel()\"\n (buttonClick)=\"togglePasswordVisibility()\"\n >\n <ul-icon [icon]=\"passwordToggleIcon()\" />\n </ul-button>\n }\n <ng-content select=\"[ul-input-right-elements]\" />\n </div>\n </div>\n\n <ul-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: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-input{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;width:100%;gap:4px}.ul-input__group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent;color:#fff;transition:box-shadow .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}.ul-input__group--focused{box-shadow:inset 0 0 0 2px #ffffff80}.ul-input--appearance-border-only:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d}.ul-input--appearance-subtle-tint:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d;background-color:#ffffff0d}.ul-input__field{all:unset;flex:1}.ul-input__field::placeholder{color:#ffffff80}.ul-input__field:hover::placeholder{color:#fff}.ul-input__left-elements,.ul-input__right-elements{display:flex;align-items:center;gap:8px}.ul-input__left-elements ::ng-deep .ul-icon,.ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input__password-toggle ::ng-deep .ul-btn:hover,.ul-input__password-toggle ::ng-deep .ul-btn:active{background-color:transparent}.ul-input__password-toggle ::ng-deep .ul-btn:focus:not(:focus-visible){outline:none}.ul-input--sm .ul-input__group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-input--sm .ul-input__left-elements,.ul-input--sm .ul-input__right-elements{gap:4px}.ul-input--sm .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--sm .ul-input__right-elements ::ng-deep .ul-icon{font-size:20px;line-height:20px}.ul-input--md .ul-input__group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-input--md .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--md .ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input--lg .ul-input__group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-input--lg .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--lg .ul-input__right-elements ::ng-deep .ul-icon{font-size:28px;line-height:28px}.ul-input--xl .ul-input__group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.ul-input--xl .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--xl .ul-input__right-elements ::ng-deep .ul-icon{font-size:32px;line-height:32px}.ul-input--error .ul-input__group{box-shadow:inset 0 0 0 2px #f69d9d}.ul-input--disabled .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--disabled .ul-input__field,.ul-input--disabled .ul-input__field:disabled::placeholder{color:#ffffff4d}.ul-input--read-only .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--read-only .ul-input__field,.ul-input--read-only .ul-input__field:read-only::placeholder{color:#ffffffb3}\n"], dependencies: [{ kind: "component", type: FormFieldLabelComponent, selector: "ul-form-field-label", inputs: ["label", "required", "for", "size", "showRequiredIndicator"] }, { kind: "component", type: FormFieldHelperComponent, selector: "ul-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }, { kind: "component", type: ButtonComponent, selector: "ul-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "ul-icon", inputs: ["size", "weight", "icon"] }] });
|
|
3042
|
-
}
|
|
3043
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: InputComponent, decorators: [{
|
|
3044
|
-
type: Component,
|
|
3045
|
-
args: [{ selector: 'ul-input', imports: [FormFieldLabelComponent, FormFieldHelperComponent, ButtonComponent, IconComponent], template: "<div\n class=\"ul-input ul-input--{{ size() }} ul-input--appearance-{{ appearance() }}\"\n [class.ul-input--error]=\"hasError()\"\n [class.ul-input--disabled]=\"disabled()\"\n [class.ul-input--read-only]=\"readOnly()\"\n [class.ul-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-input__group\" [class.ul-input__group--focused]=\"isFocused()\">\n <div class=\"ul-input__left-elements\">\n <ng-content select=\"[ul-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"effectiveType()\"\n class=\"ul-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"nativePattern()\"\n [attr.step]=\"nativeStep()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"ul-input__right-elements\">\n @if (isPasswordType()) {\n <ul-button\n class=\"ul-input__password-toggle\"\n theme=\"ghost-white\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"passwordToggleLabel()\"\n (buttonClick)=\"togglePasswordVisibility()\"\n >\n <ul-icon [icon]=\"passwordToggleIcon()\" />\n </ul-button>\n }\n <ng-content select=\"[ul-input-right-elements]\" />\n </div>\n </div>\n\n <ul-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: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-input{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;width:100%;gap:4px}.ul-input__group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent;color:#fff;transition:box-shadow .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}.ul-input__group--focused{box-shadow:inset 0 0 0 2px #ffffff80}.ul-input--appearance-border-only:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d}.ul-input--appearance-subtle-tint:not(.ul-input--disabled) .ul-input__group:hover{box-shadow:inset 0 0 0 2px #ffffff4d;background-color:#ffffff0d}.ul-input__field{all:unset;flex:1}.ul-input__field::placeholder{color:#ffffff80}.ul-input__field:hover::placeholder{color:#fff}.ul-input__left-elements,.ul-input__right-elements{display:flex;align-items:center;gap:8px}.ul-input__left-elements ::ng-deep .ul-icon,.ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input__password-toggle ::ng-deep .ul-btn:hover,.ul-input__password-toggle ::ng-deep .ul-btn:active{background-color:transparent}.ul-input__password-toggle ::ng-deep .ul-btn:focus:not(:focus-visible){outline:none}.ul-input--sm .ul-input__group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.ul-input--sm .ul-input__left-elements,.ul-input--sm .ul-input__right-elements{gap:4px}.ul-input--sm .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--sm .ul-input__right-elements ::ng-deep .ul-icon{font-size:20px;line-height:20px}.ul-input--md .ul-input__group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-input--md .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--md .ul-input__right-elements ::ng-deep .ul-icon{font-size:24px;line-height:24px}.ul-input--lg .ul-input__group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-input--lg .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--lg .ul-input__right-elements ::ng-deep .ul-icon{font-size:28px;line-height:28px}.ul-input--xl .ul-input__group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.ul-input--xl .ul-input__left-elements ::ng-deep .ul-icon,.ul-input--xl .ul-input__right-elements ::ng-deep .ul-icon{font-size:32px;line-height:32px}.ul-input--error .ul-input__group{box-shadow:inset 0 0 0 2px #f69d9d}.ul-input--disabled .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--disabled .ul-input__field,.ul-input--disabled .ul-input__field:disabled::placeholder{color:#ffffff4d}.ul-input--read-only .ul-input__group{box-shadow:inset 0 0 0 2px #ffffff1a;background-color:transparent}.ul-input--read-only .ul-input__field,.ul-input--read-only .ul-input__field:read-only::placeholder{color:#ffffffb3}\n"] }]
|
|
3046
|
-
}], 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 }] }], showRequiredIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredIndicator", 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 }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], controlId: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlId", required: false }] }], showPasswordLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPasswordLabel", required: false }] }], hidePasswordLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidePasswordLabel", 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"] }], touch: [{ type: i0.Output, args: ["touch"] }], 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"] }], inputEnter: [{ type: i0.Output, args: ["inputEnter"] }] } });
|
|
3047
|
-
|
|
3048
3202
|
const DEFAULT_DURATION_MS = 500;
|
|
3049
3203
|
const MOVE_CANCEL_THRESHOLD_PX = 10;
|
|
3050
3204
|
/**
|
|
@@ -3195,11 +3349,11 @@ class MenuComponent {
|
|
|
3195
3349
|
this.closed.emit();
|
|
3196
3350
|
}
|
|
3197
3351
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3198
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", type: MenuComponent, isStandalone: true, selector: "ul-menu", 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 }, triggerIconOnly: { classPropertyName: "triggerIconOnly", publicName: "triggerIconOnly", isSignal: true, isRequired: false, transformFunction: null }, iconOnlyLabel: { classPropertyName: "iconOnlyLabel", publicName: "iconOnlyLabel", isSignal: true, isRequired: false, transformFunction: null }, triggerLabel: { classPropertyName: "triggerLabel", publicName: "triggerLabel", isSignal: true, isRequired: false, transformFunction: null }, triggerLeftIcons: { classPropertyName: "triggerLeftIcons", publicName: "triggerLeftIcons", isSignal: true, isRequired: false, transformFunction: null }, triggerRightIcons: { classPropertyName: "triggerRightIcons", publicName: "triggerRightIcons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelected: "itemSelected", closed: "closed" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MenuTriggerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"triggerLabel()\"\n [leftIcons]=\"triggerLeftIcons()\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n/>\n\n<ng-template #menu>\n <div class=\"ul-menu__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-menu\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n <ng-content />\n </div>\n</ng-template>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-menu{display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin:4px 0;min-width:200px}@media(max-width:1023px){.ul-menu{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-menu ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}.ul-menu__backdrop{display:none}@media(max-width:1023px){.ul-menu__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}\n"], dependencies: [{ kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "component", type: MenuItemsComponent, selector: "ul-menu-items", inputs: ["items", "theme", "selectedIndex"], outputs: ["itemTriggered"] }, { kind: "component", type: MenuTriggerComponent, selector: "ul-menu-trigger", inputs: ["theme", "disabled", "iconOnly", "iconOnlyLabel", "label", "leftIcons", "rightIcons", "menuTemplate", "menuId", "isOpen"], outputs: ["opened", "closed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
3352
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", type: MenuComponent, isStandalone: true, selector: "ul-menu", 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 }, triggerIconOnly: { classPropertyName: "triggerIconOnly", publicName: "triggerIconOnly", isSignal: true, isRequired: false, transformFunction: null }, iconOnlyLabel: { classPropertyName: "iconOnlyLabel", publicName: "iconOnlyLabel", isSignal: true, isRequired: false, transformFunction: null }, triggerLabel: { classPropertyName: "triggerLabel", publicName: "triggerLabel", isSignal: true, isRequired: false, transformFunction: null }, triggerLeftIcons: { classPropertyName: "triggerLeftIcons", publicName: "triggerLeftIcons", isSignal: true, isRequired: false, transformFunction: null }, triggerRightIcons: { classPropertyName: "triggerRightIcons", publicName: "triggerRightIcons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelected: "itemSelected", closed: "closed" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MenuTriggerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"triggerLabel()\"\n [leftIcons]=\"triggerLeftIcons()\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n/>\n\n<ng-template #menu>\n <div class=\"ul-menu__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-menu\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n <ng-content />\n </div>\n</ng-template>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-menu{display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin:4px 0;min-width:200px}@media(max-width:1023px){.ul-menu{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;padding-bottom:8px;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-menu ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}.ul-menu__backdrop{display:none}@media(max-width:1023px){.ul-menu__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}\n"], dependencies: [{ kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "component", type: MenuItemsComponent, selector: "ul-menu-items", inputs: ["items", "theme", "selectedIndex"], outputs: ["itemTriggered"] }, { kind: "component", type: MenuTriggerComponent, selector: "ul-menu-trigger", inputs: ["theme", "disabled", "iconOnly", "iconOnlyLabel", "label", "leftIcons", "rightIcons", "menuTemplate", "menuId", "isOpen"], outputs: ["opened", "closed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
3199
3353
|
}
|
|
3200
3354
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: MenuComponent, decorators: [{
|
|
3201
3355
|
type: Component,
|
|
3202
|
-
args: [{ selector: 'ul-menu', imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent], encapsulation: ViewEncapsulation.None, template: "<ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"triggerLabel()\"\n [leftIcons]=\"triggerLeftIcons()\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n/>\n\n<ng-template #menu>\n <div class=\"ul-menu__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-menu\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n <ng-content />\n </div>\n</ng-template>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-menu{display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin:4px 0;min-width:200px}@media(max-width:1023px){.ul-menu{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-menu ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}.ul-menu__backdrop{display:none}@media(max-width:1023px){.ul-menu__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}\n"] }]
|
|
3356
|
+
args: [{ selector: 'ul-menu', imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent], encapsulation: ViewEncapsulation.None, template: "<ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"triggerLabel()\"\n [leftIcons]=\"triggerLeftIcons()\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n/>\n\n<ng-template #menu>\n <div class=\"ul-menu__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-menu\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n <ng-content />\n </div>\n</ng-template>\n", styles: [".ul-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.ul-rich-text p,.ul-rich-text ul,.ul-rich-text ol,.ul-rich-text blockquote,.ul-rich-text pre{margin-top:0;margin-bottom:16px}.ul-rich-text:last-child,.ul-rich-text p:last-child,.ul-rich-text ul:last-child,.ul-rich-text ol:last-child,.ul-rich-text blockquote:last-child,.ul-rich-text pre:last-child{margin-bottom:0}.ul-rich-text h1,.ul-rich-text h2,.ul-rich-text h3,.ul-rich-text h4,.ul-rich-text h5,.ul-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.ul-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.ul-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.ul-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.ul-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.ul-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.ul-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.ul-rich-text ul,.ul-rich-text ol{padding-left:24px}.ul-rich-text ul ul,.ul-rich-text ul ol,.ul-rich-text ol ul,.ul-rich-text ol ol{margin-top:8px;margin-bottom:8px}.ul-rich-text li{margin-top:4px;margin-bottom:4px}.ul-rich-text strong{font-weight:800}.ul-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text em{font-style:italic}.ul-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.ul-rich-text a:hover{color:#d6c5ff}.ul-rich-text a:active{color:#a781ff}.ul-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.ul-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.ul-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.ul-rich-text--muted{color:#ffffffb3}.ul-rich-text--inverse,.ul-rich-text--inverse a{color:#000}.ul-rich-text--inverse a:hover,.ul-rich-text--inverse a:active{color:#000000b3}.ul-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.ul-rich-text--compact p,.ul-rich-text--compact ul,.ul-rich-text--compact ol,.ul-rich-text--compact blockquote,.ul-rich-text--compact pre{margin-bottom:8px}.ul-rich-text--compact h1,.ul-rich-text--compact h2,.ul-rich-text--compact h3,.ul-rich-text--compact h4,.ul-rich-text--compact h5,.ul-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.ul-menu{display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin:4px 0;min-width:200px}@media(max-width:1023px){.ul-menu{position:fixed;inset:auto 0 0;width:100%;max-height:40vh;margin:0;border-radius:16px 16px 0 0;gap:16px;display:flex;padding-bottom:8px;flex-direction:column;overflow-y:auto;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.ul-menu ul-list-item .ul-list-item{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}}.ul-menu__backdrop{display:none}@media(max-width:1023px){.ul-menu__backdrop{display:block;position:fixed;inset:0;background-color:#0000004d}}\n"] }]
|
|
3203
3357
|
}], 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 }] }], triggerIconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerIconOnly", required: false }] }], iconOnlyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnlyLabel", required: false }] }], triggerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerLabel", required: false }] }], triggerLeftIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerLeftIcons", required: false }] }], triggerRightIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerRightIcons", required: false }] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], closed: [{ type: i0.Output, args: ["closed"] }], trigger: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MenuTriggerComponent), { isSignal: true }] }] } });
|
|
3204
3358
|
|
|
3205
3359
|
/** Place on the element projected into [ul-navbar-logo] so the navbar can detect logo content. */
|
|
@@ -5041,5 +5195,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
5041
5195
|
* Generated bundle index. Do not edit.
|
|
5042
5196
|
*/
|
|
5043
5197
|
|
|
5044
|
-
export { AccordionComponent, AccordionItemComponent, AreaCodeComponent, AvatarComponent, AvatarGroupComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, CardComponent, CheckboxComponent, CollapseComponent, CustomCurrencyPipe, DockComponent, DockItemComponent, DockItemContentSlotDirective, DropdownComponent, FileInputComponent, FooterComponent, FormFieldHelperComponent, FormFieldLabelComponent, HeroComponent, IconComponent, ImageCropperComponent, ImageNotFoundComponent, ImageNotFoundDirective, InputComponent, ListItemComponent, LongPressDirective, MenuComponent, MenuItemsComponent, MenuTriggerComponent, ModalComponent, NavbarAppNameSlotDirective, NavbarAvatarSlotDirective, NavbarComponent, NavbarLogoSlotDirective, NavbarSearchSlotDirective, PeHeroActionsSlotDirective, PeHeroBadgesSlotDirective, PeHeroContentSlotDirective, PeHeroSubtitleSlotDirective, PeHeroTitleSlotDirective, PillComponent, PriceButtonComponent, RadialComponent, RadioComponent, RadioGroupComponent, RichTextComponent, SearchInputComponent, SearchSelectComponent, SelectComponent, SelectableRowComponent, SidebarComponent, SkeletonComponent, StatusComponent, StepperComponent, TableComponent, TextareaComponent, TextareaFieldDirective, ToastContainerComponent, ToastService, ToggleComponent, TooltipComponent, createFormFieldIds, getFormFieldDescribedBy, toastIcon };
|
|
5198
|
+
export { AccordionComponent, AccordionItemComponent, AreaCodeComponent, AvatarComponent, AvatarGroupComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, CardComponent, CategoryPickerComponent, CheckboxComponent, CollapseComponent, CustomCurrencyPipe, DockComponent, DockItemComponent, DockItemContentSlotDirective, DropdownComponent, FileInputComponent, FooterComponent, FormFieldHelperComponent, FormFieldLabelComponent, HeroComponent, IconComponent, ImageCropperComponent, ImageNotFoundComponent, ImageNotFoundDirective, InputComponent, ListItemComponent, LongPressDirective, MenuComponent, MenuItemsComponent, MenuTriggerComponent, ModalComponent, NavbarAppNameSlotDirective, NavbarAvatarSlotDirective, NavbarComponent, NavbarLogoSlotDirective, NavbarSearchSlotDirective, PeHeroActionsSlotDirective, PeHeroBadgesSlotDirective, PeHeroContentSlotDirective, PeHeroSubtitleSlotDirective, PeHeroTitleSlotDirective, PillComponent, PriceButtonComponent, RadialComponent, RadioComponent, RadioGroupComponent, RichTextComponent, SearchInputComponent, SearchSelectComponent, SelectComponent, SelectableRowComponent, SidebarComponent, SkeletonComponent, StatusComponent, StepperComponent, TableComponent, TextareaComponent, TextareaFieldDirective, ToastContainerComponent, ToastService, ToggleComponent, TooltipComponent, createFormFieldIds, getFormFieldDescribedBy, toastIcon };
|
|
5045
5199
|
//# sourceMappingURL=underlayerdev-ui.mjs.map
|