ngx-strata 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/assets/styles/components/_breadcrumb.scss +4 -0
  2. package/assets/styles/components/_number-stepper.scss +260 -0
  3. package/assets/styles/components/_skeleton.scss +115 -0
  4. package/assets/styles/components/action-menu.scss +20 -2
  5. package/assets/styles/components/input-field.scss +19 -2
  6. package/assets/styles/components/item.scss +15 -2
  7. package/assets/styles/components/modal.scss +237 -22
  8. package/assets/styles/components/notification.scss +287 -41
  9. package/assets/styles/components/segmented-control.scss +20 -0
  10. package/assets/styles/components/select.scss +18 -0
  11. package/assets/styles/components/sidemenu.scss +8 -1
  12. package/assets/styles/components/tabs.scss +7 -0
  13. package/assets/styles/public-api.scss +2 -0
  14. package/assets/styles/semantics/color-semantic.scss +8 -0
  15. package/dist/strata/strata.css +1 -1
  16. package/fesm2022/ngx-strata.mjs +695 -51
  17. package/fesm2022/ngx-strata.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/skills/ngx-strata/SKILL.md +5 -1
  20. package/skills/ngx-strata/components/badge.md +24 -0
  21. package/skills/ngx-strata/components/breadcrumb.md +4 -1
  22. package/skills/ngx-strata/components/item.md +21 -9
  23. package/skills/ngx-strata/components/modal.md +36 -5
  24. package/skills/ngx-strata/components/notification.md +51 -5
  25. package/skills/ngx-strata/components/number-stepper.md +84 -0
  26. package/skills/ngx-strata/components/segmented-control.md +3 -0
  27. package/skills/ngx-strata/components/skeleton.md +59 -0
  28. package/skills/ngx-strata/components/tabs.md +6 -1
  29. package/types/ngx-strata.d.ts +200 -17
@@ -1,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Injectable, provideAppInitializer, makeEnvironmentProviders, DOCUMENT, signal, computed, effect, InjectionToken, provideEnvironmentInitializer, ElementRef, input, model, output, Directive, Renderer2, DestroyRef, Pipe, HostBinding, Component, contentChildren, booleanAttribute, forwardRef, contentChild, HostListener, ViewContainerRef, viewChild, numberAttribute, Injector, LOCALE_ID, viewChildren, ContentChildren, TemplateRef } from '@angular/core';
2
+ import { inject, Injectable, provideAppInitializer, makeEnvironmentProviders, DOCUMENT, signal, computed, effect, InjectionToken, provideEnvironmentInitializer, ElementRef, input, model, output, Directive, Renderer2, PLATFORM_ID, DestroyRef, Pipe, HostBinding, Component, contentChildren, booleanAttribute, forwardRef, contentChild, HostListener, ViewContainerRef, viewChild, numberAttribute, Injector, LOCALE_ID, viewChildren, ContentChildren, TemplateRef } from '@angular/core';
3
3
  import { Observable, tap, map, fromEvent, switchMap, filter } from 'rxjs';
4
4
  import { HttpClient } from '@angular/common/http';
5
5
  import { DomSanitizer } from '@angular/platform-browser';
6
6
  import { computePosition, offset, arrow, autoUpdate, flip, shift, size } from '@floating-ui/dom';
7
+ import * as i1$1 from '@angular/common';
8
+ import { isPlatformBrowser, CommonModule, NgTemplateOutlet, DOCUMENT as DOCUMENT$1, formatNumber, getLocaleNumberSymbol, NumberSymbol, DecimalPipe } from '@angular/common';
7
9
  import { takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
8
10
  import * as i1 from '@angular/forms';
9
11
  import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
10
- import * as i1$1 from '@angular/common';
11
- import { CommonModule, NgTemplateOutlet, DOCUMENT as DOCUMENT$1, formatNumber, getLocaleNumberSymbol, NumberSymbol, DecimalPipe } from '@angular/common';
12
12
  import { Router, NavigationEnd, RouterLink, RouterLinkActive } from '@angular/router';
13
13
 
14
14
  class IconLoader {
@@ -248,6 +248,7 @@ const DEFAULT_CONFIG = {
248
248
  includeBaseIcons: true,
249
249
  tooltipDelayMs: 500,
250
250
  crossPlatformHotkeys: true,
251
+ maxNotifications: 5,
251
252
  overlayViewportBuffer: 16,
252
253
  activationKeys: [' ', 'Space', 'Spacebar', 'Enter', 'NumpadEnter'],
253
254
  platform: 'auto'
@@ -425,6 +426,171 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
425
426
  }]
426
427
  }], propDecorators: { stSimpleTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "stSimpleTooltip", required: true }] }], tooltipEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipEnabled", required: false }] }], tooltipPlacement: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPlacement", required: false }] }], tooltipAlwaysShow: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipAlwaysShow", required: false }] }] } });
427
428
 
429
+ const BREAKPOINT_ORDER = {
430
+ xs: 0,
431
+ sm: 1,
432
+ md: 2,
433
+ lg: 3,
434
+ xl: 4
435
+ };
436
+ class BreakpointService {
437
+ platformId = inject(PLATFORM_ID);
438
+ destroyRef = inject(DestroyRef);
439
+ isBrowser = isPlatformBrowser(this.platformId);
440
+ _width = signal(1280, /* @ts-ignore */
441
+ ...(ngDevMode ? [{ debugName: "_width" }] : /* istanbul ignore next */ []));
442
+ _current = signal('xl', /* @ts-ignore */
443
+ ...(ngDevMode ? [{ debugName: "_current" }] : /* istanbul ignore next */ []));
444
+ width = this._width.asReadonly();
445
+ current = this._current.asReadonly();
446
+ isMobile = computed(() => this.isSmallerThan('md'), /* @ts-ignore */
447
+ ...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
448
+ isTablet = computed(() => this._current() === 'md', /* @ts-ignore */
449
+ ...(ngDevMode ? [{ debugName: "isTablet" }] : /* istanbul ignore next */ []));
450
+ isDesktop = computed(() => this.isAtLeast('lg'), /* @ts-ignore */
451
+ ...(ngDevMode ? [{ debugName: "isDesktop" }] : /* istanbul ignore next */ []));
452
+ constructor() {
453
+ if (!this.isBrowser) {
454
+ return;
455
+ }
456
+ this.updateBreakpoint();
457
+ const resizeHandler = () => this.updateBreakpoint();
458
+ window.addEventListener('resize', resizeHandler);
459
+ this.destroyRef.onDestroy(() => {
460
+ window.removeEventListener('resize', resizeHandler);
461
+ });
462
+ }
463
+ is(breakpoint) {
464
+ return this._current() === breakpoint;
465
+ }
466
+ isSmallerThan(breakpoint) {
467
+ return BREAKPOINT_ORDER[this._current()] < BREAKPOINT_ORDER[breakpoint];
468
+ }
469
+ isLargerThan(breakpoint) {
470
+ return BREAKPOINT_ORDER[this._current()] > BREAKPOINT_ORDER[breakpoint];
471
+ }
472
+ isAtLeast(breakpoint) {
473
+ return BREAKPOINT_ORDER[this._current()] >= BREAKPOINT_ORDER[breakpoint];
474
+ }
475
+ isAtMost(breakpoint) {
476
+ return BREAKPOINT_ORDER[this._current()] <= BREAKPOINT_ORDER[breakpoint];
477
+ }
478
+ updateBreakpoint() {
479
+ if (typeof window === 'undefined') {
480
+ return;
481
+ }
482
+ const width = window.innerWidth;
483
+ this._width.set(width);
484
+ if (width < 480) {
485
+ this._current.set('xs');
486
+ }
487
+ else if (width < 768) {
488
+ this._current.set('sm');
489
+ }
490
+ else if (width < 1024) {
491
+ this._current.set('md');
492
+ }
493
+ else if (width < 1280) {
494
+ this._current.set('lg');
495
+ }
496
+ else {
497
+ this._current.set('xl');
498
+ }
499
+ }
500
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: BreakpointService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
501
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: BreakpointService, providedIn: 'root' });
502
+ }
503
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: BreakpointService, decorators: [{
504
+ type: Injectable,
505
+ args: [{
506
+ providedIn: 'root'
507
+ }]
508
+ }], ctorParameters: () => [] });
509
+
510
+ class DeviceService {
511
+ platformId = inject(PLATFORM_ID);
512
+ destroyRef = inject(DestroyRef);
513
+ isBrowser = isPlatformBrowser(this.platformId);
514
+ _isTouch = signal(false, /* @ts-ignore */
515
+ ...(ngDevMode ? [{ debugName: "_isTouch" }] : /* istanbul ignore next */ []));
516
+ _hasHover = signal(true, /* @ts-ignore */
517
+ ...(ngDevMode ? [{ debugName: "_hasHover" }] : /* istanbul ignore next */ []));
518
+ _os = signal('unknown', /* @ts-ignore */
519
+ ...(ngDevMode ? [{ debugName: "_os" }] : /* istanbul ignore next */ []));
520
+ isTouch = this._isTouch.asReadonly();
521
+ hasHover = this._hasHover.asReadonly();
522
+ os = this._os.asReadonly();
523
+ isApple = computed(() => this._os() === 'macos' || this._os() === 'ios', /* @ts-ignore */
524
+ ...(ngDevMode ? [{ debugName: "isApple" }] : /* istanbul ignore next */ []));
525
+ isAndroid = computed(() => this._os() === 'android', /* @ts-ignore */
526
+ ...(ngDevMode ? [{ debugName: "isAndroid" }] : /* istanbul ignore next */ []));
527
+ isWindows = computed(() => this._os() === 'windows', /* @ts-ignore */
528
+ ...(ngDevMode ? [{ debugName: "isWindows" }] : /* istanbul ignore next */ []));
529
+ isLinux = computed(() => this._os() === 'linux', /* @ts-ignore */
530
+ ...(ngDevMode ? [{ debugName: "isLinux" }] : /* istanbul ignore next */ []));
531
+ constructor() {
532
+ if (!this.isBrowser) {
533
+ return;
534
+ }
535
+ this._os.set(this.detectOS());
536
+ this.updatePointerCapabilities();
537
+ if (typeof window !== 'undefined' && window.matchMedia) {
538
+ const hoverQuery = window.matchMedia('(hover: hover)');
539
+ const pointerQuery = window.matchMedia('(pointer: coarse)');
540
+ const pointerChangeHandler = () => this.updatePointerCapabilities();
541
+ hoverQuery.addEventListener?.('change', pointerChangeHandler);
542
+ pointerQuery.addEventListener?.('change', pointerChangeHandler);
543
+ this.destroyRef.onDestroy(() => {
544
+ hoverQuery.removeEventListener?.('change', pointerChangeHandler);
545
+ pointerQuery.removeEventListener?.('change', pointerChangeHandler);
546
+ });
547
+ }
548
+ }
549
+ detectOS() {
550
+ if (typeof navigator === 'undefined') {
551
+ return 'unknown';
552
+ }
553
+ const nav = navigator;
554
+ const platform = nav.userAgentData?.platform || nav.platform || '';
555
+ const ua = nav.userAgent || '';
556
+ if (/android/i.test(platform) || /android/i.test(ua)) {
557
+ return 'android';
558
+ }
559
+ const isIPadOS = /mac/i.test(platform) && typeof navigator.maxTouchPoints === 'number' && navigator.maxTouchPoints > 1;
560
+ if (/iphone|ipad|ipod/i.test(platform) || /iphone|ipad|ipod/i.test(ua) || isIPadOS) {
561
+ return 'ios';
562
+ }
563
+ if (/mac/i.test(platform) || /macintosh|mac os x/i.test(ua)) {
564
+ return 'macos';
565
+ }
566
+ if (/win/i.test(platform) || /windows/i.test(ua)) {
567
+ return 'windows';
568
+ }
569
+ if (/linux/i.test(platform) || /linux/i.test(ua)) {
570
+ return 'linux';
571
+ }
572
+ return 'unknown';
573
+ }
574
+ updatePointerCapabilities() {
575
+ if (typeof window === 'undefined') {
576
+ return;
577
+ }
578
+ const hasTouchPointer = window.matchMedia?.('(pointer: coarse)')?.matches ?? false;
579
+ const maxTouchPoints = typeof navigator !== 'undefined' ? navigator.maxTouchPoints > 0 : false;
580
+ this._isTouch.set(hasTouchPointer || maxTouchPoints);
581
+ const hasHoverMedia = window.matchMedia?.('(hover: hover)')?.matches ?? true;
582
+ this._hasHover.set(hasHoverMedia);
583
+ }
584
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DeviceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
585
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DeviceService, providedIn: 'root' });
586
+ }
587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DeviceService, decorators: [{
588
+ type: Injectable,
589
+ args: [{
590
+ providedIn: 'root'
591
+ }]
592
+ }], ctorParameters: () => [] });
593
+
428
594
  class HotkeyService {
429
595
  config = inject(STRATA_CONFIG);
430
596
  destroyRef = inject(DestroyRef);
@@ -630,9 +796,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
630
796
  args: ['class.standalone']
631
797
  }] } });
