@educarehq/solaris-components 0.4.4 → 0.4.5

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, Renderer2, Directive, TemplateRef, Injectable, ViewContainerRef, DestroyRef, Input, ContentChild, ViewEncapsulation, Component, EventEmitter, Output, HostBinding, ChangeDetectionStrategy, ViewChildren, ContentChildren, ApplicationRef, signal, computed, effect, HostListener, Optional, booleanAttribute, InjectionToken, makeEnvironmentProviders, PLATFORM_ID, input, viewChild, numberAttribute, afterNextRender, ViewChild, output, forwardRef, Host, Injector } from '@angular/core';
2
+ import { inject, ElementRef, Renderer2, Directive, TemplateRef, Injectable, ViewContainerRef, DestroyRef, Input, ContentChild, ViewEncapsulation, Component, EventEmitter, Output, HostBinding, ChangeDetectionStrategy, ViewChildren, ContentChildren, ApplicationRef, signal, computed, effect, HostListener, Optional, EnvironmentInjector, createComponent, input, booleanAttribute, InjectionToken, makeEnvironmentProviders, PLATFORM_ID, viewChild, numberAttribute, afterNextRender, ViewChild, output, forwardRef, Host, Injector } from '@angular/core';
3
3
  import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
4
4
  import { Overlay } from '@angular/cdk/overlay';
5
5
  import { TemplatePortal } from '@angular/cdk/portal';
@@ -11,7 +11,7 @@ import * as i1 from '@angular/common';
11
11
  import { NgClass, NgTemplateOutlet, CommonModule, NgStyle, isPlatformBrowser, DOCUMENT, NgOptimizedImage } from '@angular/common';
12
12
  import { SolarisTranslationPipe, SOLARIS_TRANSLATION, SOLARIS_TRANSLATION_CONFIGURATION } from '@educarehq/solaris-services';
13
13
  import * as i1$1 from '@angular/forms';
14
- import { NG_VALUE_ACCESSOR, FormsModule, NgForm, FormGroupDirective, NgControl, NG_VALIDATORS } from '@angular/forms';
14
+ import { NG_VALUE_ACCESSOR, FormsModule, NG_VALIDATORS, NgForm, FormGroupDirective, NgControl } from '@angular/forms';
15
15
  import { getCountries, getCountryCallingCode, parsePhoneNumberFromString, AsYouType } from 'libphonenumber-js';
16
16
  import intlTelInput from 'intl-tel-input';
17
17
 
@@ -978,10 +978,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
978
978
  }]
979
979
  }] });
980
980
 