632
798
 
633
- let nextUniqueId$1 = 0;
799
+ let nextUniqueId$2 = 0;
634
800
  class StrataCheckboxComponent {
635
- defaultId = `st-checkbox-${nextUniqueId$1++}`;
801
+ defaultId = `st-checkbox-${nextUniqueId$2++}`;
636
802
  value = model(false, /* @ts-ignore */
637
803
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
638
804
  label = input(undefined, /* @ts-ignore */
@@ -1420,6 +1586,12 @@ class StrataBreadcrumbItemComponent {
1420
1586
  ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
1421
1587
  icon = input(/* @ts-ignore */
1422
1588
  ...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
1589
+ badge = input(undefined, /* @ts-ignore */
1590
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
1591
+ badgeVariant = input('neutral', /* @ts-ignore */
1592
+ ...(ngDevMode ? [{ debugName: "badgeVariant" }] : /* istanbul ignore next */ []));
1593
+ badgeSize = input('sm', /* @ts-ignore */
1594
+ ...(ngDevMode ? [{ debugName: "badgeSize" }] : /* istanbul ignore next */ []));
1423
1595
  interactable = input(false, /* @ts-ignore */
1424
1596
  ...(ngDevMode ? [{ debugName: "interactable" }] : /* istanbul ignore next */ []));
1425
1597
  disabled = input(false, /* @ts-ignore */
@@ -1428,14 +1600,14 @@ class StrataBreadcrumbItemComponent {
1428
1600
  separatorIcon = signal(undefined, /* @ts-ignore */
1429
1601
  ...(ngDevMode ? [{ debugName: "separatorIcon" }] : /* istanbul ignore next */ []));
1430
1602
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataBreadcrumbItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1431
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataBreadcrumbItemComponent, isStandalone: true, selector: "st-breadcrumb-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, interactable: { classPropertyName: "interactable", publicName: "interactable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activated: "activated" }, host: { classAttribute: "st-breadcrumb-item" }, ngImport: i0, template: "<li class=\"st-breadcrumb-item-container\">\n <div class=\"st-breadcrumb-item-content\"\n stActivatable\n [interactable]=\"interactable()\"\n [disabled]=\"disabled()\"\n (click)=\"activated.emit($event)\">\n @if (icon()) {\n <st-icon [name]=\"icon()!\" size=\"sm\" class=\"st-breadcrumb-item-icon\"></st-icon>\n }\n <span class=\"st-breadcrumb-item-text\">{{ text() }}</span>\n </div>\n\n @if (separatorIcon()) {\n <st-icon [name]=\"separatorIcon()!\" size=\"sm\" class=\"st-breadcrumb-separator\"></st-icon>\n }\n</li>\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size", "ariaLabel"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataActivatableDirective, selector: "[stActivatable]", inputs: ["disabled", "interactable"], outputs: ["interactableChange", "activated"] }] });
1603
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataBreadcrumbItemComponent, isStandalone: true, selector: "st-breadcrumb-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeVariant: { classPropertyName: "badgeVariant", publicName: "badgeVariant", isSignal: true, isRequired: false, transformFunction: null }, badgeSize: { classPropertyName: "badgeSize", publicName: "badgeSize", isSignal: true, isRequired: false, transformFunction: null }, interactable: { classPropertyName: "interactable", publicName: "interactable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activated: "activated" }, host: { classAttribute: "st-breadcrumb-item" }, ngImport: i0, template: "<li class=\"st-breadcrumb-item-container\">\n <div class=\"st-breadcrumb-item-content\"\n stActivatable\n [interactable]=\"interactable()\"\n [disabled]=\"disabled()\"\n (click)=\"activated.emit($event)\">\n @if (icon()) {\n <st-icon [name]=\"icon()!\" size=\"sm\" class=\"st-breadcrumb-item-icon\"></st-icon>\n }\n <span class=\"st-breadcrumb-item-text\">{{ text() }}</span>\n @if (badge() !== undefined) {\n <st-badge [value]=\"badge()\" [variant]=\"badgeVariant()\" [size]=\"badgeSize()\"></st-badge>\n }\n <ng-content select=\"st-badge\"></ng-content>\n </div>\n\n @if (separatorIcon()) {\n <st-icon [name]=\"separatorIcon()!\" size=\"sm\" class=\"st-breadcrumb-separator\"></st-icon>\n }\n</li>\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size", "ariaLabel"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataActivatableDirective, selector: "[stActivatable]", inputs: ["disabled", "interactable"], outputs: ["interactableChange", "activated"] }, { kind: "component", type: StrataBadgeComponent, selector: "st-badge", inputs: ["value", "icon", "max", "variant", "size", "placement", "visible", "showZero", "ariaLabel"] }] });
1432
1604
  }
1433
1605
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataBreadcrumbItemComponent, decorators: [{
1434
1606
  type: Component,
1435
- args: [{ selector: 'st-breadcrumb-item', imports: [StrataIconComponent, StrataActivatableDirective], host: {
1607
+ args: [{ selector: 'st-breadcrumb-item', imports: [StrataIconComponent, StrataActivatableDirective, StrataBadgeComponent], host: {
1436
1608
  'class': 'st-breadcrumb-item'
1437
- }, template: "<li class=\"st-breadcrumb-item-container\">\n <div class=\"st-breadcrumb-item-content\"\n stActivatable\n [interactable]=\"interactable()\"\n [disabled]=\"disabled()\"\n (click)=\"activated.emit($event)\">\n @if (icon()) {\n <st-icon [name]=\"icon()!\" size=\"sm\" class=\"st-breadcrumb-item-icon\"></st-icon>\n }\n <span class=\"st-breadcrumb-item-text\">{{ text() }}</span>\n </div>\n\n @if (separatorIcon()) {\n <st-icon [name]=\"separatorIcon()!\" size=\"sm\" class=\"st-breadcrumb-separator\"></st-icon>\n }\n</li>\n" }]
1438
- }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], interactable: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], activated: [{ type: i0.Output, args: ["activated"] }] } });
1609
+ }, template: "<li class=\"st-breadcrumb-item-container\">\n <div class=\"st-breadcrumb-item-content\"\n stActivatable\n [interactable]=\"interactable()\"\n [disabled]=\"disabled()\"\n (click)=\"activated.emit($event)\">\n @if (icon()) {\n <st-icon [name]=\"icon()!\" size=\"sm\" class=\"st-breadcrumb-item-icon\"></st-icon>\n }\n <span class=\"st-breadcrumb-item-text\">{{ text() }}</span>\n @if (badge() !== undefined) {\n <st-badge [value]=\"badge()\" [variant]=\"badgeVariant()\" [size]=\"badgeSize()\"></st-badge>\n }\n <ng-content select=\"st-badge\"></ng-content>\n </div>\n\n @if (separatorIcon()) {\n <st-icon [name]=\"separatorIcon()!\" size=\"sm\" class=\"st-breadcrumb-separator\"></st-icon>\n }\n</li>\n" }]
1610
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeVariant", required: false }] }], badgeSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeSize", required: false }] }], interactable: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], activated: [{ type: i0.Output, args: ["activated"] }] } });
1439
1611
 
1440
1612
  class StrataBreadcrumbComponent {
1441
1613
  separatorIcon = input('arrow-right', /* @ts-ignore */
@@ -2178,10 +2350,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
2178
2350
  }]
2179
2351
  }] });
2180
2352
 
2181
- let nextUniqueId = 0;
2353
+ let nextUniqueId$1 = 0;
2182
2354
  class StrataInputFieldComponent {
2183
2355
  hostElement = inject((ElementRef));
2184
- defaultId = `st-input-${nextUniqueId++}`;
2356
+ defaultId = `st-input-${nextUniqueId$1++}`;
2185
2357
  size = input('md', /* @ts-ignore */
2186
2358
  ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2187
2359
  label = input(undefined, /* @ts-ignore */
@@ -2765,6 +2937,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
2765
2937
  ], template: "<div class=\"alert-content\">\n @if (icon() !== undefined) {\n <st-avatar size=\"lg\" [stTheme]=\"theme()\">\n <st-icon [name]=\"computedIcon()\"></st-icon>\n </st-avatar>\n }\n\n <p class=\"alert-title\">{{ title() }}</p>\n @if (message()) {\n <p class=\"alert-message\">{{ message() }}</p>\n }\n</div>\n<st-button-group justification=\"expand\">\n @if (cancelButton()) {\n <button stButton (click)=\"onCancel()\">{{ cancelButton() }}</button>\n }\n <button stButton [stTheme]=\"theme()\" variant=\"primary\" (click)=\"onAffirmation()\">{{ affirmativeButton() }}</button>\n</st-button-group>\n" }]
2766
2938
  }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], affirmativeButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "affirmativeButton", required: true }] }], cancelButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelButton", required: false }] }] } });
2767
2939
 
2940
+ class StrataModalBodyComponent {
2941
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataModalBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2942
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.1", type: StrataModalBodyComponent, isStandalone: true, selector: "st-modal-body", host: { classAttribute: "st-modal-body" }, ngImport: i0, template: "<ng-content></ng-content>\n" });
2943
+ }
2944
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataModalBodyComponent, decorators: [{
2945
+ type: Component,
2946
+ args: [{ selector: 'st-modal-body', imports: [], host: {
2947
+ class: 'st-modal-body'
2948
+ }, template: "<ng-content></ng-content>\n" }]
2949
+ }] });
2950
+
2768
2951
  class StrataModalRef {
2769
2952
  }
2770
2953
 
@@ -2796,19 +2979,23 @@ class StrataModalComponent {
2796
2979
  });
2797
2980
  configuration = input.required(/* @ts-ignore */
2798
2981
  ...(ngDevMode ? [{ debugName: "configuration" }] : /* istanbul ignore next */ []));
2799
- size = model('md', /* @ts-ignore */
2800
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2982
+ size = model(/* @ts-ignore */
2983
+ ...(ngDevMode ? [undefined, { debugName: "size" }] : /* istanbul ignore next */ []));
2801
2984
  variant = input(/* @ts-ignore */
2802
2985
  ...(ngDevMode ? [undefined, { debugName: "variant" }] : /* istanbul ignore next */ []));
2986
+ placement = model(/* @ts-ignore */
2987
+ ...(ngDevMode ? [undefined, { debugName: "placement" }] : /* istanbul ignore next */ []));
2803
2988
  currentSize = computed(() => this.size() ?? this.configuration()?.size ?? 'md', /* @ts-ignore */
2804
2989
  ...(ngDevMode ? [{ debugName: "currentSize" }] : /* istanbul ignore next */ []));
2805
2990
  currentVariant = computed(() => this.variant() ?? this.configuration()?.variant ?? 'default', /* @ts-ignore */
2806
2991
  ...(ngDevMode ? [{ debugName: "currentVariant" }] : /* istanbul ignore next */ []));
2992
+ currentPlacement = computed(() => this.placement() ?? this.configuration()?.placement ?? 'center', /* @ts-ignore */
2993
+ ...(ngDevMode ? [{ debugName: "currentPlacement" }] : /* istanbul ignore next */ []));
2807
2994
  role = 'dialog';
2808
2995
  ariaModal = 'true';
2809
2996
  tabIndex = -1;
2810
2997
  get hostClasses() {
2811
- return `st-modal-size-${this.currentSize()} st-modal-variant-${this.currentVariant()}`;
2998
+ return `st-modal-size-${this.currentSize()} st-modal-variant-${this.currentVariant()} st-modal-placement-${this.currentPlacement()}`;
2812
2999
  }
2813
3000
  ngOnInit() {
2814
3001
  if (typeof document !== 'undefined' && document.activeElement instanceof HTMLElement) {
@@ -2885,14 +3072,14 @@ class StrataModalComponent {
2885
3072
  return Array.from(this.elementRef.nativeElement.querySelectorAll(selector));
2886
3073
  }
2887
3074
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2888
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataModalComponent, isStandalone: true, selector: "st-modal", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.role": "this.role", "attr.aria-modal": "this.ariaModal", "attr.tabindex": "this.tabIndex", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "modalContents", first: true, predicate: ["modalBody"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (configuration().title || !configuration().hideCloseButton) {\n <st-modal-header\n [title]=\"configuration().title\"\n [showCloseButton]=\"configuration().hideCloseButton === true ? false : true\"\n (click)=\"onCardClick($event)\"></st-modal-header>\n}\n\n<div class=\"modal-content\">\n <ng-template #modalBody></ng-template>\n</div>\n", dependencies: [{ kind: "component", type: StrataModalHeaderComponent, selector: "st-modal-header", inputs: ["title", "showCloseButton"] }] });
3075
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataModalComponent, isStandalone: true, selector: "st-modal", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange", placement: "placementChange" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.role": "this.role", "attr.aria-modal": "this.ariaModal", "attr.tabindex": "this.tabIndex", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "modalContents", first: true, predicate: ["modalBody"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (configuration().title || !configuration().hideCloseButton) {\n <st-modal-header\n [title]=\"configuration().title\"\n [showCloseButton]=\"configuration().hideCloseButton === true ? false : true\"\n (click)=\"onCardClick($event)\"></st-modal-header>\n}\n\n<div class=\"modal-content\">\n <ng-template #modalBody></ng-template>\n</div>\n", dependencies: [{ kind: "component", type: StrataModalHeaderComponent, selector: "st-modal-header", inputs: ["title", "showCloseButton"] }] });
2889
3076
  }
2890
3077
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataModalComponent, decorators: [{
2891
3078
  type: Component,
2892
3079
  args: [{ selector: 'st-modal', imports: [StrataModalHeaderComponent], template: "@if (configuration().title || !configuration().hideCloseButton) {\n <st-modal-header\n [title]=\"configuration().title\"\n [showCloseButton]=\"configuration().hideCloseButton === true ? false : true\"\n (click)=\"onCardClick($event)\"></st-modal-header>\n}\n\n<div class=\"modal-content\">\n <ng-template #modalBody></ng-template>\n</div>\n" }]
2893
3080
  }], propDecorators: { modalContents: [{ type: i0.ViewChild, args: ['modalBody', { ...{
2894
3081
  read: ViewContainerRef
2895
- }, isSignal: true }] }], configuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "configuration", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], role: [{
3082
+ }, isSignal: true }] }], configuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "configuration", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }, { type: i0.Output, args: ["placementChange"] }], role: [{
2896
3083
  type: HostBinding,
2897
3084
  args: ['attr.role']
2898
3085
  }], ariaModal: [{
@@ -2930,11 +3117,11 @@ class StrataModalContainerComponent {
2930
3117
  this.modalService.closeCurrentModal();
2931
3118
  }
2932
3119
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataModalContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2933
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataModalContainerComponent, isStandalone: true, selector: "st-modal-container", host: { listeners: { "document:keydown.escape": "onEscape($event)" } }, ngImport: i0, template: "<div class=\"modal-wrapper\">\n @for (modal of modalService.modals(); track modal; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\" [variant]=\"modal.variant\"> </st-modal>\n }\n</div>\n@if (modalService.modals().length > 0) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n", dependencies: [{ kind: "component", type: StrataModalComponent, selector: "st-modal", inputs: ["configuration", "size", "variant"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
3120
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataModalContainerComponent, isStandalone: true, selector: "st-modal-container", host: { listeners: { "document:keydown.escape": "onEscape($event)" } }, ngImport: i0, template: "<div class=\"modal-wrapper\">\n @for (modal of modalService.modals(); track modal; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\" [variant]=\"modal.variant\" [placement]=\"modal.placement\"> </st-modal>\n }\n</div>\n@if (modalService.modals().length > 0) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n", dependencies: [{ kind: "component", type: StrataModalComponent, selector: "st-modal", inputs: ["configuration", "size", "variant", "placement"], outputs: ["sizeChange", "placementChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
2934
3121
  }
2935
3122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataModalContainerComponent, decorators: [{
2936
3123
  type: Component,
2937
- args: [{ selector: 'st-modal-container', imports: [StrataModalComponent, CommonModule], template: "<div class=\"modal-wrapper\">\n @for (modal of modalService.modals(); track modal; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\" [variant]=\"modal.variant\"> </st-modal>\n }\n</div>\n@if (modalService.modals().length > 0) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n" }]
3124
+ args: [{ selector: 'st-modal-container', imports: [StrataModalComponent, CommonModule], template: "<div class=\"modal-wrapper\">\n @for (modal of modalService.modals(); track modal; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\" [variant]=\"modal.variant\" [placement]=\"modal.placement\"> </st-modal>\n }\n</div>\n@if (modalService.modals().length > 0) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n" }]
2938
3125
  }], propDecorators: { onEscape: [{
2939
3126
  type: HostListener,
2940
3127
  args: ['document:keydown.escape', ['$event']]
@@ -2959,46 +3146,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
2959
3146
  args: ['class']
2960
3147
  }] } });
2961
3148
 
2962
- const DEFAULT_THEME = 'info';
3149
+ const DEFAULT_THEME = 'default';
2963
3150
  const DEFAULT_DURATION = 3000;
2964
3151
 
2965
3152
  class NotificationService {
3153
+ strataConfig = inject(STRATA_CONFIG, { optional: true });
3154
+ maxNotifications = signal(this.strataConfig?.maxNotifications ?? 5, /* @ts-ignore */
3155
+ ...(ngDevMode ? [{ debugName: "maxNotifications" }] : /* istanbul ignore next */ []));
2966
3156
  notificationStack = signal([], /* @ts-ignore */
2967
3157
  ...(ngDevMode ? [{ debugName: "notificationStack" }] : /* istanbul ignore next */ []));
2968
3158
  dismiss(notificationId) {
2969
3159
  const currentStack = this.notificationStack().filter((notification) => notification.id !== notificationId);
2970
3160
  this.notificationStack.set(currentStack);
2971
3161
  }
3162
+ dismissAll() {
3163
+ this.notificationStack.set([]);
3164
+ }
2972
3165
  showNotification(config) {
2973
3166
  const newNotificationId = config.id ?? crypto.randomUUID();
2974
3167
  const duration = config.duration !== undefined ? config.duration : DEFAULT_DURATION;
2975
3168
  const isPersistent = duration === 0;
2976
3169
  const dismissible = config.dismissible !== undefined ? config.dismissible : isPersistent;
3170
+ const showProgress = config.showProgress !== undefined ? config.showProgress : false;
3171
+ const pauseOnHover = config.pauseOnHover !== undefined ? config.pauseOnHover : true;
3172
+ const actions = config.actions ?? [];
2977
3173
  const currentStack = this.notificationStack();
2978
3174
  this.notificationStack.set([
2979
3175
  ...currentStack,
2980
3176
  {
2981
3177
  id: newNotificationId,
3178
+ title: config.title,
2982
3179
  message: config.message,
2983
3180
  duration: duration,
2984
3181
  theme: config.theme ?? DEFAULT_THEME,
2985
3182
  icon: config.icon,
2986
- dismissible
3183
+ dismissible,
3184
+ showProgress,
3185
+ pauseOnHover,
3186
+ actions
2987
3187
  }
2988
3188
  ]);
2989
- if (duration > 0) {
2990
- this.hideNotification(newNotificationId, duration);
2991
- }
2992
3189
  return {
2993
3190
  id: newNotificationId,
2994
3191
  dismiss: () => this.dismiss(newNotificationId)
2995
3192
  };
2996
3193
  }
2997
- hideNotification(notificationId, duration) {
2998
- setTimeout(() => {
2999
- this.dismiss(notificationId);
3000
- }, duration);
3001
- }
3002
3194
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3003
3195
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: NotificationService, providedIn: 'root' });
3004
3196
  }
@@ -3010,36 +3202,136 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
3010
3202
  }] });
3011
3203
 