981
- function clamp$1(v, min, max) {
981
+ function clamp$2(v, min, max) {
982
982
  return Math.max(min, Math.min(max, v));
983
983
  }
984
- function initialXY(anchor, panel, placement, offset) {
984
+ function initialXY$1(anchor, panel, placement, offset) {
985
985
  const axMid = anchor.left + anchor.width / 2;
986
986
  const ayMid = anchor.top + anchor.height / 2;
987
987
  switch (placement) {
@@ -1022,10 +1022,10 @@ function computePopoverPosition(anchorRect, panelRect, configuration) {
1022
1022
  const bottom = y + panelRect.height;
1023
1023
  return left >= pad && top >= pad && right <= vw - pad && bottom <= vh - pad;
1024
1024
  };
1025
- let pos = initialXY(anchorRect, panelRect, applied, configuration.offset);
1025
+ let pos = initialXY$1(anchorRect, panelRect, applied, configuration.offset);
1026
1026
  if (configuration.autoFlip && !fits(pos.x, pos.y)) {
1027
1027
  const flipped = flipPlacement(applied);
1028
- const flippedPos = initialXY(anchorRect, panelRect, flipped, configuration.offset);
1028
+ const flippedPos = initialXY$1(anchorRect, panelRect, flipped, configuration.offset);
1029
1029
  if (fits(flippedPos.x, flippedPos.y)) {
1030
1030
  applied = flipped;
1031
1031
  pos = flippedPos;
@@ -1033,8 +1033,8 @@ function computePopoverPosition(anchorRect, panelRect, configuration) {
1033
1033
  }
1034
1034
  if (configuration.autoShift) {
1035
1035
  const pad = configuration.viewportPadding;
1036
- pos.x = clamp$1(pos.x, pad, vw - pad - panelRect.width);
1037
- pos.y = clamp$1(pos.y, pad, vh - pad - panelRect.height);
1036
+ pos.x = clamp$2(pos.x, pad, vw - pad - panelRect.width);
1037
+ pos.y = clamp$2(pos.y, pad, vh - pad - panelRect.height);
1038
1038
  }
1039
1039
  return { x: pos.x, y: pos.y, appliedPlacement: applied };
1040
1040
  }
@@ -1509,7 +1509,340 @@ function coerceBoolean$2(v) {
1509
1509
  return v === '' || v === true || v === 'true' || v === 1 || v === '1';
1510
1510
  }
1511
1511
 
1512
- const PRESET_COLORS$2 = new Set([
1512
+ function clamp$1(value, min, max) {
1513
+ return Math.max(min, Math.min(max, value));
1514
+ }
1515
+ function oppositePosition(position) {
1516
+ switch (position) {
1517
+ case 'top': return 'bottom';
1518
+ case 'bottom': return 'top';
1519
+ case 'left': return 'right';
1520
+ case 'right': return 'left';
1521
+ }
1522
+ }
1523
+ function initialXY(anchor, panel, position, offset) {
1524
+ const anchorCenterX = anchor.left + anchor.width / 2;
1525
+ const anchorCenterY = anchor.top + anchor.height / 2;
1526
+ switch (position) {
1527
+ case 'top':
1528
+ return {
1529
+ x: anchorCenterX - panel.width / 2,
1530
+ y: anchor.top - panel.height - offset,
1531
+ };
1532
+ case 'bottom':
1533
+ return {
1534
+ x: anchorCenterX - panel.width / 2,
1535
+ y: anchor.bottom + offset,
1536
+ };
1537
+ case 'right':
1538
+ return {
1539
+ x: anchor.right + offset,
1540
+ y: anchorCenterY - panel.height / 2,
1541
+ };
1542
+ case 'left':
1543
+ return {
1544
+ x: anchor.left - panel.width - offset,
1545
+ y: anchorCenterY - panel.height / 2,
1546
+ };
1547
+ }
1548
+ }
1549
+ function computeFloatingPosition(anchorRect, panelRect, configuration) {
1550
+ const viewportWidth = window.innerWidth;
1551
+ const viewportHeight = window.innerHeight;
1552
+ const padding = configuration.viewportPadding;
1553
+ let appliedPosition = configuration.position;
1554
+ let position = initialXY(anchorRect, panelRect, appliedPosition, configuration.offset);
1555
+ const fits = (x, y) => {
1556
+ const left = x;
1557
+ const top = y;
1558
+ const right = x + panelRect.width;
1559
+ const bottom = y + panelRect.height;
1560
+ return (left >= padding &&
1561
+ top >= padding &&
1562
+ right <= viewportWidth - padding &&
1563
+ bottom <= viewportHeight - padding);
1564
+ };
1565
+ if (configuration.autoFlip && !fits(position.x, position.y)) {
1566
+ const flipped = oppositePosition(appliedPosition);
1567
+ const flippedPosition = initialXY(anchorRect, panelRect, flipped, configuration.offset);
1568
+ if (fits(flippedPosition.x, flippedPosition.y)) {
1569
+ appliedPosition = flipped;
1570
+ position = flippedPosition;
1571
+ }
1572
+ }
1573
+ if (configuration.autoShift) {
1574
+ position.x = clamp$1(position.x, padding, viewportWidth - padding - panelRect.width);
1575
+ position.y = clamp$1(position.y, padding, viewportHeight - padding - panelRect.height);
1576
+ }
1577
+ return {
1578
+ x: position.x,
1579
+ y: position.y,
1580
+ appliedPosition,
1581
+ };
1582
+ }
1583
+ function repositionTooltipOverlay(anchor, overlayRef, options, setAppliedPosition) {
1584
+ const anchorRect = anchor.nativeElement.getBoundingClientRect();
1585
+ const panelRect = overlayRef.hostElement.getBoundingClientRect();
1586
+ const result = computeFloatingPosition(anchorRect, panelRect, options);
1587
+ overlayRef.setTransform(result.x, result.y);
1588
+ setAppliedPosition(result.appliedPosition);
1589
+ }
1590
+
1591
+ class SolarisFloatingOverlayService {
1592
+ appRef = inject(ApplicationRef);
1593
+ injector = inject(EnvironmentInjector);
1594
+ create(component, options = {}) {
1595
+ const id = this.createId(options.idPrefix ?? 'solaris-floating');
1596
+ const host = document.createElement('div');
1597
+ host.id = id;
1598
+ host.style.position = 'fixed';
1599
+ host.style.top = '0';
1600
+ host.style.left = '0';
1601
+ host.style.display = 'block';
1602
+ host.style.width = 'max-content';
1603
+ host.style.maxWidth = 'max-content';
1604
+ host.style.zIndex = options.zIndex ?? 'var(--solaris-z-tooltip, 1200)';
1605
+ host.style.pointerEvents = options.pointerEvents ?? 'none';
1606
+ host.style.transform = 'translate3d(0, 0, 0)';
1607
+ if (options.panelClass?.trim()) {
1608
+ host.className = options.panelClass.trim();
1609
+ }
1610
+ document.body.appendChild(host);
1611
+ const componentRef = createComponent(component, {
1612
+ environmentInjector: this.injector,
1613
+ hostElement: host,
1614
+ });
1615
+ this.appRef.attachView(componentRef.hostView);
1616
+ componentRef.changeDetectorRef.detectChanges();
1617
+ return {
1618
+ id,
1619
+ hostElement: host,
1620
+ componentRef,
1621
+ setTransform(x, y) {
1622
+ host.style.transform = `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;
1623
+ },
1624
+ destroy: () => {
1625
+ this.appRef.detachView(componentRef.hostView);
1626
+ componentRef.destroy();
1627
+ host.remove();
1628
+ },
1629
+ };
1630
+ }
1631
+ reposition(context) {
1632
+ const anchorRect = context.anchor.getBoundingClientRect();
1633
+ const panelRect = context.overlayRef.hostElement.getBoundingClientRect();
1634
+ const result = computeFloatingPosition(anchorRect, panelRect, context.options);
1635
+ context.overlayRef.setTransform(result.x, result.y);
1636
+ context.setAppliedPosition(result.appliedPosition);
1637
+ }
1638
+ clearFloatingTimers(showTimer, hideTimer, raf) {
1639
+ globalThis.clearTimeout(showTimer);
1640
+ globalThis.clearTimeout(hideTimer);
1641
+ if (raf) {
1642
+ cancelAnimationFrame(raf);
1643
+ }
1644
+ }
1645
+ destroyOverlay(overlayRef) {
1646
+ overlayRef?.destroy();
1647
+ }
1648
+ createId(prefix) {
1649
+ const random = typeof crypto !== 'undefined' && 'randomUUID' in crypto
1650
+ ? crypto.randomUUID()
1651
+ : `${Date.now()}-${Math.round(Math.random() * 1_000_000)}`;
1652
+ return `${prefix}-${random}`;
1653
+ }
1654
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisFloatingOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1655
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisFloatingOverlayService, providedIn: 'root' });
1656
+ }
1657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisFloatingOverlayService, decorators: [{
1658
+ type: Injectable,
1659
+ args: [{
1660
+ providedIn: 'root',
1661
+ }]
1662
+ }] });
1663
+
1664
+ class SolarisRichTooltipPanel {
1665
+ template = input(null, ...(ngDevMode ? [{ debugName: "template" }] : []));
1666
+ position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : []));
1667
+ variant = input('inverse', ...(ngDevMode ? [{ debugName: "variant" }] : []));
1668
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
1669
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRichTooltipPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
1670
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisRichTooltipPanel, isStandalone: true, selector: "solaris-rich-tooltip-panel", inputs: { template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"solaris-rich-tooltip\" [attr.data-position]=\"position()\" [attr.data-variant]=\"variant()\"\r\n [attr.data-size]=\"size()\" role=\"tooltip\">\r\n <div class=\"solaris-rich-tooltip__content\">\r\n @if (template()) {\r\n <ng-container [ngTemplateOutlet]=\"template()\"></ng-container>\r\n }\r\n </div>\r\n\r\n <span class=\"solaris-rich-tooltip__arrow\" aria-hidden=\"true\"></span>\r\n</div>\r\n", styles: [":host{display:block;inline-size:max-content;max-inline-size:max-content}.solaris-rich-tooltip{--solaris-tooltip-padding-x: 1rem;--solaris-tooltip-padding-y: 1rem;--solaris-tooltip-max-width: 32rem;--solaris-tooltip-arrow-size: .8rem;--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-shadow: var(--solaris-shadow-md);--solaris-tooltip-radius: var(--solaris-radius-md);--solaris-tooltip-bg: var(--solaris-color-surface-2);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 75%, transparent);text-align:start;isolation:isolate;position:relative;pointer-events:auto;font-size:var(--solaris-fs-13);color:var(--solaris-tooltip-fg);background:var(--solaris-tooltip-bg);line-height:var(--solaris-lh-normal);box-shadow:var(--solaris-tooltip-shadow);border-radius:var(--solaris-tooltip-radius);animation:solaris-rich-tooltip-in .12s ease;border:1px solid var(--solaris-tooltip-border);max-inline-size:var(--solaris-tooltip-max-width);padding:var(--solaris-tooltip-padding-y) var(--solaris-tooltip-padding-x)}.solaris-rich-tooltip[data-size=sm]{--solaris-tooltip-max-width: 24rem;--solaris-tooltip-padding-y: .75rem;--solaris-tooltip-padding-x: .85rem;--solaris-tooltip-radius: var(--solaris-radius-sm)}.solaris-rich-tooltip[data-size=md]{--solaris-tooltip-max-width: 32rem}.solaris-rich-tooltip[data-size=lg]{--solaris-tooltip-max-width: 42rem;--solaris-tooltip-padding-y: 1.2rem;--solaris-tooltip-padding-x: 1.2rem;--solaris-tooltip-radius: var(--solaris-radius-lg)}.solaris-rich-tooltip[data-variant=default]{--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-bg: var(--solaris-color-surface);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent)}.solaris-rich-tooltip[data-variant=inverse]{--solaris-tooltip-fg: var(--solaris-color-surface);--solaris-tooltip-bg: color-mix(in srgb, var(--solaris-color-text) 92%, black);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-tooltip-bg) 82%, white)}.solaris-rich-tooltip[data-variant=primary]{--solaris-tooltip-fg: white;--solaris-tooltip-bg: var(--solaris-color-primary);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-primary) 75%, white)}.solaris-rich-tooltip__content{z-index:1;position:relative;min-inline-size:0}.solaris-rich-tooltip__arrow{z-index:0;position:absolute;transform:rotate(45deg);background:var(--solaris-tooltip-bg);block-size:var(--solaris-tooltip-arrow-size);inline-size:var(--solaris-tooltip-arrow-size);border:1px solid var(--solaris-tooltip-border)}.solaris-rich-tooltip[data-position=top] .solaris-rich-tooltip__arrow{inset-inline-start:50%;border-block-start-color:transparent;border-inline-start-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-end:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-rich-tooltip[data-position=bottom] .solaris-rich-tooltip__arrow{inset-inline-start:50%;border-block-end-color:transparent;border-inline-end-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-rich-tooltip[data-position=right] .solaris-rich-tooltip__arrow{inset-block-start:50%;border-inline-end-color:transparent;border-block-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-rich-tooltip[data-position=left] .solaris-rich-tooltip__arrow{inset-block-start:50%;border-block-end-color:transparent;border-inline-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-end:calc(var(--solaris-tooltip-arrow-size) / -2)}@keyframes solaris-rich-tooltip-in{0%{opacity:0;filter:blur(.1rem);transform:scale(.98)}to{opacity:1;filter:blur(0);transform:scale(1)}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1671
+ }
1672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRichTooltipPanel, decorators: [{
1673
+ type: Component,
1674
+ args: [{ selector: 'solaris-rich-tooltip-panel', standalone: true, imports: [
1675
+ NgTemplateOutlet
1676
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"solaris-rich-tooltip\" [attr.data-position]=\"position()\" [attr.data-variant]=\"variant()\"\r\n [attr.data-size]=\"size()\" role=\"tooltip\">\r\n <div class=\"solaris-rich-tooltip__content\">\r\n @if (template()) {\r\n <ng-container [ngTemplateOutlet]=\"template()\"></ng-container>\r\n }\r\n </div>\r\n\r\n <span class=\"solaris-rich-tooltip__arrow\" aria-hidden=\"true\"></span>\r\n</div>\r\n", styles: [":host{display:block;inline-size:max-content;max-inline-size:max-content}.solaris-rich-tooltip{--solaris-tooltip-padding-x: 1rem;--solaris-tooltip-padding-y: 1rem;--solaris-tooltip-max-width: 32rem;--solaris-tooltip-arrow-size: .8rem;--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-shadow: var(--solaris-shadow-md);--solaris-tooltip-radius: var(--solaris-radius-md);--solaris-tooltip-bg: var(--solaris-color-surface-2);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 75%, transparent);text-align:start;isolation:isolate;position:relative;pointer-events:auto;font-size:var(--solaris-fs-13);color:var(--solaris-tooltip-fg);background:var(--solaris-tooltip-bg);line-height:var(--solaris-lh-normal);box-shadow:var(--solaris-tooltip-shadow);border-radius:var(--solaris-tooltip-radius);animation:solaris-rich-tooltip-in .12s ease;border:1px solid var(--solaris-tooltip-border);max-inline-size:var(--solaris-tooltip-max-width);padding:var(--solaris-tooltip-padding-y) var(--solaris-tooltip-padding-x)}.solaris-rich-tooltip[data-size=sm]{--solaris-tooltip-max-width: 24rem;--solaris-tooltip-padding-y: .75rem;--solaris-tooltip-padding-x: .85rem;--solaris-tooltip-radius: var(--solaris-radius-sm)}.solaris-rich-tooltip[data-size=md]{--solaris-tooltip-max-width: 32rem}.solaris-rich-tooltip[data-size=lg]{--solaris-tooltip-max-width: 42rem;--solaris-tooltip-padding-y: 1.2rem;--solaris-tooltip-padding-x: 1.2rem;--solaris-tooltip-radius: var(--solaris-radius-lg)}.solaris-rich-tooltip[data-variant=default]{--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-bg: var(--solaris-color-surface);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent)}.solaris-rich-tooltip[data-variant=inverse]{--solaris-tooltip-fg: var(--solaris-color-surface);--solaris-tooltip-bg: color-mix(in srgb, var(--solaris-color-text) 92%, black);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-tooltip-bg) 82%, white)}.solaris-rich-tooltip[data-variant=primary]{--solaris-tooltip-fg: white;--solaris-tooltip-bg: var(--solaris-color-primary);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-primary) 75%, white)}.solaris-rich-tooltip__content{z-index:1;position:relative;min-inline-size:0}.solaris-rich-tooltip__arrow{z-index:0;position:absolute;transform:rotate(45deg);background:var(--solaris-tooltip-bg);block-size:var(--solaris-tooltip-arrow-size);inline-size:var(--solaris-tooltip-arrow-size);border:1px solid var(--solaris-tooltip-border)}.solaris-rich-tooltip[data-position=top] .solaris-rich-tooltip__arrow{inset-inline-start:50%;border-block-start-color:transparent;border-inline-start-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-end:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-rich-tooltip[data-position=bottom] .solaris-rich-tooltip__arrow{inset-inline-start:50%;border-block-end-color:transparent;border-inline-end-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-rich-tooltip[data-position=right] .solaris-rich-tooltip__arrow{inset-block-start:50%;border-inline-end-color:transparent;border-block-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-rich-tooltip[data-position=left] .solaris-rich-tooltip__arrow{inset-block-start:50%;border-block-end-color:transparent;border-inline-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-end:calc(var(--solaris-tooltip-arrow-size) / -2)}@keyframes solaris-rich-tooltip-in{0%{opacity:0;filter:blur(.1rem);transform:scale(.98)}to{opacity:1;filter:blur(0);transform:scale(1)}}\n"] }]
1677
+ }], propDecorators: { template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
1678
+
1679
+ class SolarisRichTooltipDirective {
1680
+ elementRef = inject(ElementRef);
1681
+ renderer = inject(Renderer2);
1682
+ floatingOverlay = inject(SolarisFloatingOverlayService);
1683
+ template = input(null, { ...(ngDevMode ? { debugName: "template" } : {}), alias: 'solaris-rich-tooltip' });
1684
+ tooltipPosition = input('top', { ...(ngDevMode ? { debugName: "tooltipPosition" } : {}), alias: 'tooltip-position' });
1685
+ tooltipVariant = input('inverse', { ...(ngDevMode ? { debugName: "tooltipVariant" } : {}), alias: 'tooltip-variant' });
1686
+ tooltipSize = input('md', { ...(ngDevMode ? { debugName: "tooltipSize" } : {}), alias: 'tooltip-size' });
1687
+ tooltipDisabled = input(false, { ...(ngDevMode ? { debugName: "tooltipDisabled" } : {}), alias: 'tooltip-disabled' });
1688
+ tooltipShowDelay = input(300, { ...(ngDevMode ? { debugName: "tooltipShowDelay" } : {}), alias: 'tooltip-show-delay' });
1689
+ tooltipHideDelay = input(120, { ...(ngDevMode ? { debugName: "tooltipHideDelay" } : {}), alias: 'tooltip-hide-delay' });
1690
+ tooltipOffset = input(8, { ...(ngDevMode ? { debugName: "tooltipOffset" } : {}), alias: 'tooltip-offset' });
1691
+ tooltipAutoFlip = input(true, { ...(ngDevMode ? { debugName: "tooltipAutoFlip" } : {}), alias: 'tooltip-auto-flip' });
1692
+ tooltipAutoShift = input(true, { ...(ngDevMode ? { debugName: "tooltipAutoShift" } : {}), alias: 'tooltip-auto-shift' });
1693
+ tooltipViewportPadding = input(8, { ...(ngDevMode ? { debugName: "tooltipViewportPadding" } : {}), alias: 'tooltip-viewport-padding' });
1694
+ overlayRef;
1695
+ showTimer = 0;
1696
+ hideTimer = 0;
1697
+ raf = 0;
1698
+ isTriggerHovered = false;
1699
+ isPanelHovered = false;
1700
+ hasFocusInside = false;
1701
+ cleanups = [];
1702
+ constructor() {
1703
+ const host = this.elementRef.nativeElement;
1704
+ this.cleanups.push(this.renderer.listen(host, 'mouseenter', () => {
1705
+ this.isTriggerHovered = true;
1706
+ this.scheduleShow();
1707
+ }), this.renderer.listen(host, 'mouseleave', () => {
1708
+ this.isTriggerHovered = false;
1709
+ this.scheduleHideIfSafe();
1710
+ }), this.renderer.listen(host, 'focusin', () => {
1711
+ this.hasFocusInside = true;
1712
+ this.scheduleShow();
1713
+ }), this.renderer.listen(host, 'focusout', () => {
1714
+ this.hasFocusInside = false;
1715
+ this.scheduleHideIfSafe();
1716
+ }), this.renderer.listen(host, 'keydown', (event) => {
1717
+ if (event.key === 'Escape') {
1718
+ this.hide();
1719
+ }
1720
+ }), this.renderer.listen(globalThis, 'resize', () => this.scheduleReposition()), this.renderer.listen(globalThis, 'scroll', () => this.scheduleReposition()), this.renderer.listen(document, 'keydown', (event) => {
1721
+ if (event.key === 'Escape') {
1722
+ this.hide();
1723
+ }
1724
+ }));
1725
+ effect(() => {
1726
+ if (!this.overlayRef)
1727
+ return;
1728
+ this.applyPanelInputs();
1729
+ this.scheduleReposition();
1730
+ });
1731
+ }
1732
+ scheduleShow() {
1733
+ if (this.tooltipDisabled())
1734
+ return;
1735
+ if (!this.template())
1736
+ return;
1737
+ globalThis.clearTimeout(this.hideTimer);
1738
+ globalThis.clearTimeout(this.showTimer);
1739
+ this.showTimer = globalThis.setTimeout(() => {
1740
+ this.show();
1741
+ }, this.tooltipShowDelay());
1742
+ }
1743
+ scheduleHideIfSafe() {
1744
+ globalThis.clearTimeout(this.showTimer);
1745
+ globalThis.clearTimeout(this.hideTimer);
1746
+ this.hideTimer = globalThis.setTimeout(() => {
1747
+ if (!this.isTriggerHovered && !this.isPanelHovered && !this.hasFocusInside) {
1748
+ this.hide();
1749
+ }
1750
+ }, this.tooltipHideDelay());
1751
+ }
1752
+ show() {
1753
+ if (this.overlayRef || this.tooltipDisabled())
1754
+ return;
1755
+ if (!this.template())
1756
+ return;
1757
+ this.overlayRef = this.floatingOverlay.create(SolarisRichTooltipPanel, {
1758
+ idPrefix: 'solaris-rich-tooltip',
1759
+ zIndex: 'var(--solaris-z-tooltip, 1200)',
1760
+ pointerEvents: 'auto',
1761
+ });
1762
+ this.applyPanelInputs();
1763
+ this.bindPanelInteractions();
1764
+ this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', this.overlayRef.id);
1765
+ requestAnimationFrame(() => this.reposition());
1766
+ }
1767
+ bindPanelInteractions() {
1768
+ if (!this.overlayRef)
1769
+ return;
1770
+ const panel = this.overlayRef.hostElement;
1771
+ this.cleanups.push(this.renderer.listen(panel, 'mouseenter', () => {
1772
+ this.isPanelHovered = true;
1773
+ globalThis.clearTimeout(this.hideTimer);
1774
+ }), this.renderer.listen(panel, 'mouseleave', () => {
1775
+ this.isPanelHovered = false;
1776
+ this.scheduleHideIfSafe();
1777
+ }), this.renderer.listen(panel, 'focusin', () => {
1778
+ this.hasFocusInside = true;
1779
+ globalThis.clearTimeout(this.hideTimer);
1780
+ }), this.renderer.listen(panel, 'focusout', () => {
1781
+ this.hasFocusInside = false;
1782
+ this.scheduleHideIfSafe();
1783
+ }));
1784
+ }
1785
+ hide() {
1786
+ this.floatingOverlay.clearFloatingTimers(this.showTimer, this.hideTimer, this.raf);
1787
+ this.raf = 0;
1788
+ this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');
1789
+ this.floatingOverlay.destroyOverlay(this.overlayRef);
1790
+ this.overlayRef = undefined;
1791
+ this.isPanelHovered = false;
1792
+ this.hasFocusInside = false;
1793
+ }
1794
+ applyPanelInputs() {
1795
+ if (!this.overlayRef)
1796
+ return;
1797
+ const panel = this.overlayRef.componentRef;
1798
+ panel.setInput('template', this.template());
1799
+ panel.setInput('position', this.tooltipPosition());
1800
+ panel.setInput('variant', this.tooltipVariant());
1801
+ panel.setInput('size', this.tooltipSize());
1802
+ panel.changeDetectorRef.detectChanges();
1803
+ }
1804
+ scheduleReposition() {
1805
+ if (!this.overlayRef)
1806
+ return;
1807
+ if (this.raf)
1808
+ return;
1809
+ this.raf = requestAnimationFrame(() => {
1810
+ this.raf = 0;
1811
+ this.reposition();
1812
+ });
1813
+ }
1814
+ reposition() {
1815
+ if (!this.overlayRef)
1816
+ return;
1817
+ repositionTooltipOverlay(this.elementRef, this.overlayRef, {
1818
+ position: this.tooltipPosition(),
1819
+ offset: this.tooltipOffset(),
1820
+ viewportPadding: this.tooltipViewportPadding(),
1821
+ autoFlip: this.tooltipAutoFlip(),
1822
+ autoShift: this.tooltipAutoShift(),
1823
+ }, (position) => {
1824
+ this.overlayRef?.componentRef.setInput('position', position);
1825
+ this.overlayRef?.componentRef.changeDetectorRef.detectChanges();
1826
+ });
1827
+ }
1828
+ ngOnDestroy() {
1829
+ this.hide();
1830
+ for (const cleanup of this.cleanups) {
1831
+ cleanup();
1832
+ }
1833
+ }
1834
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRichTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1835
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: SolarisRichTooltipDirective, isStandalone: true, selector: "[solaris-rich-tooltip]", inputs: { template: { classPropertyName: "template", publicName: "solaris-rich-tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltip-position", isSignal: true, isRequired: false, transformFunction: null }, tooltipVariant: { classPropertyName: "tooltipVariant", publicName: "tooltip-variant", isSignal: true, isRequired: false, transformFunction: null }, tooltipSize: { classPropertyName: "tooltipSize", publicName: "tooltip-size", isSignal: true, isRequired: false, transformFunction: null }, tooltipDisabled: { classPropertyName: "tooltipDisabled", publicName: "tooltip-disabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipShowDelay: { classPropertyName: "tooltipShowDelay", publicName: "tooltip-show-delay", isSignal: true, isRequired: false, transformFunction: null }, tooltipHideDelay: { classPropertyName: "tooltipHideDelay", publicName: "tooltip-hide-delay", isSignal: true, isRequired: false, transformFunction: null }, tooltipOffset: { classPropertyName: "tooltipOffset", publicName: "tooltip-offset", isSignal: true, isRequired: false, transformFunction: null }, tooltipAutoFlip: { classPropertyName: "tooltipAutoFlip", publicName: "tooltip-auto-flip", isSignal: true, isRequired: false, transformFunction: null }, tooltipAutoShift: { classPropertyName: "tooltipAutoShift", publicName: "tooltip-auto-shift", isSignal: true, isRequired: false, transformFunction: null }, tooltipViewportPadding: { classPropertyName: "tooltipViewportPadding", publicName: "tooltip-viewport-padding", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
1836
+ }
1837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRichTooltipDirective, decorators: [{
1838
+ type: Directive,
1839
+ args: [{
1840
+ selector: '[solaris-rich-tooltip]',
1841
+ standalone: true,
1842
+ }]
1843
+ }], ctorParameters: () => [], propDecorators: { template: [{ type: i0.Input, args: [{ isSignal: true, alias: "solaris-rich-tooltip", required: false }] }], tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-position", required: false }] }], tooltipVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-variant", required: false }] }], tooltipSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-size", required: false }] }], tooltipDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-disabled", required: false }] }], tooltipShowDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-show-delay", required: false }] }], tooltipHideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-hide-delay", required: false }] }], tooltipOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-offset", required: false }] }], tooltipAutoFlip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-auto-flip", required: false }] }], tooltipAutoShift: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-auto-shift", required: false }] }], tooltipViewportPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-viewport-padding", required: false }] }] } });
1844
+
1845
+ const PRESET_COLORS$4 = new Set([
1513
1846
  'primary',
1514
1847
  'surface',
1515
1848
  'success',
@@ -1518,7 +1851,7 @@ const PRESET_COLORS$2 = new Set([
1518
1851
  'info',
1519
1852
  'gradient',
1520
1853
  ]);
1521
- function resolveRadius$1(v) {
1854
+ function resolveRadius$2(v) {
1522
1855
  const s = String(v).trim();
1523
1856
  switch (s) {
1524
1857
  case 'none':
@@ -1561,7 +1894,7 @@ class ButtonDirective {
1561
1894
  if (v == null || String(v).trim() === '')
1562
1895
  return;
1563
1896
  const value = String(v).trim();
1564
- if (PRESET_COLORS$2.has(value)) {
1897
+ if (PRESET_COLORS$4.has(value)) {
1565
1898
  this._color.set(value);
1566
1899
  this._customColor.set(null);
1567
1900
  }
@@ -1635,7 +1968,7 @@ class ButtonDirective {
1635
1968
  return this._badgeOverlay() ? 'true' : null;
1636
1969
  }
1637
1970
  get buttonRadius() {
1638
- return this._radius() ? resolveRadius$1(this._radius()) : null;
1971
+ return this._radius() ? resolveRadius$2(this._radius()) : null;
1639
1972
  }
1640
1973
  onClick(ev) {
1641
1974
  if (!this.isAnchor())
@@ -2233,7 +2566,161 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
2233
2566
  args: [{ selector: 'solaris-notification-host', standalone: true, imports: [SolarisNotificationItemComponent, SolarisNotificationCenterComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (position of positions; track position) {\r\n <section class=\"snh__stack\" [attr.data-position]=\"position\">\r\n @for (item of visibleByPosition(position); track item.id) {\r\n <solaris-notification-item [item]=\"item\" mode=\"toast\"/>\r\n }\r\n </section>\r\n}\r\n\r\n@if (withCenter()) { <solaris-notification-center/> }\r\n", styles: [":host{inset:0;position:fixed;pointer-events:none;z-index:var(--solaris-z-toast)}.snh__stack{display:flex;position:fixed;flex-direction:column;gap:var(--solaris-space-3);padding:var(--solaris-space-4);max-width:calc(100vw - var(--solaris-space-4) * 2)}.snh__stack[data-position=top-right]{top:0;right:0;align-items:flex-end}.snh__stack[data-position=top-left]{top:0;left:0;align-items:flex-start}.snh__stack[data-position=top-center]{top:0;left:50%;align-items:center;transform:translate(-50%)}.snh__stack[data-position=bottom-right]{right:0;bottom:0;align-items:flex-end}.snh__stack[data-position=bottom-left]{left:0;bottom:0;align-items:flex-start}.snh__stack[data-position=bottom-center]{left:50%;bottom:0;align-items:center;transform:translate(-50%)}\n"] }]
2234
2567
  }], propDecorators: { withCenter: [{ type: i0.Input, args: [{ isSignal: true, alias: "withCenter", required: false }] }] } });
2235
2568
 
2236
- const PRESET_COLORS$1 = ['primary', 'success', 'warning', 'error', 'surface'];
2569
+ class SolarisTooltipPanel {
2570
+ text = input('', ...(ngDevMode ? [{ debugName: "text" }] : []));
2571
+ prefixIcon = input('', ...(ngDevMode ? [{ debugName: "prefixIcon" }] : []));
2572
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
2573
+ position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : []));
2574
+ variant = input('inverse', ...(ngDevMode ? [{ debugName: "variant" }] : []));
2575
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisTooltipPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
2576
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisTooltipPanel, isStandalone: true, selector: "solaris-tooltip-panel", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"solaris-tooltip\" [attr.data-position]=\"position()\" [attr.data-variant]=\"variant()\"\r\n [attr.data-size]=\"size()\" role=\"tooltip\">\r\n @if (prefixIcon()) {\r\n <span class=\"solaris-tooltip__prefix\" aria-hidden=\"true\">\r\n <i [class]=\"prefixIcon()\"></i>\r\n </span>\r\n }\r\n\r\n <span class=\"solaris-tooltip__content\">\r\n {{ text() }}\r\n </span>\r\n\r\n <span class=\"solaris-tooltip__arrow\" aria-hidden=\"true\"></span>\r\n</div>\r\n", styles: [":host{display:block;isolation:isolate;pointer-events:none;inline-size:max-content;max-inline-size:max-content}.solaris-tooltip{--solaris-tooltip-padding-x: 1rem;--solaris-tooltip-max-width: 28rem;--solaris-tooltip-arrow-size: .8rem;--solaris-tooltip-padding-y: .75rem;--solaris-tooltip-gap: var(--solaris-space-2);--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-font-size: var(--solaris-fs-12);--solaris-tooltip-shadow: var(--solaris-shadow-md);--solaris-tooltip-radius: var(--solaris-radius-md);--solaris-tooltip-bg: var(--solaris-color-surface);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 75%, transparent);position:relative;display:inline-flex;align-items:center;gap:var(--solaris-tooltip-gap);max-inline-size:var(--solaris-tooltip-max-width);padding:var(--solaris-tooltip-padding-y) var(--solaris-tooltip-padding-x);color:var(--solaris-tooltip-fg);background:var(--solaris-tooltip-bg);box-shadow:var(--solaris-tooltip-shadow);border-radius:var(--solaris-tooltip-radius);border:1px solid var(--solaris-tooltip-border);font-weight:500;text-align:start;white-space:normal;line-height:var(--solaris-lh-normal);font-size:var(--solaris-tooltip-font-size);pointer-events:none;animation:solaris-tooltip-in .12s ease}.solaris-tooltip[data-size=sm]{--solaris-tooltip-max-width: 22rem;--solaris-tooltip-padding-y: .55rem;--solaris-tooltip-padding-x: .8rem;--solaris-tooltip-font-size: var(--solaris-fs-11);--solaris-tooltip-radius: var(--solaris-radius-sm)}.solaris-tooltip[data-size=md]{--solaris-tooltip-max-width: 28rem;--solaris-tooltip-padding-y: .75rem;--solaris-tooltip-padding-x: 1rem;--solaris-tooltip-font-size: var(--solaris-fs-12)}.solaris-tooltip[data-variant=default]{--solaris-tooltip-bg: var(--solaris-color-surface);--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent)}.solaris-tooltip[data-variant=inverse]{--solaris-tooltip-fg: var(--solaris-color-surface);--solaris-tooltip-bg: color-mix(in srgb, var(--solaris-color-text) 92%, black);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-tooltip-bg) 82%, white)}.solaris-tooltip[data-variant=primary]{--solaris-tooltip-fg: white;--solaris-tooltip-bg: var(--solaris-color-primary);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-primary) 75%, white)}.solaris-tooltip__prefix{opacity:.9;flex:0 0 auto;block-size:1.6rem;inline-size:1.6rem;place-items:center;color:currentColor;display:inline-grid}.solaris-tooltip__prefix i{display:block;line-height:1;font-size:var(--solaris-fs-16)}.solaris-tooltip__content{min-inline-size:0;overflow-wrap:anywhere}.solaris-tooltip__arrow{position:absolute;inline-size:var(--solaris-tooltip-arrow-size);block-size:var(--solaris-tooltip-arrow-size);background:var(--solaris-tooltip-bg);border:1px solid var(--solaris-tooltip-border);transform:rotate(45deg);z-index:0}.solaris-tooltip__content,.solaris-tooltip__prefix{position:relative;z-index:1}.solaris-tooltip[data-position=top] .solaris-tooltip__arrow{inset-inline-start:50%;border-block-start-color:transparent;border-inline-start-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-end:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-tooltip[data-position=bottom] .solaris-tooltip__arrow{inset-inline-start:50%;border-block-end-color:transparent;border-inline-end-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-tooltip[data-position=right] .solaris-tooltip__arrow{inset-block-start:50%;border-inline-end-color:transparent;border-block-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-tooltip[data-position=left] .solaris-tooltip__arrow{inset-block-start:50%;border-block-end-color:transparent;border-inline-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-end:calc(var(--solaris-tooltip-arrow-size) / -2)}@keyframes solaris-tooltip-in{0%{opacity:0;filter:blur(.1rem);transform:scale(.98)}to{opacity:1;filter:blur(0);transform:scale(1)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2577
+ }
2578
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisTooltipPanel, decorators: [{
2579
+ type: Component,
2580
+ args: [{ selector: 'solaris-tooltip-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"solaris-tooltip\" [attr.data-position]=\"position()\" [attr.data-variant]=\"variant()\"\r\n [attr.data-size]=\"size()\" role=\"tooltip\">\r\n @if (prefixIcon()) {\r\n <span class=\"solaris-tooltip__prefix\" aria-hidden=\"true\">\r\n <i [class]=\"prefixIcon()\"></i>\r\n </span>\r\n }\r\n\r\n <span class=\"solaris-tooltip__content\">\r\n {{ text() }}\r\n </span>\r\n\r\n <span class=\"solaris-tooltip__arrow\" aria-hidden=\"true\"></span>\r\n</div>\r\n", styles: [":host{display:block;isolation:isolate;pointer-events:none;inline-size:max-content;max-inline-size:max-content}.solaris-tooltip{--solaris-tooltip-padding-x: 1rem;--solaris-tooltip-max-width: 28rem;--solaris-tooltip-arrow-size: .8rem;--solaris-tooltip-padding-y: .75rem;--solaris-tooltip-gap: var(--solaris-space-2);--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-font-size: var(--solaris-fs-12);--solaris-tooltip-shadow: var(--solaris-shadow-md);--solaris-tooltip-radius: var(--solaris-radius-md);--solaris-tooltip-bg: var(--solaris-color-surface);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 75%, transparent);position:relative;display:inline-flex;align-items:center;gap:var(--solaris-tooltip-gap);max-inline-size:var(--solaris-tooltip-max-width);padding:var(--solaris-tooltip-padding-y) var(--solaris-tooltip-padding-x);color:var(--solaris-tooltip-fg);background:var(--solaris-tooltip-bg);box-shadow:var(--solaris-tooltip-shadow);border-radius:var(--solaris-tooltip-radius);border:1px solid var(--solaris-tooltip-border);font-weight:500;text-align:start;white-space:normal;line-height:var(--solaris-lh-normal);font-size:var(--solaris-tooltip-font-size);pointer-events:none;animation:solaris-tooltip-in .12s ease}.solaris-tooltip[data-size=sm]{--solaris-tooltip-max-width: 22rem;--solaris-tooltip-padding-y: .55rem;--solaris-tooltip-padding-x: .8rem;--solaris-tooltip-font-size: var(--solaris-fs-11);--solaris-tooltip-radius: var(--solaris-radius-sm)}.solaris-tooltip[data-size=md]{--solaris-tooltip-max-width: 28rem;--solaris-tooltip-padding-y: .75rem;--solaris-tooltip-padding-x: 1rem;--solaris-tooltip-font-size: var(--solaris-fs-12)}.solaris-tooltip[data-variant=default]{--solaris-tooltip-bg: var(--solaris-color-surface);--solaris-tooltip-fg: var(--solaris-color-text);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent)}.solaris-tooltip[data-variant=inverse]{--solaris-tooltip-fg: var(--solaris-color-surface);--solaris-tooltip-bg: color-mix(in srgb, var(--solaris-color-text) 92%, black);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-tooltip-bg) 82%, white)}.solaris-tooltip[data-variant=primary]{--solaris-tooltip-fg: white;--solaris-tooltip-bg: var(--solaris-color-primary);--solaris-tooltip-border: color-mix(in srgb, var(--solaris-color-primary) 75%, white)}.solaris-tooltip__prefix{opacity:.9;flex:0 0 auto;block-size:1.6rem;inline-size:1.6rem;place-items:center;color:currentColor;display:inline-grid}.solaris-tooltip__prefix i{display:block;line-height:1;font-size:var(--solaris-fs-16)}.solaris-tooltip__content{min-inline-size:0;overflow-wrap:anywhere}.solaris-tooltip__arrow{position:absolute;inline-size:var(--solaris-tooltip-arrow-size);block-size:var(--solaris-tooltip-arrow-size);background:var(--solaris-tooltip-bg);border:1px solid var(--solaris-tooltip-border);transform:rotate(45deg);z-index:0}.solaris-tooltip__content,.solaris-tooltip__prefix{position:relative;z-index:1}.solaris-tooltip[data-position=top] .solaris-tooltip__arrow{inset-inline-start:50%;border-block-start-color:transparent;border-inline-start-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-end:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-tooltip[data-position=bottom] .solaris-tooltip__arrow{inset-inline-start:50%;border-block-end-color:transparent;border-inline-end-color:transparent;transform:translate(-50%) rotate(45deg);inset-block-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-tooltip[data-position=right] .solaris-tooltip__arrow{inset-block-start:50%;border-inline-end-color:transparent;border-block-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-start:calc(var(--solaris-tooltip-arrow-size) / -2)}.solaris-tooltip[data-position=left] .solaris-tooltip__arrow{inset-block-start:50%;border-block-end-color:transparent;border-inline-start-color:transparent;transform:translateY(-50%) rotate(45deg);inset-inline-end:calc(var(--solaris-tooltip-arrow-size) / -2)}@keyframes solaris-tooltip-in{0%{opacity:0;filter:blur(.1rem);transform:scale(.98)}to{opacity:1;filter:blur(0);transform:scale(1)}}\n"] }]
2581
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], prefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixIcon", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
2582
+
2583
+ class SolarisTooltipDirective {
2584
+ elementRef = inject(ElementRef);
2585
+ floatingOverlay = inject(SolarisFloatingOverlayService);
2586
+ renderer = inject(Renderer2);
2587
+ text = input('', { ...(ngDevMode ? { debugName: "text" } : {}), alias: 'solaris-tooltip' });
2588
+ tooltipPosition = input('top', { ...(ngDevMode ? { debugName: "tooltipPosition" } : {}), alias: 'tooltip-position' });
2589
+ tooltipVariant = input('inverse', { ...(ngDevMode ? { debugName: "tooltipVariant" } : {}), alias: 'tooltip-variant' });
2590
+ tooltipSize = input('md', { ...(ngDevMode ? { debugName: "tooltipSize" } : {}), alias: 'tooltip-size' });
2591
+ tooltipPrefixIcon = input('', { ...(ngDevMode ? { debugName: "tooltipPrefixIcon" } : {}), alias: 'tooltip-prefix-icon' });
2592
+ tooltipDisabled = input(false, { ...(ngDevMode ? { debugName: "tooltipDisabled" } : {}), alias: 'tooltip-disabled' });
2593
+ tooltipShowDelay = input(300, { ...(ngDevMode ? { debugName: "tooltipShowDelay" } : {}), alias: 'tooltip-show-delay' });
2594
+ tooltipHideDelay = input(80, { ...(ngDevMode ? { debugName: "tooltipHideDelay" } : {}), alias: 'tooltip-hide-delay' });
2595
+ tooltipOffset = input(8, { ...(ngDevMode ? { debugName: "tooltipOffset" } : {}), alias: 'tooltip-offset' });
2596
+ tooltipAutoFlip = input(true, { ...(ngDevMode ? { debugName: "tooltipAutoFlip" } : {}), alias: 'tooltip-auto-flip' });
2597
+ tooltipAutoShift = input(true, { ...(ngDevMode ? { debugName: "tooltipAutoShift" } : {}), alias: 'tooltip-auto-shift' });
2598
+ tooltipViewportPadding = input(8, { ...(ngDevMode ? { debugName: "tooltipViewportPadding" } : {}), alias: 'tooltip-viewport-padding' });
2599
+ tooltipKey = input('', { ...(ngDevMode ? { debugName: "tooltipKey" } : {}), alias: 'tooltip-key' });
2600
+ tooltipParams = input(undefined, { ...(ngDevMode ? { debugName: "tooltipParams" } : {}), alias: 'tooltip-params' });
2601
+ overlayRef;
2602
+ showTimer = 0;
2603
+ hideTimer = 0;
2604
+ raf = 0;
2605
+ cleanups = [];
2606
+ resolvedText = computed(() => {
2607
+ const key = this.tooltipKey().trim();
2608
+ if (key) {
2609
+ return key;
2610
+ }
2611
+ return this.text().trim();
2612
+ }, ...(ngDevMode ? [{ debugName: "resolvedText" }] : []));
2613
+ constructor() {
2614
+ const host = this.elementRef.nativeElement;
2615
+ this.cleanups.push(this.renderer.listen(host, 'mouseenter', () => this.scheduleShow()), this.renderer.listen(host, 'mouseleave', () => this.scheduleHide()), this.renderer.listen(host, 'focusin', () => this.scheduleShow()), this.renderer.listen(host, 'focusout', () => this.scheduleHide()), this.renderer.listen(host, 'keydown', (event) => {
2616
+ if (event.key === 'Escape') {
2617
+ this.hide();
2618
+ }
2619
+ }), this.renderer.listen(globalThis, 'resize', () => this.scheduleReposition()), this.renderer.listen(globalThis, 'scroll', () => this.scheduleReposition()));
2620
+ effect(() => {
2621
+ if (!this.overlayRef)
2622
+ return;
2623
+ this.applyPanelInputs();
2624
+ this.scheduleReposition();
2625
+ });
2626
+ }
2627
+ scheduleShow() {
2628
+ if (this.tooltipDisabled())
2629
+ return;
2630
+ if (!this.resolvedText())
2631
+ return;
2632
+ globalThis.clearTimeout(this.hideTimer);
2633
+ globalThis.clearTimeout(this.showTimer);
2634
+ this.showTimer = globalThis.setTimeout(() => {
2635
+ this.show();
2636
+ }, this.tooltipShowDelay());
2637
+ }
2638
+ scheduleHide() {
2639
+ globalThis.clearTimeout(this.showTimer);
2640
+ globalThis.clearTimeout(this.hideTimer);
2641
+ this.hideTimer = globalThis.setTimeout(() => {
2642
+ this.hide();
2643
+ }, this.tooltipHideDelay());
2644
+ }
2645
+ show() {
2646
+ if (this.overlayRef || this.tooltipDisabled())
2647
+ return;
2648
+ if (!this.resolvedText())
2649
+ return;
2650
+ this.overlayRef = this.floatingOverlay.create(SolarisTooltipPanel, {
2651
+ idPrefix: 'solaris-tooltip',
2652
+ zIndex: 'var(--solaris-z-tooltip, 1200)',
2653
+ pointerEvents: 'none',
2654
+ });
2655
+ this.applyPanelInputs();
2656
+ this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', this.overlayRef.id);
2657
+ requestAnimationFrame(() => this.reposition());
2658
+ }
2659
+ hide() {
2660
+ this.floatingOverlay.clearFloatingTimers(this.showTimer, this.hideTimer, this.raf);
2661
+ this.raf = 0;
2662
+ this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');
2663
+ this.floatingOverlay.destroyOverlay(this.overlayRef);
2664
+ this.overlayRef = undefined;
2665
+ }
2666
+ applyPanelInputs() {
2667
+ if (!this.overlayRef)
2668
+ return;
2669
+ const panel = this.overlayRef.componentRef;
2670
+ panel.setInput('text', this.resolvedText());
2671
+ panel.setInput('position', this.tooltipPosition());
2672
+ panel.setInput('variant', this.tooltipVariant());
2673
+ panel.setInput('size', this.tooltipSize());
2674
+ panel.setInput('prefixIcon', this.tooltipPrefixIcon());
2675
+ panel.changeDetectorRef.detectChanges();
2676
+ }
2677
+ scheduleReposition() {
2678
+ if (!this.overlayRef)
2679
+ return;
2680
+ if (this.raf)
2681
+ return;
2682
+ this.raf = requestAnimationFrame(() => {
2683
+ this.raf = 0;
2684
+ this.reposition();
2685
+ });
2686
+ }
2687
+ reposition() {
2688
+ if (!this.overlayRef)
2689
+ return;
2690
+ this.floatingOverlay.reposition({
2691
+ anchor: this.elementRef.nativeElement,
2692
+ overlayRef: this.overlayRef,
2693
+ options: {
2694
+ position: this.tooltipPosition(),
2695
+ offset: this.tooltipOffset(),
2696
+ viewportPadding: this.tooltipViewportPadding(),
2697
+ autoFlip: this.tooltipAutoFlip(),
2698
+ autoShift: this.tooltipAutoShift(),
2699
+ },
2700
+ setAppliedPosition: (position) => {
2701
+ this.overlayRef?.componentRef.setInput('position', position);
2702
+ this.overlayRef?.componentRef.changeDetectorRef.detectChanges();
2703
+ },
2704
+ });
2705
+ }
2706
+ ngOnDestroy() {
2707
+ this.hide();
2708
+ for (const cleanup of this.cleanups) {
2709
+ cleanup();
2710
+ }
2711
+ }
2712
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2713
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: SolarisTooltipDirective, isStandalone: true, selector: "[solaris-tooltip]", inputs: { text: { classPropertyName: "text", publicName: "solaris-tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltip-position", isSignal: true, isRequired: false, transformFunction: null }, tooltipVariant: { classPropertyName: "tooltipVariant", publicName: "tooltip-variant", isSignal: true, isRequired: false, transformFunction: null }, tooltipSize: { classPropertyName: "tooltipSize", publicName: "tooltip-size", isSignal: true, isRequired: false, transformFunction: null }, tooltipPrefixIcon: { classPropertyName: "tooltipPrefixIcon", publicName: "tooltip-prefix-icon", isSignal: true, isRequired: false, transformFunction: null }, tooltipDisabled: { classPropertyName: "tooltipDisabled", publicName: "tooltip-disabled", isSignal: true, isRequired: false, transformFunction: null }, tooltipShowDelay: { classPropertyName: "tooltipShowDelay", publicName: "tooltip-show-delay", isSignal: true, isRequired: false, transformFunction: null }, tooltipHideDelay: { classPropertyName: "tooltipHideDelay", publicName: "tooltip-hide-delay", isSignal: true, isRequired: false, transformFunction: null }, tooltipOffset: { classPropertyName: "tooltipOffset", publicName: "tooltip-offset", isSignal: true, isRequired: false, transformFunction: null }, tooltipAutoFlip: { classPropertyName: "tooltipAutoFlip", publicName: "tooltip-auto-flip", isSignal: true, isRequired: false, transformFunction: null }, tooltipAutoShift: { classPropertyName: "tooltipAutoShift", publicName: "tooltip-auto-shift", isSignal: true, isRequired: false, transformFunction: null }, tooltipViewportPadding: { classPropertyName: "tooltipViewportPadding", publicName: "tooltip-viewport-padding", isSignal: true, isRequired: false, transformFunction: null }, tooltipKey: { classPropertyName: "tooltipKey", publicName: "tooltip-key", isSignal: true, isRequired: false, transformFunction: null }, tooltipParams: { classPropertyName: "tooltipParams", publicName: "tooltip-params", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
2714
+ }
2715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisTooltipDirective, decorators: [{
2716
+ type: Directive,
2717
+ args: [{
2718
+ selector: '[solaris-tooltip]',
2719
+ standalone: true,
2720
+ }]
2721
+ }], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "solaris-tooltip", required: false }] }], tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-position", required: false }] }], tooltipVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-variant", required: false }] }], tooltipSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-size", required: false }] }], tooltipPrefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-prefix-icon", required: false }] }], tooltipDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-disabled", required: false }] }], tooltipShowDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-show-delay", required: false }] }], tooltipHideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-hide-delay", required: false }] }], tooltipOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-offset", required: false }] }], tooltipAutoFlip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-auto-flip", required: false }] }], tooltipAutoShift: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-auto-shift", required: false }] }], tooltipViewportPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-viewport-padding", required: false }] }], tooltipKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-key", required: false }] }], tooltipParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip-params", required: false }] }] } });
2722
+
2723
+ const PRESET_COLORS$3 = ['primary', 'success', 'warning', 'error', 'surface'];
2237
2724
  class SolarisLoading {
2238
2725
  marker = '';
2239
2726
  label;
@@ -2311,7 +2798,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
2311
2798
  args: [{ transform: coerceBoolean$1 }]
2312
2799
  }] } });
2313
2800
  function isPresetColor(v) {
2314
- return PRESET_COLORS$1.includes(v);
2801
+ return PRESET_COLORS$3.includes(v);
2315
2802
  }
2316
2803
  function coerceBoolean$1(v) {
2317
2804
  return v === '' || v === true || v === 'true' || v === 1 || v === '1';
@@ -3173,7 +3660,7 @@ function uniqueId(prefix) {
3173
3660
  return inject(SolarisIdGenerator).next(prefix);
3174
3661
  }
3175
3662
 
3176
- const PRESET_COLORS = new Set(['primary', 'success', 'warning', 'error', 'info']);
3663
+ const PRESET_COLORS$2 = new Set(['primary', 'success', 'warning', 'error', 'info']);
3177
3664
  class SolarisCheckbox {
3178
3665
  indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : []));
3179
3666
  ariaLabel = input(null, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
@@ -3198,7 +3685,7 @@ class SolarisCheckbox {
3198
3685
  const raw = String(this.color() ?? '').trim();
3199
3686
  if (!raw || raw === 'custom')
3200
3687
  return 'custom';
3201
- return PRESET_COLORS.has(raw) ? raw : 'custom';
3688
+ return PRESET_COLORS$2.has(raw) ? raw : 'custom';
3202
3689
  }, ...(ngDevMode ? [{ debugName: "colorKey" }] : []));
3203
3690
  autoId = uniqueId('solaris-checkbox');
3204
3691
  id = computed(() => this.inputId() ?? this.autoId, ...(ngDevMode ? [{ debugName: "id" }] : []));
@@ -3271,7 +3758,7 @@ function resolveColor(v, fallback) {
3271
3758
  const s = v == null ? '' : String(v).trim();
3272
3759
  if (!s || s === 'custom')
3273
3760
  return fallback;
3274
- if (PRESET_COLORS.has(s))
3761
+ if (PRESET_COLORS$2.has(s))
3275
3762
  return `var(--solaris-color-${s})`;
3276
3763
  return s;
3277
3764
  }
@@ -4005,7 +4492,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4005
4492
  args: [SolarisPageHeaderDescriptionDirective]
4006
4493
  }] } });
4007
4494
 
4008
- function resolveRadius(v) {
4495
+ function resolveRadius$1(v) {
4009
4496
  const s = String(v).trim();
4010
4497
  switch (s) {
4011
4498
  case 'none':
@@ -4029,7 +4516,7 @@ class ButtonGroupDirective {
4029
4516
  }
4030
4517
  attr = '';
4031
4518
  get groupRadius() {
4032
- return this._radius ? resolveRadius(this._radius) : null;
4519
+ return this._radius ? resolveRadius$1(this._radius) : null;
4033
4520
  }
4034
4521
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ButtonGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4035
4522
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: ButtonGroupDirective, isStandalone: true, selector: "[solaris-button-group]", inputs: { radius: "radius" }, host: { properties: { "attr.solaris-button-group": "this.attr", "style.--solaris-button-group-radius": "this.groupRadius" } }, ngImport: i0 });
@@ -4050,69 +4537,1726 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4050
4537
  args: ['style.--solaris-button-group-radius']
4051
4538
  }] } });
4052
4539
 
4053
- function sanitizePhoneInput(v) {
4054
- let s = (v ?? '').replace(/[^\d+\-\s().]/g, '');
4055
- s = s.replace(/\+/g, (_m, offset) => (offset === 0 ? '+' : ''));
4056
- return s;
4057
- }
4058
- function insertAtCursor(input, text) {
4059
- const start = input.selectionStart ?? input.value.length;
4060
- const end = input.selectionEnd ?? input.value.length;
4061
- input.value = input.value.slice(0, start) + text + input.value.slice(end);
4062
- const pos = start + text.length;
4063
- input.setSelectionRange(pos, pos);
4064
- }
4065
- function enforceMaxDigitsInPlace(input, maxDigits) {
4066
- if (!maxDigits)
4067
- return;
4068
- const v = input.value ?? '';
4069
- const sanitized = sanitizePhoneInput(v);
4070
- const digits = (sanitized.match(/\d/g) ?? []).length;
4071
- if (digits <= maxDigits) {
4072
- if (sanitized !== v)
4073
- input.value = sanitized;
4074
- return;
4540
+ const SOLARIS_RADIO_GROUP = new InjectionToken('SOLARIS_RADIO_GROUP');
4541
+
4542
+ const PRESET_COLORS$1 = new Set([
4543
+ 'primary',
4544
+ 'success',
4545
+ 'warning',
4546
+ 'error',
4547
+ 'info'
4548
+ ]);
4549
+ class SolarisRadio {
4550
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
4551
+ inputId = input(null, { ...(ngDevMode ? { debugName: "inputId" } : {}), alias: 'id' });
4552
+ inputName = input(null, { ...(ngDevMode ? { debugName: "inputName" } : {}), alias: 'name' });
4553
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
4554
+ variant = input('dot', ...(ngDevMode ? [{ debugName: "variant" }] : []));
4555
+ appearance = input('solid', ...(ngDevMode ? [{ debugName: "appearance" }] : []));
4556
+ color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : []));
4557
+ value = input(true, ...(ngDevMode ? [{ debugName: "value" }] : []));
4558
+ checkedInput = input(false, { ...(ngDevMode ? { debugName: "checkedInput" } : {}), alias: 'checked' });
4559
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), alias: 'disabled' });
4560
+ checkedChange = output();
4561
+ native;
4562
+ group = inject(SOLARIS_RADIO_GROUP, { optional: true });
4563
+ autoId = uniqueId('solaris-radio');
4564
+ autoName = uniqueId('solaris-radio-name');
4565
+ localChecked = signal(false, ...(ngDevMode ? [{ debugName: "localChecked" }] : []));
4566
+ cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : []));
4567
+ id = computed(() => this.inputId() ?? this.autoId, ...(ngDevMode ? [{ debugName: "id" }] : []));
4568
+ name = computed(() => this.group?.name() ?? this.inputName() ?? this.autoName, ...(ngDevMode ? [{ debugName: "name" }] : []));
4569
+ disabled = computed(() => {
4570
+ return !!this.group?.disabled() || this.disabledInput() || this.cvaDisabled();
4571
+ }, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
4572
+ checked = computed(() => {
4573
+ if (this.group)
4574
+ return this.group.isSelected(this.value());
4575
+ return this.localChecked();
4576
+ }, ...(ngDevMode ? [{ debugName: "checked" }] : []));
4577
+ tabIndex = computed(() => {
4578
+ if (this.group)
4579
+ return this.group.tabIndexFor(this);
4580
+ return this.disabled() ? -1 : 0;
4581
+ }, ...(ngDevMode ? [{ debugName: "tabIndex" }] : []));
4582
+ customAccent = computed(() => {
4583
+ if (this.colorKey() !== 'custom')
4584
+ return null;
4585
+ const raw = String(this.color() ?? '').trim();
4586
+ return !raw || raw === 'custom' ? null : raw;
4587
+ }, ...(ngDevMode ? [{ debugName: "customAccent" }] : []));
4588
+ colorKey = computed(() => {
4589
+ const raw = String(this.color() ?? '').trim();
4590
+ if (!raw || raw === 'custom')
4591
+ return 'custom';
4592
+ return PRESET_COLORS$1.has(raw) ? raw : 'custom';
4593
+ }, ...(ngDevMode ? [{ debugName: "colorKey" }] : []));
4594
+ onChange = () => { };
4595
+ onTouched = () => { };
4596
+ constructor() {
4597
+ effect(() => {
4598
+ if (this.group)
4599
+ return;
4600
+ this.localChecked.set(this.checkedInput());
4601
+ });
4075
4602
  }
4076
- let digitCount = 0;
4077
- let out = '';
4078
- for (const ch of sanitized) {
4079
- if (/\d/.test(ch)) {
4080
- if (digitCount >= maxDigits)
4081
- break;
4082
- digitCount++;
4603
+ onNativeChange() {
4604
+ if (this.disabled())
4605
+ return;
4606
+ if (this.group) {
4607
+ const wasChecked = this.checked();
4608
+ this.group.select(this);
4609
+ if (!wasChecked)
4610
+ this.checkedChange.emit(true);
4611
+ return;
4083
4612
  }
4084
- out += ch;
4613
+ if (this.localChecked()) {
4614
+ this.onTouched();
4615
+ return;
4616
+ }
4617
+ this.localChecked.set(true);
4618
+ this.onChange(true);
4619
+ this.checkedChange.emit(true);
4620
+ this.onTouched();
4085
4621
  }
4086
- input.value = out;
4087
- }
4088
- function shouldBlockBeforeInput(ev, cfg) {
4089
- return !!ev.data && !cfg.allowedChars.test(ev.data);
4090
- }
4091
- function shouldBlockKeyDown(ev) {
4092
- if (ev.ctrlKey || ev.metaKey || ev.altKey)
4093
- return false;
4094
- const k = ev.key;
4095
- const allowedControl = [
4096
- 'Backspace', 'Delete', 'Tab', 'Enter', 'Escape',
4097
- 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End',
4098
- ];
4099
- if (allowedControl.includes(k))
4100
- return false;
4101
- if (/^\d$/.test(k))
4102
- return false;
4103
- return !(k === '+' || k === '-' || k === ' ' || k === '(' || k === ')' || k === '.');
4104
- }
4105
-
4106
- function buildCallingCodeIndex() {
4107
- const m = new Map();
4108
- for (const c of getCountries()) {
4109
- const code = getCountryCallingCode(c);
4110
- const arr = m.get(code) ?? [];
4111
- arr.push(c.toLowerCase());
4112
- m.set(code, arr);
4622
+ onNativeKeydown(event) {
4623
+ if (this.disabled())
4624
+ return;
4625
+ if (this.group) {
4626
+ this.group.handleKeydown(event, this);
4627
+ return;
4628
+ }
4629
+ if (event.key === ' ' || event.key === 'Enter') {
4630
+ event.preventDefault();
4631
+ this.onNativeChange();
4632
+ }
4113
4633
  }
4114
- return m;
4115
- }
4634
+ onBlur() {
4635
+ if (this.group) {
4636
+ this.group.notifyTouched();
4637
+ return;
4638
+ }
4639
+ this.onTouched();
4640
+ }
4641
+ focus() {
4642
+ this.native?.nativeElement.focus();
4643
+ }
4644
+ writeValue(value) {
4645
+ if (this.group)
4646
+ return;
4647
+ this.localChecked.set(!!value);
4648
+ }
4649
+ registerOnTouched(fn) {
4650
+ this.onTouched = fn;
4651
+ }
4652
+ setDisabledState(isDisabled) {
4653
+ this.cvaDisabled.set(isDisabled);
4654
+ }
4655
+ registerOnChange(fn) {
4656
+ this.onChange = fn;
4657
+ }
4658
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRadio, deps: [], target: i0.ɵɵFactoryTarget.Component });
4659
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: SolarisRadio, isStandalone: true, selector: "solaris-radio", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, inputName: { classPropertyName: "inputName", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, checkedInput: { classPropertyName: "checkedInput", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange" }, host: { properties: { "attr.data-size": "size()", "attr.data-color": "colorKey()", "attr.data-variant": "variant()", "attr.data-appearance": "appearance()", "attr.data-disabled": "disabled() ? \"true\" : null", "attr.data-checked": "checked() ? \"true\" : null", "style.--solaris-radio-custom": "customAccent()" }, classAttribute: "solaris-radio-host" }, providers: [
4660
+ {
4661
+ provide: NG_VALUE_ACCESSOR,
4662
+ useExisting: forwardRef(() => SolarisRadio),
4663
+ multi: true,
4664
+ },
4665
+ ], viewQueries: [{ propertyName: "native", first: true, predicate: ["native"], descendants: true, static: true }], ngImport: i0, template: "<label class=\"solaris-radio\">\r\n <input #native class=\"solaris-radio__native\" type=\"radio\" [attr.id]=\"id()\" [attr.name]=\"name()\" [checked]=\"checked()\"\r\n [disabled]=\"disabled()\" [attr.aria-label]=\"ariaLabel() ?? null\" [attr.tabindex]=\"tabIndex()\"\r\n (change)=\"onNativeChange()\" (keydown)=\"onNativeKeydown($event)\" (blur)=\"onBlur()\"/>\r\n\r\n <span class=\"solaris-radio__control\" aria-hidden=\"true\">\r\n <span class=\"solaris-radio__inner\" aria-hidden=\"true\"></span>\r\n </span>\r\n\r\n <span class=\"solaris-radio__content\">\r\n <ng-content/>\r\n </span>\r\n</label>\r\n", styles: [":host{--_size: 2rem;--_dot: .8rem;--_icon-dot: .55rem;--_text: var(--solaris-color-text);--_radius: var(--solaris-radius-full);--_border: var(--solaris-color-border);--solaris-radio-border: var(--_border);--_muted: var(--solaris-color-text-muted);--solaris-radio-accent: var(--solaris-color-primary);--solaris-radio-on-accent: var(--solaris-color-primary-contrast, #fff);--solaris-radio-soft-fill: color-mix(in srgb, var(--solaris-radio-accent) 12%, transparent);display:inline-flex}:host([data-size=sm]){--_dot: .7rem;--_size: 1.8rem;--_icon-dot: .5rem}:host([data-size=md]){--_size: 2rem;--_dot: .8rem;--_icon-dot: .55rem}:host([data-size=lg]){--_size: 2.4rem;--_dot: .95rem;--_icon-dot: .65rem}:host([data-color=primary]){--solaris-radio-accent: var(--solaris-color-primary)}:host([data-color=success]){--solaris-radio-accent: var(--solaris-color-success)}:host([data-color=warning]){--solaris-radio-accent: var(--solaris-color-warning)}:host([data-color=error]){--solaris-radio-accent: var(--solaris-color-error)}:host([data-color=info]){--solaris-radio-accent: var(--solaris-color-info)}:host([data-color=custom]){--solaris-radio-accent: var(--solaris-radio-custom, var(--solaris-color-primary))}.solaris-radio{gap:.8rem;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;color:var(--_text);display:inline-flex}.solaris-radio__native{opacity:0;width:1px;height:1px;position:absolute;pointer-events:none}.solaris-radio__control{flex:0 0 auto;width:var(--_size);height:var(--_size);display:grid;place-items:center;box-sizing:border-box;background:transparent;border-radius:var(--_radius);border:.1rem solid var(--solaris-radio-border)}.solaris-radio__content{gap:.2rem;line-height:1.3;display:inline-flex;flex-direction:column;justify-content:center;min-height:var(--_size)}.solaris-radio__inner{opacity:0;width:var(--_dot);height:var(--_dot);transform:scale(.4);background:var(--solaris-radio-accent);border-radius:var(--solaris-radius-full);transition:opacity .15s ease,transform .15s ease,background-color .15s ease}.solaris-radio:hover .solaris-radio__control{border-color:color-mix(in srgb,var(--solaris-radio-accent) 36%,var(--solaris-radio-border))}.solaris-radio__native:focus-visible+.solaris-radio__control{outline-offset:.2rem;outline:.2rem solid var(--solaris-radio-accent)}.solaris-radio__native:active+.solaris-radio__control{transform:scale(.98)}.solaris-radio__native:checked+.solaris-radio__control{border-color:var(--solaris-radio-accent)}.solaris-radio__native:checked+.solaris-radio__control .solaris-radio__inner{opacity:1;transform:scale(1)}:host([data-variant=dot][data-appearance=outline]) .solaris-radio__native:checked+.solaris-radio__control{background:transparent}:host([data-variant=dot][data-appearance=solid]) .solaris-radio__native:checked+.solaris-radio__control{background:var(--solaris-radio-soft-fill)}:host([data-variant=icon]) .solaris-radio__control{padding:.25rem;background-clip:content-box}:host([data-variant=icon]) .solaris-radio__inner{width:var(--_icon-dot);height:var(--_icon-dot)}:host([data-variant=icon][data-appearance=solid]) .solaris-radio__native:checked+.solaris-radio__control{background:var(--solaris-radio-accent)}:host([data-variant=icon][data-appearance=solid]) .solaris-radio__native:checked+.solaris-radio__control .solaris-radio__inner{background:var(--solaris-radio-on-accent)}:host([data-variant=icon][data-appearance=outline]) .solaris-radio__native:checked+.solaris-radio__control{background:transparent}:host([data-variant=icon][data-appearance=outline]) .solaris-radio__native:checked+.solaris-radio__control .solaris-radio__inner{background:var(--solaris-radio-accent)}:host([data-disabled=true]) .solaris-radio{opacity:.55;cursor:not-allowed}:host([data-disabled=true]) .solaris-radio__control{border-color:color-mix(in srgb,var(--_border) 70%,transparent)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4666
+ }
4667
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRadio, decorators: [{
4668
+ type: Component,
4669
+ args: [{ selector: 'solaris-radio', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
4670
+ {
4671
+ provide: NG_VALUE_ACCESSOR,
4672
+ useExisting: forwardRef(() => SolarisRadio),
4673
+ multi: true,
4674
+ },
4675
+ ], host: {
4676
+ class: 'solaris-radio-host',
4677
+ '[attr.data-size]': 'size()',
4678
+ '[attr.data-color]': 'colorKey()',
4679
+ '[attr.data-variant]': 'variant()',
4680
+ '[attr.data-appearance]': 'appearance()',
4681
+ '[attr.data-disabled]': 'disabled() ? "true" : null',
4682
+ '[attr.data-checked]': 'checked() ? "true" : null',
4683
+ '[style.--solaris-radio-custom]': 'customAccent()',
4684
+ }, template: "<label class=\"solaris-radio\">\r\n <input #native class=\"solaris-radio__native\" type=\"radio\" [attr.id]=\"id()\" [attr.name]=\"name()\" [checked]=\"checked()\"\r\n [disabled]=\"disabled()\" [attr.aria-label]=\"ariaLabel() ?? null\" [attr.tabindex]=\"tabIndex()\"\r\n (change)=\"onNativeChange()\" (keydown)=\"onNativeKeydown($event)\" (blur)=\"onBlur()\"/>\r\n\r\n <span class=\"solaris-radio__control\" aria-hidden=\"true\">\r\n <span class=\"solaris-radio__inner\" aria-hidden=\"true\"></span>\r\n </span>\r\n\r\n <span class=\"solaris-radio__content\">\r\n <ng-content/>\r\n </span>\r\n</label>\r\n", styles: [":host{--_size: 2rem;--_dot: .8rem;--_icon-dot: .55rem;--_text: var(--solaris-color-text);--_radius: var(--solaris-radius-full);--_border: var(--solaris-color-border);--solaris-radio-border: var(--_border);--_muted: var(--solaris-color-text-muted);--solaris-radio-accent: var(--solaris-color-primary);--solaris-radio-on-accent: var(--solaris-color-primary-contrast, #fff);--solaris-radio-soft-fill: color-mix(in srgb, var(--solaris-radio-accent) 12%, transparent);display:inline-flex}:host([data-size=sm]){--_dot: .7rem;--_size: 1.8rem;--_icon-dot: .5rem}:host([data-size=md]){--_size: 2rem;--_dot: .8rem;--_icon-dot: .55rem}:host([data-size=lg]){--_size: 2.4rem;--_dot: .95rem;--_icon-dot: .65rem}:host([data-color=primary]){--solaris-radio-accent: var(--solaris-color-primary)}:host([data-color=success]){--solaris-radio-accent: var(--solaris-color-success)}:host([data-color=warning]){--solaris-radio-accent: var(--solaris-color-warning)}:host([data-color=error]){--solaris-radio-accent: var(--solaris-color-error)}:host([data-color=info]){--solaris-radio-accent: var(--solaris-color-info)}:host([data-color=custom]){--solaris-radio-accent: var(--solaris-radio-custom, var(--solaris-color-primary))}.solaris-radio{gap:.8rem;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;color:var(--_text);display:inline-flex}.solaris-radio__native{opacity:0;width:1px;height:1px;position:absolute;pointer-events:none}.solaris-radio__control{flex:0 0 auto;width:var(--_size);height:var(--_size);display:grid;place-items:center;box-sizing:border-box;background:transparent;border-radius:var(--_radius);border:.1rem solid var(--solaris-radio-border)}.solaris-radio__content{gap:.2rem;line-height:1.3;display:inline-flex;flex-direction:column;justify-content:center;min-height:var(--_size)}.solaris-radio__inner{opacity:0;width:var(--_dot);height:var(--_dot);transform:scale(.4);background:var(--solaris-radio-accent);border-radius:var(--solaris-radius-full);transition:opacity .15s ease,transform .15s ease,background-color .15s ease}.solaris-radio:hover .solaris-radio__control{border-color:color-mix(in srgb,var(--solaris-radio-accent) 36%,var(--solaris-radio-border))}.solaris-radio__native:focus-visible+.solaris-radio__control{outline-offset:.2rem;outline:.2rem solid var(--solaris-radio-accent)}.solaris-radio__native:active+.solaris-radio__control{transform:scale(.98)}.solaris-radio__native:checked+.solaris-radio__control{border-color:var(--solaris-radio-accent)}.solaris-radio__native:checked+.solaris-radio__control .solaris-radio__inner{opacity:1;transform:scale(1)}:host([data-variant=dot][data-appearance=outline]) .solaris-radio__native:checked+.solaris-radio__control{background:transparent}:host([data-variant=dot][data-appearance=solid]) .solaris-radio__native:checked+.solaris-radio__control{background:var(--solaris-radio-soft-fill)}:host([data-variant=icon]) .solaris-radio__control{padding:.25rem;background-clip:content-box}:host([data-variant=icon]) .solaris-radio__inner{width:var(--_icon-dot);height:var(--_icon-dot)}:host([data-variant=icon][data-appearance=solid]) .solaris-radio__native:checked+.solaris-radio__control{background:var(--solaris-radio-accent)}:host([data-variant=icon][data-appearance=solid]) .solaris-radio__native:checked+.solaris-radio__control .solaris-radio__inner{background:var(--solaris-radio-on-accent)}:host([data-variant=icon][data-appearance=outline]) .solaris-radio__native:checked+.solaris-radio__control{background:transparent}:host([data-variant=icon][data-appearance=outline]) .solaris-radio__native:checked+.solaris-radio__control .solaris-radio__inner{background:var(--solaris-radio-accent)}:host([data-disabled=true]) .solaris-radio{opacity:.55;cursor:not-allowed}:host([data-disabled=true]) .solaris-radio__control{border-color:color-mix(in srgb,var(--_border) 70%,transparent)}\n"] }]
4685
+ }], ctorParameters: () => [], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], inputName: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], checkedInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }], native: [{
4686
+ type: ViewChild,
4687
+ args: ['native', { static: true }]
4688
+ }] } });
4689
+
4690
+ class SolarisRadioGroup {
4691
+ gap = input('md', ...(ngDevMode ? [{ debugName: "gap" }] : []));
4692
+ compareWith = input(Object.is, ...(ngDevMode ? [{ debugName: "compareWith" }] : []));
4693
+ nameInput = input(null, { ...(ngDevMode ? { debugName: "nameInput" } : {}), alias: 'name' });
4694
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), alias: 'disabled' });
4695
+ orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
4696
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
4697
+ valueChange = output();
4698
+ radiosQuery;
4699
+ destroyRef = inject(DestroyRef);
4700
+ autoName = uniqueId('solaris-radio-group');
4701
+ cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : []));
4702
+ internalValue = signal(null, ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
4703
+ radiosVersion = signal(0, ...(ngDevMode ? [{ debugName: "radiosVersion" }] : []));
4704
+ name = computed(() => this.nameInput() ?? this.autoName, ...(ngDevMode ? [{ debugName: "name" }] : []));
4705
+ disabled = computed(() => this.disabledInput() || this.cvaDisabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
4706
+ resolvedGap = computed(() => {
4707
+ const value = String(this.gap() ?? 'md').trim();
4708
+ switch (value) {
4709
+ case 'sm':
4710
+ return 'var(--solaris-space-2)';
4711
+ case 'md':
4712
+ return 'var(--solaris-space-3)';
4713
+ case 'lg':
4714
+ return 'var(--solaris-space-4)';
4715
+ default:
4716
+ return value;
4717
+ }
4718
+ }, ...(ngDevMode ? [{ debugName: "resolvedGap" }] : []));
4719
+ onChange = () => { };
4720
+ onTouched = () => { };
4721
+ ngAfterContentInit() {
4722
+ this.bumpRadiosVersion();
4723
+ this.radiosQuery?.changes
4724
+ .pipe(takeUntilDestroyed(this.destroyRef))
4725
+ .subscribe(() => this.bumpRadiosVersion());
4726
+ }
4727
+ isSelected(value) {
4728
+ return this.compareWith()(this.internalValue(), value);
4729
+ }
4730
+ select(radio) {
4731
+ if (this.disabled() || radio.disabled())
4732
+ return;
4733
+ const nextValue = radio.value();
4734
+ if (!this.isSelected(nextValue)) {
4735
+ this.internalValue.set(nextValue);
4736
+ this.onChange(nextValue);
4737
+ this.valueChange.emit(nextValue);
4738
+ }
4739
+ this.onTouched();
4740
+ this.bumpRadiosVersion();
4741
+ }
4742
+ tabIndexFor(radio) {
4743
+ this.radiosVersion();
4744
+ if (this.disabled() || radio.disabled())
4745
+ return -1;
4746
+ const enabled = this.enabledRadios();
4747
+ if (!enabled.length)
4748
+ return -1;
4749
+ const selected = enabled.find(item => this.isSelected(item.value()));
4750
+ const target = selected ?? enabled[0];
4751
+ return target === radio ? 0 : -1;
4752
+ }
4753
+ handleKeydown(event, current) {
4754
+ if (this.disabled())
4755
+ return;
4756
+ switch (event.key) {
4757
+ case 'ArrowRight':
4758
+ case 'ArrowDown':
4759
+ event.preventDefault();
4760
+ this.move(current, +1);
4761
+ break;
4762
+ case 'ArrowLeft':
4763
+ case 'ArrowUp':
4764
+ event.preventDefault();
4765
+ this.move(current, -1);
4766
+ break;
4767
+ case ' ':
4768
+ case 'Enter':
4769
+ event.preventDefault();
4770
+ this.select(current);
4771
+ break;
4772
+ default:
4773
+ break;
4774
+ }
4775
+ }
4776
+ notifyTouched() {
4777
+ this.onTouched();
4778
+ }
4779
+ writeValue(value) {
4780
+ this.internalValue.set(value);
4781
+ this.bumpRadiosVersion();
4782
+ }
4783
+ registerOnTouched(fn) {
4784
+ this.onTouched = fn;
4785
+ }
4786
+ setDisabledState(isDisabled) {
4787
+ this.cvaDisabled.set(isDisabled);
4788
+ this.bumpRadiosVersion();
4789
+ }
4790
+ registerOnChange(fn) {
4791
+ this.onChange = fn;
4792
+ }
4793
+ move(current, direction) {
4794
+ const enabled = this.enabledRadios();
4795
+ if (!enabled.length)
4796
+ return;
4797
+ const currentIndex = enabled.indexOf(current);
4798
+ const startIndex = Math.max(currentIndex, 0);
4799
+ const nextIndex = (startIndex + direction + enabled.length) % enabled.length;
4800
+ const next = enabled[nextIndex];
4801
+ this.select(next);
4802
+ next.focus();
4803
+ }
4804
+ enabledRadios() {
4805
+ this.radiosVersion();
4806
+ return (this.radiosQuery?.toArray() ?? []).filter(radio => !radio.disabled());
4807
+ }
4808
+ bumpRadiosVersion() {
4809
+ this.radiosVersion.update(value => value + 1);
4810
+ }
4811
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
4812
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: SolarisRadioGroup, isStandalone: true, selector: "solaris-radio-group", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, nameInput: { classPropertyName: "nameInput", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "attr.data-orientation": "orientation()", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.aria-label": "ariaLabel() ?? null", "attr.aria-orientation": "orientation()", "style.--solaris-radio-group-gap": "resolvedGap()" }, classAttribute: "solaris-radio-group-host" }, providers: [
4813
+ {
4814
+ provide: NG_VALUE_ACCESSOR,
4815
+ useExisting: forwardRef(() => SolarisRadioGroup),
4816
+ multi: true,
4817
+ },
4818
+ {
4819
+ provide: SOLARIS_RADIO_GROUP,
4820
+ useExisting: forwardRef(() => SolarisRadioGroup),
4821
+ },
4822
+ ], queries: [{ propertyName: "radiosQuery", predicate: i0.forwardRef(() => SolarisRadio), descendants: true }], ngImport: i0, template: "<ng-content/>\r\n", styles: [":host.solaris-radio-group-host{display:inline-flex;flex-direction:column;gap:var(--solaris-radio-group-gap, var(--solaris-space-3))}:host.solaris-radio-group-host[data-orientation=horizontal]{flex-wrap:wrap;flex-direction:row;align-items:flex-start}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4823
+ }
4824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisRadioGroup, decorators: [{
4825
+ type: Component,
4826
+ args: [{ selector: 'solaris-radio-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
4827
+ {
4828
+ provide: NG_VALUE_ACCESSOR,
4829
+ useExisting: forwardRef(() => SolarisRadioGroup),
4830
+ multi: true,
4831
+ },
4832
+ {
4833
+ provide: SOLARIS_RADIO_GROUP,
4834
+ useExisting: forwardRef(() => SolarisRadioGroup),
4835
+ },
4836
+ ], host: {
4837
+ class: 'solaris-radio-group-host',
4838
+ role: 'radiogroup',
4839
+ '[attr.data-orientation]': 'orientation()',
4840
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
4841
+ '[attr.aria-label]': 'ariaLabel() ?? null',
4842
+ '[attr.aria-orientation]': 'orientation()',
4843
+ '[style.--solaris-radio-group-gap]': 'resolvedGap()',
4844
+ }, template: "<ng-content/>\r\n", styles: [":host.solaris-radio-group-host{display:inline-flex;flex-direction:column;gap:var(--solaris-radio-group-gap, var(--solaris-space-3))}:host.solaris-radio-group-host[data-orientation=horizontal]{flex-wrap:wrap;flex-direction:row;align-items:flex-start}\n"] }]
4845
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], compareWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareWith", required: false }] }], nameInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], radiosQuery: [{
4846
+ type: ContentChildren,
4847
+ args: [forwardRef(() => SolarisRadio), { descendants: true }]
4848
+ }] } });
4849
+
4850
+ const SOLARIS_CARD_GROUP = new InjectionToken('SOLARIS_CARD_GROUP');
4851
+
4852
+ class SolarisCard {
4853
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
4854
+ orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
4855
+ radius = input(null, ...(ngDevMode ? [{ debugName: "radius" }] : []));
4856
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
4857
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : {}), transform: booleanAttribute });
4858
+ resolvedRadius = computed(() => resolveRadius(this.radius()), ...(ngDevMode ? [{ debugName: "resolvedRadius" }] : []));
4859
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
4860
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: SolarisCard, isStandalone: true, selector: "solaris-card", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-orientation": "orientation()", "attr.data-interactive": "interactive() ? \"true\" : null", "attr.data-disabled": "disabled() ? \"true\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "style.--solaris-card-radius": "resolvedRadius()" }, classAttribute: "solaris-card-host" }, ngImport: i0, template: "<article class=\"solaris-card\">\r\n <div class=\"solaris-card__media\">\r\n <ng-content select=\"[solaris-card-media]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__content\">\r\n <div class=\"solaris-card__header\">\r\n <div class=\"solaris-card__header-main\">\r\n <div class=\"solaris-card__eyebrow\">\r\n <ng-content select=\"[solaris-card-eyebrow]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__title\">\r\n <ng-content select=\"[solaris-card-title]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"solaris-card__badge\">\r\n <ng-content select=\"[solaris-card-badge]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"solaris-card__description\">\r\n <ng-content select=\"[solaris-card-description]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__meta\">\r\n <ng-content select=\"[solaris-card-meta]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__footer\">\r\n <div class=\"solaris-card__footer-main\">\r\n <ng-content select=\"[solaris-card-footer]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__actions\">\r\n <ng-content select=\"[solaris-card-actions]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</article>\r\n", styles: [":host{display:block;--solaris-card-bg: var(--solaris-color-surface);--solaris-card-bg-hover: color-mix(in srgb, var(--solaris-card-bg) 92%, white);--solaris-card-border: var(--solaris-color-border);--solaris-card-border-hover: color-mix(in srgb, var(--solaris-color-primary) 18%, var(--solaris-card-border));--solaris-card-shadow: var(--solaris-shadow-xs);--solaris-card-shadow-hover: var(--solaris-shadow-sm);--solaris-card-title-color: var(--solaris-color-text);--solaris-card-description-color: var(--solaris-color-text-muted);--solaris-card-meta-color: var(--solaris-color-text);--solaris-card-eyebrow-color: var(--solaris-color-text-muted);--solaris-card-disabled-opacity: .62;--solaris-card-gap: var(--solaris-space-4);--solaris-card-padding-x: var(--solaris-space-5);--solaris-card-padding-y: var(--solaris-space-5);--solaris-card-content-gap: var(--solaris-space-3);--solaris-card-padding-top: var(--solaris-card-padding-y);--solaris-card-padding-left: var(--solaris-card-padding-x);--solaris-card-padding-right: var(--solaris-card-padding-x);--solaris-card-padding-bottom: var(--solaris-card-padding-y);--solaris-card-media-size: 7.2rem;--solaris-card-radius: var(--solaris-radius-lg)}:host([data-size=sm]){--solaris-card-padding-x: var(--solaris-space-4);--solaris-card-padding-y: var(--solaris-space-4);--solaris-card-gap: var(--solaris-space-3);--solaris-card-content-gap: var(--solaris-space-2);--solaris-card-media-size: 5.6rem}:host([data-size=md]){--solaris-card-padding-x: var(--solaris-space-5);--solaris-card-padding-y: var(--solaris-space-5);--solaris-card-gap: var(--solaris-space-4);--solaris-card-content-gap: var(--solaris-space-3);--solaris-card-media-size: 7.2rem}:host([data-size=lg]){--solaris-card-padding-x: var(--solaris-space-6);--solaris-card-padding-y: var(--solaris-space-6);--solaris-card-gap: var(--solaris-space-5);--solaris-card-content-gap: var(--solaris-space-4);--solaris-card-media-size: 8.8rem}.solaris-card{min-width:0;width:100%;display:flex;flex-direction:column;box-sizing:border-box;gap:var(--solaris-card-gap);color:var(--solaris-color-text);background:var(--solaris-card-bg);box-shadow:var(--solaris-card-shadow);border-radius:var(--solaris-card-radius);border:1px solid var(--solaris-card-border);padding:var(--solaris-card-padding-top) var(--solaris-card-padding-right) var(--solaris-card-padding-bottom) var(--solaris-card-padding-left)}:host([data-interactive=true]:not([data-disabled=true])) .solaris-card{cursor:pointer;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,transform .12s ease}:host([data-interactive=true]:not([data-disabled=true])) .solaris-card:hover{background:var(--solaris-card-bg-hover);box-shadow:var(--solaris-card-shadow-hover);border-color:var(--solaris-card-border-hover)}:host([data-disabled=true]) .solaris-card{box-shadow:none;opacity:var(--solaris-card-disabled-opacity)}.solaris-card__media{min-width:0;overflow:hidden;border-radius:calc(var(--solaris-card-radius) - .2rem)}.solaris-card__content{min-width:0;display:flex;flex:1 1 auto;flex-direction:column;gap:var(--solaris-card-content-gap)}.solaris-card__header{min-width:0;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--solaris-space-3)}.solaris-card__header-main{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;gap:var(--solaris-space-2)}.solaris-card__eyebrow{color:var(--solaris-card-eyebrow-color);line-height:var(--solaris-lh-normal);letter-spacing:var(--solaris-ls-md);font-size:var(--solaris-fs-12);text-transform:uppercase}.solaris-card__title{min-width:0;color:var(--solaris-card-title-color);line-height:var(--solaris-lh-tight);font-size:var(--solaris-fs-16);font-weight:700}.solaris-card__description{color:var(--solaris-card-description-color);line-height:var(--solaris-lh-normal);font-size:var(--solaris-fs-14)}.solaris-card__meta{color:var(--solaris-card-meta-color);line-height:var(--solaris-lh-normal);font-size:var(--solaris-fs-14);font-weight:600}.solaris-card__badge{flex:0 0 auto;display:inline-flex;align-items:flex-start}.solaris-card__footer{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:var(--solaris-space-3)}.solaris-card__footer-main{min-width:0;flex:1 1 auto}.solaris-card__actions{flex:0 0 auto;display:inline-flex;flex-wrap:wrap;gap:var(--solaris-space-2);align-items:center;justify-content:flex-end}:host([data-orientation=horizontal]) .solaris-card{flex-direction:row;align-items:stretch}:host([data-orientation=horizontal]) .solaris-card__media{flex:0 0 min(32%,var(--solaris-card-media-size));width:min(32%,var(--solaris-card-media-size))}:host([data-orientation=horizontal]) .solaris-card__content{justify-content:center}:host([data-orientation=compact]) .solaris-card{flex-direction:row;align-items:center;gap:var(--solaris-space-3)}:host([data-orientation=compact]) .solaris-card__media{flex:0 0 auto;width:var(--solaris-card-media-size)}:host([data-orientation=compact]) .solaris-card__content{gap:var(--solaris-space-2)}:host([data-orientation=compact]) .solaris-card__footer{margin-top:var(--solaris-space-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4861
+ }
4862
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCard, decorators: [{
4863
+ type: Component,
4864
+ args: [{ selector: 'solaris-card', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
4865
+ class: 'solaris-card-host',
4866
+ '[attr.data-size]': 'size()',
4867
+ '[attr.data-orientation]': 'orientation()',
4868
+ '[attr.data-interactive]': 'interactive() ? "true" : null',
4869
+ '[attr.data-disabled]': 'disabled() ? "true" : null',
4870
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
4871
+ '[style.--solaris-card-radius]': 'resolvedRadius()',
4872
+ }, template: "<article class=\"solaris-card\">\r\n <div class=\"solaris-card__media\">\r\n <ng-content select=\"[solaris-card-media]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__content\">\r\n <div class=\"solaris-card__header\">\r\n <div class=\"solaris-card__header-main\">\r\n <div class=\"solaris-card__eyebrow\">\r\n <ng-content select=\"[solaris-card-eyebrow]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__title\">\r\n <ng-content select=\"[solaris-card-title]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"solaris-card__badge\">\r\n <ng-content select=\"[solaris-card-badge]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"solaris-card__description\">\r\n <ng-content select=\"[solaris-card-description]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__meta\">\r\n <ng-content select=\"[solaris-card-meta]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__footer\">\r\n <div class=\"solaris-card__footer-main\">\r\n <ng-content select=\"[solaris-card-footer]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"solaris-card__actions\">\r\n <ng-content select=\"[solaris-card-actions]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</article>\r\n", styles: [":host{display:block;--solaris-card-bg: var(--solaris-color-surface);--solaris-card-bg-hover: color-mix(in srgb, var(--solaris-card-bg) 92%, white);--solaris-card-border: var(--solaris-color-border);--solaris-card-border-hover: color-mix(in srgb, var(--solaris-color-primary) 18%, var(--solaris-card-border));--solaris-card-shadow: var(--solaris-shadow-xs);--solaris-card-shadow-hover: var(--solaris-shadow-sm);--solaris-card-title-color: var(--solaris-color-text);--solaris-card-description-color: var(--solaris-color-text-muted);--solaris-card-meta-color: var(--solaris-color-text);--solaris-card-eyebrow-color: var(--solaris-color-text-muted);--solaris-card-disabled-opacity: .62;--solaris-card-gap: var(--solaris-space-4);--solaris-card-padding-x: var(--solaris-space-5);--solaris-card-padding-y: var(--solaris-space-5);--solaris-card-content-gap: var(--solaris-space-3);--solaris-card-padding-top: var(--solaris-card-padding-y);--solaris-card-padding-left: var(--solaris-card-padding-x);--solaris-card-padding-right: var(--solaris-card-padding-x);--solaris-card-padding-bottom: var(--solaris-card-padding-y);--solaris-card-media-size: 7.2rem;--solaris-card-radius: var(--solaris-radius-lg)}:host([data-size=sm]){--solaris-card-padding-x: var(--solaris-space-4);--solaris-card-padding-y: var(--solaris-space-4);--solaris-card-gap: var(--solaris-space-3);--solaris-card-content-gap: var(--solaris-space-2);--solaris-card-media-size: 5.6rem}:host([data-size=md]){--solaris-card-padding-x: var(--solaris-space-5);--solaris-card-padding-y: var(--solaris-space-5);--solaris-card-gap: var(--solaris-space-4);--solaris-card-content-gap: var(--solaris-space-3);--solaris-card-media-size: 7.2rem}:host([data-size=lg]){--solaris-card-padding-x: var(--solaris-space-6);--solaris-card-padding-y: var(--solaris-space-6);--solaris-card-gap: var(--solaris-space-5);--solaris-card-content-gap: var(--solaris-space-4);--solaris-card-media-size: 8.8rem}.solaris-card{min-width:0;width:100%;display:flex;flex-direction:column;box-sizing:border-box;gap:var(--solaris-card-gap);color:var(--solaris-color-text);background:var(--solaris-card-bg);box-shadow:var(--solaris-card-shadow);border-radius:var(--solaris-card-radius);border:1px solid var(--solaris-card-border);padding:var(--solaris-card-padding-top) var(--solaris-card-padding-right) var(--solaris-card-padding-bottom) var(--solaris-card-padding-left)}:host([data-interactive=true]:not([data-disabled=true])) .solaris-card{cursor:pointer;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,transform .12s ease}:host([data-interactive=true]:not([data-disabled=true])) .solaris-card:hover{background:var(--solaris-card-bg-hover);box-shadow:var(--solaris-card-shadow-hover);border-color:var(--solaris-card-border-hover)}:host([data-disabled=true]) .solaris-card{box-shadow:none;opacity:var(--solaris-card-disabled-opacity)}.solaris-card__media{min-width:0;overflow:hidden;border-radius:calc(var(--solaris-card-radius) - .2rem)}.solaris-card__content{min-width:0;display:flex;flex:1 1 auto;flex-direction:column;gap:var(--solaris-card-content-gap)}.solaris-card__header{min-width:0;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--solaris-space-3)}.solaris-card__header-main{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;gap:var(--solaris-space-2)}.solaris-card__eyebrow{color:var(--solaris-card-eyebrow-color);line-height:var(--solaris-lh-normal);letter-spacing:var(--solaris-ls-md);font-size:var(--solaris-fs-12);text-transform:uppercase}.solaris-card__title{min-width:0;color:var(--solaris-card-title-color);line-height:var(--solaris-lh-tight);font-size:var(--solaris-fs-16);font-weight:700}.solaris-card__description{color:var(--solaris-card-description-color);line-height:var(--solaris-lh-normal);font-size:var(--solaris-fs-14)}.solaris-card__meta{color:var(--solaris-card-meta-color);line-height:var(--solaris-lh-normal);font-size:var(--solaris-fs-14);font-weight:600}.solaris-card__badge{flex:0 0 auto;display:inline-flex;align-items:flex-start}.solaris-card__footer{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:var(--solaris-space-3)}.solaris-card__footer-main{min-width:0;flex:1 1 auto}.solaris-card__actions{flex:0 0 auto;display:inline-flex;flex-wrap:wrap;gap:var(--solaris-space-2);align-items:center;justify-content:flex-end}:host([data-orientation=horizontal]) .solaris-card{flex-direction:row;align-items:stretch}:host([data-orientation=horizontal]) .solaris-card__media{flex:0 0 min(32%,var(--solaris-card-media-size));width:min(32%,var(--solaris-card-media-size))}:host([data-orientation=horizontal]) .solaris-card__content{justify-content:center}:host([data-orientation=compact]) .solaris-card{flex-direction:row;align-items:center;gap:var(--solaris-space-3)}:host([data-orientation=compact]) .solaris-card__media{flex:0 0 auto;width:var(--solaris-card-media-size)}:host([data-orientation=compact]) .solaris-card__content{gap:var(--solaris-space-2)}:host([data-orientation=compact]) .solaris-card__footer{margin-top:var(--solaris-space-1)}\n"] }]
4873
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }] } });
4874
+ function resolveRadius(v) {
4875
+ const value = v == null || String(v).trim() === '' ? null : String(v).trim();
4876
+ if (!value)
4877
+ return null;
4878
+ switch (value) {
4879
+ case 'none':
4880
+ return '0';
4881
+ case 'sm':
4882
+ return 'var(--solaris-radius-sm)';
4883
+ case 'md':
4884
+ return 'var(--solaris-radius-md, var(--solaris-radius-sm))';
4885
+ case 'lg':
4886
+ return 'var(--solaris-radius-lg, var(--solaris-radius-md, var(--solaris-radius-sm)))';
4887
+ case 'full':
4888
+ return 'var(--solaris-radius-full)';
4889
+ default:
4890
+ return value;
4891
+ }
4892
+ }
4893
+
4894
+ const PRESET_COLORS = new Set([
4895
+ 'primary',
4896
+ 'success',
4897
+ 'warning',
4898
+ 'error',
4899
+ 'info',
4900
+ ]);
4901
+ class SolarisSelectionCard {
4902
+ value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
4903
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
4904
+ color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : []));
4905
+ orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
4906
+ radius = input(null, ...(ngDevMode ? [{ debugName: "radius" }] : []));
4907
+ appearance = input('outline', ...(ngDevMode ? [{ debugName: "appearance" }] : []));
4908
+ selectionIndicator = input('auto', ...(ngDevMode ? [{ debugName: "selectionIndicator" }] : []));
4909
+ invalid = input(false, { ...(ngDevMode ? { debugName: "invalid" } : {}), transform: booleanAttribute });
4910
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), alias: 'disabled', transform: booleanAttribute });
4911
+ selectedInput = input(false, { ...(ngDevMode ? { debugName: "selectedInput" } : {}), alias: 'selected', transform: booleanAttribute });
4912
+ selectedChange = output();
4913
+ cardClick = output();
4914
+ elementRef = inject((ElementRef));
4915
+ group = inject(SOLARIS_CARD_GROUP, { optional: true });
4916
+ localSelected = signal(false, ...(ngDevMode ? [{ debugName: "localSelected" }] : []));
4917
+ disabled = computed(() => {
4918
+ return !!this.group?.disabled() || this.disabledInput();
4919
+ }, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
4920
+ selected = computed(() => {
4921
+ if (this.group)
4922
+ return this.group.isSelected(this.value());
4923
+ return this.localSelected();
4924
+ }, ...(ngDevMode ? [{ debugName: "selected" }] : []));
4925
+ resolvedMode = computed(() => {
4926
+ if (this.group)
4927
+ return this.group.selectionMode();
4928
+ return inferStandaloneMode(this.selectionIndicator());
4929
+ }, ...(ngDevMode ? [{ debugName: "resolvedMode" }] : []));
4930
+ onHostBlur() {
4931
+ this.group?.notifyTouched();
4932
+ }
4933
+ resolvedIndicator = computed(() => {
4934
+ const requested = this.selectionIndicator();
4935
+ if (requested !== 'auto')
4936
+ return requested;
4937
+ switch (this.resolvedMode()) {
4938
+ case 'single':
4939
+ return 'radio';
4940
+ case 'multiple':
4941
+ return 'checkbox';
4942
+ case 'none':
4943
+ default:
4944
+ return 'none';
4945
+ }
4946
+ }, ...(ngDevMode ? [{ debugName: "resolvedIndicator" }] : []));
4947
+ tabIndex = computed(() => {
4948
+ if (this.disabled())
4949
+ return -1;
4950
+ if (this.group)
4951
+ return this.group.tabIndexFor(this);
4952
+ return 0;
4953
+ }, ...(ngDevMode ? [{ debugName: "tabIndex" }] : []));
4954
+ role = computed(() => {
4955
+ switch (this.resolvedMode()) {
4956
+ case 'single':
4957
+ return 'radio';
4958
+ case 'multiple':
4959
+ return 'checkbox';
4960
+ case 'none':
4961
+ default:
4962
+ return 'button';
4963
+ }
4964
+ }, ...(ngDevMode ? [{ debugName: "role" }] : []));
4965
+ ariaChecked = computed(() => {
4966
+ if (this.resolvedMode() === 'none')
4967
+ return null;
4968
+ return this.selected() ? 'true' : 'false';
4969
+ }, ...(ngDevMode ? [{ debugName: "ariaChecked" }] : []));
4970
+ customAccent = computed(() => {
4971
+ if (this.colorKey() !== 'custom')
4972
+ return null;
4973
+ const raw = String(this.color() ?? '').trim();
4974
+ return !raw || raw === 'custom' ? null : raw;
4975
+ }, ...(ngDevMode ? [{ debugName: "customAccent" }] : []));
4976
+ colorKey = computed(() => {
4977
+ const raw = String(this.color() ?? '').trim();
4978
+ if (!raw || raw === 'custom')
4979
+ return 'custom';
4980
+ return PRESET_COLORS.has(raw) ? raw : 'custom';
4981
+ }, ...(ngDevMode ? [{ debugName: "colorKey" }] : []));
4982
+ constructor() {
4983
+ effect(() => {
4984
+ if (this.group)
4985
+ return;
4986
+ this.localSelected.set(this.selectedInput());
4987
+ });
4988
+ }
4989
+ focus() {
4990
+ this.elementRef.nativeElement.focus();
4991
+ }
4992
+ onHostClick(event) {
4993
+ if (this.isActionZone(event.target))
4994
+ return;
4995
+ this.cardClick.emit(event);
4996
+ if (this.disabled())
4997
+ return;
4998
+ const previous = this.selected();
4999
+ if (this.group) {
5000
+ this.group.activate(this);
5001
+ if (previous !== this.selected())
5002
+ this.selectedChange.emit(this.selected());
5003
+ return;
5004
+ }
5005
+ const next = this.activateStandalone();
5006
+ if (next !== previous)
5007
+ this.selectedChange.emit(next);
5008
+ }
5009
+ onHostKeydown(event) {
5010
+ if (this.disabled())
5011
+ return;
5012
+ if (this.group) {
5013
+ this.group.handleKeydown(event, this);
5014
+ return;
5015
+ }
5016
+ if (event.key === ' ' || event.key === 'Enter') {
5017
+ event.preventDefault();
5018
+ const previous = this.selected();
5019
+ const next = this.activateStandalone();
5020
+ if (next !== previous)
5021
+ this.selectedChange.emit(next);
5022
+ }
5023
+ }
5024
+ activateStandalone() {
5025
+ switch (this.resolvedMode()) {
5026
+ case 'single':
5027
+ if (!this.localSelected())
5028
+ this.localSelected.set(true);
5029
+ return this.localSelected();
5030
+ case 'multiple':
5031
+ this.localSelected.update(value => !value);
5032
+ return this.localSelected();
5033
+ case 'none':
5034
+ default:
5035
+ return this.localSelected();
5036
+ }
5037
+ }
5038
+ isActionZone(target) {
5039
+ return target instanceof HTMLElement && !!target.closest('[data-card-actions="true"]');
5040
+ }
5041
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisSelectionCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
5042
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisSelectionCard, isStandalone: true, selector: "solaris-selection-card", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, selectionIndicator: { classPropertyName: "selectionIndicator", publicName: "selectionIndicator", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, selectedInput: { classPropertyName: "selectedInput", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange", cardClick: "cardClick" }, host: { listeners: { "click": "onHostClick($event)", "keydown": "onHostKeydown($event)", "blur": "onHostBlur()" }, properties: { "attr.data-size": "size()", "attr.data-orientation": "orientation()", "attr.data-selected": "selected() ? \"true\" : null", "attr.data-disabled": "disabled() ? \"true\" : null", "attr.data-invalid": "invalid() ? \"true\" : null", "attr.data-appearance": "appearance()", "attr.data-color": "colorKey()", "attr.data-indicator": "resolvedIndicator()", "attr.role": "role()", "attr.aria-checked": "ariaChecked()", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.tabindex": "tabIndex()", "style.--solaris-selection-card-custom": "customAccent()" }, classAttribute: "solaris-selection-card-host" }, ngImport: i0, template: "<div class=\"solaris-selection-card\">\r\n @if (resolvedIndicator() !== 'none') {\r\n <span class=\"solaris-selection-card__indicator\" aria-hidden=\"true\">\r\n <span class=\"solaris-selection-card__indicator-control\">\r\n @switch (resolvedIndicator()) {\r\n @case ('radio') {\r\n <span class=\"solaris-selection-card__indicator-dot\"></span>\r\n }\r\n @case ('checkbox') {\r\n <i class=\"ph ph-check solaris-selection-card__indicator-check\"></i>\r\n }\r\n @case ('icon') {\r\n <span class=\"solaris-selection-card__indicator-icon-dot\"></span>\r\n }\r\n }\r\n </span>\r\n </span>\r\n }\r\n\r\n <solaris-card\r\n class=\"solaris-selection-card__card\"\r\n [orientation]=\"orientation()\"\r\n [size]=\"size()\"\r\n [radius]=\"radius()\"\r\n [interactive]=\"!disabled()\"\r\n [disabled]=\"disabled()\">\r\n\r\n <div ngProjectAs=\"[solaris-card-media]\">\r\n <ng-content select=\"[solaris-card-media]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-eyebrow]\">\r\n <ng-content select=\"[solaris-card-eyebrow]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-title]\">\r\n <ng-content select=\"[solaris-card-title]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-description]\">\r\n <ng-content select=\"[solaris-card-description]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-meta]\">\r\n <ng-content select=\"[solaris-card-meta]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-badge]\">\r\n <ng-content select=\"[solaris-card-badge]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-footer]\">\r\n <ng-content select=\"[solaris-card-footer]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-actions]\">\r\n <ng-content select=\"[solaris-card-actions]\"></ng-content>\r\n </div>\r\n\r\n </solaris-card>\r\n</div>\r\n", styles: [":host{display:block;min-width:0;position:relative;outline:none;cursor:pointer;--ssc-accent: var(--solaris-color-primary);--ssc-bg: var(--solaris-color-surface);--ssc-bg-hover: color-mix(in srgb, var(--ssc-bg) 94%, white);--ssc-bg-selected: color-mix(in srgb, var(--ssc-accent) 8%, var(--solaris-color-surface));--ssc-border: var(--solaris-color-border);--ssc-border-hover: color-mix(in srgb, var(--ssc-accent) 20%, var(--ssc-border));--ssc-border-selected: color-mix(in srgb, var(--ssc-accent) 72%, var(--ssc-border));--ssc-border-invalid: var(--solaris-color-error);--ssc-shadow: var(--solaris-shadow-xs);--ssc-shadow-hover: var(--solaris-shadow-sm);--ssc-shadow-selected: var(--solaris-shadow-sm);--ssc-focus-ring: color-mix(in srgb, var(--ssc-accent) 26%, transparent);--ssc-indicator-size: 2rem;--ssc-indicator-check-size: 1rem;--ssc-indicator-dot-size: .8rem;--ssc-indicator-icon-dot-size: .55rem;--ssc-indicator-gap: var(--solaris-space-3);--ssc-pad-x: var(--solaris-space-6);--ssc-pad-y: var(--solaris-space-5);--ssc-pad-top: var(--ssc-pad-y);--ssc-pad-right: calc(var(--ssc-pad-x) + var(--ssc-indicator-size) + var(--ssc-indicator-gap));--ssc-pad-bottom: var(--ssc-pad-y);--ssc-pad-left: var(--ssc-pad-x);--ssc-indicator-top: var(--ssc-pad-y);--ssc-indicator-end: var(--ssc-pad-x);--ssc-min-height: 12rem}:host([data-size=sm]){--ssc-indicator-size: 1.8rem;--ssc-indicator-check-size: .9rem;--ssc-indicator-dot-size: .7rem;--ssc-indicator-icon-dot-size: .5rem;--ssc-pad-x: var(--solaris-space-5);--ssc-pad-y: var(--solaris-space-4);--ssc-min-height: 10rem}:host([data-size=md]){--ssc-indicator-size: 2rem;--ssc-indicator-check-size: 1rem;--ssc-indicator-dot-size: .8rem;--ssc-indicator-icon-dot-size: .55rem;--ssc-pad-x: var(--solaris-space-6);--ssc-pad-y: var(--solaris-space-5);--ssc-min-height: 12rem}:host([data-size=lg]){--ssc-indicator-size: 2.4rem;--ssc-indicator-check-size: 1.2rem;--ssc-indicator-dot-size: .95rem;--ssc-indicator-icon-dot-size: .65rem;--ssc-pad-x: var(--solaris-space-7);--ssc-pad-y: var(--solaris-space-6);--ssc-min-height: 14rem}:host([data-color=primary]){--ssc-accent: var(--solaris-color-primary)}:host([data-color=success]){--ssc-accent: var(--solaris-color-success)}:host([data-color=warning]){--ssc-accent: var(--solaris-color-warning)}:host([data-color=error]){--ssc-accent: var(--solaris-color-error)}:host([data-color=info]){--ssc-accent: var(--solaris-color-info)}:host([data-color=custom]){--ssc-accent: var(--solaris-selection-card-custom, var(--solaris-color-primary))}:host([data-invalid=true]){--ssc-border: var(--ssc-border-invalid);--ssc-border-hover: var(--ssc-border-invalid);--ssc-border-selected: var(--ssc-border-invalid)}:host([data-disabled=true]){cursor:not-allowed}:host(:focus-visible){outline:.2rem solid var(--ssc-focus-ring);outline-offset:.2rem;border-radius:var(--solaris-card-radius, var(--solaris-radius-lg))}.solaris-selection-card{min-width:0;min-height:var(--ssc-min-height);position:relative}.solaris-selection-card__card{display:block;min-width:0;--solaris-card-bg: var(--ssc-bg);--solaris-card-bg-hover: var(--ssc-bg-hover);--solaris-card-border: var(--ssc-border);--solaris-card-border-hover: var(--ssc-border-hover);--solaris-card-shadow: var(--ssc-shadow);--solaris-card-shadow-hover: var(--ssc-shadow-hover);--solaris-card-padding-x: var(--ssc-pad-x);--solaris-card-padding-y: var(--ssc-pad-y);--solaris-card-padding-top: var(--ssc-pad-top);--solaris-card-padding-right: var(--ssc-pad-right);--solaris-card-padding-bottom: var(--ssc-pad-bottom);--solaris-card-padding-left: var(--ssc-pad-left);min-height:inherit}:host([data-selected=true]) .solaris-selection-card__card{--solaris-card-bg: var(--ssc-bg-selected);--solaris-card-border: var(--ssc-border-selected);--solaris-card-border-hover: var(--ssc-border-selected);--solaris-card-shadow: var(--ssc-shadow-selected);--solaris-card-shadow-hover: var(--ssc-shadow-selected)}:host([data-appearance=soft][data-selected=true]) .solaris-selection-card__card{--solaris-card-bg: color-mix(in srgb, var(--ssc-accent) 12%, var(--solaris-color-surface))}:host([data-disabled=true]) .solaris-selection-card__card{--solaris-card-shadow: none;--solaris-card-shadow-hover: none}.solaris-selection-card__indicator{position:absolute;top:var(--ssc-indicator-top);right:var(--ssc-indicator-end);z-index:1;pointer-events:none}.solaris-selection-card__indicator-control{width:var(--ssc-indicator-size);height:var(--ssc-indicator-size);display:grid;place-items:center;box-sizing:border-box;color:transparent;background:transparent;border:.1rem solid var(--ssc-border);transition:border-color .15s ease,background-color .15s ease,color .15s ease,opacity .15s ease,transform .12s ease}.solaris-selection-card__indicator-dot,.solaris-selection-card__indicator-icon-dot,.solaris-selection-card__indicator-check{opacity:0;transform:scale(.45);transition:opacity .15s ease,transform .15s ease,color .15s ease,background-color .15s ease}.solaris-selection-card__indicator-dot{width:var(--ssc-indicator-dot-size);height:var(--ssc-indicator-dot-size);border-radius:var(--solaris-radius-full);background:var(--ssc-accent)}.solaris-selection-card__indicator-icon-dot{width:var(--ssc-indicator-icon-dot-size);height:var(--ssc-indicator-icon-dot-size);border-radius:var(--solaris-radius-full);background:var(--solaris-color-primary-contrast, #fff)}.solaris-selection-card__indicator-check{line-height:1;font-size:var(--ssc-indicator-check-size)}:host([data-indicator=radio]) .solaris-selection-card__indicator-control,:host([data-indicator=icon]) .solaris-selection-card__indicator-control{border-radius:var(--solaris-radius-full)}:host([data-indicator=checkbox]) .solaris-selection-card__indicator-control{border-radius:var(--solaris-radius-sm)}:host([data-selected=true][data-indicator=radio]) .solaris-selection-card__indicator-control{border-color:var(--ssc-accent)}:host([data-selected=true][data-indicator=radio]) .solaris-selection-card__indicator-dot{opacity:1;transform:scale(1)}:host([data-selected=true][data-indicator=checkbox]) .solaris-selection-card__indicator-control{color:var(--solaris-color-primary-contrast, #fff);border-color:var(--ssc-accent);background:var(--ssc-accent)}:host([data-selected=true][data-indicator=checkbox]) .solaris-selection-card__indicator-check{opacity:1;transform:scale(1)}:host([data-selected=true][data-indicator=icon]) .solaris-selection-card__indicator-control{border-color:var(--ssc-accent);background:var(--ssc-accent)}:host([data-selected=true][data-indicator=icon]) .solaris-selection-card__indicator-icon-dot{opacity:1;transform:scale(1)}:host([data-disabled=true]) .solaris-selection-card__indicator-control{opacity:.55}:host([data-orientation=compact]){--ssc-min-height: 8.8rem}:host([data-orientation=compact]) .solaris-selection-card__card{--ssc-pad-right: calc(var(--ssc-pad-x) + var(--ssc-indicator-size) + var(--solaris-space-2))}\n"], dependencies: [{ kind: "component", type: SolarisCard, selector: "solaris-card", inputs: ["size", "orientation", "radius", "disabled", "interactive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5043
+ }
5044
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisSelectionCard, decorators: [{
5045
+ type: Component,
5046
+ args: [{ selector: 'solaris-selection-card', standalone: true, imports: [SolarisCard], changeDetection: ChangeDetectionStrategy.OnPush, host: {
5047
+ class: 'solaris-selection-card-host',
5048
+ '[attr.data-size]': 'size()',
5049
+ '[attr.data-orientation]': 'orientation()',
5050
+ '[attr.data-selected]': 'selected() ? "true" : null',
5051
+ '[attr.data-disabled]': 'disabled() ? "true" : null',
5052
+ '[attr.data-invalid]': 'invalid() ? "true" : null',
5053
+ '[attr.data-appearance]': 'appearance()',
5054
+ '[attr.data-color]': 'colorKey()',
5055
+ '[attr.data-indicator]': 'resolvedIndicator()',
5056
+ '[attr.role]': 'role()',
5057
+ '[attr.aria-checked]': 'ariaChecked()',
5058
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
5059
+ '[attr.tabindex]': 'tabIndex()',
5060
+ '[style.--solaris-selection-card-custom]': 'customAccent()',
5061
+ '(click)': 'onHostClick($event)',
5062
+ '(keydown)': 'onHostKeydown($event)',
5063
+ '(blur)': 'onHostBlur()',
5064
+ }, template: "<div class=\"solaris-selection-card\">\r\n @if (resolvedIndicator() !== 'none') {\r\n <span class=\"solaris-selection-card__indicator\" aria-hidden=\"true\">\r\n <span class=\"solaris-selection-card__indicator-control\">\r\n @switch (resolvedIndicator()) {\r\n @case ('radio') {\r\n <span class=\"solaris-selection-card__indicator-dot\"></span>\r\n }\r\n @case ('checkbox') {\r\n <i class=\"ph ph-check solaris-selection-card__indicator-check\"></i>\r\n }\r\n @case ('icon') {\r\n <span class=\"solaris-selection-card__indicator-icon-dot\"></span>\r\n }\r\n }\r\n </span>\r\n </span>\r\n }\r\n\r\n <solaris-card\r\n class=\"solaris-selection-card__card\"\r\n [orientation]=\"orientation()\"\r\n [size]=\"size()\"\r\n [radius]=\"radius()\"\r\n [interactive]=\"!disabled()\"\r\n [disabled]=\"disabled()\">\r\n\r\n <div ngProjectAs=\"[solaris-card-media]\">\r\n <ng-content select=\"[solaris-card-media]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-eyebrow]\">\r\n <ng-content select=\"[solaris-card-eyebrow]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-title]\">\r\n <ng-content select=\"[solaris-card-title]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-description]\">\r\n <ng-content select=\"[solaris-card-description]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-meta]\">\r\n <ng-content select=\"[solaris-card-meta]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-badge]\">\r\n <ng-content select=\"[solaris-card-badge]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-footer]\">\r\n <ng-content select=\"[solaris-card-footer]\"></ng-content>\r\n </div>\r\n\r\n <div ngProjectAs=\"[solaris-card-actions]\">\r\n <ng-content select=\"[solaris-card-actions]\"></ng-content>\r\n </div>\r\n\r\n </solaris-card>\r\n</div>\r\n", styles: [":host{display:block;min-width:0;position:relative;outline:none;cursor:pointer;--ssc-accent: var(--solaris-color-primary);--ssc-bg: var(--solaris-color-surface);--ssc-bg-hover: color-mix(in srgb, var(--ssc-bg) 94%, white);--ssc-bg-selected: color-mix(in srgb, var(--ssc-accent) 8%, var(--solaris-color-surface));--ssc-border: var(--solaris-color-border);--ssc-border-hover: color-mix(in srgb, var(--ssc-accent) 20%, var(--ssc-border));--ssc-border-selected: color-mix(in srgb, var(--ssc-accent) 72%, var(--ssc-border));--ssc-border-invalid: var(--solaris-color-error);--ssc-shadow: var(--solaris-shadow-xs);--ssc-shadow-hover: var(--solaris-shadow-sm);--ssc-shadow-selected: var(--solaris-shadow-sm);--ssc-focus-ring: color-mix(in srgb, var(--ssc-accent) 26%, transparent);--ssc-indicator-size: 2rem;--ssc-indicator-check-size: 1rem;--ssc-indicator-dot-size: .8rem;--ssc-indicator-icon-dot-size: .55rem;--ssc-indicator-gap: var(--solaris-space-3);--ssc-pad-x: var(--solaris-space-6);--ssc-pad-y: var(--solaris-space-5);--ssc-pad-top: var(--ssc-pad-y);--ssc-pad-right: calc(var(--ssc-pad-x) + var(--ssc-indicator-size) + var(--ssc-indicator-gap));--ssc-pad-bottom: var(--ssc-pad-y);--ssc-pad-left: var(--ssc-pad-x);--ssc-indicator-top: var(--ssc-pad-y);--ssc-indicator-end: var(--ssc-pad-x);--ssc-min-height: 12rem}:host([data-size=sm]){--ssc-indicator-size: 1.8rem;--ssc-indicator-check-size: .9rem;--ssc-indicator-dot-size: .7rem;--ssc-indicator-icon-dot-size: .5rem;--ssc-pad-x: var(--solaris-space-5);--ssc-pad-y: var(--solaris-space-4);--ssc-min-height: 10rem}:host([data-size=md]){--ssc-indicator-size: 2rem;--ssc-indicator-check-size: 1rem;--ssc-indicator-dot-size: .8rem;--ssc-indicator-icon-dot-size: .55rem;--ssc-pad-x: var(--solaris-space-6);--ssc-pad-y: var(--solaris-space-5);--ssc-min-height: 12rem}:host([data-size=lg]){--ssc-indicator-size: 2.4rem;--ssc-indicator-check-size: 1.2rem;--ssc-indicator-dot-size: .95rem;--ssc-indicator-icon-dot-size: .65rem;--ssc-pad-x: var(--solaris-space-7);--ssc-pad-y: var(--solaris-space-6);--ssc-min-height: 14rem}:host([data-color=primary]){--ssc-accent: var(--solaris-color-primary)}:host([data-color=success]){--ssc-accent: var(--solaris-color-success)}:host([data-color=warning]){--ssc-accent: var(--solaris-color-warning)}:host([data-color=error]){--ssc-accent: var(--solaris-color-error)}:host([data-color=info]){--ssc-accent: var(--solaris-color-info)}:host([data-color=custom]){--ssc-accent: var(--solaris-selection-card-custom, var(--solaris-color-primary))}:host([data-invalid=true]){--ssc-border: var(--ssc-border-invalid);--ssc-border-hover: var(--ssc-border-invalid);--ssc-border-selected: var(--ssc-border-invalid)}:host([data-disabled=true]){cursor:not-allowed}:host(:focus-visible){outline:.2rem solid var(--ssc-focus-ring);outline-offset:.2rem;border-radius:var(--solaris-card-radius, var(--solaris-radius-lg))}.solaris-selection-card{min-width:0;min-height:var(--ssc-min-height);position:relative}.solaris-selection-card__card{display:block;min-width:0;--solaris-card-bg: var(--ssc-bg);--solaris-card-bg-hover: var(--ssc-bg-hover);--solaris-card-border: var(--ssc-border);--solaris-card-border-hover: var(--ssc-border-hover);--solaris-card-shadow: var(--ssc-shadow);--solaris-card-shadow-hover: var(--ssc-shadow-hover);--solaris-card-padding-x: var(--ssc-pad-x);--solaris-card-padding-y: var(--ssc-pad-y);--solaris-card-padding-top: var(--ssc-pad-top);--solaris-card-padding-right: var(--ssc-pad-right);--solaris-card-padding-bottom: var(--ssc-pad-bottom);--solaris-card-padding-left: var(--ssc-pad-left);min-height:inherit}:host([data-selected=true]) .solaris-selection-card__card{--solaris-card-bg: var(--ssc-bg-selected);--solaris-card-border: var(--ssc-border-selected);--solaris-card-border-hover: var(--ssc-border-selected);--solaris-card-shadow: var(--ssc-shadow-selected);--solaris-card-shadow-hover: var(--ssc-shadow-selected)}:host([data-appearance=soft][data-selected=true]) .solaris-selection-card__card{--solaris-card-bg: color-mix(in srgb, var(--ssc-accent) 12%, var(--solaris-color-surface))}:host([data-disabled=true]) .solaris-selection-card__card{--solaris-card-shadow: none;--solaris-card-shadow-hover: none}.solaris-selection-card__indicator{position:absolute;top:var(--ssc-indicator-top);right:var(--ssc-indicator-end);z-index:1;pointer-events:none}.solaris-selection-card__indicator-control{width:var(--ssc-indicator-size);height:var(--ssc-indicator-size);display:grid;place-items:center;box-sizing:border-box;color:transparent;background:transparent;border:.1rem solid var(--ssc-border);transition:border-color .15s ease,background-color .15s ease,color .15s ease,opacity .15s ease,transform .12s ease}.solaris-selection-card__indicator-dot,.solaris-selection-card__indicator-icon-dot,.solaris-selection-card__indicator-check{opacity:0;transform:scale(.45);transition:opacity .15s ease,transform .15s ease,color .15s ease,background-color .15s ease}.solaris-selection-card__indicator-dot{width:var(--ssc-indicator-dot-size);height:var(--ssc-indicator-dot-size);border-radius:var(--solaris-radius-full);background:var(--ssc-accent)}.solaris-selection-card__indicator-icon-dot{width:var(--ssc-indicator-icon-dot-size);height:var(--ssc-indicator-icon-dot-size);border-radius:var(--solaris-radius-full);background:var(--solaris-color-primary-contrast, #fff)}.solaris-selection-card__indicator-check{line-height:1;font-size:var(--ssc-indicator-check-size)}:host([data-indicator=radio]) .solaris-selection-card__indicator-control,:host([data-indicator=icon]) .solaris-selection-card__indicator-control{border-radius:var(--solaris-radius-full)}:host([data-indicator=checkbox]) .solaris-selection-card__indicator-control{border-radius:var(--solaris-radius-sm)}:host([data-selected=true][data-indicator=radio]) .solaris-selection-card__indicator-control{border-color:var(--ssc-accent)}:host([data-selected=true][data-indicator=radio]) .solaris-selection-card__indicator-dot{opacity:1;transform:scale(1)}:host([data-selected=true][data-indicator=checkbox]) .solaris-selection-card__indicator-control{color:var(--solaris-color-primary-contrast, #fff);border-color:var(--ssc-accent);background:var(--ssc-accent)}:host([data-selected=true][data-indicator=checkbox]) .solaris-selection-card__indicator-check{opacity:1;transform:scale(1)}:host([data-selected=true][data-indicator=icon]) .solaris-selection-card__indicator-control{border-color:var(--ssc-accent);background:var(--ssc-accent)}:host([data-selected=true][data-indicator=icon]) .solaris-selection-card__indicator-icon-dot{opacity:1;transform:scale(1)}:host([data-disabled=true]) .solaris-selection-card__indicator-control{opacity:.55}:host([data-orientation=compact]){--ssc-min-height: 8.8rem}:host([data-orientation=compact]) .solaris-selection-card__card{--ssc-pad-right: calc(var(--ssc-pad-x) + var(--ssc-indicator-size) + var(--solaris-space-2))}\n"] }]
5065
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], selectionIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionIndicator", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectedInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], cardClick: [{ type: i0.Output, args: ["cardClick"] }] } });
5066
+ function inferStandaloneMode(indicator) {
5067
+ switch (indicator) {
5068
+ case 'radio':
5069
+ return 'single';
5070
+ case 'checkbox':
5071
+ case 'icon':
5072
+ case 'auto':
5073
+ default:
5074
+ return 'multiple';
5075
+ }
5076
+ }
5077
+
5078
+ class FieldErrorComponent {
5079
+ text;
5080
+ textKey;
5081
+ textParams;
5082
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FieldErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5083
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: FieldErrorComponent, isStandalone: true, selector: "solaris-field-error", inputs: { text: "text", textKey: "textKey", textParams: "textParams" }, ngImport: i0, template: "<div class=\"solaris-field-error\" role=\"alert\" aria-live=\"polite\">\r\n <span class=\"solaris-field-error__text\">\r\n @if (textKey) { {{ textKey | translate:textParams }} }\r\n @else { {{ text }} }\r\n </span>\r\n</div>\r\n", styles: [".solaris-field-error{line-height:1.25;padding-left:.5rem;font-size:var(--solaris-fs-10);color:var(--solaris-color-error)}\n"], dependencies: [{ kind: "pipe", type: SolarisTranslationPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5084
+ }
5085
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FieldErrorComponent, decorators: [{
5086
+ type: Component,
5087
+ args: [{ selector: 'solaris-field-error', standalone: true, imports: [SolarisTranslationPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"solaris-field-error\" role=\"alert\" aria-live=\"polite\">\r\n <span class=\"solaris-field-error__text\">\r\n @if (textKey) { {{ textKey | translate:textParams }} }\r\n @else { {{ text }} }\r\n </span>\r\n</div>\r\n", styles: [".solaris-field-error{line-height:1.25;padding-left:.5rem;font-size:var(--solaris-fs-10);color:var(--solaris-color-error)}\n"] }]
5088
+ }], propDecorators: { text: [{
5089
+ type: Input
5090
+ }], textKey: [{
5091
+ type: Input
5092
+ }], textParams: [{
5093
+ type: Input
5094
+ }] } });
5095
+
5096
+ class SolarisCardGroup {
5097
+ readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : {}), transform: booleanAttribute });
5098
+ required = input(false, { ...(ngDevMode ? { debugName: "required" } : {}), transform: booleanAttribute });
5099
+ submitted = input(false, { ...(ngDevMode ? { debugName: "submitted" } : {}), transform: booleanAttribute });
5100
+ selectOnFocus = input(false, { ...(ngDevMode ? { debugName: "selectOnFocus" } : {}), transform: booleanAttribute });
5101
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), transform: booleanAttribute });
5102
+ gap = input('md', ...(ngDevMode ? [{ debugName: "gap" }] : []));
5103
+ invalid = input(null, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
5104
+ minSelected = input(null, ...(ngDevMode ? [{ debugName: "minSelected" }] : []));
5105
+ maxSelected = input(null, ...(ngDevMode ? [{ debugName: "maxSelected" }] : []));
5106
+ layout = input('stack', ...(ngDevMode ? [{ debugName: "layout" }] : []));
5107
+ compareWith = input(Object.is, ...(ngDevMode ? [{ debugName: "compareWith" }] : []));
5108
+ showErrors = input('dirtyOrTouched', ...(ngDevMode ? [{ debugName: "showErrors" }] : []));
5109
+ selectionMode = input('single', ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
5110
+ orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
5111
+ requiredErrorKey = input('solaris.cardGroup.errors.required', ...(ngDevMode ? [{ debugName: "requiredErrorKey" }] : []));
5112
+ minSelectedErrorKey = input('solaris.cardGroup.errors.minSelected', ...(ngDevMode ? [{ debugName: "minSelectedErrorKey" }] : []));
5113
+ maxSelectedErrorKey = input('solaris.cardGroup.errors.maxSelected', ...(ngDevMode ? [{ debugName: "maxSelectedErrorKey" }] : []));
5114
+ valueChange = output();
5115
+ selectionRejected = output();
5116
+ cardsQuery;
5117
+ destroyRef = inject(DestroyRef);
5118
+ controlTick = signal(0, ...(ngDevMode ? [{ debugName: "controlTick" }] : []));
5119
+ dirtyState = signal(false, ...(ngDevMode ? [{ debugName: "dirtyState" }] : []));
5120
+ cardsVersion = signal(0, ...(ngDevMode ? [{ debugName: "cardsVersion" }] : []));
5121
+ cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : []));
5122
+ touchedState = signal(false, ...(ngDevMode ? [{ debugName: "touchedState" }] : []));
5123
+ internalValue = signal(null, ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
5124
+ onTouched = () => { };
5125
+ onChange = () => { };
5126
+ onValidatorChange = () => { };
5127
+ constructor() {
5128
+ effect(() => {
5129
+ this.selectionMode();
5130
+ this.required();
5131
+ this.minSelected();
5132
+ this.maxSelected();
5133
+ this.compareWith();
5134
+ this.internalValue();
5135
+ this.onValidatorChange();
5136
+ });
5137
+ }
5138
+ ngAfterContentInit() {
5139
+ this.bumpCardsVersion();
5140
+ this.cardsQuery?.changes
5141
+ .pipe(takeUntilDestroyed(this.destroyRef))
5142
+ .subscribe(() => this.bumpCardsVersion());
5143
+ }
5144
+ resolvedGap = computed(() => {
5145
+ const value = String(this.gap() ?? 'md').trim();
5146
+ switch (value) {
5147
+ case 'sm':
5148
+ return 'var(--solaris-space-3)';
5149
+ case 'md':
5150
+ return 'var(--solaris-space-4)';
5151
+ case 'lg':
5152
+ return 'var(--solaris-space-5)';
5153
+ default:
5154
+ return value;
5155
+ }
5156
+ }, ...(ngDevMode ? [{ debugName: "resolvedGap" }] : []));
5157
+ disabled = computed(() => this.disabledInput() || this.cvaDisabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
5158
+ groupRole = computed(() => {
5159
+ switch (this.selectionMode()) {
5160
+ case 'single':
5161
+ return 'radiogroup';
5162
+ case 'multiple':
5163
+ case 'none':
5164
+ default:
5165
+ return 'group';
5166
+ }
5167
+ }, ...(ngDevMode ? [{ debugName: "groupRole" }] : []));
5168
+ selectionCount = computed(() => {
5169
+ const value = this.internalValue();
5170
+ if (Array.isArray(value))
5171
+ return value.length;
5172
+ if (value == null)
5173
+ return 0;
5174
+ return 1;
5175
+ }, ...(ngDevMode ? [{ debugName: "selectionCount" }] : []));
5176
+ validationError = computed(() => {
5177
+ if (this.disabled() || this.selectionMode() === 'none')
5178
+ return null;
5179
+ const count = this.selectionCount();
5180
+ if (this.required() && count === 0)
5181
+ return 'required';
5182
+ if (this.selectionMode() === 'multiple') {
5183
+ const min = this.minSelected();
5184
+ const max = this.maxSelected();
5185
+ if (min != null && count < min)
5186
+ return 'minSelected';
5187
+ if (max != null && count > max)
5188
+ return 'maxSelected';
5189
+ }
5190
+ return null;
5191
+ }, ...(ngDevMode ? [{ debugName: "validationError" }] : []));
5192
+ invalidComputed = computed(() => {
5193
+ const explicitInvalid = this.invalid();
5194
+ if (explicitInvalid !== null)
5195
+ return explicitInvalid;
5196
+ const localInvalid = this.validationError() !== null;
5197
+ if (this.showErrors() === 'always')
5198
+ return localInvalid;
5199
+ if (this.showErrors() === 'submitted')
5200
+ return localInvalid && this.submitted();
5201
+ return localInvalid && (this.touchedState() || this.dirtyState());
5202
+ }, ...(ngDevMode ? [{ debugName: "invalidComputed" }] : []));
5203
+ errorKeyComputed = computed(() => {
5204
+ switch (this.validationError()) {
5205
+ case 'required':
5206
+ return this.requiredErrorKey();
5207
+ case 'minSelected':
5208
+ return this.minSelectedErrorKey();
5209
+ case 'maxSelected':
5210
+ return this.maxSelectedErrorKey();
5211
+ default:
5212
+ return undefined;
5213
+ }
5214
+ }, ...(ngDevMode ? [{ debugName: "errorKeyComputed" }] : []));
5215
+ errorParamsComputed = computed(() => {
5216
+ switch (this.validationError()) {
5217
+ case 'minSelected':
5218
+ return { min: this.minSelected() ?? undefined };
5219
+ case 'maxSelected':
5220
+ return { max: this.maxSelected() ?? undefined };
5221
+ default:
5222
+ return undefined;
5223
+ }
5224
+ }, ...(ngDevMode ? [{ debugName: "errorParamsComputed" }] : []));
5225
+ isSelected(value) {
5226
+ const currentValue = this.internalValue();
5227
+ switch (this.selectionMode()) {
5228
+ case 'single':
5229
+ return !Array.isArray(currentValue) &&
5230
+ currentValue !== null &&
5231
+ this.compareWith()(currentValue, value);
5232
+ case 'multiple': {
5233
+ const list = Array.isArray(currentValue) ? currentValue : [];
5234
+ return list.some(item => this.compareWith()(item, value));
5235
+ }
5236
+ case 'none':
5237
+ default:
5238
+ return false;
5239
+ }
5240
+ }
5241
+ activate(card) {
5242
+ if (this.disabled() || card.disabled())
5243
+ return;
5244
+ this.notifyTouched();
5245
+ if (this.readonly()) {
5246
+ this.selectionRejected.emit({ reason: 'readonly', value: card.value() });
5247
+ return;
5248
+ }
5249
+ switch (this.selectionMode()) {
5250
+ case 'single': {
5251
+ const nextValue = card.value();
5252
+ const currentValue = this.internalValue();
5253
+ if (Array.isArray(currentValue) || currentValue === null
5254
+ || !this.compareWith()(currentValue, nextValue)) {
5255
+ this.internalValue.set(nextValue);
5256
+ this.emitModelChange(nextValue);
5257
+ }
5258
+ break;
5259
+ }
5260
+ case 'multiple': {
5261
+ const currentValue = this.internalValue();
5262
+ const current = Array.isArray(currentValue) ? [...currentValue] : [];
5263
+ const cardValue = card.value();
5264
+ const index = current.findIndex(item => this.compareWith()(item, cardValue));
5265
+ if (index >= 0) {
5266
+ current.splice(index, 1);
5267
+ this.internalValue.set(current);
5268
+ this.emitModelChange(current);
5269
+ break;
5270
+ }
5271
+ const max = this.maxSelected();
5272
+ if (max != null && current.length >= max) {
5273
+ this.selectionRejected.emit({ reason: 'maxSelected', value: cardValue });
5274
+ return;
5275
+ }
5276
+ current.push(cardValue);
5277
+ this.internalValue.set(current);
5278
+ this.emitModelChange(current);
5279
+ break;
5280
+ }
5281
+ case 'none':
5282
+ default:
5283
+ break;
5284
+ }
5285
+ this.bumpCardsVersion();
5286
+ this.bumpControlTick();
5287
+ }
5288
+ tabIndexFor(card) {
5289
+ this.cardsVersion();
5290
+ if (this.disabled() || card.disabled())
5291
+ return -1;
5292
+ if (this.selectionMode() === 'none')
5293
+ return 0;
5294
+ const enabled = this.enabledCards();
5295
+ if (!enabled.length)
5296
+ return -1;
5297
+ const selected = enabled.find(item => this.isSelected(item.value()));
5298
+ const target = selected ?? enabled[0];
5299
+ return target === card ? 0 : -1;
5300
+ }
5301
+ handleKeydown(event, current) {
5302
+ if (this.disabled())
5303
+ return;
5304
+ if (this.selectionMode() === 'none')
5305
+ return;
5306
+ switch (event.key) {
5307
+ case 'ArrowRight':
5308
+ case 'ArrowDown':
5309
+ event.preventDefault();
5310
+ this.move(current, +1);
5311
+ break;
5312
+ case 'ArrowLeft':
5313
+ case 'ArrowUp':
5314
+ event.preventDefault();
5315
+ this.move(current, -1);
5316
+ break;
5317
+ case 'Home':
5318
+ event.preventDefault();
5319
+ this.focusFirst();
5320
+ break;
5321
+ case 'End':
5322
+ event.preventDefault();
5323
+ this.focusLast();
5324
+ break;
5325
+ case ' ':
5326
+ case 'Enter':
5327
+ event.preventDefault();
5328
+ this.activate(current);
5329
+ break;
5330
+ }
5331
+ }
5332
+ notifyTouched() {
5333
+ if (!this.touchedState()) {
5334
+ this.touchedState.set(true);
5335
+ }
5336
+ this.onTouched();
5337
+ this.bumpControlTick();
5338
+ }
5339
+ writeValue(value) {
5340
+ this.internalValue.set(this.normalizeIncomingValue(value, this.selectionMode()));
5341
+ this.bumpCardsVersion();
5342
+ this.bumpControlTick();
5343
+ }
5344
+ registerOnTouched(fn) {
5345
+ this.onTouched = fn;
5346
+ }
5347
+ setDisabledState(isDisabled) {
5348
+ this.cvaDisabled.set(isDisabled);
5349
+ this.bumpCardsVersion();
5350
+ this.bumpControlTick();
5351
+ }
5352
+ registerOnChange(fn) {
5353
+ this.onChange = fn;
5354
+ }
5355
+ validate(_) {
5356
+ switch (this.validationError()) {
5357
+ case 'required':
5358
+ return { required: true };
5359
+ case 'minSelected':
5360
+ return {
5361
+ minSelected: {
5362
+ min: this.minSelected(),
5363
+ actual: this.selectionCount(),
5364
+ },
5365
+ };
5366
+ case 'maxSelected':
5367
+ return {
5368
+ maxSelected: {
5369
+ max: this.maxSelected(),
5370
+ actual: this.selectionCount(),
5371
+ },
5372
+ };
5373
+ default:
5374
+ return null;
5375
+ }
5376
+ }
5377
+ registerOnValidatorChange(fn) {
5378
+ this.onValidatorChange = fn;
5379
+ }
5380
+ move(current, direction) {
5381
+ const enabled = this.enabledCards();
5382
+ if (!enabled.length)
5383
+ return;
5384
+ const currentIndex = enabled.indexOf(current);
5385
+ const startIndex = Math.max(currentIndex, 0);
5386
+ const nextIndex = (startIndex + direction + enabled.length) % enabled.length;
5387
+ const next = enabled[nextIndex];
5388
+ if (this.selectionMode() === 'single' && this.selectOnFocus()) {
5389
+ this.activate(next);
5390
+ }
5391
+ next.focus();
5392
+ }
5393
+ focusFirst() {
5394
+ const first = this.enabledCards()[0];
5395
+ if (!first)
5396
+ return;
5397
+ if (this.selectionMode() === 'single' && this.selectOnFocus()) {
5398
+ this.activate(first);
5399
+ }
5400
+ first.focus();
5401
+ }
5402
+ focusLast() {
5403
+ const enabled = this.enabledCards();
5404
+ const last = enabled.at(-1);
5405
+ if (!last)
5406
+ return;
5407
+ if (this.selectionMode() === 'single' && this.selectOnFocus()) {
5408
+ this.activate(last);
5409
+ }
5410
+ last.focus();
5411
+ }
5412
+ enabledCards() {
5413
+ this.cardsVersion();
5414
+ return (this.cardsQuery?.toArray() ?? []).filter(card => !card.disabled());
5415
+ }
5416
+ emitModelChange(value) {
5417
+ this.onChange(value);
5418
+ this.valueChange.emit(value);
5419
+ this.onValidatorChange();
5420
+ }
5421
+ normalizeIncomingValue(value, mode) {
5422
+ switch (mode) {
5423
+ case 'single':
5424
+ return Array.isArray(value) ? (value[0] ?? null) : value;
5425
+ case 'multiple':
5426
+ if (value == null)
5427
+ return [];
5428
+ return Array.isArray(value) ? value : [value];
5429
+ case 'none':
5430
+ default:
5431
+ return null;
5432
+ }
5433
+ }
5434
+ bumpCardsVersion() {
5435
+ this.cardsVersion.update(value => value + 1);
5436
+ }
5437
+ bumpControlTick() {
5438
+ this.controlTick.update(value => value + 1);
5439
+ }
5440
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
5441
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisCardGroup, isStandalone: true, selector: "solaris-card-group", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, submitted: { classPropertyName: "submitted", publicName: "submitted", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabledInput", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, minSelected: { classPropertyName: "minSelected", publicName: "minSelected", isSignal: true, isRequired: false, transformFunction: null }, maxSelected: { classPropertyName: "maxSelected", publicName: "maxSelected", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, requiredErrorKey: { classPropertyName: "requiredErrorKey", publicName: "requiredErrorKey", isSignal: true, isRequired: false, transformFunction: null }, minSelectedErrorKey: { classPropertyName: "minSelectedErrorKey", publicName: "minSelectedErrorKey", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedErrorKey: { classPropertyName: "maxSelectedErrorKey", publicName: "maxSelectedErrorKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", selectionRejected: "selectionRejected" }, host: { properties: { "attr.data-layout": "layout()", "attr.data-orientation": "orientation()", "attr.data-selection-mode": "selectionMode()", "attr.data-invalid": "invalidComputed() ? \"true\" : null", "attr.data-readonly": "readonly() ? \"true\" : null", "attr.role": "groupRole()", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.aria-invalid": "invalidComputed() ? \"true\" : null", "style.--solaris-card-group-gap": "resolvedGap()" }, classAttribute: "solaris-card-group-host" }, providers: [
5442
+ {
5443
+ provide: NG_VALUE_ACCESSOR,
5444
+ useExisting: forwardRef(() => SolarisCardGroup),
5445
+ multi: true,
5446
+ },
5447
+ {
5448
+ provide: NG_VALIDATORS,
5449
+ useExisting: forwardRef(() => SolarisCardGroup),
5450
+ multi: true,
5451
+ },
5452
+ {
5453
+ provide: SOLARIS_CARD_GROUP,
5454
+ useExisting: forwardRef(() => SolarisCardGroup),
5455
+ },
5456
+ ], queries: [{ propertyName: "cardsQuery", predicate: i0.forwardRef(() => SolarisSelectionCard), descendants: true }], ngImport: i0, template: "<div class=\"solaris-card-group__control\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n@if (errorKeyComputed()) {\r\n <solaris-field-error [textKey]=\"errorKeyComputed()\" [textParams]=\"errorParamsComputed()\"></solaris-field-error>\r\n} @else {\r\n <ng-content select=\"[card-group-message]\"></ng-content>\r\n}\r\n", styles: [":host.solaris-card-group-host{display:flex;min-width:0;gap:var(--solaris-card-group-gap, var(--solaris-space-4))}:host.solaris-card-group-host[data-layout=stack]{flex-direction:column}:host.solaris-card-group-host[data-layout=stack][data-orientation=horizontal]{flex-direction:row;flex-wrap:wrap;align-items:stretch}:host.solaris-card-group-host[data-layout=stack][data-orientation=compact]{flex-direction:column}:host.solaris-card-group-host[data-layout=grid]{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr))}:host.solaris-card-group-host[data-layout=grid][data-orientation=compact]{grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr))}:host.solaris-card-group-host[data-layout=grid][data-orientation=horizontal]{grid-template-columns:repeat(auto-fit,minmax(min(100%,28rem),1fr))}\n"], dependencies: [{ kind: "component", type: FieldErrorComponent, selector: "solaris-field-error", inputs: ["text", "textKey", "textParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5457
+ }
5458
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardGroup, decorators: [{
5459
+ type: Component,
5460
+ args: [{ selector: 'solaris-card-group', standalone: true, imports: [
5461
+ FieldErrorComponent
5462
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
5463
+ {
5464
+ provide: NG_VALUE_ACCESSOR,
5465
+ useExisting: forwardRef(() => SolarisCardGroup),
5466
+ multi: true,
5467
+ },
5468
+ {
5469
+ provide: NG_VALIDATORS,
5470
+ useExisting: forwardRef(() => SolarisCardGroup),
5471
+ multi: true,
5472
+ },
5473
+ {
5474
+ provide: SOLARIS_CARD_GROUP,
5475
+ useExisting: forwardRef(() => SolarisCardGroup),
5476
+ },
5477
+ ], host: {
5478
+ class: 'solaris-card-group-host',
5479
+ '[attr.data-layout]': 'layout()',
5480
+ '[attr.data-orientation]': 'orientation()',
5481
+ '[attr.data-selection-mode]': 'selectionMode()',
5482
+ '[attr.data-invalid]': 'invalidComputed() ? "true" : null',
5483
+ '[attr.data-readonly]': 'readonly() ? "true" : null',
5484
+ '[attr.role]': 'groupRole()',
5485
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
5486
+ '[attr.aria-invalid]': 'invalidComputed() ? "true" : null',
5487
+ '[style.--solaris-card-group-gap]': 'resolvedGap()',
5488
+ }, template: "<div class=\"solaris-card-group__control\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n@if (errorKeyComputed()) {\r\n <solaris-field-error [textKey]=\"errorKeyComputed()\" [textParams]=\"errorParamsComputed()\"></solaris-field-error>\r\n} @else {\r\n <ng-content select=\"[card-group-message]\"></ng-content>\r\n}\r\n", styles: [":host.solaris-card-group-host{display:flex;min-width:0;gap:var(--solaris-card-group-gap, var(--solaris-space-4))}:host.solaris-card-group-host[data-layout=stack]{flex-direction:column}:host.solaris-card-group-host[data-layout=stack][data-orientation=horizontal]{flex-direction:row;flex-wrap:wrap;align-items:stretch}:host.solaris-card-group-host[data-layout=stack][data-orientation=compact]{flex-direction:column}:host.solaris-card-group-host[data-layout=grid]{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr))}:host.solaris-card-group-host[data-layout=grid][data-orientation=compact]{grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr))}:host.solaris-card-group-host[data-layout=grid][data-orientation=horizontal]{grid-template-columns:repeat(auto-fit,minmax(min(100%,28rem),1fr))}\n"] }]
5489
+ }], ctorParameters: () => [], propDecorators: { readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], submitted: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitted", required: false }] }], selectOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOnFocus", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledInput", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], minSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSelected", required: false }] }], maxSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelected", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], compareWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareWith", required: false }] }], showErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "showErrors", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], requiredErrorKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredErrorKey", required: false }] }], minSelectedErrorKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSelectedErrorKey", required: false }] }], maxSelectedErrorKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelectedErrorKey", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], selectionRejected: [{ type: i0.Output, args: ["selectionRejected"] }], cardsQuery: [{
5490
+ type: ContentChildren,
5491
+ args: [forwardRef(() => SolarisSelectionCard), { descendants: true }]
5492
+ }] } });
5493
+
5494
+ class SolarisCardMediaDirective {
5495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMediaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5496
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardMediaDirective, isStandalone: true, selector: "[solaris-card-media]", host: { classAttribute: "solaris-card-slot solaris-card-slot--media" }, ngImport: i0 });
5497
+ }
5498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMediaDirective, decorators: [{
5499
+ type: Directive,
5500
+ args: [{
5501
+ selector: '[solaris-card-media]',
5502
+ standalone: true,
5503
+ host: { class: 'solaris-card-slot solaris-card-slot--media' },
5504
+ }]
5505
+ }] });
5506
+ class SolarisCardEyebrowDirective {
5507
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardEyebrowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5508
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardEyebrowDirective, isStandalone: true, selector: "[solaris-card-eyebrow]", host: { classAttribute: "solaris-card-slot solaris-card-slot--eyebrow" }, ngImport: i0 });
5509
+ }
5510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardEyebrowDirective, decorators: [{
5511
+ type: Directive,
5512
+ args: [{
5513
+ selector: '[solaris-card-eyebrow]',
5514
+ standalone: true,
5515
+ host: { class: 'solaris-card-slot solaris-card-slot--eyebrow' },
5516
+ }]
5517
+ }] });
5518
+ class SolarisCardTitleDirective {
5519
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5520
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardTitleDirective, isStandalone: true, selector: "[solaris-card-title]", host: { classAttribute: "solaris-card-slot solaris-card-slot--title" }, ngImport: i0 });
5521
+ }
5522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardTitleDirective, decorators: [{
5523
+ type: Directive,
5524
+ args: [{
5525
+ selector: '[solaris-card-title]',
5526
+ standalone: true,
5527
+ host: { class: 'solaris-card-slot solaris-card-slot--title' },
5528
+ }]
5529
+ }] });
5530
+ class SolarisCardDescriptionDirective {
5531
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5532
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardDescriptionDirective, isStandalone: true, selector: "[solaris-card-description]", host: { classAttribute: "solaris-card-slot solaris-card-slot--description" }, ngImport: i0 });
5533
+ }
5534
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardDescriptionDirective, decorators: [{
5535
+ type: Directive,
5536
+ args: [{
5537
+ selector: '[solaris-card-description]',
5538
+ standalone: true,
5539
+ host: { class: 'solaris-card-slot solaris-card-slot--description' },
5540
+ }]
5541
+ }] });
5542
+ class SolarisCardMetaDirective {
5543
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMetaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5544
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardMetaDirective, isStandalone: true, selector: "[solaris-card-meta]", host: { classAttribute: "solaris-card-slot solaris-card-slot--meta" }, ngImport: i0 });
5545
+ }
5546
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMetaDirective, decorators: [{
5547
+ type: Directive,
5548
+ args: [{
5549
+ selector: '[solaris-card-meta]',
5550
+ standalone: true,
5551
+ host: { class: 'solaris-card-slot solaris-card-slot--meta' },
5552
+ }]
5553
+ }] });
5554
+ class SolarisCardBadgeDirective {
5555
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardBadgeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5556
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardBadgeDirective, isStandalone: true, selector: "[solaris-card-badge]", host: { classAttribute: "solaris-card-slot solaris-card-slot--badge" }, ngImport: i0 });
5557
+ }
5558
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardBadgeDirective, decorators: [{
5559
+ type: Directive,
5560
+ args: [{
5561
+ selector: '[solaris-card-badge]',
5562
+ standalone: true,
5563
+ host: { class: 'solaris-card-slot solaris-card-slot--badge' },
5564
+ }]
5565
+ }] });
5566
+ class SolarisCardActionsDirective {
5567
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5568
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardActionsDirective, isStandalone: true, selector: "[solaris-card-actions]", host: { attributes: { "data-card-actions": "true" }, classAttribute: "solaris-card-slot solaris-card-slot--actions" }, ngImport: i0 });
5569
+ }
5570
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardActionsDirective, decorators: [{
5571
+ type: Directive,
5572
+ args: [{
5573
+ selector: '[solaris-card-actions]',
5574
+ standalone: true,
5575
+ host: {
5576
+ class: 'solaris-card-slot solaris-card-slot--actions',
5577
+ 'data-card-actions': 'true',
5578
+ },
5579
+ }]
5580
+ }] });
5581
+ class SolarisCardFooterDirective {
5582
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5583
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardFooterDirective, isStandalone: true, selector: "[solaris-card-footer]", host: { classAttribute: "solaris-card-slot solaris-card-slot--footer" }, ngImport: i0 });
5584
+ }
5585
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardFooterDirective, decorators: [{
5586
+ type: Directive,
5587
+ args: [{
5588
+ selector: '[solaris-card-footer]',
5589
+ standalone: true,
5590
+ host: { class: 'solaris-card-slot solaris-card-slot--footer' },
5591
+ }]
5592
+ }] });
5593
+ const SOLARIS_CARD_SLOT_DIRECTIVES = [
5594
+ SolarisCardMediaDirective,
5595
+ SolarisCardEyebrowDirective,
5596
+ SolarisCardTitleDirective,
5597
+ SolarisCardDescriptionDirective,
5598
+ SolarisCardMetaDirective,
5599
+ SolarisCardBadgeDirective,
5600
+ SolarisCardActionsDirective,
5601
+ SolarisCardFooterDirective,
5602
+ ];
5603
+
5604
+ class SolarisAvatarOverlayDirective {
5605
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5606
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisAvatarOverlayDirective, isStandalone: true, selector: "[solaris-avatar-overlay]", ngImport: i0 });
5607
+ }
5608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarOverlayDirective, decorators: [{
5609
+ type: Directive,
5610
+ args: [{
5611
+ selector: '[solaris-avatar-overlay]',
5612
+ standalone: true,
5613
+ }]
5614
+ }] });
5615
+
5616
+ class SolarisAvatarPresence {
5617
+ translation = inject(SOLARIS_TRANSLATION, { optional: true });
5618
+ translationConfiguration = inject(SOLARIS_TRANSLATION_CONFIGURATION, { optional: true });
5619
+ destroyRef = inject(DestroyRef);
5620
+ presence = input('offline', ...(ngDevMode ? [{ debugName: "presence" }] : []));
5621
+ timezone = input(null, ...(ngDevMode ? [{ debugName: "timezone" }] : []));
5622
+ lastSeenAt = input(null, ...(ngDevMode ? [{ debugName: "lastSeenAt" }] : []));
5623
+ quietHours = input(false, ...(ngDevMode ? [{ debugName: "quietHours" }] : []));
5624
+ workHoursStart = input(9, ...(ngDevMode ? [{ debugName: "workHoursStart" }] : []));
5625
+ workHoursEnd = input(18, ...(ngDevMode ? [{ debugName: "workHoursEnd" }] : []));
5626
+ shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : []));
5627
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
5628
+ ariaHidden = input(false, { ...(ngDevMode ? { debugName: "ariaHidden" } : {}), alias: 'aria-hidden', transform: booleanAttribute });
5629
+ hostClass = 'solaris-avatar-presence-host';
5630
+ nowTick = signal(Date.now(), ...(ngDevMode ? [{ debugName: "nowTick" }] : []));
5631
+ fallbackLanguage = this.translationConfiguration?.defaultLanguage ?? 'en-US';
5632
+ activeLanguage = this.translation
5633
+ ? toSignal(this.translation.languageChanges(), {
5634
+ initialValue: this.translation.language(),
5635
+ })
5636
+ : signal(this.fallbackLanguage);
5637
+ browserTimezone = typeof Intl === 'undefined'
5638
+ ? null
5639
+ : Intl.DateTimeFormat().resolvedOptions().timeZone || null;
5640
+ constructor() {
5641
+ if (globalThis.window !== undefined) {
5642
+ const intervalId = globalThis.setInterval(() => {
5643
+ this.nowTick.set(Date.now());
5644
+ }, 60_000);
5645
+ this.destroyRef.onDestroy(() => {
5646
+ globalThis.clearInterval(intervalId);
5647
+ });
5648
+ }
5649
+ }
5650
+ normalizedTimezone = computed(() => this.normalize(this.timezone()), ...(ngDevMode ? [{ debugName: "normalizedTimezone" }] : []));
5651
+ normalizedAriaLabel = computed(() => this.normalize(this.ariaLabel()), ...(ngDevMode ? [{ debugName: "normalizedAriaLabel" }] : []));
5652
+ parsedLastSeenAt = computed(() => this.parseDate(this.lastSeenAt()), ...(ngDevMode ? [{ debugName: "parsedLastSeenAt" }] : []));
5653
+ effectiveTimezone = computed(() => {
5654
+ return this.normalizedTimezone() || this.browserTimezone || null;
5655
+ }, ...(ngDevMode ? [{ debugName: "effectiveTimezone" }] : []));
5656
+ intlLocale = computed(() => {
5657
+ const lang = this.activeLanguage() || this.fallbackLanguage || 'en-US';
5658
+ return lang.replace('_', '-');
5659
+ }, ...(ngDevMode ? [{ debugName: "intlLocale" }] : []));
5660
+ translationPrefix = computed(() => {
5661
+ const uiScope = this.translationConfiguration?.uiScope ?? 'ui';
5662
+ return `${uiScope}.solaris.avatar.presence`;
5663
+ }, ...(ngDevMode ? [{ debugName: "translationPrefix" }] : []));
5664
+ normalizedWorkHours = computed(() => {
5665
+ const start = this.coerceHour(this.workHoursStart(), 9, 0, 23);
5666
+ const end = this.coerceHour(this.workHoursEnd(), 18, 1, 24);
5667
+ if (end <= start) {
5668
+ return { start: 9, end: 18 };
5669
+ }
5670
+ return { start, end };
5671
+ }, ...(ngDevMode ? [{ debugName: "normalizedWorkHours" }] : []));
5672
+ currentTimeContext = computed(() => {
5673
+ this.nowTick();
5674
+ this.activeLanguage();
5675
+ const timezone = this.effectiveTimezone();
5676
+ if (!timezone || typeof Intl === 'undefined') {
5677
+ return null;
5678
+ }
5679
+ try {
5680
+ const formatter = new Intl.DateTimeFormat('en-US', {
5681
+ hour: 'numeric',
5682
+ weekday: 'short',
5683
+ hourCycle: 'h23',
5684
+ timeZone: timezone,
5685
+ });
5686
+ const parts = formatter.formatToParts(new Date(this.nowTick()));
5687
+ const hour = Number(parts.find((part) => part.type === 'hour')?.value ?? Number.NaN);
5688
+ const weekday = parts.find((part) => part.type === 'weekday')?.value ?? '';
5689
+ if (Number.isNaN(hour)) {
5690
+ return null;
5691
+ }
5692
+ const weekdayIndex = this.resolveWeekdayIndex(weekday);
5693
+ return {
5694
+ hour,
5695
+ timezone,
5696
+ isWeekend: weekdayIndex === 0 || weekdayIndex === 6,
5697
+ };
5698
+ }
5699
+ catch {
5700
+ return null;
5701
+ }
5702
+ }, ...(ngDevMode ? [{ debugName: "currentTimeContext" }] : []));
5703
+ isQuietHoursAuto = computed(() => {
5704
+ const context = this.currentTimeContext();
5705
+ if (!context) {
5706
+ return false;
5707
+ }
5708
+ if (context.isWeekend) {
5709
+ return true;
5710
+ }
5711
+ const { start, end } = this.normalizedWorkHours();
5712
+ return context.hour < start || context.hour >= end;
5713
+ }, ...(ngDevMode ? [{ debugName: "isQuietHoursAuto" }] : []));
5714
+ showQuietHoursAccent = computed(() => {
5715
+ const mode = this.quietHours();
5716
+ if (mode === true)
5717
+ return true;
5718
+ if (mode === false)
5719
+ return false;
5720
+ return this.isQuietHoursAuto();
5721
+ }, ...(ngDevMode ? [{ debugName: "showQuietHoursAccent" }] : []));
5722
+ showDndSlash = computed(() => this.presence() === 'dnd', ...(ngDevMode ? [{ debugName: "showDndSlash" }] : []));
5723
+ stateClasses = computed(() => ([
5724
+ `state-${this.presence()}`,
5725
+ this.showQuietHoursAccent() ? 'has-quiet-hours' : '',
5726
+ ]), ...(ngDevMode ? [{ debugName: "stateClasses" }] : []));
5727
+ titleText = computed(() => {
5728
+ if (this.ariaHidden())
5729
+ return null;
5730
+ this.activeLanguage();
5731
+ return this.buildSemanticText();
5732
+ }, ...(ngDevMode ? [{ debugName: "titleText" }] : []));
5733
+ resolvedAriaLabel = computed(() => {
5734
+ if (this.ariaHidden())
5735
+ return null;
5736
+ this.activeLanguage();
5737
+ return this.normalizedAriaLabel() || this.buildSemanticText();
5738
+ }, ...(ngDevMode ? [{ debugName: "resolvedAriaLabel" }] : []));
5739
+ buildSemanticText() {
5740
+ const parts = [this.translate(`states.${this.presence()}`)];
5741
+ if (this.presence() === 'offline') {
5742
+ const lastSeen = this.getLastSeenLabel(this.parsedLastSeenAt());
5743
+ if (lastSeen) {
5744
+ parts.push(lastSeen);
5745
+ }
5746
+ }
5747
+ if (this.showQuietHoursAccent()) {
5748
+ parts.push(this.translate('quietHours'));
5749
+ }
5750
+ return parts.join(' • ');
5751
+ }
5752
+ getLastSeenLabel(value) {
5753
+ if (!value || Number.isNaN(value.getTime())) {
5754
+ return null;
5755
+ }
5756
+ const now = new Date(this.nowTick());
5757
+ const diffMs = Math.max(0, now.getTime() - value.getTime());
5758
+ const minuteMs = 60_000;
5759
+ const hourMs = 60 * minuteMs;
5760
+ if (diffMs < minuteMs) {
5761
+ return this.translate('lastSeen.now');
5762
+ }
5763
+ if (diffMs < hourMs) {
5764
+ return this.translate('lastSeen.minutesAgo', {
5765
+ minutes: Math.floor(diffMs / minuteMs),
5766
+ });
5767
+ }
5768
+ if (diffMs < 6 * hourMs) {
5769
+ return this.translate('lastSeen.hoursAgo', {
5770
+ hours: Math.floor(diffMs / hourMs),
5771
+ });
5772
+ }
5773
+ const timeLabel = this.formatDate(value, {
5774
+ hour: '2-digit',
5775
+ minute: '2-digit',
5776
+ });
5777
+ if (this.isSameCalendarDay(value, now)) {
5778
+ return this.translate('lastSeen.todayAt', {
5779
+ time: timeLabel,
5780
+ });
5781
+ }
5782
+ const yesterday = new Date(now);
5783
+ yesterday.setDate(now.getDate() - 1);
5784
+ if (this.isSameCalendarDay(value, yesterday)) {
5785
+ return this.translate('lastSeen.yesterdayAt', {
5786
+ time: timeLabel,
5787
+ });
5788
+ }
5789
+ return this.translate('lastSeen.onDate', {
5790
+ date: this.formatDate(value, {
5791
+ day: '2-digit',
5792
+ month: '2-digit',
5793
+ year: 'numeric',
5794
+ hour: '2-digit',
5795
+ minute: '2-digit',
5796
+ }),
5797
+ });
5798
+ }
5799
+ formatDate(value, options) {
5800
+ try {
5801
+ return new Intl.DateTimeFormat(this.intlLocale(), options).format(value);
5802
+ }
5803
+ catch {
5804
+ return value.toLocaleString();
5805
+ }
5806
+ }
5807
+ translate(key, params) {
5808
+ const fullKey = `${this.translationPrefix()}.${key}`;
5809
+ if (this.translation) {
5810
+ const translated = this.translation.translate(fullKey, params);
5811
+ if (translated && translated !== fullKey) {
5812
+ return translated;
5813
+ }
5814
+ }
5815
+ return this.fallbackTranslate(key, params);
5816
+ }
5817
+ fallbackTranslate(key, params) {
5818
+ const isPt = this.intlLocale().toLowerCase().startsWith('pt');
5819
+ const dict = isPt
5820
+ ? {
5821
+ 'states.online': 'Online',
5822
+ 'states.offline': 'Offline',
5823
+ 'states.away': 'Ausente',
5824
+ 'states.busy': 'Ocupado',
5825
+ 'states.dnd': 'Não perturbe',
5826
+ 'quietHours': 'Fora do expediente local',
5827
+ 'lastSeen.now': 'Visto agora',
5828
+ 'lastSeen.minutesAgo': `Visto há ${params?.['minutes'] ?? 0} min`,
5829
+ 'lastSeen.hoursAgo': `Visto há ${params?.['hours'] ?? 0} h`,
5830
+ 'lastSeen.todayAt': `Visto hoje às ${params?.['time'] ?? ''}`,
5831
+ 'lastSeen.yesterdayAt': `Visto ontem às ${params?.['time'] ?? ''}`,
5832
+ 'lastSeen.onDate': `Visto em ${params?.['date'] ?? ''}`,
5833
+ }
5834
+ : {
5835
+ 'states.online': 'Online',
5836
+ 'states.offline': 'Offline',
5837
+ 'states.away': 'Away',
5838
+ 'states.busy': 'Busy',
5839
+ 'states.dnd': 'Do not disturb',
5840
+ 'quietHours': 'Outside local working hours',
5841
+ 'lastSeen.now': 'Seen just now',
5842
+ 'lastSeen.minutesAgo': `Seen ${params?.['minutes'] ?? 0} min ago`,
5843
+ 'lastSeen.hoursAgo': `Seen ${params?.['hours'] ?? 0} h ago`,
5844
+ 'lastSeen.todayAt': `Seen today at ${params?.['time'] ?? ''}`,
5845
+ 'lastSeen.yesterdayAt': `Seen yesterday at ${params?.['time'] ?? ''}`,
5846
+ 'lastSeen.onDate': `Seen on ${params?.['date'] ?? ''}`,
5847
+ };
5848
+ return dict[key] ?? key;
5849
+ }
5850
+ isSameCalendarDay(a, b) {
5851
+ return a.getFullYear() === b.getFullYear()
5852
+ && a.getMonth() === b.getMonth()
5853
+ && a.getDate() === b.getDate();
5854
+ }
5855
+ resolveWeekdayIndex(weekday) {
5856
+ switch (weekday.toLowerCase()) {
5857
+ case 'sun': return 0;
5858
+ case 'mon': return 1;
5859
+ case 'tue': return 2;
5860
+ case 'wed': return 3;
5861
+ case 'thu': return 4;
5862
+ case 'fri': return 5;
5863
+ case 'sat': return 6;
5864
+ default: return -1;
5865
+ }
5866
+ }
5867
+ coerceHour(value, fallback, min, max) {
5868
+ const numeric = Number(value);
5869
+ if (Number.isNaN(numeric)) {
5870
+ return fallback;
5871
+ }
5872
+ return Math.min(Math.max(Math.floor(numeric), min), max);
5873
+ }
5874
+ parseDate(value) {
5875
+ if (value == null || value === '') {
5876
+ return null;
5877
+ }
5878
+ if (value instanceof Date) {
5879
+ return Number.isNaN(value.getTime()) ? null : value;
5880
+ }
5881
+ const parsed = new Date(value);
5882
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
5883
+ }
5884
+ normalize(value) {
5885
+ return String(value ?? '').trim();
5886
+ }
5887
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarPresence, deps: [], target: i0.ɵɵFactoryTarget.Component });
5888
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisAvatarPresence, isStandalone: true, selector: "solaris-avatar-presence", inputs: { presence: { classPropertyName: "presence", publicName: "presence", isSignal: true, isRequired: false, transformFunction: null }, timezone: { classPropertyName: "timezone", publicName: "timezone", isSignal: true, isRequired: false, transformFunction: null }, lastSeenAt: { classPropertyName: "lastSeenAt", publicName: "lastSeenAt", isSignal: true, isRequired: false, transformFunction: null }, quietHours: { classPropertyName: "quietHours", publicName: "quietHours", isSignal: true, isRequired: false, transformFunction: null }, workHoursStart: { classPropertyName: "workHoursStart", publicName: "workHoursStart", isSignal: true, isRequired: false, transformFunction: null }, workHoursEnd: { classPropertyName: "workHoursEnd", publicName: "workHoursEnd", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaHidden: { classPropertyName: "ariaHidden", publicName: "aria-hidden", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.hostClass" } }, ngImport: i0, template: "<span class=\"solaris-avatar-presence\" [attr.title]=\"titleText()\"\r\n [attr.aria-label]=\"resolvedAriaLabel()\" [attr.aria-hidden]=\"ariaHidden() ? 'true' : null\"\r\n [ngClass]=\"[...stateClasses(), shape() === 'square' ? 'shape-square' : 'shape-circle']\">\r\n <span class=\"solaris-avatar-presence__dot\" aria-hidden=\"true\">\r\n @if (showDndSlash()) {\r\n <span class=\"solaris-avatar-presence__slash\"></span>\r\n }\r\n </span>\r\n\r\n @if (showQuietHoursAccent()) {\r\n <span class=\"solaris-avatar-presence__quiet\" aria-hidden=\"true\">z</span>\r\n }\r\n</span>\r\n", styles: [".solaris-avatar-presence-host{display:inline-flex}.solaris-avatar-presence{--solaris-avatar-presence-fg: #e5e7ebff;--solaris-avatar-presence-dot-size: 1.8rem;--solaris-avatar-presence-quiet-size: .9rem;--solaris-avatar-presence-slash-width: .2rem;--solaris-avatar-presence-bg: var(--solaris-color-text-muted);--solaris-avatar-presence-ring: .15rem solid var(--solaris-color-surface-2);flex-shrink:0;line-height:1;-webkit-user-select:none;user-select:none;position:relative;display:inline-block;block-size:var(--solaris-avatar-presence-dot-size);inline-size:var(--solaris-avatar-presence-dot-size)}.solaris-avatar-presence__dot{inset:0;block-size:100%;inline-size:100%;min-block-size:0;min-inline-size:0;position:absolute;align-items:center;display:inline-flex;justify-content:center;box-shadow:var(--solaris-shadow-xs);color:var(--solaris-avatar-presence-fg);border-radius:var(--solaris-radius-full);border:var(--solaris-avatar-presence-ring);background:var(--solaris-avatar-presence-bg)}.solaris-avatar-presence.shape-square{--solaris-avatar-presence-dot-size: 1.6rem}.solaris-avatar-presence.shape-square .solaris-avatar-presence__dot{border-radius:.5rem}.solaris-avatar-presence.shape-square .solaris-avatar-presence__quiet{inset-block-end:-.25rem;inset-inline-end:-.05rem}.solaris-avatar-presence__slash{display:block;inline-size:70%;max-inline-size:100%;background:currentColor;border-radius:var(--solaris-radius-full);block-size:var(--solaris-avatar-presence-slash-width)}.solaris-avatar-presence__quiet{border:0;z-index:2;line-height:1;font-weight:900;box-shadow:none;position:absolute;font-size:1.125rem;align-items:center;display:inline-flex;justify-content:center;background:transparent;letter-spacing:-.1em;paint-order:stroke fill;text-transform:lowercase;inset-block-end:-.15rem;inset-inline-end:.15rem;-webkit-text-stroke:2px var(--solaris-color-surface);filter:drop-shadow(0 0 .08rem var(--solaris-color-surface)) drop-shadow(0 0 .08rem var(--solaris-color-surface));color:color-mix(in srgb,var(--solaris-color-text-muted) 92%,transparent)}.solaris-avatar-presence.state-online{--solaris-avatar-presence-bg: var(--solaris-color-success)}.solaris-avatar-presence.state-away{--solaris-avatar-presence-fg: var(--solaris-color-text);--solaris-avatar-presence-bg: var(--solaris-color-warning)}.solaris-avatar-presence.state-busy{--solaris-avatar-presence-bg: var(--solaris-color-error)}.solaris-avatar-presence.state-dnd{--solaris-avatar-presence-bg: color-mix(in srgb, var(--solaris-color-error) 75%, black);--solaris-avatar-presence-fg: color-mix(in srgb, #e5e7ebff 75%, transparent)}.solaris-avatar-presence.state-offline{--solaris-avatar-presence-bg: color-mix(in srgb, var(--solaris-color-text-muted) 60%, black)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5889
+ }
5890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarPresence, decorators: [{
5891
+ type: Component,
5892
+ args: [{ selector: 'solaris-avatar-presence', standalone: true, imports: [NgClass], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"solaris-avatar-presence\" [attr.title]=\"titleText()\"\r\n [attr.aria-label]=\"resolvedAriaLabel()\" [attr.aria-hidden]=\"ariaHidden() ? 'true' : null\"\r\n [ngClass]=\"[...stateClasses(), shape() === 'square' ? 'shape-square' : 'shape-circle']\">\r\n <span class=\"solaris-avatar-presence__dot\" aria-hidden=\"true\">\r\n @if (showDndSlash()) {\r\n <span class=\"solaris-avatar-presence__slash\"></span>\r\n }\r\n </span>\r\n\r\n @if (showQuietHoursAccent()) {\r\n <span class=\"solaris-avatar-presence__quiet\" aria-hidden=\"true\">z</span>\r\n }\r\n</span>\r\n", styles: [".solaris-avatar-presence-host{display:inline-flex}.solaris-avatar-presence{--solaris-avatar-presence-fg: #e5e7ebff;--solaris-avatar-presence-dot-size: 1.8rem;--solaris-avatar-presence-quiet-size: .9rem;--solaris-avatar-presence-slash-width: .2rem;--solaris-avatar-presence-bg: var(--solaris-color-text-muted);--solaris-avatar-presence-ring: .15rem solid var(--solaris-color-surface-2);flex-shrink:0;line-height:1;-webkit-user-select:none;user-select:none;position:relative;display:inline-block;block-size:var(--solaris-avatar-presence-dot-size);inline-size:var(--solaris-avatar-presence-dot-size)}.solaris-avatar-presence__dot{inset:0;block-size:100%;inline-size:100%;min-block-size:0;min-inline-size:0;position:absolute;align-items:center;display:inline-flex;justify-content:center;box-shadow:var(--solaris-shadow-xs);color:var(--solaris-avatar-presence-fg);border-radius:var(--solaris-radius-full);border:var(--solaris-avatar-presence-ring);background:var(--solaris-avatar-presence-bg)}.solaris-avatar-presence.shape-square{--solaris-avatar-presence-dot-size: 1.6rem}.solaris-avatar-presence.shape-square .solaris-avatar-presence__dot{border-radius:.5rem}.solaris-avatar-presence.shape-square .solaris-avatar-presence__quiet{inset-block-end:-.25rem;inset-inline-end:-.05rem}.solaris-avatar-presence__slash{display:block;inline-size:70%;max-inline-size:100%;background:currentColor;border-radius:var(--solaris-radius-full);block-size:var(--solaris-avatar-presence-slash-width)}.solaris-avatar-presence__quiet{border:0;z-index:2;line-height:1;font-weight:900;box-shadow:none;position:absolute;font-size:1.125rem;align-items:center;display:inline-flex;justify-content:center;background:transparent;letter-spacing:-.1em;paint-order:stroke fill;text-transform:lowercase;inset-block-end:-.15rem;inset-inline-end:.15rem;-webkit-text-stroke:2px var(--solaris-color-surface);filter:drop-shadow(0 0 .08rem var(--solaris-color-surface)) drop-shadow(0 0 .08rem var(--solaris-color-surface));color:color-mix(in srgb,var(--solaris-color-text-muted) 92%,transparent)}.solaris-avatar-presence.state-online{--solaris-avatar-presence-bg: var(--solaris-color-success)}.solaris-avatar-presence.state-away{--solaris-avatar-presence-fg: var(--solaris-color-text);--solaris-avatar-presence-bg: var(--solaris-color-warning)}.solaris-avatar-presence.state-busy{--solaris-avatar-presence-bg: var(--solaris-color-error)}.solaris-avatar-presence.state-dnd{--solaris-avatar-presence-bg: color-mix(in srgb, var(--solaris-color-error) 75%, black);--solaris-avatar-presence-fg: color-mix(in srgb, #e5e7ebff 75%, transparent)}.solaris-avatar-presence.state-offline{--solaris-avatar-presence-bg: color-mix(in srgb, var(--solaris-color-text-muted) 60%, black)}\n"] }]
5893
+ }], ctorParameters: () => [], propDecorators: { presence: [{ type: i0.Input, args: [{ isSignal: true, alias: "presence", required: false }] }], timezone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timezone", required: false }] }], lastSeenAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "lastSeenAt", required: false }] }], quietHours: [{ type: i0.Input, args: [{ isSignal: true, alias: "quietHours", required: false }] }], workHoursStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "workHoursStart", required: false }] }], workHoursEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "workHoursEnd", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-hidden", required: false }] }], hostClass: [{
5894
+ type: HostBinding,
5895
+ args: ['class']
5896
+ }] } });
5897
+
5898
+ class SolarisAvatar {
5899
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
5900
+ shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : []));
5901
+ variant = input('auto', ...(ngDevMode ? [{ debugName: "variant" }] : []));
5902
+ src = input(null, ...(ngDevMode ? [{ debugName: "src" }] : []));
5903
+ alt = input(null, ...(ngDevMode ? [{ debugName: "alt" }] : []));
5904
+ name = input(null, ...(ngDevMode ? [{ debugName: "name" }] : []));
5905
+ initials = input(null, ...(ngDevMode ? [{ debugName: "initials" }] : []));
5906
+ color = input('surface', ...(ngDevMode ? [{ debugName: "color" }] : []));
5907
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: booleanAttribute });
5908
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
5909
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : {}), transform: booleanAttribute });
5910
+ buttonType = input('button', ...(ngDevMode ? [{ debugName: "buttonType" }] : []));
5911
+ asButton = input(false, { ...(ngDevMode ? { debugName: "asButton" } : {}), transform: booleanAttribute });
5912
+ radius = input(null, ...(ngDevMode ? [{ debugName: "radius" }] : []));
5913
+ objectFit = input('cover', ...(ngDevMode ? [{ debugName: "objectFit" }] : []));
5914
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
5915
+ ariaHidden = input(false, { ...(ngDevMode ? { debugName: "ariaHidden" } : {}), alias: 'aria-hidden', transform: booleanAttribute });
5916
+ hostClass = 'solaris-avatar-host';
5917
+ imageFailed = signal(false, ...(ngDevMode ? [{ debugName: "imageFailed" }] : []));
5918
+ presetColors = new Set([
5919
+ 'primary',
5920
+ 'surface',
5921
+ 'success',
5922
+ 'warning',
5923
+ 'error',
5924
+ 'info',
5925
+ ]);
5926
+ constructor() {
5927
+ effect(() => {
5928
+ this.src();
5929
+ this.imageFailed.set(false);
5930
+ });
5931
+ }
5932
+ normalizedSrc = computed(() => this.normalize(this.src()), ...(ngDevMode ? [{ debugName: "normalizedSrc" }] : []));
5933
+ normalizedAlt = computed(() => this.normalize(this.alt()), ...(ngDevMode ? [{ debugName: "normalizedAlt" }] : []));
5934
+ normalizedName = computed(() => this.normalize(this.name()), ...(ngDevMode ? [{ debugName: "normalizedName" }] : []));
5935
+ normalizedInitials = computed(() => this.normalize(this.initials()), ...(ngDevMode ? [{ debugName: "normalizedInitials" }] : []));
5936
+ normalizedAriaLabel = computed(() => this.normalize(this.ariaLabel()), ...(ngDevMode ? [{ debugName: "normalizedAriaLabel" }] : []));
5937
+ resolvedInitials = computed(() => {
5938
+ const explicit = this.normalizedInitials();
5939
+ if (explicit)
5940
+ return explicit.slice(0, 2).toUpperCase();
5941
+ const name = this.normalizedName();
5942
+ if (!name)
5943
+ return '';
5944
+ const parts = name.split(/\s+/).map(part => part.trim()).filter(Boolean);
5945
+ if (!parts.length)
5946
+ return '';
5947
+ if (parts.length === 1)
5948
+ return parts[0].slice(0, 1).toUpperCase();
5949
+ const first = parts[0]?.slice(0, 1) ?? '';
5950
+ const last = parts.at(-1)?.slice(0, 1) ?? '';
5951
+ return `${first}${last}`.toUpperCase();
5952
+ }, ...(ngDevMode ? [{ debugName: "resolvedInitials" }] : []));
5953
+ showImage = computed(() => {
5954
+ if (this.loading())
5955
+ return false;
5956
+ const variant = this.variant();
5957
+ if (variant === 'letter' || variant === 'default')
5958
+ return false;
5959
+ return !!this.normalizedSrc() && !this.imageFailed();
5960
+ }, ...(ngDevMode ? [{ debugName: "showImage" }] : []));
5961
+ showLetter = computed(() => {
5962
+ if (this.loading())
5963
+ return false;
5964
+ const variant = this.variant();
5965
+ const initials = this.resolvedInitials();
5966
+ if (!initials)
5967
+ return false;
5968
+ if (variant === 'letter')
5969
+ return true;
5970
+ if (variant === 'default')
5971
+ return false;
5972
+ return !this.showImage();
5973
+ }, ...(ngDevMode ? [{ debugName: "showLetter" }] : []));
5974
+ showDefault = computed(() => {
5975
+ if (this.loading())
5976
+ return false;
5977
+ return !this.showImage() && !this.showLetter();
5978
+ }, ...(ngDevMode ? [{ debugName: "showDefault" }] : []));
5979
+ isCustomColor = computed(() => !this.presetColors.has(this.color()), ...(ngDevMode ? [{ debugName: "isCustomColor" }] : []));
5980
+ colorClass = computed(() => {
5981
+ return this.isCustomColor() ? 'color-custom' : `color-${this.color()}`;
5982
+ }, ...(ngDevMode ? [{ debugName: "colorClass" }] : []));
5983
+ customColorValue = computed(() => {
5984
+ return this.isCustomColor() ? String(this.color()) : null;
5985
+ }, ...(ngDevMode ? [{ debugName: "customColorValue" }] : []));
5986
+ resolvedRadius = computed(() => {
5987
+ const radius = this.normalize(this.radius());
5988
+ if (!radius) {
5989
+ return this.shape() === 'circle'
5990
+ ? 'var(--solaris-avatar-radius-circle)'
5991
+ : 'var(--solaris-avatar-radius-square)';
5992
+ }
5993
+ switch (radius) {
5994
+ case 'none': return 'var(--solaris-radius-none)';
5995
+ case 'sm': return 'var(--solaris-radius-sm)';
5996
+ case 'md': return 'var(--solaris-radius-md)';
5997
+ case 'lg': return 'var(--solaris-radius-lg)';
5998
+ case 'full': return 'var(--solaris-radius-full)';
5999
+ default: return radius;
6000
+ }
6001
+ }, ...(ngDevMode ? [{ debugName: "resolvedRadius" }] : []));
6002
+ rootClasses = computed(() => ([
6003
+ `size-${this.size()}`,
6004
+ `shape-${this.shape()}`,
6005
+ this.colorClass(),
6006
+ this.interactive() ? 'is-interactive' : '',
6007
+ this.disabled() ? 'is-disabled' : '',
6008
+ this.loading() ? 'is-loading' : '',
6009
+ this.asButton() ? 'is-button' : '',
6010
+ ]), ...(ngDevMode ? [{ debugName: "rootClasses" }] : []));
6011
+ accessibleLabel = computed(() => {
6012
+ if (this.ariaHidden())
6013
+ return null;
6014
+ return this.normalizedAriaLabel()
6015
+ || this.normalizedAlt()
6016
+ || this.normalizedName()
6017
+ || this.resolvedInitials()
6018
+ || 'Avatar';
6019
+ }, ...(ngDevMode ? [{ debugName: "accessibleLabel" }] : []));
6020
+ rootRole = computed(() => {
6021
+ if (this.ariaHidden() || this.asButton())
6022
+ return null;
6023
+ return 'img';
6024
+ }, ...(ngDevMode ? [{ debugName: "rootRole" }] : []));
6025
+ onImageLoad() {
6026
+ this.imageFailed.set(false);
6027
+ }
6028
+ onImageError() {
6029
+ this.imageFailed.set(true);
6030
+ }
6031
+ normalize(value) {
6032
+ return String(value ?? '').trim();
6033
+ }
6034
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
6035
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisAvatar, isStandalone: true, selector: "solaris-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, buttonType: { classPropertyName: "buttonType", publicName: "buttonType", isSignal: true, isRequired: false, transformFunction: null }, asButton: { classPropertyName: "asButton", publicName: "asButton", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaHidden: { classPropertyName: "ariaHidden", publicName: "aria-hidden", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.hostClass" } }, ngImport: i0, template: "@if (asButton()) {\r\n <button class=\"solaris-avatar\" [ngClass]=\"rootClasses()\" [type]=\"buttonType()\" [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"accessibleLabel()\" [attr.aria-hidden]=\"ariaHidden() ? 'true' : null\"\r\n [style.--solaris-avatar-radius]=\"resolvedRadius()\" [style.--solaris-avatar-image-fit]=\"objectFit()\"\r\n [style.--solaris-avatar-custom-bg]=\"customColorValue()\">\r\n <span class=\"solaris-avatar__body\">\r\n @if (loading()) {\r\n <span class=\"solaris-avatar__skeleton\" aria-hidden=\"true\"></span>\r\n } @else if (showImage()) {\r\n <img class=\"solaris-avatar__image\" [src]=\"normalizedSrc()\" alt=\"\" aria-hidden=\"true\"\r\n decoding=\"async\" (load)=\"onImageLoad()\" (error)=\"onImageError()\">\r\n } @else if (showLetter()) {\r\n <span class=\"solaris-avatar__label\" aria-hidden=\"true\">\r\n {{ resolvedInitials() }}\r\n </span>\r\n } @else if (showDefault()) {\r\n <span class=\"solaris-avatar__placeholder\" aria-hidden=\"true\">\r\n <svg class=\"solaris-avatar__placeholder-svg\" viewBox=\"0 0 64 64\" preserveAspectRatio=\"xMidYMid meet\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle class=\"solaris-avatar__placeholder-head\" cx=\"32\" cy=\"25\" r=\"14\"></circle>\r\n <path class=\"solaris-avatar__placeholder-body\" d=\"M2 64 C6 50, 18 42, 32 45 C46 42, 58 50, 62 64 Z\"></path>\r\n </svg>\r\n </span>\r\n }\r\n </span>\r\n\r\n <span class=\"solaris-avatar__overlay\" aria-hidden=\"true\">\r\n <ng-content></ng-content>\r\n </span>\r\n </button>\r\n} @else {\r\n <span class=\"solaris-avatar\" [ngClass]=\"rootClasses()\" [attr.role]=\"rootRole()\" [attr.aria-label]=\"accessibleLabel()\"\r\n [attr.aria-hidden]=\"ariaHidden() ? 'true' : null\" [style.--solaris-avatar-radius]=\"resolvedRadius()\"\r\n [style.--solaris-avatar-image-fit]=\"objectFit()\" [style.--solaris-avatar-custom-bg]=\"customColorValue()\">\r\n <span class=\"solaris-avatar__body\">\r\n @if (loading()) {\r\n <span class=\"solaris-avatar__skeleton\" aria-hidden=\"true\"></span>\r\n } @else if (showImage()) {\r\n <img class=\"solaris-avatar__image\" [src]=\"normalizedSrc()\" alt=\"\" aria-hidden=\"true\"\r\n decoding=\"async\" (load)=\"onImageLoad()\" (error)=\"onImageError()\">\r\n } @else if (showLetter()) {\r\n <span class=\"solaris-avatar__label\" aria-hidden=\"true\">{{ resolvedInitials() }}</span>\r\n } @else if (showDefault()) {\r\n <span class=\"solaris-avatar__placeholder\" aria-hidden=\"true\">\r\n <svg class=\"solaris-avatar__placeholder-svg\" viewBox=\"0 0 64 64\" preserveAspectRatio=\"xMidYMid meet\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle class=\"solaris-avatar__placeholder-head\" cx=\"32\" cy=\"25\" r=\"14\"></circle>\r\n <path class=\"solaris-avatar__placeholder-body\" d=\"M2 64 C6 50, 18 42, 32 45 C46 42, 58 50, 62 64 Z\"></path>\r\n </svg>\r\n </span>\r\n }\r\n </span>\r\n\r\n <span class=\"solaris-avatar__overlay\" aria-hidden=\"true\">\r\n <ng-content></ng-content>\r\n </span>\r\n </span>\r\n}\r\n", styles: [".solaris-avatar-host{display:inline-flex;vertical-align:middle}.solaris-avatar{--solaris-avatar-size-xs: 2.4rem;--solaris-avatar-size-sm: 3.2rem;--solaris-avatar-size-md: 4rem;--solaris-avatar-size-lg: 4.8rem;--solaris-avatar-size-xl: 6.4rem;--solaris-avatar-radius-square: var(--solaris-radius-md);--solaris-avatar-radius-circle: var(--solaris-radius-full);--solaris-avatar-bg: var(--solaris-color-surface-2);--solaris-avatar-fg: var(--solaris-color-text);--solaris-avatar-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent);--solaris-avatar-placeholder-bg: var(--solaris-avatar-bg);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--solaris-avatar-fg) 62%, transparent);--solaris-avatar-ring-focus: 0 0 0 .3rem color-mix(in srgb, var(--solaris-color-primary) 26%, transparent);--solaris-avatar-shadow: none;--solaris-avatar-shadow-hover: var(--solaris-shadow-xs);--solaris-avatar-opacity-disabled: .56;--solaris-avatar-badge-size: 1.6rem;--solaris-avatar-badge-offset-x: 0;--solaris-avatar-badge-offset-y: 0;--solaris-avatar-badge-border: .2rem solid var(--solaris-color-surface);--solaris-avatar-image-fit: cover;--solaris-avatar-radius: var(--solaris-avatar-radius-circle);inline-size:var(--_avatar-size);block-size:var(--_avatar-size);padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;text-decoration:none;position:relative;display:inline-grid;place-items:center;-webkit-user-select:none;user-select:none;overflow:visible;outline:none}.solaris-avatar.size-xs{--_avatar-size: var(--solaris-avatar-size-xs);--solaris-avatar-font-size: var(--solaris-fs-10);--solaris-avatar-badge-size: 1.2rem}.solaris-avatar.size-sm{--_avatar-size: var(--solaris-avatar-size-sm);--solaris-avatar-font-size: var(--solaris-fs-12);--solaris-avatar-badge-size: 1.4rem}.solaris-avatar.size-md{--_avatar-size: var(--solaris-avatar-size-md);--solaris-avatar-font-size: var(--solaris-fs-14);--solaris-avatar-badge-size: 1.6rem}.solaris-avatar.size-lg{--_avatar-size: var(--solaris-avatar-size-lg);--solaris-avatar-font-size: var(--solaris-fs-16);--solaris-avatar-badge-size: 1.8rem}.solaris-avatar.size-xl{--_avatar-size: var(--solaris-avatar-size-xl);--solaris-avatar-font-size: var(--solaris-fs-20);--solaris-avatar-badge-size: 2rem}.solaris-avatar.shape-circle{--solaris-avatar-radius: var(--solaris-avatar-radius-circle)}.solaris-avatar.shape-square{--solaris-avatar-radius: var(--solaris-avatar-radius-square)}.solaris-avatar__body{display:grid;block-size:100%;overflow:hidden;inline-size:100%;place-items:center;color:var(--solaris-avatar-fg);background:var(--solaris-avatar-bg);box-shadow:var(--solaris-avatar-shadow);border-radius:var(--solaris-avatar-radius);border:1px solid var(--solaris-avatar-border);transition:box-shadow .15s ease,transform .15s ease,opacity .15s ease}.solaris-avatar__image{inline-size:100%;block-size:100%;display:block;object-fit:var(--solaris-avatar-image-fit)}.solaris-avatar__label{font-size:var(--solaris-avatar-font-size);font-weight:700;line-height:1;letter-spacing:var(--solaris-ls-sm);text-transform:uppercase}.solaris-avatar__placeholder{display:grid;block-size:100%;inline-size:100%;place-items:stretch;color:var(--solaris-avatar-placeholder-fg)}.solaris-avatar__placeholder-svg{inline-size:100%;block-size:100%;display:block}.solaris-avatar__placeholder-head,.solaris-avatar__placeholder-body{fill:currentColor}.solaris-avatar__overlay{position:absolute;inset-inline-end:var(--solaris-avatar-badge-offset-x);inset-block-end:var(--solaris-avatar-badge-offset-y);z-index:3;display:inline-flex;align-items:center;justify-content:center;min-inline-size:var(--solaris-avatar-badge-size);min-block-size:var(--solaris-avatar-badge-size);transform:translate(35%,35%);pointer-events:none}.solaris-avatar__overlay:empty{display:none}.solaris-avatar__overlay>*{max-inline-size:100%;flex-shrink:0;pointer-events:auto}.solaris-avatar__skeleton{inline-size:100%;block-size:100%;display:block;border-radius:inherit;background:linear-gradient(90deg,color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent),color-mix(in srgb,white 18%,var(--solaris-color-surface-2)),color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent));background-size:200% 100%;animation:solaris-avatar-shimmer 1.2s linear infinite}.solaris-avatar.is-interactive:not(.is-disabled),.solaris-avatar.is-button:not(.is-disabled){cursor:pointer}.solaris-avatar.is-interactive:not(.is-disabled):hover .solaris-avatar__body,.solaris-avatar.is-button:not(.is-disabled):hover .solaris-avatar__body{box-shadow:var(--solaris-avatar-shadow-hover)}.solaris-avatar.is-button:focus-visible .solaris-avatar__body{box-shadow:var(--solaris-avatar-ring-focus)}.solaris-avatar.is-disabled{opacity:var(--solaris-avatar-opacity-disabled);cursor:not-allowed}.solaris-avatar.is-disabled .solaris-avatar__body,.solaris-avatar:disabled .solaris-avatar__body{box-shadow:none}.solaris-avatar.shape-square .solaris-avatar__overlay{transform:none;inset-block-end:-.15rem;inset-inline-end:-.15rem}.solaris-avatar.color-surface{--_base: var(--solaris-color-surface-2);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 92%, white);--solaris-avatar-fg: var(--solaris-color-text);--solaris-avatar-border: color-mix(in srgb, var(--solaris-color-border) 70%, var(--_base))}.solaris-avatar.color-primary{--_base: var(--solaris-color-primary);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 22%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 88%, white);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--_base) 52%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 42%, var(--solaris-color-border))}.solaris-avatar.color-success{--_base: var(--solaris-color-success);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 22%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 88%, white);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--_base) 52%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 42%, var(--solaris-color-border))}.solaris-avatar.color-warning{--_base: var(--solaris-color-warning);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 22%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 88%, black);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--_base) 52%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 42%, var(--solaris-color-border))}.solaris-avatar.color-error{--_base: var(--solaris-color-error);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 16%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 78%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 34%, var(--solaris-color-border))}.solaris-avatar.color-info{--_base: var(--solaris-color-info);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 16%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 78%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 34%, var(--solaris-color-border))}.solaris-avatar.color-custom{--_base: var(--solaris-avatar-custom-bg, var(--solaris-color-surface-2));--solaris-avatar-fg: var(--_base);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 18%, var(--solaris-color-surface));--solaris-avatar-border: color-mix(in srgb, var(--_base) 34%, var(--solaris-color-border))}@keyframes solaris-avatar-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6036
+ }
6037
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatar, decorators: [{
6038
+ type: Component,
6039
+ args: [{ selector: 'solaris-avatar', standalone: true, imports: [
6040
+ NgClass
6041
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (asButton()) {\r\n <button class=\"solaris-avatar\" [ngClass]=\"rootClasses()\" [type]=\"buttonType()\" [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"accessibleLabel()\" [attr.aria-hidden]=\"ariaHidden() ? 'true' : null\"\r\n [style.--solaris-avatar-radius]=\"resolvedRadius()\" [style.--solaris-avatar-image-fit]=\"objectFit()\"\r\n [style.--solaris-avatar-custom-bg]=\"customColorValue()\">\r\n <span class=\"solaris-avatar__body\">\r\n @if (loading()) {\r\n <span class=\"solaris-avatar__skeleton\" aria-hidden=\"true\"></span>\r\n } @else if (showImage()) {\r\n <img class=\"solaris-avatar__image\" [src]=\"normalizedSrc()\" alt=\"\" aria-hidden=\"true\"\r\n decoding=\"async\" (load)=\"onImageLoad()\" (error)=\"onImageError()\">\r\n } @else if (showLetter()) {\r\n <span class=\"solaris-avatar__label\" aria-hidden=\"true\">\r\n {{ resolvedInitials() }}\r\n </span>\r\n } @else if (showDefault()) {\r\n <span class=\"solaris-avatar__placeholder\" aria-hidden=\"true\">\r\n <svg class=\"solaris-avatar__placeholder-svg\" viewBox=\"0 0 64 64\" preserveAspectRatio=\"xMidYMid meet\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle class=\"solaris-avatar__placeholder-head\" cx=\"32\" cy=\"25\" r=\"14\"></circle>\r\n <path class=\"solaris-avatar__placeholder-body\" d=\"M2 64 C6 50, 18 42, 32 45 C46 42, 58 50, 62 64 Z\"></path>\r\n </svg>\r\n </span>\r\n }\r\n </span>\r\n\r\n <span class=\"solaris-avatar__overlay\" aria-hidden=\"true\">\r\n <ng-content></ng-content>\r\n </span>\r\n </button>\r\n} @else {\r\n <span class=\"solaris-avatar\" [ngClass]=\"rootClasses()\" [attr.role]=\"rootRole()\" [attr.aria-label]=\"accessibleLabel()\"\r\n [attr.aria-hidden]=\"ariaHidden() ? 'true' : null\" [style.--solaris-avatar-radius]=\"resolvedRadius()\"\r\n [style.--solaris-avatar-image-fit]=\"objectFit()\" [style.--solaris-avatar-custom-bg]=\"customColorValue()\">\r\n <span class=\"solaris-avatar__body\">\r\n @if (loading()) {\r\n <span class=\"solaris-avatar__skeleton\" aria-hidden=\"true\"></span>\r\n } @else if (showImage()) {\r\n <img class=\"solaris-avatar__image\" [src]=\"normalizedSrc()\" alt=\"\" aria-hidden=\"true\"\r\n decoding=\"async\" (load)=\"onImageLoad()\" (error)=\"onImageError()\">\r\n } @else if (showLetter()) {\r\n <span class=\"solaris-avatar__label\" aria-hidden=\"true\">{{ resolvedInitials() }}</span>\r\n } @else if (showDefault()) {\r\n <span class=\"solaris-avatar__placeholder\" aria-hidden=\"true\">\r\n <svg class=\"solaris-avatar__placeholder-svg\" viewBox=\"0 0 64 64\" preserveAspectRatio=\"xMidYMid meet\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle class=\"solaris-avatar__placeholder-head\" cx=\"32\" cy=\"25\" r=\"14\"></circle>\r\n <path class=\"solaris-avatar__placeholder-body\" d=\"M2 64 C6 50, 18 42, 32 45 C46 42, 58 50, 62 64 Z\"></path>\r\n </svg>\r\n </span>\r\n }\r\n </span>\r\n\r\n <span class=\"solaris-avatar__overlay\" aria-hidden=\"true\">\r\n <ng-content></ng-content>\r\n </span>\r\n </span>\r\n}\r\n", styles: [".solaris-avatar-host{display:inline-flex;vertical-align:middle}.solaris-avatar{--solaris-avatar-size-xs: 2.4rem;--solaris-avatar-size-sm: 3.2rem;--solaris-avatar-size-md: 4rem;--solaris-avatar-size-lg: 4.8rem;--solaris-avatar-size-xl: 6.4rem;--solaris-avatar-radius-square: var(--solaris-radius-md);--solaris-avatar-radius-circle: var(--solaris-radius-full);--solaris-avatar-bg: var(--solaris-color-surface-2);--solaris-avatar-fg: var(--solaris-color-text);--solaris-avatar-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent);--solaris-avatar-placeholder-bg: var(--solaris-avatar-bg);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--solaris-avatar-fg) 62%, transparent);--solaris-avatar-ring-focus: 0 0 0 .3rem color-mix(in srgb, var(--solaris-color-primary) 26%, transparent);--solaris-avatar-shadow: none;--solaris-avatar-shadow-hover: var(--solaris-shadow-xs);--solaris-avatar-opacity-disabled: .56;--solaris-avatar-badge-size: 1.6rem;--solaris-avatar-badge-offset-x: 0;--solaris-avatar-badge-offset-y: 0;--solaris-avatar-badge-border: .2rem solid var(--solaris-color-surface);--solaris-avatar-image-fit: cover;--solaris-avatar-radius: var(--solaris-avatar-radius-circle);inline-size:var(--_avatar-size);block-size:var(--_avatar-size);padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;text-decoration:none;position:relative;display:inline-grid;place-items:center;-webkit-user-select:none;user-select:none;overflow:visible;outline:none}.solaris-avatar.size-xs{--_avatar-size: var(--solaris-avatar-size-xs);--solaris-avatar-font-size: var(--solaris-fs-10);--solaris-avatar-badge-size: 1.2rem}.solaris-avatar.size-sm{--_avatar-size: var(--solaris-avatar-size-sm);--solaris-avatar-font-size: var(--solaris-fs-12);--solaris-avatar-badge-size: 1.4rem}.solaris-avatar.size-md{--_avatar-size: var(--solaris-avatar-size-md);--solaris-avatar-font-size: var(--solaris-fs-14);--solaris-avatar-badge-size: 1.6rem}.solaris-avatar.size-lg{--_avatar-size: var(--solaris-avatar-size-lg);--solaris-avatar-font-size: var(--solaris-fs-16);--solaris-avatar-badge-size: 1.8rem}.solaris-avatar.size-xl{--_avatar-size: var(--solaris-avatar-size-xl);--solaris-avatar-font-size: var(--solaris-fs-20);--solaris-avatar-badge-size: 2rem}.solaris-avatar.shape-circle{--solaris-avatar-radius: var(--solaris-avatar-radius-circle)}.solaris-avatar.shape-square{--solaris-avatar-radius: var(--solaris-avatar-radius-square)}.solaris-avatar__body{display:grid;block-size:100%;overflow:hidden;inline-size:100%;place-items:center;color:var(--solaris-avatar-fg);background:var(--solaris-avatar-bg);box-shadow:var(--solaris-avatar-shadow);border-radius:var(--solaris-avatar-radius);border:1px solid var(--solaris-avatar-border);transition:box-shadow .15s ease,transform .15s ease,opacity .15s ease}.solaris-avatar__image{inline-size:100%;block-size:100%;display:block;object-fit:var(--solaris-avatar-image-fit)}.solaris-avatar__label{font-size:var(--solaris-avatar-font-size);font-weight:700;line-height:1;letter-spacing:var(--solaris-ls-sm);text-transform:uppercase}.solaris-avatar__placeholder{display:grid;block-size:100%;inline-size:100%;place-items:stretch;color:var(--solaris-avatar-placeholder-fg)}.solaris-avatar__placeholder-svg{inline-size:100%;block-size:100%;display:block}.solaris-avatar__placeholder-head,.solaris-avatar__placeholder-body{fill:currentColor}.solaris-avatar__overlay{position:absolute;inset-inline-end:var(--solaris-avatar-badge-offset-x);inset-block-end:var(--solaris-avatar-badge-offset-y);z-index:3;display:inline-flex;align-items:center;justify-content:center;min-inline-size:var(--solaris-avatar-badge-size);min-block-size:var(--solaris-avatar-badge-size);transform:translate(35%,35%);pointer-events:none}.solaris-avatar__overlay:empty{display:none}.solaris-avatar__overlay>*{max-inline-size:100%;flex-shrink:0;pointer-events:auto}.solaris-avatar__skeleton{inline-size:100%;block-size:100%;display:block;border-radius:inherit;background:linear-gradient(90deg,color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent),color-mix(in srgb,white 18%,var(--solaris-color-surface-2)),color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent));background-size:200% 100%;animation:solaris-avatar-shimmer 1.2s linear infinite}.solaris-avatar.is-interactive:not(.is-disabled),.solaris-avatar.is-button:not(.is-disabled){cursor:pointer}.solaris-avatar.is-interactive:not(.is-disabled):hover .solaris-avatar__body,.solaris-avatar.is-button:not(.is-disabled):hover .solaris-avatar__body{box-shadow:var(--solaris-avatar-shadow-hover)}.solaris-avatar.is-button:focus-visible .solaris-avatar__body{box-shadow:var(--solaris-avatar-ring-focus)}.solaris-avatar.is-disabled{opacity:var(--solaris-avatar-opacity-disabled);cursor:not-allowed}.solaris-avatar.is-disabled .solaris-avatar__body,.solaris-avatar:disabled .solaris-avatar__body{box-shadow:none}.solaris-avatar.shape-square .solaris-avatar__overlay{transform:none;inset-block-end:-.15rem;inset-inline-end:-.15rem}.solaris-avatar.color-surface{--_base: var(--solaris-color-surface-2);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 92%, white);--solaris-avatar-fg: var(--solaris-color-text);--solaris-avatar-border: color-mix(in srgb, var(--solaris-color-border) 70%, var(--_base))}.solaris-avatar.color-primary{--_base: var(--solaris-color-primary);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 22%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 88%, white);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--_base) 52%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 42%, var(--solaris-color-border))}.solaris-avatar.color-success{--_base: var(--solaris-color-success);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 22%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 88%, white);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--_base) 52%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 42%, var(--solaris-color-border))}.solaris-avatar.color-warning{--_base: var(--solaris-color-warning);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 22%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 88%, black);--solaris-avatar-placeholder-fg: color-mix(in srgb, var(--_base) 52%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 42%, var(--solaris-color-border))}.solaris-avatar.color-error{--_base: var(--solaris-color-error);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 16%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 78%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 34%, var(--solaris-color-border))}.solaris-avatar.color-info{--_base: var(--solaris-color-info);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 16%, var(--solaris-color-surface));--solaris-avatar-fg: color-mix(in srgb, var(--_base) 78%, white);--solaris-avatar-border: color-mix(in srgb, var(--_base) 34%, var(--solaris-color-border))}.solaris-avatar.color-custom{--_base: var(--solaris-avatar-custom-bg, var(--solaris-color-surface-2));--solaris-avatar-fg: var(--_base);--solaris-avatar-bg: color-mix(in srgb, var(--_base) 18%, var(--solaris-color-surface));--solaris-avatar-border: color-mix(in srgb, var(--_base) 34%, var(--solaris-color-border))}@keyframes solaris-avatar-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
6042
+ }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], initials: [{ type: i0.Input, args: [{ isSignal: true, alias: "initials", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], buttonType: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonType", required: false }] }], asButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "asButton", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], objectFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectFit", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-hidden", required: false }] }], hostClass: [{
6043
+ type: HostBinding,
6044
+ args: ['class']
6045
+ }] } });
6046
+
6047
+ class SolarisPresenceAvatar {
6048
+ translationService = inject(SOLARIS_TRANSLATION);
6049
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
6050
+ shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : []));
6051
+ variant = input('auto', ...(ngDevMode ? [{ debugName: "variant" }] : []));
6052
+ src = input(null, ...(ngDevMode ? [{ debugName: "src" }] : []));
6053
+ alt = input(null, ...(ngDevMode ? [{ debugName: "alt" }] : []));
6054
+ name = input(null, ...(ngDevMode ? [{ debugName: "name" }] : []));
6055
+ initials = input(null, ...(ngDevMode ? [{ debugName: "initials" }] : []));
6056
+ color = input('surface', ...(ngDevMode ? [{ debugName: "color" }] : []));
6057
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: booleanAttribute });
6058
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
6059
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : {}), transform: booleanAttribute });
6060
+ buttonType = input('button', ...(ngDevMode ? [{ debugName: "buttonType" }] : []));
6061
+ asButton = input(false, { ...(ngDevMode ? { debugName: "asButton" } : {}), transform: booleanAttribute });
6062
+ radius = input(null, ...(ngDevMode ? [{ debugName: "radius" }] : []));
6063
+ objectFit = input('cover', ...(ngDevMode ? [{ debugName: "objectFit" }] : []));
6064
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
6065
+ ariaHidden = input(false, { ...(ngDevMode ? { debugName: "ariaHidden" } : {}), alias: 'aria-hidden', transform: booleanAttribute });
6066
+ presence = input('offline', ...(ngDevMode ? [{ debugName: "presence" }] : []));
6067
+ presenceAriaLabel = input(null, ...(ngDevMode ? [{ debugName: "presenceAriaLabel" }] : []));
6068
+ timezone = input(null, ...(ngDevMode ? [{ debugName: "timezone" }] : []));
6069
+ lastSeenAt = input(null, ...(ngDevMode ? [{ debugName: "lastSeenAt" }] : []));
6070
+ quietHours = input('auto', ...(ngDevMode ? [{ debugName: "quietHours" }] : []));
6071
+ workHoursStart = input(9, ...(ngDevMode ? [{ debugName: "workHoursStart" }] : []));
6072
+ workHoursEnd = input(18, ...(ngDevMode ? [{ debugName: "workHoursEnd" }] : []));
6073
+ presenceTooltipKey = computed(() => {
6074
+ return this.translationService.translate(`ui.solaris.avatar.presence.states.${this.presence()}`);
6075
+ }, ...(ngDevMode ? [{ debugName: "presenceTooltipKey" }] : []));
6076
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisPresenceAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
6077
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: SolarisPresenceAvatar, isStandalone: true, selector: "solaris-presence-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, buttonType: { classPropertyName: "buttonType", publicName: "buttonType", isSignal: true, isRequired: false, transformFunction: null }, asButton: { classPropertyName: "asButton", publicName: "asButton", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaHidden: { classPropertyName: "ariaHidden", publicName: "aria-hidden", isSignal: true, isRequired: false, transformFunction: null }, presence: { classPropertyName: "presence", publicName: "presence", isSignal: true, isRequired: false, transformFunction: null }, presenceAriaLabel: { classPropertyName: "presenceAriaLabel", publicName: "presenceAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, timezone: { classPropertyName: "timezone", publicName: "timezone", isSignal: true, isRequired: false, transformFunction: null }, lastSeenAt: { classPropertyName: "lastSeenAt", publicName: "lastSeenAt", isSignal: true, isRequired: false, transformFunction: null }, quietHours: { classPropertyName: "quietHours", publicName: "quietHours", isSignal: true, isRequired: false, transformFunction: null }, workHoursStart: { classPropertyName: "workHoursStart", publicName: "workHoursStart", isSignal: true, isRequired: false, transformFunction: null }, workHoursEnd: { classPropertyName: "workHoursEnd", publicName: "workHoursEnd", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<solaris-avatar [src]=\"src()\" [alt]=\"alt()\" [name]=\"name()\" [initials]=\"initials()\" [size]=\"size()\" [shape]=\"shape()\"\r\n [variant]=\"variant()\" [color]=\"color()\" [loading]=\"loading()\" [disabled]=\"disabled()\" [interactive]=\"interactive()\"\r\n [buttonType]=\"buttonType()\" [asButton]=\"asButton()\" [radius]=\"radius()\" [objectFit]=\"objectFit()\"\r\n [aria-label]=\"ariaLabel()\" [aria-hidden]=\"ariaHidden()\" solaris-tooltip [tooltip-key]=\"presenceTooltipKey()\"\r\n tooltip-variant=\"default\" tooltip-size=\"sm\" tooltip-prefix-icon=\"ph ph-info\">\r\n\r\n <span solaris-avatar-overlay class=\"solaris-presence-avatar__overlay\" aria-hidden=\"true\">\r\n <solaris-avatar-presence [presence]=\"presence()\" [timezone]=\"timezone()\" [lastSeenAt]=\"lastSeenAt()\"\r\n [quietHours]=\"quietHours()\" [workHoursStart]=\"workHoursStart()\" [workHoursEnd]=\"workHoursEnd()\"\r\n [aria-label]=\"presenceAriaLabel()\" [aria-hidden]=\"ariaHidden()\" [shape]=\"shape()\">\r\n </solaris-avatar-presence>\r\n </span>\r\n</solaris-avatar>\r\n", styles: [":host{display:inline-flex;vertical-align:middle}.solaris-presence-avatar__overlay{display:inline-flex;align-items:center;justify-content:center;line-height:1}:host(.shape-square) .solaris-presence-avatar__overlay{transform:translate(18%,18%)}\n"], dependencies: [{ kind: "component", type: SolarisAvatar, selector: "solaris-avatar", inputs: ["size", "shape", "variant", "src", "alt", "name", "initials", "color", "loading", "disabled", "interactive", "buttonType", "asButton", "radius", "objectFit", "aria-label", "aria-hidden"] }, { kind: "component", type: SolarisAvatarPresence, selector: "solaris-avatar-presence", inputs: ["presence", "timezone", "lastSeenAt", "quietHours", "workHoursStart", "workHoursEnd", "shape", "aria-label", "aria-hidden"] }, { kind: "directive", type: SolarisTooltipDirective, selector: "[solaris-tooltip]", inputs: ["solaris-tooltip", "tooltip-position", "tooltip-variant", "tooltip-size", "tooltip-prefix-icon", "tooltip-disabled", "tooltip-show-delay", "tooltip-hide-delay", "tooltip-offset", "tooltip-auto-flip", "tooltip-auto-shift", "tooltip-viewport-padding", "tooltip-key", "tooltip-params"] }, { kind: "directive", type: SolarisAvatarOverlayDirective, selector: "[solaris-avatar-overlay]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6078
+ }
6079
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisPresenceAvatar, decorators: [{
6080
+ type: Component,
6081
+ args: [{ selector: 'solaris-presence-avatar', standalone: true, imports: [
6082
+ SolarisAvatar,
6083
+ SolarisAvatarPresence,
6084
+ SolarisTooltipDirective,
6085
+ SolarisAvatarOverlayDirective,
6086
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<solaris-avatar [src]=\"src()\" [alt]=\"alt()\" [name]=\"name()\" [initials]=\"initials()\" [size]=\"size()\" [shape]=\"shape()\"\r\n [variant]=\"variant()\" [color]=\"color()\" [loading]=\"loading()\" [disabled]=\"disabled()\" [interactive]=\"interactive()\"\r\n [buttonType]=\"buttonType()\" [asButton]=\"asButton()\" [radius]=\"radius()\" [objectFit]=\"objectFit()\"\r\n [aria-label]=\"ariaLabel()\" [aria-hidden]=\"ariaHidden()\" solaris-tooltip [tooltip-key]=\"presenceTooltipKey()\"\r\n tooltip-variant=\"default\" tooltip-size=\"sm\" tooltip-prefix-icon=\"ph ph-info\">\r\n\r\n <span solaris-avatar-overlay class=\"solaris-presence-avatar__overlay\" aria-hidden=\"true\">\r\n <solaris-avatar-presence [presence]=\"presence()\" [timezone]=\"timezone()\" [lastSeenAt]=\"lastSeenAt()\"\r\n [quietHours]=\"quietHours()\" [workHoursStart]=\"workHoursStart()\" [workHoursEnd]=\"workHoursEnd()\"\r\n [aria-label]=\"presenceAriaLabel()\" [aria-hidden]=\"ariaHidden()\" [shape]=\"shape()\">\r\n </solaris-avatar-presence>\r\n </span>\r\n</solaris-avatar>\r\n", styles: [":host{display:inline-flex;vertical-align:middle}.solaris-presence-avatar__overlay{display:inline-flex;align-items:center;justify-content:center;line-height:1}:host(.shape-square) .solaris-presence-avatar__overlay{transform:translate(18%,18%)}\n"] }]
6087
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], initials: [{ type: i0.Input, args: [{ isSignal: true, alias: "initials", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], buttonType: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonType", required: false }] }], asButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "asButton", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], objectFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectFit", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-hidden", required: false }] }], presence: [{ type: i0.Input, args: [{ isSignal: true, alias: "presence", required: false }] }], presenceAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "presenceAriaLabel", required: false }] }], timezone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timezone", required: false }] }], lastSeenAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "lastSeenAt", required: false }] }], quietHours: [{ type: i0.Input, args: [{ isSignal: true, alias: "quietHours", required: false }] }], workHoursStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "workHoursStart", required: false }] }], workHoursEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "workHoursEnd", required: false }] }] } });
6088
+
6089
+ class SolarisAvatarStack {
6090
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
6091
+ max = input(4, { ...(ngDevMode ? { debugName: "max" } : {}), transform: numberAttribute });
6092
+ showPresence = input(false, { ...(ngDevMode ? { debugName: "showPresence" } : {}), transform: booleanAttribute });
6093
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
6094
+ shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : []));
6095
+ overlap = input('md', ...(ngDevMode ? [{ debugName: "overlap" }] : []));
6096
+ visibleItems = computed(() => {
6097
+ const max = Math.max(1, this.max());
6098
+ return this.items().slice(0, max);
6099
+ }, ...(ngDevMode ? [{ debugName: "visibleItems" }] : []));
6100
+ hiddenCount = computed(() => {
6101
+ return Math.max(0, this.items().length - this.visibleItems().length);
6102
+ }, ...(ngDevMode ? [{ debugName: "hiddenCount" }] : []));
6103
+ hasHiddenItems = computed(() => this.hiddenCount() > 0, ...(ngDevMode ? [{ debugName: "hasHiddenItems" }] : []));
6104
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarStack, deps: [], target: i0.ɵɵFactoryTarget.Component });
6105
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisAvatarStack, isStandalone: true, selector: "solaris-avatar-stack", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, showPresence: { classPropertyName: "showPresence", publicName: "showPresence", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, overlap: { classPropertyName: "overlap", publicName: "overlap", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"solaris-avatar-stack\" [attr.data-size]=\"size()\"\r\n [attr.data-shape]=\"shape()\" [attr.data-overlap]=\"overlap()\">\r\n @for (item of visibleItems(); track item.name ?? item.src ?? $index) {\r\n <span class=\"solaris-avatar-stack__item\">\r\n @if (showPresence()) {\r\n <solaris-presence-avatar [size]=\"size()\" [shape]=\"shape()\" [src]=\"item.src ?? null\" [alt]=\"item.alt ?? null\"\r\n [name]=\"item.name ?? null\" [initials]=\"item.initials ?? null\" [presence]=\"item.presence ?? 'offline'\"\r\n [timezone]=\"item.timezone ?? null\" [lastSeenAt]=\"item.lastSeenAt ?? null\" [quietHours]=\"item.quietHours ?? false\"/>\r\n } @else {\r\n <solaris-avatar [size]=\"size()\" [shape]=\"shape()\" [src]=\"item.src ?? null\" [alt]=\"item.alt ?? null\"\r\n [name]=\"item.name ?? null\" [initials]=\"item.initials ?? null\"/>\r\n }\r\n </span>\r\n }\r\n\r\n @if (hasHiddenItems()) {\r\n <span class=\"solaris-avatar-stack__item solaris-avatar-stack__more\">\r\n +{{ hiddenCount() }}\r\n </span>\r\n }\r\n</div>\r\n", styles: [":host{display:inline-flex;vertical-align:middle}.solaris-avatar-stack{--solaris-avatar-stack-overlap: -.8rem;--solaris-avatar-stack-more-size: 4rem;--solaris-avatar-stack-more-bg: var(--solaris-color-surface-2);--solaris-avatar-stack-more-fg: var(--solaris-color-text);--solaris-avatar-stack-ring: .2rem solid var(--solaris-color-surface);isolation:isolate;align-items:center;display:inline-flex}.solaris-avatar-stack[data-overlap=sm]{--solaris-avatar-stack-overlap: -.4rem}.solaris-avatar-stack[data-overlap=md]{--solaris-avatar-stack-overlap: -.8rem}.solaris-avatar-stack[data-overlap=lg]{--solaris-avatar-stack-overlap: -1.2rem}.solaris-avatar-stack__item{flex:0 0 auto;position:relative;display:inline-flex;border-radius:var(--solaris-radius-full)}.solaris-avatar-stack__item+.solaris-avatar-stack__item{margin-inline-start:var(--solaris-avatar-stack-overlap)}.solaris-avatar-stack__item:nth-child(1){z-index:5}.solaris-avatar-stack__item:nth-child(2){z-index:4}.solaris-avatar-stack__item:nth-child(3){z-index:3}.solaris-avatar-stack__item:nth-child(4){z-index:2}.solaris-avatar-stack__item:nth-child(5){z-index:1}.solaris-avatar-stack__item solaris-presence-avatar{border-radius:inherit;filter:drop-shadow(0 0 0 var(--solaris-color-surface))}.solaris-avatar-stack__more{z-index:10;line-height:1;font-weight:400;place-items:center;display:inline-grid;font-size:var(--solaris-fs-14);box-shadow:var(--solaris-shadow-xs);border:var(--solaris-avatar-stack-ring);border-radius:var(--solaris-radius-full);color:var(--solaris-avatar-stack-more-fg);background:var(--solaris-avatar-stack-more-bg);block-size:var(--solaris-avatar-stack-more-size);inline-size:var(--solaris-avatar-stack-more-size)}.solaris-avatar-stack[data-size=xs]{--solaris-avatar-stack-more-size: 2.4rem;--solaris-avatar-stack-ring: .15rem solid var(--solaris-color-surface)}.solaris-avatar-stack[data-size=sm]{--solaris-avatar-stack-more-size: 3.2rem}.solaris-avatar-stack[data-size=md]{--solaris-avatar-stack-more-size: 4rem}.solaris-avatar-stack[data-size=lg]{--solaris-avatar-stack-more-size: 4.8rem}.solaris-avatar-stack[data-size=xl]{--solaris-avatar-stack-more-size: 6.4rem;--solaris-avatar-stack-ring: .25rem solid var(--solaris-color-surface)}.solaris-avatar-stack[data-shape=square] .solaris-avatar-stack__item,.solaris-avatar-stack[data-shape=square] .solaris-avatar-stack__more{border-radius:var(--solaris-radius-md)}.solaris-avatar-stack__item.solaris-avatar-stack__more{z-index:20}\n"], dependencies: [{ kind: "component", type: SolarisPresenceAvatar, selector: "solaris-presence-avatar", inputs: ["size", "shape", "variant", "src", "alt", "name", "initials", "color", "loading", "disabled", "interactive", "buttonType", "asButton", "radius", "objectFit", "aria-label", "aria-hidden", "presence", "presenceAriaLabel", "timezone", "lastSeenAt", "quietHours", "workHoursStart", "workHoursEnd"] }, { kind: "component", type: SolarisAvatar, selector: "solaris-avatar", inputs: ["size", "shape", "variant", "src", "alt", "name", "initials", "color", "loading", "disabled", "interactive", "buttonType", "asButton", "radius", "objectFit", "aria-label", "aria-hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6106
+ }
6107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarStack, decorators: [{
6108
+ type: Component,
6109
+ args: [{ selector: 'solaris-avatar-stack', standalone: true, imports: [
6110
+ SolarisPresenceAvatar,
6111
+ SolarisAvatar
6112
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"solaris-avatar-stack\" [attr.data-size]=\"size()\"\r\n [attr.data-shape]=\"shape()\" [attr.data-overlap]=\"overlap()\">\r\n @for (item of visibleItems(); track item.name ?? item.src ?? $index) {\r\n <span class=\"solaris-avatar-stack__item\">\r\n @if (showPresence()) {\r\n <solaris-presence-avatar [size]=\"size()\" [shape]=\"shape()\" [src]=\"item.src ?? null\" [alt]=\"item.alt ?? null\"\r\n [name]=\"item.name ?? null\" [initials]=\"item.initials ?? null\" [presence]=\"item.presence ?? 'offline'\"\r\n [timezone]=\"item.timezone ?? null\" [lastSeenAt]=\"item.lastSeenAt ?? null\" [quietHours]=\"item.quietHours ?? false\"/>\r\n } @else {\r\n <solaris-avatar [size]=\"size()\" [shape]=\"shape()\" [src]=\"item.src ?? null\" [alt]=\"item.alt ?? null\"\r\n [name]=\"item.name ?? null\" [initials]=\"item.initials ?? null\"/>\r\n }\r\n </span>\r\n }\r\n\r\n @if (hasHiddenItems()) {\r\n <span class=\"solaris-avatar-stack__item solaris-avatar-stack__more\">\r\n +{{ hiddenCount() }}\r\n </span>\r\n }\r\n</div>\r\n", styles: [":host{display:inline-flex;vertical-align:middle}.solaris-avatar-stack{--solaris-avatar-stack-overlap: -.8rem;--solaris-avatar-stack-more-size: 4rem;--solaris-avatar-stack-more-bg: var(--solaris-color-surface-2);--solaris-avatar-stack-more-fg: var(--solaris-color-text);--solaris-avatar-stack-ring: .2rem solid var(--solaris-color-surface);isolation:isolate;align-items:center;display:inline-flex}.solaris-avatar-stack[data-overlap=sm]{--solaris-avatar-stack-overlap: -.4rem}.solaris-avatar-stack[data-overlap=md]{--solaris-avatar-stack-overlap: -.8rem}.solaris-avatar-stack[data-overlap=lg]{--solaris-avatar-stack-overlap: -1.2rem}.solaris-avatar-stack__item{flex:0 0 auto;position:relative;display:inline-flex;border-radius:var(--solaris-radius-full)}.solaris-avatar-stack__item+.solaris-avatar-stack__item{margin-inline-start:var(--solaris-avatar-stack-overlap)}.solaris-avatar-stack__item:nth-child(1){z-index:5}.solaris-avatar-stack__item:nth-child(2){z-index:4}.solaris-avatar-stack__item:nth-child(3){z-index:3}.solaris-avatar-stack__item:nth-child(4){z-index:2}.solaris-avatar-stack__item:nth-child(5){z-index:1}.solaris-avatar-stack__item solaris-presence-avatar{border-radius:inherit;filter:drop-shadow(0 0 0 var(--solaris-color-surface))}.solaris-avatar-stack__more{z-index:10;line-height:1;font-weight:400;place-items:center;display:inline-grid;font-size:var(--solaris-fs-14);box-shadow:var(--solaris-shadow-xs);border:var(--solaris-avatar-stack-ring);border-radius:var(--solaris-radius-full);color:var(--solaris-avatar-stack-more-fg);background:var(--solaris-avatar-stack-more-bg);block-size:var(--solaris-avatar-stack-more-size);inline-size:var(--solaris-avatar-stack-more-size)}.solaris-avatar-stack[data-size=xs]{--solaris-avatar-stack-more-size: 2.4rem;--solaris-avatar-stack-ring: .15rem solid var(--solaris-color-surface)}.solaris-avatar-stack[data-size=sm]{--solaris-avatar-stack-more-size: 3.2rem}.solaris-avatar-stack[data-size=md]{--solaris-avatar-stack-more-size: 4rem}.solaris-avatar-stack[data-size=lg]{--solaris-avatar-stack-more-size: 4.8rem}.solaris-avatar-stack[data-size=xl]{--solaris-avatar-stack-more-size: 6.4rem;--solaris-avatar-stack-ring: .25rem solid var(--solaris-color-surface)}.solaris-avatar-stack[data-shape=square] .solaris-avatar-stack__item,.solaris-avatar-stack[data-shape=square] .solaris-avatar-stack__more{border-radius:var(--solaris-radius-md)}.solaris-avatar-stack__item.solaris-avatar-stack__more{z-index:20}\n"] }]
6113
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], showPresence: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPresence", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], overlap: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlap", required: false }] }] } });
6114
+
6115
+ class SolarisAvatarDropdown {
6116
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
6117
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
6118
+ shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : []));
6119
+ overlap = input('md', ...(ngDevMode ? [{ debugName: "overlap" }] : []));
6120
+ maxVisible = input(4, { ...(ngDevMode ? { debugName: "maxVisible" } : {}), transform: numberAttribute });
6121
+ placement = input('bottom-end', ...(ngDevMode ? [{ debugName: "placement" }] : []));
6122
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
6123
+ closeOnSelect = input(true, { ...(ngDevMode ? { debugName: "closeOnSelect" } : {}), transform: booleanAttribute });
6124
+ panelLabel = input('Avatar dropdown', ...(ngDevMode ? [{ debugName: "panelLabel" }] : []));
6125
+ itemSelect = new EventEmitter();
6126
+ openChange = new EventEmitter();
6127
+ onItemClick(item, index, popover) {
6128
+ if (item.disabled)
6129
+ return;
6130
+ this.itemSelect.emit({ item, index });
6131
+ if (this.closeOnSelect()) {
6132
+ popover.setOpen(false);
6133
+ }
6134
+ }
6135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component });
6136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisAvatarDropdown, isStandalone: true, selector: "solaris-avatar-dropdown", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, overlap: { classPropertyName: "overlap", publicName: "overlap", isSignal: true, isRequired: false, transformFunction: null }, maxVisible: { classPropertyName: "maxVisible", publicName: "maxVisible", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, panelLabel: { classPropertyName: "panelLabel", publicName: "panelLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect", openChange: "openChange" }, ngImport: i0, template: "<solaris-popover #popover [placement]=\"placement()\" [offset]=\"8\" [autoFlip]=\"true\" [autoShift]=\"true\"\r\n [closeOnEscape]=\"true\" [closeOnOutsideClick]=\"true\" panelClass=\"solaris-avatar-dropdown-popover\"\r\n (openChange)=\"openChange.emit($event)\">\r\n <button type=\"button\" solaris-popover-trigger class=\"solaris-avatar-dropdown__trigger\" [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"panelLabel()\" [attr.aria-expanded]=\"popover.isOpen() ? 'true' : 'false'\"\r\n (click)=\"popover.toggle()\">\r\n <solaris-avatar-stack [items]=\"items()\" [max]=\"maxVisible()\" [size]=\"size()\" [shape]=\"shape()\" [overlap]=\"overlap()\"\r\n [showPresence]=\"false\"/>\r\n </button>\r\n\r\n <ng-template solaris-popover-panel>\r\n <div class=\"solaris-avatar-dropdown__panel\" role=\"listbox\" [attr.aria-label]=\"panelLabel()\">\r\n @for (item of items(); track item.id ?? item.name ?? item.src ?? $index) {\r\n <button type=\"button\" class=\"solaris-avatar-dropdown__item\" [disabled]=\"item.disabled\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n (click)=\"onItemClick(item, $index, popover)\">\r\n <solaris-avatar size=\"sm\" [shape]=\"shape()\" [src]=\"item.src ?? null\" [alt]=\"item.alt ?? null\"\r\n [name]=\"item.name ?? null\" [initials]=\"item.initials ?? null\"/>\r\n\r\n <span class=\"solaris-avatar-dropdown__item-body\">\r\n <span class=\"solaris-avatar-dropdown__item-title\">\r\n {{ item.name || item.initials || 'User' }}\r\n </span>\r\n </span>\r\n </button>\r\n }\r\n </div>\r\n </ng-template>\r\n</solaris-popover>\r\n", styles: [":host{display:inline-flex;vertical-align:middle}.solaris-avatar-dropdown__trigger{border:0;margin:0;padding:0;outline:none;font:inherit;color:inherit;cursor:pointer;align-items:center;display:inline-flex;justify-content:center;background:transparent;border-radius:var(--solaris-radius-full)}.solaris-avatar-dropdown__trigger:disabled{opacity:.56;cursor:not-allowed}.solaris-avatar-dropdown__trigger:focus-visible{box-shadow:0 0 0 .3rem color-mix(in srgb,var(--solaris-color-primary) 26%,transparent)}.solaris-avatar-dropdown__panel{display:grid;overflow:auto;min-inline-size:22rem;max-inline-size:30rem;gap:var(--solaris-space-1);padding:var(--solaris-space-2);max-block-size:min(32rem,100vh - 4rem)}.solaris-avatar-dropdown__item{border:0;width:100%;min-width:0;font:inherit;display:grid;outline:none;cursor:pointer;text-align:start;align-items:center;background:transparent;gap:var(--solaris-space-3);padding:var(--solaris-space-2);color:var(--solaris-color-text);border-radius:var(--solaris-radius-sm);grid-template-columns:auto minmax(0,1fr);transition:background-color .12s ease,color .12s ease,opacity .12s ease}.solaris-avatar-dropdown__item:hover,.solaris-avatar-dropdown__item:focus-visible{background:color-mix(in srgb,var(--solaris-color-surface-2) 78%,transparent)}.solaris-avatar-dropdown__item:disabled{opacity:.52;cursor:not-allowed}.solaris-avatar-dropdown__item-body{gap:.2rem;display:grid;min-inline-size:0}.solaris-avatar-dropdown__item-title{overflow:hidden;font-weight:650;min-inline-size:0;white-space:nowrap;text-overflow:ellipsis;font-size:var(--solaris-fs-14);color:var(--solaris-color-text);line-height:var(--solaris-lh-tight)}.solaris-avatar-dropdown__item-description{min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:var(--solaris-fs-12);line-height:var(--solaris-lh-normal);color:var(--solaris-color-text-muted)}\n"], dependencies: [{ kind: "component", type: SolarisPopover, selector: "solaris-popover", inputs: ["offset", "panelClass", "autoFlip", "autoShift", "matchWidth", "viewportPadding", "closeOnEscape", "closeOnOutsideClick", "anchorElement", "matchWidthElement", "placement", "open"], outputs: ["openChange"] }, { kind: "directive", type: SolarisPopoverTriggerDirective, selector: "[solaris-popover-trigger]" }, { kind: "directive", type: SolarisPopoverPanelDirective, selector: "ng-template[solaris-popover-panel]" }, { kind: "component", type: SolarisAvatarStack, selector: "solaris-avatar-stack", inputs: ["items", "max", "showPresence", "size", "shape", "overlap"] }, { kind: "component", type: SolarisAvatar, selector: "solaris-avatar", inputs: ["size", "shape", "variant", "src", "alt", "name", "initials", "color", "loading", "disabled", "interactive", "buttonType", "asButton", "radius", "objectFit", "aria-label", "aria-hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6137
+ }
6138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisAvatarDropdown, decorators: [{
6139
+ type: Component,
6140
+ args: [{ selector: 'solaris-avatar-dropdown', standalone: true, imports: [
6141
+ SolarisPopover,
6142
+ SolarisPopoverTriggerDirective,
6143
+ SolarisPopoverPanelDirective,
6144
+ SolarisAvatarStack,
6145
+ SolarisAvatar
6146
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<solaris-popover #popover [placement]=\"placement()\" [offset]=\"8\" [autoFlip]=\"true\" [autoShift]=\"true\"\r\n [closeOnEscape]=\"true\" [closeOnOutsideClick]=\"true\" panelClass=\"solaris-avatar-dropdown-popover\"\r\n (openChange)=\"openChange.emit($event)\">\r\n <button type=\"button\" solaris-popover-trigger class=\"solaris-avatar-dropdown__trigger\" [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"panelLabel()\" [attr.aria-expanded]=\"popover.isOpen() ? 'true' : 'false'\"\r\n (click)=\"popover.toggle()\">\r\n <solaris-avatar-stack [items]=\"items()\" [max]=\"maxVisible()\" [size]=\"size()\" [shape]=\"shape()\" [overlap]=\"overlap()\"\r\n [showPresence]=\"false\"/>\r\n </button>\r\n\r\n <ng-template solaris-popover-panel>\r\n <div class=\"solaris-avatar-dropdown__panel\" role=\"listbox\" [attr.aria-label]=\"panelLabel()\">\r\n @for (item of items(); track item.id ?? item.name ?? item.src ?? $index) {\r\n <button type=\"button\" class=\"solaris-avatar-dropdown__item\" [disabled]=\"item.disabled\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n (click)=\"onItemClick(item, $index, popover)\">\r\n <solaris-avatar size=\"sm\" [shape]=\"shape()\" [src]=\"item.src ?? null\" [alt]=\"item.alt ?? null\"\r\n [name]=\"item.name ?? null\" [initials]=\"item.initials ?? null\"/>\r\n\r\n <span class=\"solaris-avatar-dropdown__item-body\">\r\n <span class=\"solaris-avatar-dropdown__item-title\">\r\n {{ item.name || item.initials || 'User' }}\r\n </span>\r\n </span>\r\n </button>\r\n }\r\n </div>\r\n </ng-template>\r\n</solaris-popover>\r\n", styles: [":host{display:inline-flex;vertical-align:middle}.solaris-avatar-dropdown__trigger{border:0;margin:0;padding:0;outline:none;font:inherit;color:inherit;cursor:pointer;align-items:center;display:inline-flex;justify-content:center;background:transparent;border-radius:var(--solaris-radius-full)}.solaris-avatar-dropdown__trigger:disabled{opacity:.56;cursor:not-allowed}.solaris-avatar-dropdown__trigger:focus-visible{box-shadow:0 0 0 .3rem color-mix(in srgb,var(--solaris-color-primary) 26%,transparent)}.solaris-avatar-dropdown__panel{display:grid;overflow:auto;min-inline-size:22rem;max-inline-size:30rem;gap:var(--solaris-space-1);padding:var(--solaris-space-2);max-block-size:min(32rem,100vh - 4rem)}.solaris-avatar-dropdown__item{border:0;width:100%;min-width:0;font:inherit;display:grid;outline:none;cursor:pointer;text-align:start;align-items:center;background:transparent;gap:var(--solaris-space-3);padding:var(--solaris-space-2);color:var(--solaris-color-text);border-radius:var(--solaris-radius-sm);grid-template-columns:auto minmax(0,1fr);transition:background-color .12s ease,color .12s ease,opacity .12s ease}.solaris-avatar-dropdown__item:hover,.solaris-avatar-dropdown__item:focus-visible{background:color-mix(in srgb,var(--solaris-color-surface-2) 78%,transparent)}.solaris-avatar-dropdown__item:disabled{opacity:.52;cursor:not-allowed}.solaris-avatar-dropdown__item-body{gap:.2rem;display:grid;min-inline-size:0}.solaris-avatar-dropdown__item-title{overflow:hidden;font-weight:650;min-inline-size:0;white-space:nowrap;text-overflow:ellipsis;font-size:var(--solaris-fs-14);color:var(--solaris-color-text);line-height:var(--solaris-lh-tight)}.solaris-avatar-dropdown__item-description{min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:var(--solaris-fs-12);line-height:var(--solaris-lh-normal);color:var(--solaris-color-text-muted)}\n"] }]
6147
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], overlap: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlap", required: false }] }], maxVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisible", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], panelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelLabel", required: false }] }], itemSelect: [{
6148
+ type: Output
6149
+ }], openChange: [{
6150
+ type: Output
6151
+ }] } });
6152
+
6153
+ class SolarisCardMediaOverlayDirective {
6154
+ attr = '';
6155
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMediaOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6156
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SolarisCardMediaOverlayDirective, isStandalone: true, selector: "[solaris-card-media-overlay]", host: { properties: { "attr.solaris-card-media-overlay": "this.attr" } }, ngImport: i0 });
6157
+ }
6158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMediaOverlayDirective, decorators: [{
6159
+ type: Directive,
6160
+ args: [{
6161
+ selector: '[solaris-card-media-overlay]',
6162
+ standalone: true,
6163
+ }]
6164
+ }], propDecorators: { attr: [{
6165
+ type: HostBinding,
6166
+ args: ['attr.solaris-card-media-overlay']
6167
+ }] } });
6168
+
6169
+ class SolarisCardMedia {
6170
+ variant = input('image', ...(ngDevMode ? [{ debugName: "variant" }] : []));
6171
+ src = input(null, ...(ngDevMode ? [{ debugName: "src" }] : []));
6172
+ alt = input(null, ...(ngDevMode ? [{ debugName: "alt" }] : []));
6173
+ ratio = input('16:9', ...(ngDevMode ? [{ debugName: "ratio" }] : []));
6174
+ fit = input('cover', ...(ngDevMode ? [{ debugName: "fit" }] : []));
6175
+ align = input('center', ...(ngDevMode ? [{ debugName: "align" }] : []));
6176
+ radius = input('inherit', ...(ngDevMode ? [{ debugName: "radius" }] : []));
6177
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: booleanAttribute });
6178
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
6179
+ normalizedSrc = computed(() => this.normalize(this.src()), ...(ngDevMode ? [{ debugName: "normalizedSrc" }] : []));
6180
+ normalizedAlt = computed(() => this.normalize(this.alt()), ...(ngDevMode ? [{ debugName: "normalizedAlt" }] : []));
6181
+ showImage = computed(() => {
6182
+ return !this.loading()
6183
+ && this.variant() === 'image'
6184
+ && !!this.normalizedSrc();
6185
+ }, ...(ngDevMode ? [{ debugName: "showImage" }] : []));
6186
+ normalize(value) {
6187
+ return String(value ?? '').trim();
6188
+ }
6189
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMedia, deps: [], target: i0.ɵɵFactoryTarget.Component });
6190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: SolarisCardMedia, isStandalone: true, selector: "solaris-card-media", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, ratio: { classPropertyName: "ratio", publicName: "ratio", isSignal: true, isRequired: false, transformFunction: null }, fit: { classPropertyName: "fit", publicName: "fit", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"solaris-card-media\" [class.is-loading]=\"loading()\" [class.is-disabled]=\"disabled()\" [attr.data-variant]=\"variant()\"\r\n [attr.data-ratio]=\"ratio()\" [attr.data-align]=\"align()\" [attr.data-radius]=\"radius()\" [style.--solaris-card-media-fit]=\"fit()\">\r\n <div class=\"solaris-card-media__surface\">\r\n @if (loading()) {\r\n <span class=\"solaris-card-media__skeleton\" aria-hidden=\"true\"></span>\r\n } @else if (showImage()) {\r\n <img class=\"solaris-card-media__image\" [src]=\"normalizedSrc()\" [alt]=\"normalizedAlt()\" decoding=\"async\">\r\n } @else {\r\n <div class=\"solaris-card-media__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n\r\n <div class=\"solaris-card-media__overlay\">\r\n <ng-content select=\"[solaris-card-media-overlay]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;min-inline-size:0}.solaris-card-media{--solaris-card-media-bg: var(--solaris-color-surface-2);--solaris-card-media-border: color-mix( in srgb, var(--solaris-color-border) 78%, transparent );--solaris-card-media-radius: inherit;--solaris-card-media-fit: cover;--solaris-card-media-shadow: none;--solaris-card-media-min-height: 6rem;position:relative;display:block;min-inline-size:0}.solaris-card-media__surface{position:relative;overflow:hidden;display:grid;place-items:center;min-inline-size:0;min-block-size:var(--solaris-card-media-min-height);background:var(--solaris-card-media-bg);border:1px solid var(--solaris-card-media-border);border-radius:var(--solaris-card-media-radius);box-shadow:var(--solaris-card-media-shadow)}.solaris-card-media[data-ratio=auto] .solaris-card-media__surface{aspect-ratio:auto}.solaris-card-media[data-ratio=\"1:1\"] .solaris-card-media__surface{aspect-ratio:1/1}.solaris-card-media[data-ratio=\"4:3\"] .solaris-card-media__surface{aspect-ratio:4/3}.solaris-card-media[data-ratio=\"16:9\"] .solaris-card-media__surface{aspect-ratio:16/9}.solaris-card-media[data-ratio=\"21:9\"] .solaris-card-media__surface{aspect-ratio:21/9}.solaris-card-media[data-radius=none]{--solaris-card-media-radius: 0}.solaris-card-media[data-radius=sm]{--solaris-card-media-radius: var(--solaris-radius-sm)}.solaris-card-media[data-radius=md]{--solaris-card-media-radius: var(--solaris-radius-md)}.solaris-card-media[data-radius=lg]{--solaris-card-media-radius: var(--solaris-radius-lg)}.solaris-card-media[data-radius=inherit]{--solaris-card-media-radius: inherit}.solaris-card-media__image{inline-size:100%;block-size:100%;display:block;object-fit:var(--solaris-card-media-fit)}.solaris-card-media__content{inline-size:100%;block-size:100%;min-inline-size:0;display:flex;padding:var(--solaris-space-4)}.solaris-card-media[data-align=start] .solaris-card-media__content{align-items:flex-start;justify-content:flex-start}.solaris-card-media[data-align=center] .solaris-card-media__content{align-items:center;justify-content:center}.solaris-card-media[data-align=end] .solaris-card-media__content{align-items:flex-end;justify-content:flex-end}.solaris-card-media__overlay{position:absolute;inset-block-start:var(--solaris-space-3);inset-inline-end:var(--solaris-space-3);z-index:2;display:inline-flex;align-items:center;justify-content:center;gap:var(--solaris-space-2)}.solaris-card-media__overlay:empty{display:none}.solaris-card-media__skeleton{inline-size:100%;block-size:100%;display:block;background:linear-gradient(90deg,color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent),color-mix(in srgb,white 18%,var(--solaris-color-surface-2)),color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent));background-size:200% 100%;animation:solaris-card-media-shimmer 1.2s linear infinite}.solaris-card-media.is-disabled{opacity:.58}.solaris-card-media.is-disabled .solaris-card-media__surface{filter:grayscale(.08)}@keyframes solaris-card-media-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6191
+ }
6192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SolarisCardMedia, decorators: [{
6193
+ type: Component,
6194
+ args: [{ selector: 'solaris-card-media', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"solaris-card-media\" [class.is-loading]=\"loading()\" [class.is-disabled]=\"disabled()\" [attr.data-variant]=\"variant()\"\r\n [attr.data-ratio]=\"ratio()\" [attr.data-align]=\"align()\" [attr.data-radius]=\"radius()\" [style.--solaris-card-media-fit]=\"fit()\">\r\n <div class=\"solaris-card-media__surface\">\r\n @if (loading()) {\r\n <span class=\"solaris-card-media__skeleton\" aria-hidden=\"true\"></span>\r\n } @else if (showImage()) {\r\n <img class=\"solaris-card-media__image\" [src]=\"normalizedSrc()\" [alt]=\"normalizedAlt()\" decoding=\"async\">\r\n } @else {\r\n <div class=\"solaris-card-media__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n\r\n <div class=\"solaris-card-media__overlay\">\r\n <ng-content select=\"[solaris-card-media-overlay]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;min-inline-size:0}.solaris-card-media{--solaris-card-media-bg: var(--solaris-color-surface-2);--solaris-card-media-border: color-mix( in srgb, var(--solaris-color-border) 78%, transparent );--solaris-card-media-radius: inherit;--solaris-card-media-fit: cover;--solaris-card-media-shadow: none;--solaris-card-media-min-height: 6rem;position:relative;display:block;min-inline-size:0}.solaris-card-media__surface{position:relative;overflow:hidden;display:grid;place-items:center;min-inline-size:0;min-block-size:var(--solaris-card-media-min-height);background:var(--solaris-card-media-bg);border:1px solid var(--solaris-card-media-border);border-radius:var(--solaris-card-media-radius);box-shadow:var(--solaris-card-media-shadow)}.solaris-card-media[data-ratio=auto] .solaris-card-media__surface{aspect-ratio:auto}.solaris-card-media[data-ratio=\"1:1\"] .solaris-card-media__surface{aspect-ratio:1/1}.solaris-card-media[data-ratio=\"4:3\"] .solaris-card-media__surface{aspect-ratio:4/3}.solaris-card-media[data-ratio=\"16:9\"] .solaris-card-media__surface{aspect-ratio:16/9}.solaris-card-media[data-ratio=\"21:9\"] .solaris-card-media__surface{aspect-ratio:21/9}.solaris-card-media[data-radius=none]{--solaris-card-media-radius: 0}.solaris-card-media[data-radius=sm]{--solaris-card-media-radius: var(--solaris-radius-sm)}.solaris-card-media[data-radius=md]{--solaris-card-media-radius: var(--solaris-radius-md)}.solaris-card-media[data-radius=lg]{--solaris-card-media-radius: var(--solaris-radius-lg)}.solaris-card-media[data-radius=inherit]{--solaris-card-media-radius: inherit}.solaris-card-media__image{inline-size:100%;block-size:100%;display:block;object-fit:var(--solaris-card-media-fit)}.solaris-card-media__content{inline-size:100%;block-size:100%;min-inline-size:0;display:flex;padding:var(--solaris-space-4)}.solaris-card-media[data-align=start] .solaris-card-media__content{align-items:flex-start;justify-content:flex-start}.solaris-card-media[data-align=center] .solaris-card-media__content{align-items:center;justify-content:center}.solaris-card-media[data-align=end] .solaris-card-media__content{align-items:flex-end;justify-content:flex-end}.solaris-card-media__overlay{position:absolute;inset-block-start:var(--solaris-space-3);inset-inline-end:var(--solaris-space-3);z-index:2;display:inline-flex;align-items:center;justify-content:center;gap:var(--solaris-space-2)}.solaris-card-media__overlay:empty{display:none}.solaris-card-media__skeleton{inline-size:100%;block-size:100%;display:block;background:linear-gradient(90deg,color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent),color-mix(in srgb,white 18%,var(--solaris-color-surface-2)),color-mix(in srgb,var(--solaris-color-surface-2) 72%,transparent));background-size:200% 100%;animation:solaris-card-media-shimmer 1.2s linear infinite}.solaris-card-media.is-disabled{opacity:.58}.solaris-card-media.is-disabled .solaris-card-media__surface{filter:grayscale(.08)}@keyframes solaris-card-media-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
6195
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], ratio: [{ type: i0.Input, args: [{ isSignal: true, alias: "ratio", required: false }] }], fit: [{ type: i0.Input, args: [{ isSignal: true, alias: "fit", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
6196
+
6197
+ function sanitizePhoneInput(v) {
6198
+ let s = (v ?? '').replace(/[^\d+\-\s().]/g, '');
6199
+ s = s.replace(/\+/g, (_m, offset) => (offset === 0 ? '+' : ''));
6200
+ return s;
6201
+ }
6202
+ function insertAtCursor(input, text) {
6203
+ const start = input.selectionStart ?? input.value.length;
6204
+ const end = input.selectionEnd ?? input.value.length;
6205
+ input.value = input.value.slice(0, start) + text + input.value.slice(end);
6206
+ const pos = start + text.length;
6207
+ input.setSelectionRange(pos, pos);
6208
+ }
6209
+ function enforceMaxDigitsInPlace(input, maxDigits) {
6210
+ if (!maxDigits)
6211
+ return;
6212
+ const v = input.value ?? '';
6213
+ const sanitized = sanitizePhoneInput(v);
6214
+ const digits = (sanitized.match(/\d/g) ?? []).length;
6215
+ if (digits <= maxDigits) {
6216
+ if (sanitized !== v)
6217
+ input.value = sanitized;
6218
+ return;
6219
+ }
6220
+ let digitCount = 0;
6221
+ let out = '';
6222
+ for (const ch of sanitized) {
6223
+ if (/\d/.test(ch)) {
6224
+ if (digitCount >= maxDigits)
6225
+ break;
6226
+ digitCount++;
6227
+ }
6228
+ out += ch;
6229
+ }
6230
+ input.value = out;
6231
+ }
6232
+ function shouldBlockBeforeInput(ev, cfg) {
6233
+ return !!ev.data && !cfg.allowedChars.test(ev.data);
6234
+ }
6235
+ function shouldBlockKeyDown(ev) {
6236
+ if (ev.ctrlKey || ev.metaKey || ev.altKey)
6237
+ return false;
6238
+ const k = ev.key;
6239
+ const allowedControl = [
6240
+ 'Backspace', 'Delete', 'Tab', 'Enter', 'Escape',
6241
+ 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End',
6242
+ ];
6243
+ if (allowedControl.includes(k))
6244
+ return false;
6245
+ if (/^\d$/.test(k))
6246
+ return false;
6247
+ return !(k === '+' || k === '-' || k === ' ' || k === '(' || k === ')' || k === '.');
6248
+ }
6249
+
6250
+ function buildCallingCodeIndex() {
6251
+ const m = new Map();
6252
+ for (const c of getCountries()) {
6253
+ const code = getCountryCallingCode(c);
6254
+ const arr = m.get(code) ?? [];
6255
+ arr.push(c.toLowerCase());
6256
+ m.set(code, arr);
6257
+ }
6258
+ return m;
6259
+ }
4116
6260
  function pickIso2ForCallingCode(callingCode, selectedIso2, index, preferredCountries) {
4117
6261
  const list = index.get(callingCode) ?? [];
4118
6262
  if (!list.length)
@@ -4883,24 +7027,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4883
7027
  }]
4884
7028
  }] });
4885
7029
 
4886
- class FieldErrorComponent {
4887
- text;
4888
- textKey;
4889
- textParams;
4890
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FieldErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4891
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: FieldErrorComponent, isStandalone: true, selector: "solaris-field-error", inputs: { text: "text", textKey: "textKey", textParams: "textParams" }, ngImport: i0, template: "<div class=\"solaris-field-error\" role=\"alert\" aria-live=\"polite\">\r\n <span class=\"solaris-field-error__text\">\r\n @if (textKey) { {{ textKey | translate:textParams }} }\r\n @else { {{ text }} }\r\n </span>\r\n</div>\r\n", styles: [".solaris-field-error{line-height:1.25;padding-left:.5rem;font-size:var(--solaris-fs-10);color:var(--solaris-color-error)}\n"], dependencies: [{ kind: "pipe", type: SolarisTranslationPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4892
- }
4893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FieldErrorComponent, decorators: [{
4894
- type: Component,
4895
- args: [{ selector: 'solaris-field-error', standalone: true, imports: [SolarisTranslationPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"solaris-field-error\" role=\"alert\" aria-live=\"polite\">\r\n <span class=\"solaris-field-error__text\">\r\n @if (textKey) { {{ textKey | translate:textParams }} }\r\n @else { {{ text }} }\r\n </span>\r\n</div>\r\n", styles: [".solaris-field-error{line-height:1.25;padding-left:.5rem;font-size:var(--solaris-fs-10);color:var(--solaris-color-error)}\n"] }]
4896
- }], propDecorators: { text: [{
4897
- type: Input
4898
- }], textKey: [{
4899
- type: Input
4900
- }], textParams: [{
4901
- type: Input
4902
- }] } });
4903
-
4904
7030
  class FormField {
4905
7031
  field = inject(SolarisFormFieldController);
4906
7032
  prefix;
@@ -4910,8 +7036,8 @@ class FormField {
4910
7036
  hintKey = '';
4911
7037
  labelKey = '';
4912
7038
  radius = 'sm';
4913
- appearance = 'filled';
4914
7039
  showErrors = 'dirtyOrTouched';
7040
+ appearance = 'filled';
4915
7041
  _tick = signal(0, ...(ngDevMode ? [{ debugName: "_tick" }] : []));
4916
7042
  customErrorKey = input('', ...(ngDevMode ? [{ debugName: "customErrorKey" }] : []));
4917
7043
  invalid = input(null, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
@@ -5004,7 +7130,7 @@ class FormField {
5004
7130
  return !!c?.disabled;
5005
7131
  }, ...(ngDevMode ? [{ debugName: "disabledComputed" }] : []));
5006
7132
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FormField, deps: [], target: i0.ɵɵFactoryTarget.Component });
5007
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: FormField, isStandalone: true, selector: "solaris-form-field", inputs: { hint: { classPropertyName: "hint", publicName: "hint", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, hintKey: { classPropertyName: "hintKey", publicName: "hintKey", isSignal: false, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: false, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: false, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: false, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: false, isRequired: false, transformFunction: null }, customErrorKey: { classPropertyName: "customErrorKey", publicName: "customErrorKey", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, customErrorParams: { classPropertyName: "customErrorParams", publicName: "customErrorParams", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
7133
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: FormField, isStandalone: true, selector: "solaris-form-field", inputs: { hint: { classPropertyName: "hint", publicName: "hint", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, hintKey: { classPropertyName: "hintKey", publicName: "hintKey", isSignal: false, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: false, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: false, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: false, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: false, isRequired: false, transformFunction: null }, customErrorKey: { classPropertyName: "customErrorKey", publicName: "customErrorKey", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, customErrorParams: { classPropertyName: "customErrorParams", publicName: "customErrorParams", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
5008
7134
  SolarisFormFieldController,
5009
7135
  { provide: SOLARIS_FORM_FIELD_CONTROLLER, useExisting: SolarisFormFieldController },
5010
7136
  ], queries: [{ propertyName: "prefix", first: true, predicate: SolarisPrefixDirective, descendants: true }, { propertyName: "suffix", first: true, predicate: SolarisSuffixDirective, descendants: true }], ngImport: i0, template: "<div class=\"solaris-form-field\" [class.solaris-form-field--has-prefix]=\"hasPrefix\" [attr.data-appearance]=\"appearance\"\r\n [attr.data-invalid]=\"invalidComputed() ? 'true' : null\" [attr.data-radius]=\"radius\"\r\n [attr.data-disabled]=\"disabledComputed() ? 'true' : null\">\r\n @if ((label || labelKey)) {\r\n <label class=\"solaris-form-field__label\">\r\n @if (labelKey) { {{ labelKey | translate }} }\r\n @else if (label) { {{ label }} }\r\n </label>\r\n }\r\n\r\n <div class=\"solaris-form-field__frame\">\r\n @if (hasPrefix) {\r\n <span class=\"solaris-form-field__prefix\" aria-hidden=\"true\">\r\n <ng-content select=\"[solaris-prefix]\"></ng-content>\r\n </span>\r\n }\r\n\r\n <div class=\"solaris-form-field__body\">\r\n <div class=\"solaris-form-field__control-slot\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (hasSuffix || showPasswordToggle() || invalidComputed() || disabledComputed()) {\r\n <span class=\"solaris-form-field__suffix\">\r\n @if (disabledComputed()) {\r\n <span class=\"solaris-form-field__status solaris-form-field__status--disabled\" aria-hidden=\"true\">\r\n <i class=\"ph ph-lock-simple\"></i>\r\n </span>\r\n } @else {\r\n <ng-content select=\"[solaris-suffix]\"></ng-content>\r\n\r\n @if (showPasswordToggle()) {\r\n <solaris-password-toggle></solaris-password-toggle>\r\n }\r\n\r\n @if (invalidComputed()) {\r\n <span class=\"solaris-form-field__status\" aria-hidden=\"true\">\r\n <i class=\"ph ph-warning-circle\"></i>\r\n </span>\r\n }\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (errorKey()) {\r\n <solaris-field-error [textKey]=\"errorKey()\" [textParams]=\"errorParams()\"></solaris-field-error>\r\n } @else {\r\n <ng-content select=\"[form-field-message]\"></ng-content>\r\n }\r\n\r\n @if (hint || hintKey) {\r\n <div class=\"solaris-form-field__hint\">\r\n @if (hintKey) { {{ hintKey | translate }} }\r\n @else { {{ hint }} }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".solaris-form-field{display:grid;gap:var(--solaris-space-2);--solaris-form-field-radius: var(--solaris-radius-sm);--solaris-form-field-bg: var(--solaris-color-surface-2);--solaris-form-field-border: var(--solaris-color-border);--solaris-form-field-border-hover: color-mix(in srgb, var(--solaris-color-border) 70%, var(--solaris-color-text-muted))}.solaris-form-field[data-radius=none]{--solaris-form-field-radius: var(--solaris-radius-none)}.solaris-form-field[data-radius=xs]{--solaris-form-field-radius: var(--solaris-radius-xs)}.solaris-form-field[data-radius=sm]{--solaris-form-field-radius: var(--solaris-radius-sm)}.solaris-form-field[data-radius=md]{--solaris-form-field-radius: var(--solaris-radius-md)}.solaris-form-field[data-radius=lg]{--solaris-form-field-radius: var(--solaris-radius-lg)}.solaris-form-field[data-radius=full]{--solaris-form-field-radius: var(--solaris-radius-full)}.solaris-form-field[data-appearance=outline]{--solaris-form-field-bg: transparent;--solaris-form-field-border: color-mix(in srgb, var(--solaris-color-border) 85%, transparent);--solaris-form-field-border-hover: color-mix(in srgb, var(--solaris-color-border) 65%, var(--solaris-color-text-muted))}.solaris-form-field__label{font-weight:600;font-size:var(--solaris-fs-14);color:var(--solaris-color-text);margin-left:var(--solaris-space-1)}.solaris-form-field__frame{display:grid;min-height:3.8rem;align-items:stretch;grid-template-columns:1fr;background:var(--solaris-form-field-bg);border-radius:var(--solaris-form-field-radius);border:1px solid var(--solaris-form-field-border);transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease}.solaris-form-field--has-prefix .solaris-form-field__frame{grid-template-columns:3.8rem 1fr}.solaris-form-field__prefix{opacity:.5;display:grid;width:3.8rem;line-height:0;place-items:center;font-size:var(--solaris-fs-14);color:var(--solaris-color-text-muted);transition:opacity .3s ease,filter .3s ease;border-right:1px solid color-mix(in srgb,var(--solaris-color-border) 85%,transparent)}.solaris-form-field__frame:hover .solaris-form-field__prefix,.solaris-form-field__frame:focus-within .solaris-form-field__prefix{opacity:1;filter:brightness(1.05)}.solaris-form-field__prefix :is(i,svg,[solarisPrefixIcon]){display:block;line-height:1}.solaris-form-field__prefix i.ph{opacity:.6;font-size:var(--solaris-fs-18)}.solaris-form-field__prefix svg{width:var(--solaris-fs-18);height:var(--solaris-fs-18)}.solaris-form-field__body{min-width:0;display:grid;padding-right:0;position:relative;align-items:center;padding-left:var(--solaris-space-3);grid-template-columns:minmax(0,1fr) auto}.solaris-form-field__control-slot{width:100%;min-width:0;display:flex;flex:1 1 auto;align-items:center}.solaris-form-field__control-slot>*{flex:1 1 0;width:100%;min-width:0}.solaris-form-field__control-slot :is(input,textarea){margin:0;border:0;width:100%;min-width:0;outline:none;padding:.9rem 0;background:transparent;font-size:var(--solaris-fs-14);color:var(--solaris-color-text);line-height:var(--solaris-lh-normal)}.solaris-form-field__control-slot :is(input,textarea)::placeholder{opacity:.9;color:var(--solaris-color-text-muted)}.solaris-form-field__suffix{display:inline-flex;align-items:center;justify-content:center;gap:var(--solaris-space-2)}.solaris-form-field__suffix :is(button,a){height:3.6rem;align-self:stretch;align-items:center;display:inline-flex}.solaris-form-field__status{width:3.8rem;display:grid;opacity:.95;height:3.8rem;place-items:center;color:var(--solaris-color-error)}.solaris-form-field__status i.ph{line-height:1;font-size:var(--solaris-fs-18)}.solaris-form-field__hint{font-size:var(--solaris-fs-12);color:var(--solaris-color-text-muted)}.solaris-form-field__frame:has(:focus-visible){box-shadow:0 0 .5rem .25rem color-mix(in srgb,var(--solaris-color-primary) 5%,transparent);border-color:color-mix(in srgb,var(--solaris-color-primary) 70%,var(--solaris-color-border))}.solaris-form-field[data-invalid=true] .solaris-form-field__frame{box-shadow:0 0 .5rem .25rem color-mix(in srgb,var(--solaris-color-error) 5%,transparent);border-color:color-mix(in srgb,var(--solaris-color-error) 70%,var(--solaris-color-border))}.solaris-form-field[data-invalid=true] .solaris-form-field__frame:focus-within{border-color:color-mix(in srgb,var(--solaris-color-error) 80%,var(--solaris-color-border));box-shadow:0 0 .5rem .25rem color-mix(in srgb,var(--solaris-color-error) 16%,transparent)}.solaris-form-field[data-invalid=true] .solaris-form-field__prefix{border-right-color:color-mix(in srgb,var(--solaris-color-error) 30%,var(--solaris-color-border));color:color-mix(in srgb,var(--solaris-color-error) 75%,var(--solaris-color-text-muted))}.solaris-form-field[data-invalid=true] .solaris-form-field__control-slot :is(input,textarea)::placeholder{color:color-mix(in srgb,var(--solaris-color-error) 45%,var(--solaris-color-text-muted))}.solaris-form-field__body:has(solaris-phone-input){padding-left:0}.solaris-form-field[data-disabled=true] .solaris-form-field__frame{opacity:.45;cursor:not-allowed}.solaris-form-field[data-disabled=true] .solaris-form-field__frame *,.solaris-form-field[data-disabled=true] .solaris-form-field__label,.solaris-form-field[data-disabled=true] .solaris-form-field__hint{cursor:not-allowed}.solaris-form-field[data-disabled=true] .solaris-form-field__prefix,.solaris-form-field[data-disabled=true] .solaris-form-field__suffix,.solaris-form-field[data-disabled=true] .solaris-form-field__label,.solaris-form-field[data-disabled=true] .solaris-form-field__hint{color:var(--solaris-color-text-muted)}.solaris-form-field__status--disabled{opacity:.9;width:3.8rem;display:grid;height:3.8rem;place-items:center;color:var(--solaris-color-text-muted)}.solaris-form-field[data-disabled=true] .solaris-form-field__frame,.solaris-form-field[data-disabled=true] .solaris-form-field__control-slot,.solaris-form-field[data-disabled=true] .solaris-form-field__control-slot>*,.solaris-form-field[data-disabled=true] .solaris-form-field__control-slot :is(input,textarea,select,button){cursor:not-allowed!important}.solaris-form-field__status--disabled i{line-height:1;font-size:var(--solaris-fs-18)}\n"], dependencies: [{ kind: "component", type: PasswordToggle, selector: "solaris-password-toggle" }, { kind: "component", type: FieldErrorComponent, selector: "solaris-field-error", inputs: ["text", "textKey", "textParams"] }, { kind: "pipe", type: SolarisTranslationPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -5031,10 +7157,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
5031
7157
  type: Input
5032
7158
  }], radius: [{
5033
7159
  type: Input
5034
- }], appearance: [{
5035
- type: Input
5036
7160
  }], showErrors: [{
5037
7161
  type: Input
7162
+ }], appearance: [{
7163
+ type: Input
5038
7164
  }], customErrorKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "customErrorKey", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], customErrorParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "customErrorParams", required: false }] }] } });
5039
7165
 
5040
7166
  class SolarisSelect {
@@ -5770,5 +7896,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
5770
7896
  * Generated bundle index. Do not edit.
5771
7897
  */
5772
7898
 
5773
- export { ButtonDirective, ButtonGroupDirective, FieldErrorComponent, FormField, InputTextDirective, PasswordToggle, SOLARIS_FORM_FIELD_CONTROLLER, SOLARIS_FORM_FIELD_FEATURES, SOLARIS_INPUT, SOLARIS_NOTIFICATION_CONFIG, SOLARIS_NOTIFICATION_DEFAULT_CONFIG, SOLARIS_NOTIFICATION_POSITIONS, SolarisBadge, SolarisBodyDirective, SolarisBreadcrumb, SolarisCheckbox, SolarisColumnCellDef, SolarisColumnHeaderDef, SolarisControlBridgeDirective, SolarisDivider, SolarisDrawer, SolarisDrawerFooterDirective, SolarisDrawerHeaderDirective, SolarisDropdownContent, SolarisDropdownContentPanelDirective, SolarisDropdownContentRegistry, SolarisDropdownContentTriggerDirective, SolarisEmailDirective, SolarisFilterBar, SolarisFilterChip, SolarisFilterField, SolarisFilterPanel, SolarisFilterPanelFooterDirective, SolarisFooterDirective, SolarisFormFieldController, SolarisHeaderDirective, SolarisIdGenerator, SolarisImageSliderComponent, SolarisLoading, SolarisLoadingOverlay, SolarisNotificationCenterComponent, SolarisNotificationHostComponent, SolarisNotificationIntlService, SolarisNotificationItemComponent, SolarisNotificationService, SolarisPage, SolarisPageHeader, SolarisPageHeaderBreadcrumbDirective, SolarisPageHeaderDescriptionDirective, SolarisPageHeaderTitle, SolarisPageHeaderTitleDirective, SolarisPasswordDirective, SolarisPhoneInput, SolarisPopover, SolarisPopoverPanelDirective, SolarisPopoverTriggerDirective, SolarisPrefixDirective, SolarisRowComponent, SolarisSectionComponent, SolarisSelect, SolarisStepper, SolarisStepperItem, SolarisSuffixDirective, SolarisTab, SolarisTable, SolarisTableColumn, SolarisTableFilters, SolarisTableSkeleton, SolarisTabs, computePopoverPosition, provideSolarisNotifications, uniqueId };
7899
+ export { ButtonDirective, ButtonGroupDirective, FieldErrorComponent, FormField, InputTextDirective, PasswordToggle, SOLARIS_CARD_GROUP, SOLARIS_CARD_SLOT_DIRECTIVES, SOLARIS_FORM_FIELD_CONTROLLER, SOLARIS_FORM_FIELD_FEATURES, SOLARIS_INPUT, SOLARIS_NOTIFICATION_CONFIG, SOLARIS_NOTIFICATION_DEFAULT_CONFIG, SOLARIS_NOTIFICATION_POSITIONS, SOLARIS_RADIO_GROUP, SolarisAvatar, SolarisAvatarDropdown, SolarisAvatarOverlayDirective, SolarisAvatarStack, SolarisBadge, SolarisBodyDirective, SolarisBreadcrumb, SolarisCard, SolarisCardActionsDirective, SolarisCardBadgeDirective, SolarisCardDescriptionDirective, SolarisCardEyebrowDirective, SolarisCardFooterDirective, SolarisCardGroup, SolarisCardMedia, SolarisCardMediaDirective, SolarisCardMediaOverlayDirective, SolarisCardMetaDirective, SolarisCardTitleDirective, SolarisCheckbox, SolarisColumnCellDef, SolarisColumnHeaderDef, SolarisControlBridgeDirective, SolarisDivider, SolarisDrawer, SolarisDrawerFooterDirective, SolarisDrawerHeaderDirective, SolarisDropdownContent, SolarisDropdownContentPanelDirective, SolarisDropdownContentRegistry, SolarisDropdownContentTriggerDirective, SolarisEmailDirective, SolarisFilterBar, SolarisFilterChip, SolarisFilterField, SolarisFilterPanel, SolarisFilterPanelFooterDirective, SolarisFloatingOverlayService, SolarisFooterDirective, SolarisFormFieldController, SolarisHeaderDirective, SolarisIdGenerator, SolarisImageSliderComponent, SolarisLoading, SolarisLoadingOverlay, SolarisNotificationCenterComponent, SolarisNotificationHostComponent, SolarisNotificationIntlService, SolarisNotificationItemComponent, SolarisNotificationService, SolarisPage, SolarisPageHeader, SolarisPageHeaderBreadcrumbDirective, SolarisPageHeaderDescriptionDirective, SolarisPageHeaderTitle, SolarisPageHeaderTitleDirective, SolarisPasswordDirective, SolarisPhoneInput, SolarisPopover, SolarisPopoverPanelDirective, SolarisPopoverTriggerDirective, SolarisPrefixDirective, SolarisPresenceAvatar, SolarisRadio, SolarisRadioGroup, SolarisRichTooltipDirective, SolarisRichTooltipPanel, SolarisRowComponent, SolarisSectionComponent, SolarisSelect, SolarisSelectionCard, SolarisStepper, SolarisStepperItem, SolarisSuffixDirective, SolarisTab, SolarisTable, SolarisTableColumn, SolarisTableFilters, SolarisTableSkeleton, SolarisTabs, SolarisTooltipDirective, SolarisTooltipPanel, computeFloatingPosition, computePopoverPosition, provideSolarisNotifications, repositionTooltipOverlay, uniqueId };
5774
7900
  //# sourceMappingURL=educarehq-solaris-components.mjs.map