3012
3204
  class StrataNotificationComponent {
3205
+ id = input(undefined, /* @ts-ignore */
3206
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
3207
+ title = input(undefined, /* @ts-ignore */
3208
+ ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
3013
3209
  icon = input(undefined, /* @ts-ignore */
3014
3210
  ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
3015
3211
  message = input.required(/* @ts-ignore */
3016
3212
  ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
3213
+ duration = input(3000, /* @ts-ignore */
3214
+ ...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
3017
3215
  dismissible = input(false, /* @ts-ignore */
3018
3216
  ...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
3217
+ showProgress = input(false, /* @ts-ignore */
3218
+ ...(ngDevMode ? [{ debugName: "showProgress" }] : /* istanbul ignore next */ []));
3219
+ pauseOnHover = input(true, /* @ts-ignore */
3220
+ ...(ngDevMode ? [{ debugName: "pauseOnHover" }] : /* istanbul ignore next */ []));
3221
+ actions = input([], /* @ts-ignore */
3222
+ ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
3019
3223
  dismiss = output();
3224
+ actionClick = output();
3225
+ isPaused = signal(false, /* @ts-ignore */
3226
+ ...(ngDevMode ? [{ debugName: "isPaused" }] : /* istanbul ignore next */ []));
3227
+ remainingTime = 0;
3228
+ startTime = 0;
3229
+ timeoutId = null;
3230
+ ngOnInit() {
3231
+ if (this.duration() > 0) {
3232
+ this.startTimer(this.duration());
3233
+ }
3234
+ }
3235
+ ngOnDestroy() {
3236
+ this.clearTimer();
3237
+ }
3020
3238
  onDismiss() {
3239
+ this.clearTimer();
3021
3240
  this.dismiss.emit();
3022
3241
  }
3242
+ onActionClick(action) {
3243
+ const ref = {
3244
+ id: this.id() ?? '',
3245
+ dismiss: () => this.onDismiss()
3246
+ };
3247
+ this.actionClick.emit({ action, ref });
3248
+ if (action.onClick) {
3249
+ action.onClick(ref);
3250
+ }
3251
+ }
3252
+ pauseTimer() {
3253
+ if (!this.pauseOnHover() || this.duration() <= 0 || this.isPaused()) {
3254
+ return;
3255
+ }
3256
+ this.clearTimer();
3257
+ const elapsed = Date.now() - this.startTime;
3258
+ this.remainingTime = Math.max(0, this.remainingTime - elapsed);
3259
+ this.isPaused.set(true);
3260
+ }
3261
+ resumeTimer() {
3262
+ if (!this.pauseOnHover() || this.duration() <= 0 || !this.isPaused()) {
3263
+ return;
3264
+ }
3265
+ if (this.remainingTime <= 0) {
3266
+ this.onDismiss();
3267
+ return;
3268
+ }
3269
+ this.startTimer(this.remainingTime);
3270
+ }
3271
+ startTimer(ms) {
3272
+ this.clearTimer();
3273
+ this.remainingTime = ms;
3274
+ this.startTime = Date.now();
3275
+ this.isPaused.set(false);
3276
+ this.timeoutId = setTimeout(() => {
3277
+ this.onDismiss();
3278
+ }, ms);
3279
+ }
3280
+ clearTimer() {
3281
+ if (this.timeoutId !== null) {
3282
+ clearTimeout(this.timeoutId);
3283
+ this.timeoutId = null;
3284
+ }
3285
+ }
3023
3286
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3024
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataNotificationComponent, isStandalone: true, selector: "st-notification", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "@if (icon()) {\n <st-icon [name]=\"icon()!\"></st-icon>\n}\n<span class=\"notification-message\">{{ message() }}</span>\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"notification-close-btn\"\n aria-label=\"Dismiss notification\"\n (click)=\"onDismiss()\"\n >\n <st-icon name=\"close\"></st-icon>\n </button>\n}\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size", "ariaLabel"], outputs: ["sizeChange"] }] });
3287
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataNotificationComponent, isStandalone: true, selector: "st-notification", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null }, showProgress: { classPropertyName: "showProgress", publicName: "showProgress", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss", actionClick: "actionClick" }, host: { listeners: { "mouseenter": "pauseTimer()", "mouseleave": "resumeTimer()", "focusin": "pauseTimer()", "focusout": "resumeTimer()" }, properties: { "class.st-is-paused": "isPaused()", "style.--st-notification-duration": "duration() + \"ms\"" } }, ngImport: i0, template: "@if (icon()) {\n <div class=\"st-notification-icon-wrapper\">\n <st-icon [name]=\"icon()!\"></st-icon>\n </div>\n}\n<div class=\"st-notification-content\">\n @if (title()) {\n <div class=\"st-notification-title\">{{ title() }}</div>\n }\n <div class=\"st-notification-message notification-message\">{{ message() }}</div>\n @if (actions().length > 0) {\n <div class=\"st-notification-actions\">\n @for (action of actions(); track action.label) {\n <button\n type=\"button\"\n stButton\n [variant]=\"action.variant ?? 'secondary'\"\n size=\"sm\"\n (click)=\"onActionClick(action)\"\n >\n {{ action.label }}\n </button>\n }\n </div>\n }\n</div>\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"st-notification-close-btn notification-close-btn\"\n aria-label=\"Dismiss notification\"\n (click)=\"onDismiss()\"\n >\n <st-icon name=\"close\"></st-icon>\n </button>\n}\n@if (showProgress() && duration() > 0) {\n <div class=\"st-notification-progress-bar\" role=\"progressbar\" aria-hidden=\"true\"></div>\n}\n\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size", "ariaLabel"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }] });
3025
3288
  }
3026
3289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataNotificationComponent, decorators: [{
3027
3290
  type: Component,
3028
- args: [{ selector: 'st-notification', imports: [StrataIconComponent], template: "@if (icon()) {\n <st-icon [name]=\"icon()!\"></st-icon>\n}\n<span class=\"notification-message\">{{ message() }}</span>\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"notification-close-btn\"\n aria-label=\"Dismiss notification\"\n (click)=\"onDismiss()\"\n >\n <st-icon name=\"close\"></st-icon>\n </button>\n}\n" }]
3029
- }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }] } });
3291
+ args: [{ selector: 'st-notification', imports: [StrataIconComponent, StrataButtonDirective], host: {
3292
+ '[class.st-is-paused]': 'isPaused()',
3293
+ '[style.--st-notification-duration]': 'duration() + "ms"',
3294
+ '(mouseenter)': 'pauseTimer()',
3295
+ '(mouseleave)': 'resumeTimer()',
3296
+ '(focusin)': 'pauseTimer()',
3297
+ '(focusout)': 'resumeTimer()'
3298
+ }, template: "@if (icon()) {\n <div class=\"st-notification-icon-wrapper\">\n <st-icon [name]=\"icon()!\"></st-icon>\n </div>\n}\n<div class=\"st-notification-content\">\n @if (title()) {\n <div class=\"st-notification-title\">{{ title() }}</div>\n }\n <div class=\"st-notification-message notification-message\">{{ message() }}</div>\n @if (actions().length > 0) {\n <div class=\"st-notification-actions\">\n @for (action of actions(); track action.label) {\n <button\n type=\"button\"\n stButton\n [variant]=\"action.variant ?? 'secondary'\"\n size=\"sm\"\n (click)=\"onActionClick(action)\"\n >\n {{ action.label }}\n </button>\n }\n </div>\n }\n</div>\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"st-notification-close-btn notification-close-btn\"\n aria-label=\"Dismiss notification\"\n (click)=\"onDismiss()\"\n >\n <st-icon name=\"close\"></st-icon>\n </button>\n}\n@if (showProgress() && duration() > 0) {\n <div class=\"st-notification-progress-bar\" role=\"progressbar\" aria-hidden=\"true\"></div>\n}\n\n" }]
3299
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], duration: [{ type: i0.Input, args: [{ isSignal: true, alias: "duration", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], showProgress: [{ type: i0.Input, args: [{ isSignal: true, alias: "showProgress", required: false }] }], pauseOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseOnHover", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }] } });
3030
3300
 
3031
3301
  class StrataNotificationContainerComponent {
3032
3302
  notificationService = inject(NotificationService);
3033
3303
  notifications = this.notificationService.notificationStack;
3304
+ maxNotifications = this.notificationService.maxNotifications;
3305
+ visibleNotifications = computed(() => {
3306
+ const max = this.maxNotifications();
3307
+ const stack = this.notifications();
3308
+ if (max <= 0 || stack.length <= max) {
3309
+ return stack;
3310
+ }
3311
+ return stack.slice(-max);
3312
+ }, /* @ts-ignore */
3313
+ ...(ngDevMode ? [{ debugName: "visibleNotifications" }] : /* istanbul ignore next */ []));
3314
+ overflowCount = computed(() => {
3315
+ const max = this.maxNotifications();
3316
+ const total = this.notifications().length;
3317
+ if (max <= 0) {
3318
+ return 0;
3319
+ }
3320
+ return Math.max(0, total - max);
3321
+ }, /* @ts-ignore */
3322
+ ...(ngDevMode ? [{ debugName: "overflowCount" }] : /* istanbul ignore next */ []));
3034
3323
  dismiss(id) {
3035
3324
  this.notificationService.dismiss(id);
3036
3325
  }
3326
+ dismissAll() {
3327
+ this.notificationService.dismissAll();
3328
+ }
3037
3329
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataNotificationContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3038
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataNotificationContainerComponent, isStandalone: true, selector: "st-notification-container", ngImport: i0, template: "@for (notification of notifications(); track notification.id) {\n <st-notification\n [icon]=\"notification.icon\"\n [message]=\"notification.message\"\n [dismissible]=\"notification.dismissible\"\n [stTheme]=\"notification.theme ?? 'info'\"\n (dismiss)=\"dismiss(notification.id)\"\n >\n </st-notification>\n}\n", dependencies: [{ kind: "component", type: StrataNotificationComponent, selector: "st-notification", inputs: ["icon", "message", "dismissible"], outputs: ["dismiss"] }, { kind: "directive", type: StrataThemeDirective, selector: "[stTheme]", inputs: ["stTheme"] }] });
3330
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataNotificationContainerComponent, isStandalone: true, selector: "st-notification-container", ngImport: i0, template: "@if (overflowCount() > 0) {\n <div class=\"st-notification-overflow\">\n <span class=\"st-notification-overflow-text\">+{{ overflowCount() }} more</span>\n <button\n type=\"button\"\n class=\"st-notification-overflow-clear\"\n aria-label=\"Dismiss all notifications\"\n (click)=\"dismissAll()\"\n >\n <st-icon name=\"close\"></st-icon>\n </button>\n </div>\n}\n\n@for (notification of visibleNotifications(); track notification.id) {\n <st-notification\n [id]=\"notification.id\"\n [icon]=\"notification.icon\"\n [title]=\"notification.title\"\n [message]=\"notification.message\"\n [dismissible]=\"notification.dismissible\"\n [duration]=\"notification.duration ?? 3000\"\n [showProgress]=\"notification.showProgress\"\n [pauseOnHover]=\"notification.pauseOnHover\"\n [actions]=\"notification.actions\"\n [stTheme]=\"notification.theme ?? 'default'\"\n (dismiss)=\"dismiss(notification.id)\"\n >\n </st-notification>\n}\n\n\n", dependencies: [{ kind: "component", type: StrataNotificationComponent, selector: "st-notification", inputs: ["id", "title", "icon", "message", "duration", "dismissible", "showProgress", "pauseOnHover", "actions"], outputs: ["dismiss", "actionClick"] }, { kind: "directive", type: StrataThemeDirective, selector: "[stTheme]", inputs: ["stTheme"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size", "ariaLabel"], outputs: ["sizeChange"] }] });
3039
3331
  }
3040
3332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataNotificationContainerComponent, decorators: [{
3041
3333
  type: Component,
3042
- args: [{ selector: 'st-notification-container', imports: [StrataNotificationComponent, StrataThemeDirective], template: "@for (notification of notifications(); track notification.id) {\n <st-notification\n [icon]=\"notification.icon\"\n [message]=\"notification.message\"\n [dismissible]=\"notification.dismissible\"\n [stTheme]=\"notification.theme ?? 'info'\"\n (dismiss)=\"dismiss(notification.id)\"\n >\n </st-notification>\n}\n" }]
3334
+ args: [{ selector: 'st-notification-container', imports: [StrataNotificationComponent, StrataThemeDirective, StrataIconComponent], template: "@if (overflowCount() > 0) {\n <div class=\"st-notification-overflow\">\n <span class=\"st-notification-overflow-text\">+{{ overflowCount() }} more</span>\n <button\n type=\"button\"\n class=\"st-notification-overflow-clear\"\n aria-label=\"Dismiss all notifications\"\n (click)=\"dismissAll()\"\n >\n <st-icon name=\"close\"></st-icon>\n </button>\n </div>\n}\n\n@for (notification of visibleNotifications(); track notification.id) {\n <st-notification\n [id]=\"notification.id\"\n [icon]=\"notification.icon\"\n [title]=\"notification.title\"\n [message]=\"notification.message\"\n [dismissible]=\"notification.dismissible\"\n [duration]=\"notification.duration ?? 3000\"\n [showProgress]=\"notification.showProgress\"\n [pauseOnHover]=\"notification.pauseOnHover\"\n [actions]=\"notification.actions\"\n [stTheme]=\"notification.theme ?? 'default'\"\n (dismiss)=\"dismiss(notification.id)\"\n >\n </st-notification>\n}\n\n\n" }]
3043
3335
  }] });
3044
3336
 
3045
3337
  class StrataNumberDisplayComponent {
@@ -3078,6 +3370,238 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
3078
3370
  args: [{ selector: 'st-number-display', imports: [CommonModule], template: "<p\n [ngClass]=\"{\n positive: changedValue() && value() > 0,\n negative: changedValue() && value() < 0,\n }\"\n>\n @if (showPlus() && this.value() > 0) {\n +\n }\n <span class=\"integer-value\">{{ separatedDigits().integer }}</span>\n @if (separatedDigits().decimals) {\n <span\n class=\"decimal-number\"\n [ngClass]=\"{ deemphasize: deemphasizeDecimals() }\"\n >{{ decimalPoint() }}{{ separatedDigits().decimals }}</span\n >\n }\n</p>\n" }]
3079
3371
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], decimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimals", required: false }] }], changedValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "changedValue", required: false }] }], showPlus: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPlus", required: false }] }], deemphasizeDecimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "deemphasizeDecimals", required: false }] }] } });
3080
3372
 
3373
+ let nextUniqueId = 0;
3374
+ class StrataNumberStepperComponent {
3375
+ defaultId = `st-stepper-${nextUniqueId++}`;
3376
+ inputRef = viewChild('nativeInput', /* @ts-ignore */
3377
+ ...(ngDevMode ? [{ debugName: "inputRef" }] : /* istanbul ignore next */ []));
3378
+ value = model(undefined, /* @ts-ignore */
3379
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
3380
+ min = input(undefined, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null || value === '' ? undefined : numberAttribute(value) });
3381
+ max = input(undefined, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null || value === '' ? undefined : numberAttribute(value) });
3382
+ step = input(1, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: (value) => {
3383
+ const parsed = numberAttribute(value);
3384
+ return parsed > 0 ? parsed : 1;
3385
+ } });
3386
+ precision = input(undefined, { ...(ngDevMode ? { debugName: "precision" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null || value === '' ? undefined : numberAttribute(value) });
3387
+ size = input('md', /* @ts-ignore */
3388
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
3389
+ stepperLayout = input('split', /* @ts-ignore */
3390
+ ...(ngDevMode ? [{ debugName: "stepperLayout" }] : /* istanbul ignore next */ []));
3391
+ label = input(undefined, /* @ts-ignore */
3392
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
3393
+ placeholder = input(undefined, /* @ts-ignore */
3394
+ ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
3395
+ id = input(undefined, /* @ts-ignore */
3396
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
3397
+ name = input(undefined, /* @ts-ignore */
3398
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
3399
+ state = input(undefined, /* @ts-ignore */
3400
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
3401
+ error = input(false, { ...(ngDevMode ? { debugName: "error" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3402
+ message = input(undefined, /* @ts-ignore */
3403
+ ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
3404
+ colorMessage = input(true, { ...(ngDevMode ? { debugName: "colorMessage" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3405
+ disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null || value === '' ? undefined : booleanAttribute(value) });
3406
+ readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3407
+ cvaDisabled = signal(false, /* @ts-ignore */
3408
+ ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
3409
+ effectiveId = computed(() => this.id() ?? this.name() ?? this.defaultId, /* @ts-ignore */
3410
+ ...(ngDevMode ? [{ debugName: "effectiveId" }] : /* istanbul ignore next */ []));
3411
+ effectiveDisabled = computed(() => (this.disabled() ?? false) || this.cvaDisabled(), /* @ts-ignore */
3412
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
3413
+ effectiveState = computed(() => {
3414
+ if (this.error()) {
3415
+ return 'error';
3416
+ }
3417
+ return this.state() ?? 'default';
3418
+ }, /* @ts-ignore */
3419
+ ...(ngDevMode ? [{ debugName: "effectiveState" }] : /* istanbul ignore next */ []));
3420
+ isMessageError = computed(() => this.effectiveState() === 'error' && this.colorMessage(), /* @ts-ignore */
3421
+ ...(ngDevMode ? [{ debugName: "isMessageError" }] : /* istanbul ignore next */ []));
3422
+ isMessageSuccess = computed(() => this.effectiveState() === 'success' && this.colorMessage(), /* @ts-ignore */
3423
+ ...(ngDevMode ? [{ debugName: "isMessageSuccess" }] : /* istanbul ignore next */ []));
3424
+ isMessageWarning = computed(() => this.effectiveState() === 'warning' && this.colorMessage(), /* @ts-ignore */
3425
+ ...(ngDevMode ? [{ debugName: "isMessageWarning" }] : /* istanbul ignore next */ []));
3426
+ canIncrement = computed(() => {
3427
+ if (this.effectiveDisabled() || this.readonly()) {
3428
+ return false;
3429
+ }
3430
+ const val = this.value();
3431
+ const maxVal = this.max();
3432
+ if (val !== undefined && val !== null && maxVal !== undefined && val >= maxVal) {
3433
+ return false;
3434
+ }
3435
+ return true;
3436
+ }, /* @ts-ignore */
3437
+ ...(ngDevMode ? [{ debugName: "canIncrement" }] : /* istanbul ignore next */ []));
3438
+ canDecrement = computed(() => {
3439
+ if (this.effectiveDisabled() || this.readonly()) {
3440
+ return false;
3441
+ }
3442
+ const val = this.value();
3443
+ const minVal = this.min();
3444
+ if (val !== undefined && val !== null && minVal !== undefined && val <= minVal) {
3445
+ return false;
3446
+ }
3447
+ return true;
3448
+ }, /* @ts-ignore */
3449
+ ...(ngDevMode ? [{ debugName: "canDecrement" }] : /* istanbul ignore next */ []));
3450
+ formattedValue = computed(() => {
3451
+ const val = this.value();
3452
+ if (val === undefined || val === null || isNaN(val)) {
3453
+ return '';
3454
+ }
3455
+ return String(val);
3456
+ }, /* @ts-ignore */
3457
+ ...(ngDevMode ? [{ debugName: "formattedValue" }] : /* istanbul ignore next */ []));
3458
+ onChange = () => undefined;
3459
+ onTouched = () => undefined;
3460
+ stepUp() {
3461
+ if (!this.canIncrement()) {
3462
+ return;
3463
+ }
3464
+ const current = this.value() ?? this.min() ?? 0;
3465
+ let next = current + this.step();
3466
+ const maxVal = this.max();
3467
+ if (maxVal !== undefined && next > maxVal) {
3468
+ next = maxVal;
3469
+ }
3470
+ next = this.roundToPrecision(next, this.precision());
3471
+ this.updateValue(next);
3472
+ }
3473
+ stepDown() {
3474
+ if (!this.canDecrement()) {
3475
+ return;
3476
+ }
3477
+ const current = this.value() ?? this.max() ?? 0;
3478
+ let next = current - this.step();
3479
+ const minVal = this.min();
3480
+ if (minVal !== undefined && next < minVal) {
3481
+ next = minVal;
3482
+ }
3483
+ next = this.roundToPrecision(next, this.precision());
3484
+ this.updateValue(next);
3485
+ }
3486
+ onNativeInput(event) {
3487
+ const inputEl = event.target;
3488
+ const raw = inputEl.value.trim();
3489
+ if (raw === '') {
3490
+ this.updateValue(undefined);
3491
+ return;
3492
+ }
3493
+ const parsed = Number(raw);
3494
+ if (!isNaN(parsed)) {
3495
+ this.updateValue(parsed);
3496
+ }
3497
+ }
3498
+ onNativeBlur() {
3499
+ this.onTouched();
3500
+ const val = this.value();
3501
+ if (val === undefined || val === null || isNaN(val)) {
3502
+ return;
3503
+ }
3504
+ let clamped = val;
3505
+ const minVal = this.min();
3506
+ const maxVal = this.max();
3507
+ if (minVal !== undefined && clamped < minVal) {
3508
+ clamped = minVal;
3509
+ }
3510
+ else if (maxVal !== undefined && clamped > maxVal) {
3511
+ clamped = maxVal;
3512
+ }
3513
+ clamped = this.roundToPrecision(clamped, this.precision());
3514
+ if (clamped !== val) {
3515
+ this.updateValue(clamped);
3516
+ }
3517
+ }
3518
+ onNativeKeyDown(event) {
3519
+ if (event.key === 'ArrowUp') {
3520
+ event.preventDefault();
3521
+ this.stepUp();
3522
+ }
3523
+ else if (event.key === 'ArrowDown') {
3524
+ event.preventDefault();
3525
+ this.stepDown();
3526
+ }
3527
+ }
3528
+ focus() {
3529
+ this.inputRef()?.nativeElement.focus();
3530
+ }
3531
+ blur() {
3532
+ this.inputRef()?.nativeElement.blur();
3533
+ }
3534
+ writeValue(val) {
3535
+ if (val === null || val === undefined || isNaN(val)) {
3536
+ this.value.set(undefined);
3537
+ }
3538
+ else {
3539
+ this.value.set(Number(val));
3540
+ }
3541
+ }
3542
+ registerOnChange(fn) {
3543
+ this.onChange = fn;
3544
+ }
3545
+ registerOnTouched(fn) {
3546
+ this.onTouched = fn;
3547
+ }
3548
+ setDisabledState(isDisabled) {
3549
+ this.cvaDisabled.set(isDisabled);
3550
+ }
3551
+ updateValue(nextVal) {
3552
+ this.value.set(nextVal);
3553
+ this.onChange(nextVal);
3554
+ }
3555
+ roundToPrecision(val, precision) {
3556
+ if (precision !== undefined) {
3557
+ const factor = Math.pow(10, precision);
3558
+ return Math.round(val * factor) / factor;
3559
+ }
3560
+ const stepDecimals = this.getDecimalCount(this.step());
3561
+ if (stepDecimals > 0) {
3562
+ const factor = Math.pow(10, stepDecimals);
3563
+ return Math.round(val * factor) / factor;
3564
+ }
3565
+ return val;
3566
+ }
3567
+ getDecimalCount(val) {
3568
+ const s = String(val);
3569
+ const dotIndex = s.indexOf('.');
3570
+ return dotIndex >= 0 ? s.length - dotIndex - 1 : 0;
3571
+ }
3572
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataNumberStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataNumberStepperComponent, isStandalone: true, selector: "st-number-stepper", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, stepperLayout: { classPropertyName: "stepperLayout", publicName: "stepperLayout", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, colorMessage: { classPropertyName: "colorMessage", publicName: "colorMessage", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.st-size-sm": "size() === \"sm\"", "class.st-size-md": "size() === \"md\"", "class.st-size-lg": "size() === \"lg\"", "class.st-layout-split": "stepperLayout() === \"split\"", "class.st-layout-stacked": "stepperLayout() === \"stacked\"", "class.st-disabled": "effectiveDisabled()", "attr.aria-disabled": "effectiveDisabled() ? \"true\" : null", "class.st-state-error": "effectiveState() === \"error\"", "class.st-state-success": "effectiveState() === \"success\"", "class.st-state-warning": "effectiveState() === \"warning\"", "class.st-error": "effectiveState() === \"error\"", "attr.aria-invalid": "effectiveState() === \"error\" ? \"true\" : null" } }, providers: [
3574
+ {
3575
+ provide: NG_VALUE_ACCESSOR,
3576
+ useExisting: forwardRef(() => StrataNumberStepperComponent),
3577
+ multi: true
3578
+ }
3579
+ ], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (label()) {\n <label class=\"st-label\" [for]=\"effectiveId()\">{{ label() }}</label>\n}\n\n<div class=\"st-stepper-wrapper\">\n @if (stepperLayout() === 'split') {\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-dec\"\n [disabled]=\"!canDecrement()\"\n (click)=\"stepDown()\"\n aria-label=\"Decrement\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-down\"></st-icon>\n </button>\n <input\n #nativeInput\n [id]=\"effectiveId()\"\n [name]=\"name() ?? effectiveId()\"\n type=\"text\"\n inputmode=\"decimal\"\n [placeholder]=\"placeholder() ?? ''\"\n [value]=\"formattedValue()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onNativeBlur()\"\n (keydown)=\"onNativeKeyDown($event)\"\n />\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-inc\"\n [disabled]=\"!canIncrement()\"\n (click)=\"stepUp()\"\n aria-label=\"Increment\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-up\"></st-icon>\n </button>\n } @else {\n <input\n #nativeInput\n [id]=\"effectiveId()\"\n [name]=\"name() ?? effectiveId()\"\n type=\"text\"\n inputmode=\"decimal\"\n [placeholder]=\"placeholder() ?? ''\"\n [value]=\"formattedValue()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onNativeBlur()\"\n (keydown)=\"onNativeKeyDown($event)\"\n />\n <div class=\"st-stepper-stacked-actions\">\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-inc\"\n [disabled]=\"!canIncrement()\"\n (click)=\"stepUp()\"\n aria-label=\"Increment\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-up\"></st-icon>\n </button>\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-dec\"\n [disabled]=\"!canDecrement()\"\n (click)=\"stepDown()\"\n aria-label=\"Decrement\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-down\"></st-icon>\n </button>\n </div>\n }\n</div>\n\n@if (message()) {\n <div class=\"st-stepper-footer\">\n <span\n class=\"st-stepper-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </span>\n </div>\n}\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size", "ariaLabel"], outputs: ["sizeChange"] }] });
3580
+ }
3581
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataNumberStepperComponent, decorators: [{
3582
+ type: Component,
3583
+ args: [{ selector: 'st-number-stepper', imports: [StrataIconComponent], providers: [
3584
+ {
3585
+ provide: NG_VALUE_ACCESSOR,
3586
+ useExisting: forwardRef(() => StrataNumberStepperComponent),
3587
+ multi: true
3588
+ }
3589
+ ], host: {
3590
+ '[class.st-size-sm]': 'size() === "sm"',
3591
+ '[class.st-size-md]': 'size() === "md"',
3592
+ '[class.st-size-lg]': 'size() === "lg"',
3593
+ '[class.st-layout-split]': 'stepperLayout() === "split"',
3594
+ '[class.st-layout-stacked]': 'stepperLayout() === "stacked"',
3595
+ '[class.st-disabled]': 'effectiveDisabled()',
3596
+ '[attr.aria-disabled]': 'effectiveDisabled() ? "true" : null',
3597
+ '[class.st-state-error]': 'effectiveState() === "error"',
3598
+ '[class.st-state-success]': 'effectiveState() === "success"',
3599
+ '[class.st-state-warning]': 'effectiveState() === "warning"',
3600
+ '[class.st-error]': 'effectiveState() === "error"',
3601
+ '[attr.aria-invalid]': 'effectiveState() === "error" ? "true" : null'
3602
+ }, template: "@if (label()) {\n <label class=\"st-label\" [for]=\"effectiveId()\">{{ label() }}</label>\n}\n\n<div class=\"st-stepper-wrapper\">\n @if (stepperLayout() === 'split') {\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-dec\"\n [disabled]=\"!canDecrement()\"\n (click)=\"stepDown()\"\n aria-label=\"Decrement\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-down\"></st-icon>\n </button>\n <input\n #nativeInput\n [id]=\"effectiveId()\"\n [name]=\"name() ?? effectiveId()\"\n type=\"text\"\n inputmode=\"decimal\"\n [placeholder]=\"placeholder() ?? ''\"\n [value]=\"formattedValue()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onNativeBlur()\"\n (keydown)=\"onNativeKeyDown($event)\"\n />\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-inc\"\n [disabled]=\"!canIncrement()\"\n (click)=\"stepUp()\"\n aria-label=\"Increment\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-up\"></st-icon>\n </button>\n } @else {\n <input\n #nativeInput\n [id]=\"effectiveId()\"\n [name]=\"name() ?? effectiveId()\"\n type=\"text\"\n inputmode=\"decimal\"\n [placeholder]=\"placeholder() ?? ''\"\n [value]=\"formattedValue()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onNativeBlur()\"\n (keydown)=\"onNativeKeyDown($event)\"\n />\n <div class=\"st-stepper-stacked-actions\">\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-inc\"\n [disabled]=\"!canIncrement()\"\n (click)=\"stepUp()\"\n aria-label=\"Increment\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-up\"></st-icon>\n </button>\n <button\n type=\"button\"\n class=\"st-stepper-btn st-stepper-btn-dec\"\n [disabled]=\"!canDecrement()\"\n (click)=\"stepDown()\"\n aria-label=\"Decrement\"\n tabindex=\"-1\"\n >\n <st-icon name=\"arrow-down\"></st-icon>\n </button>\n </div>\n }\n</div>\n\n@if (message()) {\n <div class=\"st-stepper-footer\">\n <span\n class=\"st-stepper-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </span>\n </div>\n}\n" }]
3603
+ }], propDecorators: { inputRef: [{ type: i0.ViewChild, args: ['nativeInput', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], precision: [{ type: i0.Input, args: [{ isSignal: true, alias: "precision", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], stepperLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepperLayout", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], colorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorMessage", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }] } });
3604
+
3081
3605
  class StrataSpinnerComponent {
3082
3606
  size = input('md', /* @ts-ignore */
3083
3607
  ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
@@ -3740,6 +4264,12 @@ class StrataSegmentedControlItemComponent {
3740
4264
  ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
3741
4265
  value = input(undefined, /* @ts-ignore */
3742
4266
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
4267
+ badge = input(undefined, /* @ts-ignore */
4268
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
4269
+ badgeVariant = input('neutral', /* @ts-ignore */
4270
+ ...(ngDevMode ? [{ debugName: "badgeVariant" }] : /* istanbul ignore next */ []));
4271
+ badgeSize = input('sm', /* @ts-ignore */
4272
+ ...(ngDevMode ? [{ debugName: "badgeSize" }] : /* istanbul ignore next */ []));
3743
4273
  effectiveValue = computed(() => this.value() ?? this.text(), /* @ts-ignore */
3744
4274
  ...(ngDevMode ? [{ debugName: "effectiveValue" }] : /* istanbul ignore next */ []));
3745
4275
  selected = model(false, /* @ts-ignore */
@@ -3772,11 +4302,11 @@ class StrataSegmentedControlItemComponent {
3772
4302
  this.onClick();
3773
4303
  }
3774
4304
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSegmentedControlItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3775
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.1", type: StrataSegmentedControlItemComponent, isStandalone: true, selector: "st-segmented-control-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", selectionChanged: "selectionChanged" }, host: { attributes: { "role": "tab" }, listeners: { "click": "onClick()", "keydown.space": "onKeydown($event)", "keydown.enter": "onKeydown($event)" }, properties: { "attr.aria-selected": "selected()", "attr.aria-disabled": "effectiveDisabled()", "class.st-disabled": "effectiveDisabled()", "attr.tabindex": "this.tabIndex", "attr.disabled": "this.disabledAttribute" } }, ngImport: i0, template: "{{ text() }}\n", styles: [""] });
4305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataSegmentedControlItemComponent, isStandalone: true, selector: "st-segmented-control-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeVariant: { classPropertyName: "badgeVariant", publicName: "badgeVariant", isSignal: true, isRequired: false, transformFunction: null }, badgeSize: { classPropertyName: "badgeSize", publicName: "badgeSize", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", selectionChanged: "selectionChanged" }, host: { attributes: { "role": "tab" }, listeners: { "click": "onClick()", "keydown.space": "onKeydown($event)", "keydown.enter": "onKeydown($event)" }, properties: { "attr.aria-selected": "selected()", "attr.aria-disabled": "effectiveDisabled()", "class.st-disabled": "effectiveDisabled()", "attr.tabindex": "this.tabIndex", "attr.disabled": "this.disabledAttribute" } }, ngImport: i0, template: "<span>{{ text() }}</span>\n@if (badge() !== undefined) {\n <st-badge [value]=\"badge()\" [variant]=\"badgeVariant()\" [size]=\"badgeSize()\"></st-badge>\n}\n<ng-content select=\"st-badge\"></ng-content>\n", styles: [""], dependencies: [{ kind: "component", type: StrataBadgeComponent, selector: "st-badge", inputs: ["value", "icon", "max", "variant", "size", "placement", "visible", "showZero", "ariaLabel"] }] });
3776
4306
  }
3777
4307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSegmentedControlItemComponent, decorators: [{
3778
4308
  type: Component,
3779
- args: [{ selector: 'st-segmented-control-item', imports: [], host: {
4309
+ args: [{ selector: 'st-segmented-control-item', imports: [StrataBadgeComponent], host: {
3780
4310
  role: 'tab',
3781
4311
  '[attr.aria-selected]': 'selected()',
3782
4312
  '[attr.aria-disabled]': 'effectiveDisabled()',
@@ -3784,8 +4314,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
3784
4314
  '(click)': 'onClick()',
3785
4315
  '(keydown.space)': 'onKeydown($event)',
3786
4316
  '(keydown.enter)': 'onKeydown($event)'
3787
- }, template: "{{ text() }}\n" }]
3788
- }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], tabIndex: [{
4317
+ }, template: "<span>{{ text() }}</span>\n@if (badge() !== undefined) {\n <st-badge [value]=\"badge()\" [variant]=\"badgeVariant()\" [size]=\"badgeSize()\"></st-badge>\n}\n<ng-content select=\"st-badge\"></ng-content>\n" }]
4318
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeVariant", required: false }] }], badgeSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeSize", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], tabIndex: [{
3789
4319
  type: HostBinding,
3790
4320
  args: ['attr.tabindex']
3791
4321
  }], disabledAttribute: [{
@@ -3954,7 +4484,7 @@ class StrataSegmentedControlComponent {
3954
4484
  useExisting: forwardRef(() => StrataSegmentedControlComponent),
3955
4485
  multi: true
3956
4486
  }
3957
- ], queries: [{ propertyName: "segmentItems", predicate: StrataSegmentedControlItemComponent, isSignal: true }, { propertyName: "segmentItemsRefs", predicate: StrataSegmentedControlItemComponent, read: ElementRef, isSignal: true }], ngImport: i0, template: "<div class=\"st-segmented-control-track\">\n <ng-content select=\"st-segmented-control-item\"></ng-content>\n <div class=\"selection-item\" id=\"selection-indicator\" \n [style.left]=\"this.offset() + 'px'\"\n [style.top]=\"this.indicatorTop() + 'px'\"\n [style.width]=\"this.indicatorWidth() + 'px'\"\n [style.height]=\"this.indicatorHeight() + 'px'\">\n {{ this.selectedItem()?.text() }}\n </div>\n</div>\n@if (message()) {\n <div\n class=\"st-segmented-control-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </div>\n}\n\n" });
4487
+ ], queries: [{ propertyName: "segmentItems", predicate: StrataSegmentedControlItemComponent, isSignal: true }, { propertyName: "segmentItemsRefs", predicate: StrataSegmentedControlItemComponent, read: ElementRef, isSignal: true }], ngImport: i0, template: "<div class=\"st-segmented-control-track\">\n <ng-content select=\"st-segmented-control-item\"></ng-content>\n <div class=\"selection-item\" id=\"selection-indicator\" \n [style.left]=\"this.offset() + 'px'\"\n [style.top]=\"this.indicatorTop() + 'px'\"\n [style.width]=\"this.indicatorWidth() + 'px'\"\n [style.height]=\"this.indicatorHeight() + 'px'\"></div>\n</div>\n@if (message()) {\n <div\n class=\"st-segmented-control-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </div>\n}\n\n" });
3958
4488
  }
3959
4489
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSegmentedControlComponent, decorators: [{
3960
4490
  type: Component,
@@ -3977,7 +4507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
3977
4507
  '[attr.aria-invalid]': 'effectiveState() === "error" ? "true" : null',
3978
4508
  '[class.st-disabled]': 'effectiveDisabled()',
3979
4509
  '[attr.aria-disabled]': 'effectiveDisabled()'
3980
- }, template: "<div class=\"st-segmented-control-track\">\n <ng-content select=\"st-segmented-control-item\"></ng-content>\n <div class=\"selection-item\" id=\"selection-indicator\" \n [style.left]=\"this.offset() + 'px'\"\n [style.top]=\"this.indicatorTop() + 'px'\"\n [style.width]=\"this.indicatorWidth() + 'px'\"\n [style.height]=\"this.indicatorHeight() + 'px'\">\n {{ this.selectedItem()?.text() }}\n </div>\n</div>\n@if (message()) {\n <div\n class=\"st-segmented-control-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </div>\n}\n\n" }]
4510
+ }, template: "<div class=\"st-segmented-control-track\">\n <ng-content select=\"st-segmented-control-item\"></ng-content>\n <div class=\"selection-item\" id=\"selection-indicator\" \n [style.left]=\"this.offset() + 'px'\"\n [style.top]=\"this.indicatorTop() + 'px'\"\n [style.width]=\"this.indicatorWidth() + 'px'\"\n [style.height]=\"this.indicatorHeight() + 'px'\"></div>\n</div>\n@if (message()) {\n <div\n class=\"st-segmented-control-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </div>\n}\n\n" }]
3981
4511
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], colorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorMessage", required: false }] }], segmentItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataSegmentedControlItemComponent), { isSignal: true }] }], segmentItemsRefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataSegmentedControlItemComponent), { ...{
3982
4512
  read: ElementRef
3983
4513
  }, isSignal: true }] }] } });
@@ -4386,6 +4916,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
4386
4916
  }, template: "@if (label()) {\n<label class=\"st-label\" [for]=\"name()\"> {{ label() }}</label>\n}\n<div class=\"single-select-input\" [class.disabled]=\"effectiveDisabled()\" [id]=\"name()\" #singleSelectInput (click)=\"toggle($event)\" (keydown.space)=\"toggle($event)\" (keydown.enter)=\"toggle($event)\" (keydown.escape)=\"open.set(false)\" [attr.data-open]=\"open()\"\n [attr.tabindex]=\"effectiveDisabled() ? -1 : 0\" [stOverlay]=\"selector\" [overlayOpen]=\"open()\" [overlayPlacement]=\"placement()\">\n @if (selectedItem()) {\n @if (triggerTemplate()) {\n <ng-container *ngTemplateOutlet=\"triggerTemplate()!\"></ng-container>\n } @else {\n {{ selectedItem()!.text() }}\n }\n } @else {\n <span class=\"placeholder-text\">{{ placeholder() }}</span>\n }\n\n <st-icon name=\"expand-up-down\"></st-icon>\n</div>\n@if (message()) {\n <div\n class=\"st-select-message\"\n [class.st-message-error]=\"isMessageError()\"\n [class.st-message-success]=\"isMessageSuccess()\"\n [class.st-message-warning]=\"isMessageWarning()\"\n [attr.role]=\"isMessageError() ? 'alert' : null\"\n >\n {{ message() }}\n </div>\n}\n\n<ng-template #selector>\n <div class=\"single-select-selector\" #singleSelectSelector [class.full-width]=\"fullWidth()\">\n @if (searchable()) {\n <st-input-field>\n <input stInput #searchField type=\"text\" [value]=\"searchQuery() || ''\" (input)=\"searchQuery.set($any($event.target).value); onSearchChange(searchQuery())\" [placeholder]=\"searchPlaceholder()\" />\n <button stButton variant=\"ghost\" [class.visible]=\"searchQuery() !== undefined && searchQuery()!.length > 0\" suffix\n size=\"sm\" (click)=\"searchQuery.set(undefined); onSearchChange(undefined)\">\n x\n </button>\n </st-input-field>\n }\n <div class=\"single-select-items-container\">\n <ng-content select=\"st-select-item\"></ng-content>\n </div>\n </div>\n</ng-template>" }]
4387
4917
  }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], colorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorMessage", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchQuery: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchQuery", required: false }] }, { type: i0.Output, args: ["searchQueryChange"] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], selectItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataSelectItemComponent), { isSignal: true }] }], triggerTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataSelectTriggerDirective), { ...{ read: TemplateRef }, isSignal: true }] }], inputField: [{ type: i0.ViewChild, args: [i0.forwardRef(() => StrataInputFieldComponent), { isSignal: true }] }] } });
4388
4918
 
4919
+ class StrataSkeletonComponent {
4920
+ variant = input('text', /* @ts-ignore */
4921
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
4922
+ size = input(undefined, /* @ts-ignore */
4923
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
4924
+ animation = input('shimmer', /* @ts-ignore */
4925
+ ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
4926
+ width = input(undefined, /* @ts-ignore */
4927
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
4928
+ height = input(undefined, /* @ts-ignore */
4929
+ ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
4930
+ radius = input(undefined, /* @ts-ignore */
4931
+ ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
4932
+ count = input(1, /* @ts-ignore */
4933
+ ...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
4934
+ lastLineWidth = input('70%', /* @ts-ignore */
4935
+ ...(ngDevMode ? [{ debugName: "lastLineWidth" }] : /* istanbul ignore next */ []));
4936
+ gap = input(undefined, /* @ts-ignore */
4937
+ ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
4938
+ loading = input(true, /* @ts-ignore */
4939
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
4940
+ ariaLabel = input('Loading...', /* @ts-ignore */
4941
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
4942
+ normalizedVariant = computed(() => {
4943
+ const v = this.variant();
4944
+ if (v === 'circle' || v === 'circular')
4945
+ return 'circular';
4946
+ if (v === 'rect' || v === 'rectangular')
4947
+ return 'rectangular';
4948
+ if (v === 'pill' || v === 'rounded')
4949
+ return 'rounded';
4950
+ return 'text';
4951
+ }, /* @ts-ignore */
4952
+ ...(ngDevMode ? [{ debugName: "normalizedVariant" }] : /* istanbul ignore next */ []));
4953
+ normalizedWidth = computed(() => this.formatDimension(this.width()), /* @ts-ignore */
4954
+ ...(ngDevMode ? [{ debugName: "normalizedWidth" }] : /* istanbul ignore next */ []));
4955
+ normalizedHeight = computed(() => this.formatDimension(this.height()), /* @ts-ignore */
4956
+ ...(ngDevMode ? [{ debugName: "normalizedHeight" }] : /* istanbul ignore next */ []));
4957
+ normalizedRadius = computed(() => this.formatDimension(this.radius()), /* @ts-ignore */
4958
+ ...(ngDevMode ? [{ debugName: "normalizedRadius" }] : /* istanbul ignore next */ []));
4959
+ normalizedGap = computed(() => this.formatDimension(this.gap()), /* @ts-ignore */
4960
+ ...(ngDevMode ? [{ debugName: "normalizedGap" }] : /* istanbul ignore next */ []));
4961
+ normalizedLastLineWidth = computed(() => this.formatDimension(this.lastLineWidth()), /* @ts-ignore */
4962
+ ...(ngDevMode ? [{ debugName: "normalizedLastLineWidth" }] : /* istanbul ignore next */ []));
4963
+ isMultiLine = computed(() => this.normalizedVariant() === 'text' && this.count() > 1, /* @ts-ignore */
4964
+ ...(ngDevMode ? [{ debugName: "isMultiLine" }] : /* istanbul ignore next */ []));
4965
+ lineIndices = computed(() => {
4966
+ const n = Math.max(1, Math.floor(this.count()));
4967
+ return Array.from({ length: n }, (_, i) => i);
4968
+ }, /* @ts-ignore */
4969
+ ...(ngDevMode ? [{ debugName: "lineIndices" }] : /* istanbul ignore next */ []));
4970
+ get hostRole() {
4971
+ return this.loading() ? 'status' : null;
4972
+ }
4973
+ get hostAriaBusy() {
4974
+ return this.loading() ? 'true' : null;
4975
+ }
4976
+ get hostAriaLive() {
4977
+ return this.loading() ? 'polite' : null;
4978
+ }
4979
+ get hostAriaLabel() {
4980
+ return this.loading() ? this.ariaLabel() : null;
4981
+ }
4982
+ get hostClasses() {
4983
+ const classes = [
4984
+ 'st-skeleton',
4985
+ `st-skeleton-${this.normalizedVariant()}`,
4986
+ `st-skeleton-anim-${this.animation()}`
4987
+ ];
4988
+ if (this.size()) {
4989
+ classes.push(`st-skeleton-${this.size()}`);
4990
+ }
4991
+ if (this.isMultiLine()) {
4992
+ classes.push('st-skeleton-multiline');
4993
+ }
4994
+ if (!this.loading()) {
4995
+ classes.push('st-skeleton-loaded');
4996
+ }
4997
+ return classes.join(' ');
4998
+ }
4999
+ getLineWidth(index, isLast) {
5000
+ if (isLast && this.normalizedVariant() === 'text' && this.isMultiLine()) {
5001
+ return this.normalizedLastLineWidth() ?? this.normalizedWidth();
5002
+ }
5003
+ return this.normalizedWidth();
5004
+ }
5005
+ formatDimension(value) {
5006
+ if (value === undefined || value === null || value === '') {
5007
+ return undefined;
5008
+ }
5009
+ return typeof value === 'number' ? `${value}px` : value;
5010
+ }
5011
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5012
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataSkeletonComponent, isStandalone: true, selector: "st-skeleton", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null }, lastLineWidth: { classPropertyName: "lastLineWidth", publicName: "lastLineWidth", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "this.hostRole", "attr.aria-busy": "this.hostAriaBusy", "attr.aria-live": "this.hostAriaLive", "attr.aria-label": "this.hostAriaLabel", "class": "this.hostClasses" } }, ngImport: i0, template: "@if (loading()) {\n @if (isMultiLine()) {\n <div class=\"st-skeleton-group\" [style.gap]=\"normalizedGap()\">\n @for (idx of lineIndices(); track idx; let last = $last) {\n <div\n class=\"st-skeleton-bone\"\n [style.width]=\"getLineWidth(idx, last)\"\n [style.height]=\"normalizedHeight()\"\n [style.border-radius]=\"normalizedRadius()\">\n </div>\n }\n </div>\n } @else {\n <div\n class=\"st-skeleton-bone\"\n [style.width]=\"normalizedWidth()\"\n [style.height]=\"normalizedHeight()\"\n [style.border-radius]=\"normalizedRadius()\">\n </div>\n }\n} @else {\n <ng-content></ng-content>\n}\n" });
5013
+ }
5014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSkeletonComponent, decorators: [{
5015
+ type: Component,
5016
+ args: [{ selector: 'st-skeleton', imports: [], template: "@if (loading()) {\n @if (isMultiLine()) {\n <div class=\"st-skeleton-group\" [style.gap]=\"normalizedGap()\">\n @for (idx of lineIndices(); track idx; let last = $last) {\n <div\n class=\"st-skeleton-bone\"\n [style.width]=\"getLineWidth(idx, last)\"\n [style.height]=\"normalizedHeight()\"\n [style.border-radius]=\"normalizedRadius()\">\n </div>\n }\n </div>\n } @else {\n <div\n class=\"st-skeleton-bone\"\n [style.width]=\"normalizedWidth()\"\n [style.height]=\"normalizedHeight()\"\n [style.border-radius]=\"normalizedRadius()\">\n </div>\n }\n} @else {\n <ng-content></ng-content>\n}\n" }]
5017
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], count: [{ type: i0.Input, args: [{ isSignal: true, alias: "count", required: false }] }], lastLineWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "lastLineWidth", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hostRole: [{
5018
+ type: HostBinding,
5019
+ args: ['attr.role']
5020
+ }], hostAriaBusy: [{
5021
+ type: HostBinding,
5022
+ args: ['attr.aria-busy']
5023
+ }], hostAriaLive: [{
5024
+ type: HostBinding,
5025
+ args: ['attr.aria-live']
5026
+ }], hostAriaLabel: [{
5027
+ type: HostBinding,
5028
+ args: ['attr.aria-label']
5029
+ }], hostClasses: [{
5030
+ type: HostBinding,
5031
+ args: ['class']
5032
+ }] } });
5033
+
4389
5034
  class StrataStepComponent {
4390
5035
  label = input.required(/* @ts-ignore */
4391
5036
  ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
@@ -4523,15 +5168,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
4523
5168
  }], ctorParameters: () => [], propDecorators: { currentStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentStep", required: false }] }, { type: i0.Output, args: ["currentStepChange"] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], showCheckmarkOnCompleted: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCheckmarkOnCompleted", required: false }] }], steps: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataStepComponent), { isSignal: true }] }] } });
4524
5169
 
4525
5170
  class StrataTabItemComponent {
4526
- /**
4527
- * The text label for the tab.
4528
- * Can also be provided via content projection.
4529
- */
4530
5171
  text = input(/* @ts-ignore */
4531
5172
  ...(ngDevMode ? [undefined, { debugName: "text" }] : /* istanbul ignore next */ []));
4532
- /**
4533
- * Whether the tab is currently selected.
4534
- */
5173
+ badge = input(undefined, /* @ts-ignore */
5174
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
5175
+ badgeVariant = input('neutral', /* @ts-ignore */
5176
+ ...(ngDevMode ? [{ debugName: "badgeVariant" }] : /* istanbul ignore next */ []));
5177
+ badgeSize = input('sm', /* @ts-ignore */
5178
+ ...(ngDevMode ? [{ debugName: "badgeSize" }] : /* istanbul ignore next */ []));
4535
5179
  selected = model(false, /* @ts-ignore */
4536
5180
  ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
4537
5181
  /**
@@ -4566,15 +5210,15 @@ class StrataTabItemComponent {
4566
5210
  this.selectionChanged.emit();
4567
5211
  }
4568
5212
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataTabItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4569
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataTabItemComponent, isStandalone: true, selector: "st-tab-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", selectionChanged: "selectionChanged" }, host: { attributes: { "role": "tab" }, listeners: { "click": "onClick()" }, properties: { "attr.aria-selected": "this.isSelected", "attr.aria-disabled": "this.isDisabled", "attr.tabindex": "this.tabIndex", "class.active": "this.activeClass", "class.disabled": "this.disabledClass" } }, ngImport: i0, template: "@if (text()) {\n {{ text() }}\n} @else {\n <ng-content></ng-content>\n}\n" });
5213
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: StrataTabItemComponent, isStandalone: true, selector: "st-tab-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, badgeVariant: { classPropertyName: "badgeVariant", publicName: "badgeVariant", isSignal: true, isRequired: false, transformFunction: null }, badgeSize: { classPropertyName: "badgeSize", publicName: "badgeSize", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", selectionChanged: "selectionChanged" }, host: { attributes: { "role": "tab" }, listeners: { "click": "onClick()" }, properties: { "attr.aria-selected": "this.isSelected", "attr.aria-disabled": "this.isDisabled", "attr.tabindex": "this.tabIndex", "class.active": "this.activeClass", "class.disabled": "this.disabledClass" } }, ngImport: i0, template: "@if (text()) {\n <span>{{ text() }}</span>\n @if (badge() !== undefined) {\n <st-badge [value]=\"badge()\" [variant]=\"badgeVariant()\" [size]=\"badgeSize()\"></st-badge>\n }\n <ng-content select=\"st-badge\"></ng-content>\n} @else {\n <ng-content></ng-content>\n}\n", dependencies: [{ kind: "component", type: StrataBadgeComponent, selector: "st-badge", inputs: ["value", "icon", "max", "variant", "size", "placement", "visible", "showZero", "ariaLabel"] }] });
4570
5214
  }
4571
5215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataTabItemComponent, decorators: [{
4572
5216
  type: Component,
4573
- args: [{ selector: 'st-tab-item', imports: [], host: {
5217
+ args: [{ selector: 'st-tab-item', imports: [StrataBadgeComponent], host: {
4574
5218
  'role': 'tab',
4575
5219
  '(click)': 'onClick()'
4576
- }, template: "@if (text()) {\n {{ text() }}\n} @else {\n <ng-content></ng-content>\n}\n" }]
4577
- }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], isSelected: [{
5220
+ }, template: "@if (text()) {\n <span>{{ text() }}</span>\n @if (badge() !== undefined) {\n <st-badge [value]=\"badge()\" [variant]=\"badgeVariant()\" [size]=\"badgeSize()\"></st-badge>\n }\n <ng-content select=\"st-badge\"></ng-content>\n} @else {\n <ng-content></ng-content>\n}\n" }]
5221
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeVariant", required: false }] }], badgeSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeSize", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], isSelected: [{
4578
5222
  type: HostBinding,
4579
5223
  args: ['attr.aria-selected']
4580
5224
  }], isDisabled: [{
@@ -4701,5 +5345,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
4701
5345
  * Generated bundle index. Do not edit.
4702
5346
  */
4703
5347
 
4704
- export { CapitalizePipe, DEFAULT_DURATION, DEFAULT_THEME, DarkmodeService, HotkeyService, HttpIconLoader, IconLoader, IconRegistry, IconRegistryService, ModalService, NotificationService, STRATA_CONFIG, StrataAccordionGroupComponent, StrataAccordionItemComponent, StrataActionMenuComponent, StrataActionMenuItemComponent, StrataActivatableDirective, StrataAlertComponent, StrataAlertContentComponent, StrataAutoResizeDirective, StrataAvatarComponent, StrataAvatarStackComponent, StrataBadgeComponent, StrataBreadcrumbComponent, StrataBreadcrumbItemComponent, StrataButtonDirective, StrataButtonGroupComponent, StrataCardComponent, StrataCheckboxComponent, StrataDividerComponent, StrataFileUploadComponent, StrataIconComponent, StrataImageCropperComponent, StrataInputFieldComponent, StrataItemComponent, StrataItemListComponent, StrataKbdComponent, StrataMessageStateComponent, StrataModalComponent, StrataModalContainerComponent, StrataModalFooterComponent, StrataModalHeaderComponent, StrataModalRef, StrataNativeInputRefDirective, StrataNotificationComponent, StrataNotificationContainerComponent, StrataNumberDisplayComponent, StrataOtpComponent, StrataOverlayDirective, StrataPaginationComponent, StrataProgressLinearComponent, StrataProgressRadialComponent, StrataRadioComponent, StrataRadioGroupComponent, StrataSegmentedControlComponent, StrataSegmentedControlItemComponent, StrataSelectItemComponent, StrataSelectTriggerDirective, StrataShellComponent, StrataSidemenuComponent, StrataSidemenuItemDirective, StrataSidemenuItemGroupComponent, StrataSidemenuSectionComponent, StrataSingleSelectComponent, StrataSliderComponent, StrataSpinnerComponent, StrataStepComponent, StrataStepperComponent, StrataTabItemComponent, StrataTabsComponent, StrataTagComponent, StrataTextStackComponent, StrataThemeDirective, StrataToggleComponent, StrataTooltipDirective, getDefaultShortcutLabels, isApplePlatform, provideBaseIcons, provideIcons, provideStrata, resolveIsApple };
5348
+ export { BreakpointService, CapitalizePipe, DEFAULT_DURATION, DEFAULT_THEME, DarkmodeService, DeviceService, HotkeyService, HttpIconLoader, IconLoader, IconRegistry, IconRegistryService, ModalService, NotificationService, STRATA_CONFIG, StrataAccordionGroupComponent, StrataAccordionItemComponent, StrataActionMenuComponent, StrataActionMenuItemComponent, StrataActivatableDirective, StrataAlertComponent, StrataAlertContentComponent, StrataAutoResizeDirective, StrataAvatarComponent, StrataAvatarStackComponent, StrataBadgeComponent, StrataBreadcrumbComponent, StrataBreadcrumbItemComponent, StrataButtonDirective, StrataButtonGroupComponent, StrataCardComponent, StrataCheckboxComponent, StrataDividerComponent, StrataFileUploadComponent, StrataIconComponent, StrataImageCropperComponent, StrataInputFieldComponent, StrataItemComponent, StrataItemListComponent, StrataKbdComponent, StrataMessageStateComponent, StrataModalBodyComponent, StrataModalComponent, StrataModalContainerComponent, StrataModalFooterComponent, StrataModalHeaderComponent, StrataModalRef, StrataNativeInputRefDirective, StrataNotificationComponent, StrataNotificationContainerComponent, StrataNumberDisplayComponent, StrataNumberStepperComponent, StrataOtpComponent, StrataOverlayDirective, StrataPaginationComponent, StrataProgressLinearComponent, StrataProgressRadialComponent, StrataRadioComponent, StrataRadioGroupComponent, StrataSegmentedControlComponent, StrataSegmentedControlItemComponent, StrataSelectItemComponent, StrataSelectTriggerDirective, StrataShellComponent, StrataSidemenuComponent, StrataSidemenuItemDirective, StrataSidemenuItemGroupComponent, StrataSidemenuSectionComponent, StrataSingleSelectComponent, StrataSkeletonComponent, StrataSliderComponent, StrataSpinnerComponent, StrataStepComponent, StrataStepperComponent, StrataTabItemComponent, StrataTabsComponent, StrataTagComponent, StrataTextStackComponent, StrataThemeDirective, StrataToggleComponent, StrataTooltipDirective, getDefaultShortcutLabels, isApplePlatform, provideBaseIcons, provideIcons, provideStrata, resolveIsApple };
4705
5349
  //# sourceMappingURL=ngx-strata.mjs.map