@flywheel-io/vision 21.8.1-branch.vision-beta-publishing.8a3e1996.0 → 21.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- import { NgClass, CommonModule, NgStyle, NgTemplateOutlet, DecimalPipe, SlicePipe, Location } from '@angular/common';
1
+ import { NgClass, CommonModule, NgTemplateOutlet, NgStyle, DecimalPipe, SlicePipe, Location } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { input, computed, ChangeDetectionStrategy, Component, output, NgModule, HostBinding, model, signal, effect, HostListener, ViewEncapsulation, EventEmitter, Output, inject, ElementRef, ViewContainerRef, Directive, contentChildren, viewChild, ChangeDetectorRef, ContentChildren, Input, ViewChild, forwardRef, DestroyRef, ContentChild, contentChild, NgZone, untracked, Injectable, DOCUMENT, numberAttribute, viewChildren, linkedSignal, ViewChildren, TemplateRef } from '@angular/core';
3
+ import { input, computed, ChangeDetectionStrategy, Component, output, NgModule, HostBinding, model, signal, effect, HostListener, inject, ElementRef, Input, ViewChild, ViewEncapsulation, contentChildren, EventEmitter, Output, ViewContainerRef, Directive, viewChild, ChangeDetectorRef, ContentChildren, forwardRef, DestroyRef, ContentChild, contentChild, NgZone, untracked, Injectable, DOCUMENT, numberAttribute, viewChildren, linkedSignal, ViewChildren, TemplateRef } from '@angular/core';
4
4
  import { BehaviorSubject, debounce, timer, distinctUntilChanged, min, Subject, takeUntil, of, Subscription, combineLatest, tap, switchMap, map } from 'rxjs';
5
5
  import * as i1$1 from '@angular/cdk/overlay';
6
6
  import { CdkConnectedOverlay, OverlayModule, Overlay, CdkOverlayOrigin, OverlayContainer, STANDARD_DROPDOWN_BELOW_POSITIONS } from '@angular/cdk/overlay';
@@ -407,6 +407,147 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImpo
407
407
  }]
408
408
  }] });
409
409
 
410
+ /**
411
+ * Component for a circular progress spinner supporting determinate and indeterminate modes
412
+ * @see [Vision storybook](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-progress-spinner--docs)
413
+ */
414
+ class FwProgressSpinnerComponent {
415
+ constructor() {
416
+ this._elementRef = inject(ElementRef);
417
+ /** Mode of the progress spinner. **/
418
+ this.mode = input('indeterminate', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
419
+ /** Size of the progress spinner. **/
420
+ this.size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
421
+ /** Color of the progress spinner. **/
422
+ this.color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
423
+ /** Whether to show the value percentage label on the progress spinner. **/
424
+ this.showValue = input(false, ...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
425
+ this._value = 0;
426
+ this._diameter = 20;
427
+ this._strokeWidth = 3;
428
+ }
429
+ /** Value of the progress spinner. Defaults to zero. Mirrored to aria-valuenow. **/
430
+ get value() {
431
+ // return this.mode === 'determinate' ? this._value : 0;
432
+ return this._value;
433
+ }
434
+ set value(v) {
435
+ this._value = Math.max(0, Math.min(100, v || 0));
436
+ }
437
+ /** The diameter of the progress spinner (will set width and height of svg). */
438
+ get diameter() {
439
+ switch (this.size()) {
440
+ case 'small':
441
+ this._diameter = 20;
442
+ this._strokeWidth = 3;
443
+ break;
444
+ case 'medium':
445
+ this._diameter = 36;
446
+ this._strokeWidth = 4;
447
+ break;
448
+ }
449
+ return this._diameter;
450
+ }
451
+ /** The radius of the spinner, adjusted for stroke width. */
452
+ _circleRadius() {
453
+ return (this.diameter - 10) / 2;
454
+ }
455
+ /** The view box of the spinner's svg element. */
456
+ _viewBox() {
457
+ const viewBox = this._circleRadius() * 2 + this._strokeWidth;
458
+ return `0 0 ${viewBox} ${viewBox}`;
459
+ }
460
+ /** The stroke circumference of the svg circle. */
461
+ _strokeCircumference() {
462
+ return 2 * Math.PI * this._circleRadius();
463
+ }
464
+ /** The dash offset of the svg circle. */
465
+ _strokeDashOffset() {
466
+ if (this.mode() === 'determinate') {
467
+ return (this._strokeCircumference() * (100 - this._value)) / 100;
468
+ }
469
+ return null;
470
+ }
471
+ /** Stroke width of the circle in percent. */
472
+ _circleStrokeWidth() {
473
+ return (this._strokeWidth / this.diameter) * 100;
474
+ }
475
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwProgressSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
476
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: FwProgressSpinnerComponent, isStandalone: true, selector: "fw-progress-spinner", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar", "tabindex": "-1" }, properties: { "class.progress-indeterminate": "mode() === \"indeterminate\"", "class.progress-small": "size() === \"small\"", "class.progress-show-value": "this.showValue", "style.width.px": "diameter", "style.height.px": "diameter", "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-valuenow": "mode() === \"determinate\" ? value : null", "attr.mode": "mode()" }, classAttribute: "fw-progress-spinner" }, viewQueries: [{ propertyName: "_determinateCircle", first: true, predicate: ["determinateSpinner"], descendants: true }], ngImport: i0, template: "<ng-template #circle>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-indeterminate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-indeterminate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeCircumference() / 2\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</ng-template>\n\n<div class=\"progress-determinate-container\" aria-hidden=\"true\" #determinateSpinner>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-determinate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-circle\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</div>\n<div class=\"progress-indeterminate-container\" aria-hidden=\"true\">\n <div class=\"progress-spinner-layer\">\n <div class=\"progress-circle-clipper progress-circle-left\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n <div class=\"progress-circle-clipper progress-circle-right\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n </div>\n</div>\n@if (showValue()) {\n <p [ngClass]=\"['progress-label', 'size-' + size(), 'mode-' + mode()]\">{{ value }}%</p>\n}\n", styles: [".fw-progress-spinner{display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity .25s cubic-bezier(.4,0,.6,1)}.fw-progress-spinner.progress-small.progress-show-value{overflow:visible}.progress-determinate-container,.progress-indeterminate-circle-graphic,.progress-indeterminate-container,.progress-spinner-layer{position:absolute;width:100%;height:100%}.progress-determinate-container{transform:rotate(-90deg)}.progress-indeterminate .progress-determinate-container{opacity:0}.progress-indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.progress-indeterminate .progress-indeterminate-container{opacity:1;animation:progress-container-rotate 1.5682353s linear infinite}.progress-determinate-circle-graphic,.progress-indeterminate-circle-graphic{fill:transparent;stroke:var(--primary-base);stroke-linecap:round}.progress-determinate-circle-graphic.secondary,.progress-indeterminate-circle-graphic.secondary{stroke:var(--secondary-base)}.progress-determinate-circle-graphic.red,.progress-indeterminate-circle-graphic.red{stroke:var(--red-base)}.progress-determinate-circle-graphic.slate,.progress-indeterminate-circle-graphic.slate{stroke:var(--slate-base)}.progress-determinate-circle-graphic.orange,.progress-indeterminate-circle-graphic.orange{stroke:var(--orange-base)}.progress-determinate-circle-graphic.green,.progress-indeterminate-circle-graphic.green{stroke:var(--green-base)}.progress-determinate-circle{transition:stroke-dashoffset .5s cubic-bezier(0,0,.2,1)}.progress-determinate-track,.progress-indeterminate-track{fill:transparent;stroke:var(--separations-divider);stroke-dasharray:100px!important;stroke-dashoffset:0!important;transition:none}.progress-gap-patch .progress-indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.progress-circle-clipper .progress-indeterminate-circle-graphic{width:200%}.progress-circle-right .progress-indeterminate-circle-graphic{left:-100%}.progress-indeterminate .progress-circle-left .progress-indeterminate-circle-graphic{animation:progress-left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-indeterminate .progress-circle-right .progress-indeterminate-circle-graphic{animation:progress-right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.progress-indeterminate .progress-spinner-layer{animation:progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}.progress-label{margin:0;font-size:8px;line-height:120%;font-weight:500;width:24px;color:var(--typography-muted);position:absolute;top:calc(50% - 4px);right:calc(50% - 12px);text-align:center}.progress-label.size-small{right:-24px}.progress-label.size-large{font-size:12px;top:calc(50% - 6px)}.progress-label.size-extra-large{font-size:16px;width:40px;top:calc(50% - 8px);right:calc(50% - 20px)}@keyframes progress-container-rotate{to{transform:rotate(360deg)}}@keyframes progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes progress-left-spin{0%{transform:rotate(260deg)}50%{transform:rotate(130deg)}to{transform:rotate(260deg)}}@keyframes progress-right-spin{0%{transform:rotate(-260deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-260deg)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
477
+ }
478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwProgressSpinnerComponent, decorators: [{
479
+ type: Component,
480
+ args: [{ selector: 'fw-progress-spinner', host: {
481
+ role: 'progressbar',
482
+ class: 'fw-progress-spinner',
483
+ tabindex: '-1',
484
+ '[class.progress-indeterminate]': 'mode() === "indeterminate"',
485
+ '[class.progress-small]': 'size() === "small"',
486
+ '[class.progress-show-value]': 'this.showValue',
487
+ '[style.width.px]': 'diameter',
488
+ '[style.height.px]': 'diameter',
489
+ // '[style.--progress-size]': 'diameter + "px"',
490
+ // '[style.--progress-active-indicator-width]': 'diameter + "px"',
491
+ '[attr.aria-valuemin]': '0',
492
+ '[attr.aria-valuemax]': '100',
493
+ '[attr.aria-valuenow]': 'mode() === "determinate" ? value : null',
494
+ '[attr.mode]': 'mode()',
495
+ }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgClass, NgTemplateOutlet], template: "<ng-template #circle>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-indeterminate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-indeterminate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeCircumference() / 2\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</ng-template>\n\n<div class=\"progress-determinate-container\" aria-hidden=\"true\" #determinateSpinner>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-determinate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-circle\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</div>\n<div class=\"progress-indeterminate-container\" aria-hidden=\"true\">\n <div class=\"progress-spinner-layer\">\n <div class=\"progress-circle-clipper progress-circle-left\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n <div class=\"progress-circle-clipper progress-circle-right\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n </div>\n</div>\n@if (showValue()) {\n <p [ngClass]=\"['progress-label', 'size-' + size(), 'mode-' + mode()]\">{{ value }}%</p>\n}\n", styles: [".fw-progress-spinner{display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity .25s cubic-bezier(.4,0,.6,1)}.fw-progress-spinner.progress-small.progress-show-value{overflow:visible}.progress-determinate-container,.progress-indeterminate-circle-graphic,.progress-indeterminate-container,.progress-spinner-layer{position:absolute;width:100%;height:100%}.progress-determinate-container{transform:rotate(-90deg)}.progress-indeterminate .progress-determinate-container{opacity:0}.progress-indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.progress-indeterminate .progress-indeterminate-container{opacity:1;animation:progress-container-rotate 1.5682353s linear infinite}.progress-determinate-circle-graphic,.progress-indeterminate-circle-graphic{fill:transparent;stroke:var(--primary-base);stroke-linecap:round}.progress-determinate-circle-graphic.secondary,.progress-indeterminate-circle-graphic.secondary{stroke:var(--secondary-base)}.progress-determinate-circle-graphic.red,.progress-indeterminate-circle-graphic.red{stroke:var(--red-base)}.progress-determinate-circle-graphic.slate,.progress-indeterminate-circle-graphic.slate{stroke:var(--slate-base)}.progress-determinate-circle-graphic.orange,.progress-indeterminate-circle-graphic.orange{stroke:var(--orange-base)}.progress-determinate-circle-graphic.green,.progress-indeterminate-circle-graphic.green{stroke:var(--green-base)}.progress-determinate-circle{transition:stroke-dashoffset .5s cubic-bezier(0,0,.2,1)}.progress-determinate-track,.progress-indeterminate-track{fill:transparent;stroke:var(--separations-divider);stroke-dasharray:100px!important;stroke-dashoffset:0!important;transition:none}.progress-gap-patch .progress-indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.progress-circle-clipper .progress-indeterminate-circle-graphic{width:200%}.progress-circle-right .progress-indeterminate-circle-graphic{left:-100%}.progress-indeterminate .progress-circle-left .progress-indeterminate-circle-graphic{animation:progress-left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-indeterminate .progress-circle-right .progress-indeterminate-circle-graphic{animation:progress-right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.progress-indeterminate .progress-spinner-layer{animation:progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}.progress-label{margin:0;font-size:8px;line-height:120%;font-weight:500;width:24px;color:var(--typography-muted);position:absolute;top:calc(50% - 4px);right:calc(50% - 12px);text-align:center}.progress-label.size-small{right:-24px}.progress-label.size-large{font-size:12px;top:calc(50% - 6px)}.progress-label.size-extra-large{font-size:16px;width:40px;top:calc(50% - 8px);right:calc(50% - 20px)}@keyframes progress-container-rotate{to{transform:rotate(360deg)}}@keyframes progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes progress-left-spin{0%{transform:rotate(260deg)}50%{transform:rotate(130deg)}to{transform:rotate(260deg)}}@keyframes progress-right-spin{0%{transform:rotate(-260deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-260deg)}}\n"] }]
496
+ }], propDecorators: { _determinateCircle: [{
497
+ type: ViewChild,
498
+ args: ['determinateSpinner']
499
+ }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], value: [{
500
+ type: Input
501
+ }] } });
502
+
503
+ /**
504
+ * Component for a styled action button with configurable color, size, variant, and optional icons
505
+ * @see [Vision storybook](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-button--docs)
506
+ */
507
+ class FwButtonComponent {
508
+ constructor() {
509
+ this.color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
510
+ this.size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
511
+ this.variant = input('solid', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
512
+ this.type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
513
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
514
+ this.fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
515
+ this.leftIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leftIcon" }] : /* istanbul ignore next */ []));
516
+ this.rightIcon = input(undefined, ...(ngDevMode ? [{ debugName: "rightIcon" }] : /* istanbul ignore next */ []));
517
+ /** When true, marks this button as the initial focus target when it's the first-rendered child of a `cdkTrapFocus`/CDK Dialog focus trap. */
518
+ this.focusInitial = input(false, ...(ngDevMode ? [{ debugName: "focusInitial" }] : /* istanbul ignore next */ []));
519
+ }
520
+ get classes() {
521
+ return ['fw-button', this.size(), this.fullWidth() ? 'full-width' : null].filter(Boolean).join(' ');
522
+ }
523
+ getMappedColor() {
524
+ const color = this.color();
525
+ switch (color) {
526
+ case 'primary':
527
+ case 'secondary':
528
+ case 'slate':
529
+ return color;
530
+ case 'danger':
531
+ return 'red';
532
+ case 'warning':
533
+ return 'orange';
534
+ case 'success':
535
+ return 'green';
536
+ default:
537
+ return undefined;
538
+ }
539
+ }
540
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
541
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: FwButtonComponent, isStandalone: true, selector: "fw-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, leftIcon: { classPropertyName: "leftIcon", publicName: "leftIcon", isSignal: true, isRequired: false, transformFunction: null }, rightIcon: { classPropertyName: "rightIcon", publicName: "rightIcon", isSignal: true, isRequired: false, transformFunction: null }, focusInitial: { classPropertyName: "focusInitial", publicName: "focusInitial", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.class": "this.classes" } }, ngImport: i0, template: "<button\n [type]=\"type()\"\n [class]=\"[color() + '-' + variant(), size()]\"\n [disabled]=\"disabled()\"\n [attr.cdkFocusInitial]=\"focusInitial() ? '' : null\"\n>\n @if (variant() === 'progress') {\n <fw-progress-spinner size=\"small\" [color]=\"getMappedColor()\"></fw-progress-spinner>\n }\n @if (!!leftIcon() && variant() !== 'progress') {\n <fw-icon>{{ leftIcon() }}</fw-icon>\n }\n @if (!leftIcon()) {\n <div class=\"spacer\"></div>\n }\n <span><ng-content></ng-content></span>\n @if (!!rightIcon()) {\n <fw-icon>{{ rightIcon() }}</fw-icon>\n }\n</button>\n", styles: [":host.full-width{flex:1;display:flex}:host.full-width button{flex:1}button{cursor:pointer;font-family:Inter,sans-serif;font-size:14px;line-height:14px;font-style:normal;font-weight:500;display:inline-flex;height:36px;padding:12px;justify-content:center;align-items:center;gap:8px;flex-shrink:0;border:1px solid transparent;border-radius:8px}button .spacer{height:18px;width:0;margin-left:-8px}button fw-icon{height:18px;font-size:20px;width:20px;min-width:20px}button span{white-space:nowrap}button:disabled{opacity:.4;cursor:not-allowed}.large{font-size:16px;height:40px;padding:12px 14px}.large fw-icon{font-size:24px;width:24px;min-width:24px}.small{height:30px;padding:12px 10px}.primary-solid{background-color:var(--primary-base);color:var(--typography-contrast)}.primary-solid:hover{background-color:var(--primary-medium)}.primary-solid:active{background-color:var(--primary-dark)}.primary-ghost{background-color:transparent;color:var(--primary-base)}.primary-ghost:hover{background-color:var(--primary-hover)}.primary-ghost:active{background-color:var(--primary-focus)}.primary-outline{background-color:transparent;color:var(--primary-base)}.primary-outline:hover{background-color:var(--primary-hover)}.primary-outline:active{background-color:var(--primary-focus)}.primary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.primary-progress{background-color:transparent;color:var(--primary-base)}.primary-progress:hover{background-color:var(--primary-hover)}.primary-progress:active{background-color:var(--primary-focus)}.primary-progress{background-color:var(--primary-hover);color:var(--primary-base)}.primary-progress span{opacity:.6}.primary-progress:disabled{opacity:.6;cursor:not-allowed}.secondary-solid{background-color:var(--secondary-base);color:var(--typography-contrast)}.secondary-solid:hover{background-color:var(--secondary-medium)}.secondary-solid:active{background-color:var(--secondary-dark)}.secondary-ghost{background-color:transparent;color:var(--secondary-base)}.secondary-ghost:hover{background-color:var(--secondary-hover)}.secondary-ghost:active{background-color:var(--secondary-focus)}.secondary-outline{background-color:transparent;color:var(--secondary-base)}.secondary-outline:hover{background-color:var(--secondary-hover)}.secondary-outline:active{background-color:var(--secondary-focus)}.secondary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.secondary-progress{background-color:transparent;color:var(--secondary-base)}.secondary-progress:hover{background-color:var(--secondary-hover)}.secondary-progress:active{background-color:var(--secondary-focus)}.secondary-progress{background-color:var(--secondary-hover);color:var(--secondary-base)}.secondary-progress span{opacity:.6}.secondary-progress:disabled{opacity:.6;cursor:not-allowed}.slate-solid{background-color:var(--slate-base);color:var(--typography-contrast)}.slate-solid:hover{background-color:var(--slate-medium)}.slate-solid:active{background-color:var(--slate-dark)}.slate-ghost{background-color:transparent;color:var(--slate-base)}.slate-ghost:hover{background-color:var(--slate-hover)}.slate-ghost:active{background-color:var(--slate-focus)}.slate-outline{background-color:transparent;color:var(--slate-base)}.slate-outline:hover{background-color:var(--slate-hover)}.slate-outline:active{background-color:var(--slate-focus)}.slate-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.slate-progress{background-color:transparent;color:var(--slate-base)}.slate-progress:hover{background-color:var(--slate-hover)}.slate-progress:active{background-color:var(--slate-focus)}.slate-progress{background-color:var(--slate-hover);color:var(--slate-base)}.slate-progress span{opacity:.6}.slate-progress:disabled{opacity:.6;cursor:not-allowed}.danger-solid{background-color:var(--red-base);color:var(--typography-contrast)}.danger-solid:hover{background-color:var(--red-medium)}.danger-solid:active{background-color:var(--red-dark)}.danger-ghost{background-color:transparent;color:var(--red-base)}.danger-ghost:hover{background-color:var(--red-hover)}.danger-ghost:active{background-color:var(--red-focus)}.danger-outline{background-color:transparent;color:var(--red-base)}.danger-outline:hover{background-color:var(--red-hover)}.danger-outline:active{background-color:var(--red-focus)}.danger-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.danger-progress{background-color:transparent;color:var(--red-base)}.danger-progress:hover{background-color:var(--red-hover)}.danger-progress:active{background-color:var(--red-focus)}.danger-progress{background-color:var(--red-hover);color:var(--red-base)}.danger-progress span{opacity:.6}.danger-progress:disabled{opacity:.6;cursor:not-allowed}.skeleton-solid{background-color:var(---base);color:var(--typography-contrast)}.skeleton-solid:hover{background-color:var(---medium)}.skeleton-solid:active{background-color:var(---dark)}.skeleton-ghost{background-color:transparent;color:var(---base)}.skeleton-ghost:hover{background-color:var(---hover)}.skeleton-ghost:active{background-color:var(---focus)}.skeleton-outline{background-color:transparent;color:var(---base)}.skeleton-outline:hover{background-color:var(---hover)}.skeleton-outline:active{background-color:var(---focus)}.skeleton-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.skeleton-progress{background-color:transparent;color:var(---base)}.skeleton-progress:hover{background-color:var(---hover)}.skeleton-progress:active{background-color:var(---focus)}.skeleton-progress{background-color:var(---hover);color:var(---base)}.skeleton-progress span{opacity:.6}.skeleton-progress:disabled{opacity:.6;cursor:not-allowed}.warning-solid{background-color:var(--orange-base);color:var(--typography-contrast)}.warning-solid:hover{background-color:var(--orange-medium)}.warning-solid:active{background-color:var(--orange-dark)}.warning-ghost{background-color:transparent;color:var(--orange-base)}.warning-ghost:hover{background-color:var(--orange-hover)}.warning-ghost:active{background-color:var(--orange-focus)}.warning-outline{background-color:transparent;color:var(--orange-base)}.warning-outline:hover{background-color:var(--orange-hover)}.warning-outline:active{background-color:var(--orange-focus)}.warning-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.warning-progress{background-color:transparent;color:var(--orange-base)}.warning-progress:hover{background-color:var(--orange-hover)}.warning-progress:active{background-color:var(--orange-focus)}.warning-progress{background-color:var(--orange-hover);color:var(--orange-base)}.warning-progress span{opacity:.6}.warning-progress:disabled{opacity:.6;cursor:not-allowed}.success-solid{background-color:var(--green-base);color:var(--typography-contrast)}.success-solid:hover{background-color:var(--green-medium)}.success-solid:active{background-color:var(--green-dark)}.success-ghost{background-color:transparent;color:var(--green-base)}.success-ghost:hover{background-color:var(--green-hover)}.success-ghost:active{background-color:var(--green-focus)}.success-outline{background-color:transparent;color:var(--green-base)}.success-outline:hover{background-color:var(--green-hover)}.success-outline:active{background-color:var(--green-focus)}.success-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.success-progress{background-color:transparent;color:var(--green-base)}.success-progress:hover{background-color:var(--green-hover)}.success-progress:active{background-color:var(--green-focus)}.success-progress{background-color:var(--green-hover);color:var(--green-base)}.success-progress span{opacity:.6}.success-progress:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: FwProgressSpinnerComponent, selector: "fw-progress-spinner", inputs: ["mode", "size", "color", "showValue", "value"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["ariaLabel", "size", "color"] }] }); }
542
+ }
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwButtonComponent, decorators: [{
544
+ type: Component,
545
+ args: [{ selector: 'fw-button', imports: [FwProgressSpinnerComponent, FwIconComponent], template: "<button\n [type]=\"type()\"\n [class]=\"[color() + '-' + variant(), size()]\"\n [disabled]=\"disabled()\"\n [attr.cdkFocusInitial]=\"focusInitial() ? '' : null\"\n>\n @if (variant() === 'progress') {\n <fw-progress-spinner size=\"small\" [color]=\"getMappedColor()\"></fw-progress-spinner>\n }\n @if (!!leftIcon() && variant() !== 'progress') {\n <fw-icon>{{ leftIcon() }}</fw-icon>\n }\n @if (!leftIcon()) {\n <div class=\"spacer\"></div>\n }\n <span><ng-content></ng-content></span>\n @if (!!rightIcon()) {\n <fw-icon>{{ rightIcon() }}</fw-icon>\n }\n</button>\n", styles: [":host.full-width{flex:1;display:flex}:host.full-width button{flex:1}button{cursor:pointer;font-family:Inter,sans-serif;font-size:14px;line-height:14px;font-style:normal;font-weight:500;display:inline-flex;height:36px;padding:12px;justify-content:center;align-items:center;gap:8px;flex-shrink:0;border:1px solid transparent;border-radius:8px}button .spacer{height:18px;width:0;margin-left:-8px}button fw-icon{height:18px;font-size:20px;width:20px;min-width:20px}button span{white-space:nowrap}button:disabled{opacity:.4;cursor:not-allowed}.large{font-size:16px;height:40px;padding:12px 14px}.large fw-icon{font-size:24px;width:24px;min-width:24px}.small{height:30px;padding:12px 10px}.primary-solid{background-color:var(--primary-base);color:var(--typography-contrast)}.primary-solid:hover{background-color:var(--primary-medium)}.primary-solid:active{background-color:var(--primary-dark)}.primary-ghost{background-color:transparent;color:var(--primary-base)}.primary-ghost:hover{background-color:var(--primary-hover)}.primary-ghost:active{background-color:var(--primary-focus)}.primary-outline{background-color:transparent;color:var(--primary-base)}.primary-outline:hover{background-color:var(--primary-hover)}.primary-outline:active{background-color:var(--primary-focus)}.primary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.primary-progress{background-color:transparent;color:var(--primary-base)}.primary-progress:hover{background-color:var(--primary-hover)}.primary-progress:active{background-color:var(--primary-focus)}.primary-progress{background-color:var(--primary-hover);color:var(--primary-base)}.primary-progress span{opacity:.6}.primary-progress:disabled{opacity:.6;cursor:not-allowed}.secondary-solid{background-color:var(--secondary-base);color:var(--typography-contrast)}.secondary-solid:hover{background-color:var(--secondary-medium)}.secondary-solid:active{background-color:var(--secondary-dark)}.secondary-ghost{background-color:transparent;color:var(--secondary-base)}.secondary-ghost:hover{background-color:var(--secondary-hover)}.secondary-ghost:active{background-color:var(--secondary-focus)}.secondary-outline{background-color:transparent;color:var(--secondary-base)}.secondary-outline:hover{background-color:var(--secondary-hover)}.secondary-outline:active{background-color:var(--secondary-focus)}.secondary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.secondary-progress{background-color:transparent;color:var(--secondary-base)}.secondary-progress:hover{background-color:var(--secondary-hover)}.secondary-progress:active{background-color:var(--secondary-focus)}.secondary-progress{background-color:var(--secondary-hover);color:var(--secondary-base)}.secondary-progress span{opacity:.6}.secondary-progress:disabled{opacity:.6;cursor:not-allowed}.slate-solid{background-color:var(--slate-base);color:var(--typography-contrast)}.slate-solid:hover{background-color:var(--slate-medium)}.slate-solid:active{background-color:var(--slate-dark)}.slate-ghost{background-color:transparent;color:var(--slate-base)}.slate-ghost:hover{background-color:var(--slate-hover)}.slate-ghost:active{background-color:var(--slate-focus)}.slate-outline{background-color:transparent;color:var(--slate-base)}.slate-outline:hover{background-color:var(--slate-hover)}.slate-outline:active{background-color:var(--slate-focus)}.slate-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.slate-progress{background-color:transparent;color:var(--slate-base)}.slate-progress:hover{background-color:var(--slate-hover)}.slate-progress:active{background-color:var(--slate-focus)}.slate-progress{background-color:var(--slate-hover);color:var(--slate-base)}.slate-progress span{opacity:.6}.slate-progress:disabled{opacity:.6;cursor:not-allowed}.danger-solid{background-color:var(--red-base);color:var(--typography-contrast)}.danger-solid:hover{background-color:var(--red-medium)}.danger-solid:active{background-color:var(--red-dark)}.danger-ghost{background-color:transparent;color:var(--red-base)}.danger-ghost:hover{background-color:var(--red-hover)}.danger-ghost:active{background-color:var(--red-focus)}.danger-outline{background-color:transparent;color:var(--red-base)}.danger-outline:hover{background-color:var(--red-hover)}.danger-outline:active{background-color:var(--red-focus)}.danger-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.danger-progress{background-color:transparent;color:var(--red-base)}.danger-progress:hover{background-color:var(--red-hover)}.danger-progress:active{background-color:var(--red-focus)}.danger-progress{background-color:var(--red-hover);color:var(--red-base)}.danger-progress span{opacity:.6}.danger-progress:disabled{opacity:.6;cursor:not-allowed}.skeleton-solid{background-color:var(---base);color:var(--typography-contrast)}.skeleton-solid:hover{background-color:var(---medium)}.skeleton-solid:active{background-color:var(---dark)}.skeleton-ghost{background-color:transparent;color:var(---base)}.skeleton-ghost:hover{background-color:var(---hover)}.skeleton-ghost:active{background-color:var(---focus)}.skeleton-outline{background-color:transparent;color:var(---base)}.skeleton-outline:hover{background-color:var(---hover)}.skeleton-outline:active{background-color:var(---focus)}.skeleton-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.skeleton-progress{background-color:transparent;color:var(---base)}.skeleton-progress:hover{background-color:var(---hover)}.skeleton-progress:active{background-color:var(---focus)}.skeleton-progress{background-color:var(---hover);color:var(---base)}.skeleton-progress span{opacity:.6}.skeleton-progress:disabled{opacity:.6;cursor:not-allowed}.warning-solid{background-color:var(--orange-base);color:var(--typography-contrast)}.warning-solid:hover{background-color:var(--orange-medium)}.warning-solid:active{background-color:var(--orange-dark)}.warning-ghost{background-color:transparent;color:var(--orange-base)}.warning-ghost:hover{background-color:var(--orange-hover)}.warning-ghost:active{background-color:var(--orange-focus)}.warning-outline{background-color:transparent;color:var(--orange-base)}.warning-outline:hover{background-color:var(--orange-hover)}.warning-outline:active{background-color:var(--orange-focus)}.warning-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.warning-progress{background-color:transparent;color:var(--orange-base)}.warning-progress:hover{background-color:var(--orange-hover)}.warning-progress:active{background-color:var(--orange-focus)}.warning-progress{background-color:var(--orange-hover);color:var(--orange-base)}.warning-progress span{opacity:.6}.warning-progress:disabled{opacity:.6;cursor:not-allowed}.success-solid{background-color:var(--green-base);color:var(--typography-contrast)}.success-solid:hover{background-color:var(--green-medium)}.success-solid:active{background-color:var(--green-dark)}.success-ghost{background-color:transparent;color:var(--green-base)}.success-ghost:hover{background-color:var(--green-hover)}.success-ghost:active{background-color:var(--green-focus)}.success-outline{background-color:transparent;color:var(--green-base)}.success-outline:hover{background-color:var(--green-hover)}.success-outline:active{background-color:var(--green-focus)}.success-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.success-progress{background-color:transparent;color:var(--green-base)}.success-progress:hover{background-color:var(--green-hover)}.success-progress:active{background-color:var(--green-focus)}.success-progress{background-color:var(--green-hover);color:var(--green-base)}.success-progress span{opacity:.6}.success-progress:disabled{opacity:.6;cursor:not-allowed}\n"] }]
546
+ }], propDecorators: { classes: [{
547
+ type: HostBinding,
548
+ args: ['attr.class']
549
+ }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], leftIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftIcon", required: false }] }], rightIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "rightIcon", required: false }] }], focusInitial: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusInitial", required: false }] }] } });
550
+
410
551
  var LayoutWidth;
411
552
  (function (LayoutWidth) {
412
553
  LayoutWidth["Small"] = "small";
@@ -431,6 +572,7 @@ class FwLayoutContextComponent {
431
572
  };
432
573
  return widthMap[this.width()];
433
574
  }, ...(ngDevMode ? [{ debugName: "widthPx" }] : /* istanbul ignore next */ []));
575
+ this.actionButtons = contentChildren(FwButtonComponent, ...(ngDevMode ? [{ debugName: "actionButtons" }] : /* istanbul ignore next */ []));
434
576
  this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
435
577
  this.iconColor = input('secondary', ...(ngDevMode ? [{ debugName: "iconColor" }] : /* istanbul ignore next */ []));
436
578
  this.parsedIconColor = computed(() => {
@@ -448,7 +590,7 @@ class FwLayoutContextComponent {
448
590
  this.description = input(...(ngDevMode ? [undefined, { debugName: "description" }] : /* istanbul ignore next */ []));
449
591
  }
450
592
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwLayoutContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
451
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: FwLayoutContextComponent, isStandalone: true, selector: "fw-layout-context", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.width": "widthPx()", "attr.title": "null" }, classAttribute: "fw-layout-context" }, ngImport: i0, template: "@if (icon()) {\n <fw-icon [color]=\"parsedIconColor()\">{{ icon() }}</fw-icon>\n}\n\n@if (title()) {\n <h3>{{ title() }}</h3>\n}\n\n@if (description()) {\n <p class=\"vision-p3\">{{ description() }}</p>\n} @else {\n <ng-content select=\"[slot='description']\"></ng-content>\n}\n\n<div class=\"context-actions\">\n <ng-content select=\"fw-button\"></ng-content>\n</div>\n", styles: [":host{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:50px;max-width:100%}:host fw-icon{font-size:50px;width:50px;max-width:50px}:host h3{margin:0}:host p{margin:0;text-align:center;color:var(--typography-muted)}:host .context-actions{display:flex;gap:8px}\n"], dependencies: [{ kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["ariaLabel", "size", "color"] }] }); }
593
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: FwLayoutContextComponent, isStandalone: true, selector: "fw-layout-context", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.width": "widthPx()", "attr.title": "null" }, classAttribute: "fw-layout-context" }, queries: [{ propertyName: "actionButtons", predicate: FwButtonComponent, isSignal: true }], ngImport: i0, template: "@if (icon()) {\n <fw-icon [color]=\"parsedIconColor()\">{{ icon() }}</fw-icon>\n}\n\n<div class=\"context-text\">\n @if (title()) {\n <h3>{{ title() }}</h3>\n }\n\n @if (description()) {\n <p class=\"vision-p3\">{{ description() }}</p>\n } @else {\n <ng-content select=\"[slot='description']\"></ng-content>\n }\n</div>\n\n@if (actionButtons().length > 0) {\n <div class=\"context-actions\">\n <ng-content select=\"fw-button\"></ng-content>\n </div>\n}\n\n", styles: [":host{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:50px;max-width:100%}:host fw-icon{font-size:50px;width:50px;max-width:50px}:host .context-text{display:flex;flex-direction:column;align-items:center;width:100%;gap:8px}:host .context-text h3{margin:0}:host .context-text p{margin:0;text-align:center;color:var(--typography-muted)}:host .context-actions{display:flex;gap:8px}\n"], dependencies: [{ kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["ariaLabel", "size", "color"] }] }); }
452
594
  }
453
595
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwLayoutContextComponent, decorators: [{
454
596
  type: Component,
@@ -456,8 +598,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImpo
456
598
  class: 'fw-layout-context',
457
599
  '[style.width]': 'widthPx()',
458
600
  '[attr.title]': 'null',
459
- }, template: "@if (icon()) {\n <fw-icon [color]=\"parsedIconColor()\">{{ icon() }}</fw-icon>\n}\n\n@if (title()) {\n <h3>{{ title() }}</h3>\n}\n\n@if (description()) {\n <p class=\"vision-p3\">{{ description() }}</p>\n} @else {\n <ng-content select=\"[slot='description']\"></ng-content>\n}\n\n<div class=\"context-actions\">\n <ng-content select=\"fw-button\"></ng-content>\n</div>\n", styles: [":host{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:50px;max-width:100%}:host fw-icon{font-size:50px;width:50px;max-width:50px}:host h3{margin:0}:host p{margin:0;text-align:center;color:var(--typography-muted)}:host .context-actions{display:flex;gap:8px}\n"] }]
460
- }], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }] } });
601
+ }, template: "@if (icon()) {\n <fw-icon [color]=\"parsedIconColor()\">{{ icon() }}</fw-icon>\n}\n\n<div class=\"context-text\">\n @if (title()) {\n <h3>{{ title() }}</h3>\n }\n\n @if (description()) {\n <p class=\"vision-p3\">{{ description() }}</p>\n } @else {\n <ng-content select=\"[slot='description']\"></ng-content>\n }\n</div>\n\n@if (actionButtons().length > 0) {\n <div class=\"context-actions\">\n <ng-content select=\"fw-button\"></ng-content>\n </div>\n}\n\n", styles: [":host{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:50px;max-width:100%}:host fw-icon{font-size:50px;width:50px;max-width:50px}:host .context-text{display:flex;flex-direction:column;align-items:center;width:100%;gap:8px}:host .context-text h3{margin:0}:host .context-text p{margin:0;text-align:center;color:var(--typography-muted)}:host .context-actions{display:flex;gap:8px}\n"] }]
602
+ }], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], actionButtons: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => FwButtonComponent), { isSignal: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }] } });
461
603
 
462
604
  /**
463
605
  * Layout component for a 12-column responsive grid container
@@ -1525,147 +1667,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImpo
1525
1667
  }]
1526
1668
  }] });
1527
1669
 
1528
- /**
1529
- * Component for a circular progress spinner supporting determinate and indeterminate modes
1530
- * @see [Vision storybook](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-progress-spinner--docs)
1531
- */
1532
- class FwProgressSpinnerComponent {
1533
- constructor() {
1534
- this._elementRef = inject(ElementRef);
1535
- /** Mode of the progress spinner. **/
1536
- this.mode = input('indeterminate', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
1537
- /** Size of the progress spinner. **/
1538
- this.size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1539
- /** Color of the progress spinner. **/
1540
- this.color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
1541
- /** Whether to show the value percentage label on the progress spinner. **/
1542
- this.showValue = input(false, ...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
1543
- this._value = 0;
1544
- this._diameter = 20;
1545
- this._strokeWidth = 3;
1546
- }
1547
- /** Value of the progress spinner. Defaults to zero. Mirrored to aria-valuenow. **/
1548
- get value() {
1549
- // return this.mode === 'determinate' ? this._value : 0;
1550
- return this._value;
1551
- }
1552
- set value(v) {
1553
- this._value = Math.max(0, Math.min(100, v || 0));
1554
- }
1555
- /** The diameter of the progress spinner (will set width and height of svg). */
1556
- get diameter() {
1557
- switch (this.size()) {
1558
- case 'small':
1559
- this._diameter = 20;
1560
- this._strokeWidth = 3;
1561
- break;
1562
- case 'medium':
1563
- this._diameter = 36;
1564
- this._strokeWidth = 4;
1565
- break;
1566
- }
1567
- return this._diameter;
1568
- }
1569
- /** The radius of the spinner, adjusted for stroke width. */
1570
- _circleRadius() {
1571
- return (this.diameter - 10) / 2;
1572
- }
1573
- /** The view box of the spinner's svg element. */
1574
- _viewBox() {
1575
- const viewBox = this._circleRadius() * 2 + this._strokeWidth;
1576
- return `0 0 ${viewBox} ${viewBox}`;
1577
- }
1578
- /** The stroke circumference of the svg circle. */
1579
- _strokeCircumference() {
1580
- return 2 * Math.PI * this._circleRadius();
1581
- }
1582
- /** The dash offset of the svg circle. */
1583
- _strokeDashOffset() {
1584
- if (this.mode() === 'determinate') {
1585
- return (this._strokeCircumference() * (100 - this._value)) / 100;
1586
- }
1587
- return null;
1588
- }
1589
- /** Stroke width of the circle in percent. */
1590
- _circleStrokeWidth() {
1591
- return (this._strokeWidth / this.diameter) * 100;
1592
- }
1593
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwProgressSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1594
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: FwProgressSpinnerComponent, isStandalone: true, selector: "fw-progress-spinner", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar", "tabindex": "-1" }, properties: { "class.progress-indeterminate": "mode() === \"indeterminate\"", "class.progress-small": "size() === \"small\"", "class.progress-show-value": "this.showValue", "style.width.px": "diameter", "style.height.px": "diameter", "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-valuenow": "mode() === \"determinate\" ? value : null", "attr.mode": "mode()" }, classAttribute: "fw-progress-spinner" }, viewQueries: [{ propertyName: "_determinateCircle", first: true, predicate: ["determinateSpinner"], descendants: true }], ngImport: i0, template: "<ng-template #circle>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-indeterminate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-indeterminate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeCircumference() / 2\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</ng-template>\n\n<div class=\"progress-determinate-container\" aria-hidden=\"true\" #determinateSpinner>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-determinate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-circle\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</div>\n<div class=\"progress-indeterminate-container\" aria-hidden=\"true\">\n <div class=\"progress-spinner-layer\">\n <div class=\"progress-circle-clipper progress-circle-left\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n <div class=\"progress-circle-clipper progress-circle-right\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n </div>\n</div>\n@if (showValue()) {\n <p [ngClass]=\"['progress-label', 'size-' + size(), 'mode-' + mode()]\">{{ value }}%</p>\n}\n", styles: [".fw-progress-spinner{display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity .25s cubic-bezier(.4,0,.6,1)}.fw-progress-spinner.progress-small.progress-show-value{overflow:visible}.progress-determinate-container,.progress-indeterminate-circle-graphic,.progress-indeterminate-container,.progress-spinner-layer{position:absolute;width:100%;height:100%}.progress-determinate-container{transform:rotate(-90deg)}.progress-indeterminate .progress-determinate-container{opacity:0}.progress-indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.progress-indeterminate .progress-indeterminate-container{opacity:1;animation:progress-container-rotate 1.5682353s linear infinite}.progress-determinate-circle-graphic,.progress-indeterminate-circle-graphic{fill:transparent;stroke:var(--primary-base);stroke-linecap:round}.progress-determinate-circle-graphic.secondary,.progress-indeterminate-circle-graphic.secondary{stroke:var(--secondary-base)}.progress-determinate-circle-graphic.red,.progress-indeterminate-circle-graphic.red{stroke:var(--red-base)}.progress-determinate-circle-graphic.slate,.progress-indeterminate-circle-graphic.slate{stroke:var(--slate-base)}.progress-determinate-circle-graphic.orange,.progress-indeterminate-circle-graphic.orange{stroke:var(--orange-base)}.progress-determinate-circle-graphic.green,.progress-indeterminate-circle-graphic.green{stroke:var(--green-base)}.progress-determinate-circle{transition:stroke-dashoffset .5s cubic-bezier(0,0,.2,1)}.progress-determinate-track,.progress-indeterminate-track{fill:transparent;stroke:var(--separations-divider);stroke-dasharray:100px!important;stroke-dashoffset:0!important;transition:none}.progress-gap-patch .progress-indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.progress-circle-clipper .progress-indeterminate-circle-graphic{width:200%}.progress-circle-right .progress-indeterminate-circle-graphic{left:-100%}.progress-indeterminate .progress-circle-left .progress-indeterminate-circle-graphic{animation:progress-left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-indeterminate .progress-circle-right .progress-indeterminate-circle-graphic{animation:progress-right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.progress-indeterminate .progress-spinner-layer{animation:progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}.progress-label{margin:0;font-size:8px;line-height:120%;font-weight:500;width:24px;color:var(--typography-muted);position:absolute;top:calc(50% - 4px);right:calc(50% - 12px);text-align:center}.progress-label.size-small{right:-24px}.progress-label.size-large{font-size:12px;top:calc(50% - 6px)}.progress-label.size-extra-large{font-size:16px;width:40px;top:calc(50% - 8px);right:calc(50% - 20px)}@keyframes progress-container-rotate{to{transform:rotate(360deg)}}@keyframes progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes progress-left-spin{0%{transform:rotate(260deg)}50%{transform:rotate(130deg)}to{transform:rotate(260deg)}}@keyframes progress-right-spin{0%{transform:rotate(-260deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-260deg)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1595
- }
1596
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwProgressSpinnerComponent, decorators: [{
1597
- type: Component,
1598
- args: [{ selector: 'fw-progress-spinner', host: {
1599
- role: 'progressbar',
1600
- class: 'fw-progress-spinner',
1601
- tabindex: '-1',
1602
- '[class.progress-indeterminate]': 'mode() === "indeterminate"',
1603
- '[class.progress-small]': 'size() === "small"',
1604
- '[class.progress-show-value]': 'this.showValue',
1605
- '[style.width.px]': 'diameter',
1606
- '[style.height.px]': 'diameter',
1607
- // '[style.--progress-size]': 'diameter + "px"',
1608
- // '[style.--progress-active-indicator-width]': 'diameter + "px"',
1609
- '[attr.aria-valuemin]': '0',
1610
- '[attr.aria-valuemax]': '100',
1611
- '[attr.aria-valuenow]': 'mode() === "determinate" ? value : null',
1612
- '[attr.mode]': 'mode()',
1613
- }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgClass, NgTemplateOutlet], template: "<ng-template #circle>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-indeterminate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-indeterminate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeCircumference() / 2\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</ng-template>\n\n<div class=\"progress-determinate-container\" aria-hidden=\"true\" #determinateSpinner>\n <svg\n [attr.viewBox]=\"_viewBox()\"\n [ngClass]=\"['progress-determinate-circle-graphic', color()]\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n >\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-track\"\n cx=\"50%\"\n cy=\"50%\"\n />\n <circle\n [attr.r]=\"_circleRadius()\"\n [style.stroke-dasharray.px]=\"_strokeCircumference()\"\n [style.stroke-dashoffset.px]=\"_strokeDashOffset()\"\n [style.stroke-width.%]=\"_circleStrokeWidth()\"\n class=\"progress-determinate-circle\"\n cx=\"50%\"\n cy=\"50%\"\n />\n </svg>\n</div>\n<div class=\"progress-indeterminate-container\" aria-hidden=\"true\">\n <div class=\"progress-spinner-layer\">\n <div class=\"progress-circle-clipper progress-circle-left\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n <div class=\"progress-circle-clipper progress-circle-right\">\n <ng-container [ngTemplateOutlet]=\"circle\"></ng-container>\n </div>\n </div>\n</div>\n@if (showValue()) {\n <p [ngClass]=\"['progress-label', 'size-' + size(), 'mode-' + mode()]\">{{ value }}%</p>\n}\n", styles: [".fw-progress-spinner{display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity .25s cubic-bezier(.4,0,.6,1)}.fw-progress-spinner.progress-small.progress-show-value{overflow:visible}.progress-determinate-container,.progress-indeterminate-circle-graphic,.progress-indeterminate-container,.progress-spinner-layer{position:absolute;width:100%;height:100%}.progress-determinate-container{transform:rotate(-90deg)}.progress-indeterminate .progress-determinate-container{opacity:0}.progress-indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.progress-indeterminate .progress-indeterminate-container{opacity:1;animation:progress-container-rotate 1.5682353s linear infinite}.progress-determinate-circle-graphic,.progress-indeterminate-circle-graphic{fill:transparent;stroke:var(--primary-base);stroke-linecap:round}.progress-determinate-circle-graphic.secondary,.progress-indeterminate-circle-graphic.secondary{stroke:var(--secondary-base)}.progress-determinate-circle-graphic.red,.progress-indeterminate-circle-graphic.red{stroke:var(--red-base)}.progress-determinate-circle-graphic.slate,.progress-indeterminate-circle-graphic.slate{stroke:var(--slate-base)}.progress-determinate-circle-graphic.orange,.progress-indeterminate-circle-graphic.orange{stroke:var(--orange-base)}.progress-determinate-circle-graphic.green,.progress-indeterminate-circle-graphic.green{stroke:var(--green-base)}.progress-determinate-circle{transition:stroke-dashoffset .5s cubic-bezier(0,0,.2,1)}.progress-determinate-track,.progress-indeterminate-track{fill:transparent;stroke:var(--separations-divider);stroke-dasharray:100px!important;stroke-dashoffset:0!important;transition:none}.progress-gap-patch .progress-indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.progress-circle-clipper .progress-indeterminate-circle-graphic{width:200%}.progress-circle-right .progress-indeterminate-circle-graphic{left:-100%}.progress-indeterminate .progress-circle-left .progress-indeterminate-circle-graphic{animation:progress-left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-indeterminate .progress-circle-right .progress-indeterminate-circle-graphic{animation:progress-right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.progress-circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.progress-indeterminate .progress-spinner-layer{animation:progress-spinner-layer-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}.progress-label{margin:0;font-size:8px;line-height:120%;font-weight:500;width:24px;color:var(--typography-muted);position:absolute;top:calc(50% - 4px);right:calc(50% - 12px);text-align:center}.progress-label.size-small{right:-24px}.progress-label.size-large{font-size:12px;top:calc(50% - 6px)}.progress-label.size-extra-large{font-size:16px;width:40px;top:calc(50% - 8px);right:calc(50% - 20px)}@keyframes progress-container-rotate{to{transform:rotate(360deg)}}@keyframes progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes progress-left-spin{0%{transform:rotate(260deg)}50%{transform:rotate(130deg)}to{transform:rotate(260deg)}}@keyframes progress-right-spin{0%{transform:rotate(-260deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-260deg)}}\n"] }]
1614
- }], propDecorators: { _determinateCircle: [{
1615
- type: ViewChild,
1616
- args: ['determinateSpinner']
1617
- }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], value: [{
1618
- type: Input
1619
- }] } });
1620
-
1621
- /**
1622
- * Component for a styled action button with configurable color, size, variant, and optional icons
1623
- * @see [Vision storybook](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-button--docs)
1624
- */
1625
- class FwButtonComponent {
1626
- constructor() {
1627
- this.color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
1628
- this.size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1629
- this.variant = input('solid', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1630
- this.type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
1631
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1632
- this.fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
1633
- this.leftIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leftIcon" }] : /* istanbul ignore next */ []));
1634
- this.rightIcon = input(undefined, ...(ngDevMode ? [{ debugName: "rightIcon" }] : /* istanbul ignore next */ []));
1635
- /** When true, marks this button as the initial focus target when it's the first-rendered child of a `cdkTrapFocus`/CDK Dialog focus trap. */
1636
- this.focusInitial = input(false, ...(ngDevMode ? [{ debugName: "focusInitial" }] : /* istanbul ignore next */ []));
1637
- }
1638
- get classes() {
1639
- return ['fw-button', this.size(), this.fullWidth() ? 'full-width' : null].filter(Boolean).join(' ');
1640
- }
1641
- getMappedColor() {
1642
- const color = this.color();
1643
- switch (color) {
1644
- case 'primary':
1645
- case 'secondary':
1646
- case 'slate':
1647
- return color;
1648
- case 'danger':
1649
- return 'red';
1650
- case 'warning':
1651
- return 'orange';
1652
- case 'success':
1653
- return 'green';
1654
- default:
1655
- return undefined;
1656
- }
1657
- }
1658
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1659
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.18", type: FwButtonComponent, isStandalone: true, selector: "fw-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, leftIcon: { classPropertyName: "leftIcon", publicName: "leftIcon", isSignal: true, isRequired: false, transformFunction: null }, rightIcon: { classPropertyName: "rightIcon", publicName: "rightIcon", isSignal: true, isRequired: false, transformFunction: null }, focusInitial: { classPropertyName: "focusInitial", publicName: "focusInitial", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.class": "this.classes" } }, ngImport: i0, template: "<button\n [type]=\"type()\"\n [class]=\"[color() + '-' + variant(), size()]\"\n [disabled]=\"disabled()\"\n [attr.cdkFocusInitial]=\"focusInitial() ? '' : null\"\n>\n @if (variant() === 'progress') {\n <fw-progress-spinner size=\"small\" [color]=\"getMappedColor()\"></fw-progress-spinner>\n }\n @if (!!leftIcon() && variant() !== 'progress') {\n <fw-icon>{{ leftIcon() }}</fw-icon>\n }\n @if (!leftIcon()) {\n <div class=\"spacer\"></div>\n }\n <span><ng-content></ng-content></span>\n @if (!!rightIcon()) {\n <fw-icon>{{ rightIcon() }}</fw-icon>\n }\n</button>\n", styles: [":host.full-width{flex:1;display:flex}:host.full-width button{flex:1}button{cursor:pointer;font-family:Inter,sans-serif;font-size:14px;line-height:14px;font-style:normal;font-weight:500;display:inline-flex;height:36px;padding:12px;justify-content:center;align-items:center;gap:8px;flex-shrink:0;border:1px solid transparent;border-radius:8px}button .spacer{height:18px;width:0;margin-left:-8px}button fw-icon{height:18px;font-size:20px;width:20px;min-width:20px}button span{white-space:nowrap}button:disabled{opacity:.4;cursor:not-allowed}.large{font-size:16px;height:40px;padding:12px 14px}.large fw-icon{font-size:24px;width:24px;min-width:24px}.small{height:30px;padding:12px 10px}.primary-solid{background-color:var(--primary-base);color:var(--typography-contrast)}.primary-solid:hover{background-color:var(--primary-medium)}.primary-solid:active{background-color:var(--primary-dark)}.primary-ghost{background-color:transparent;color:var(--primary-base)}.primary-ghost:hover{background-color:var(--primary-hover)}.primary-ghost:active{background-color:var(--primary-focus)}.primary-outline{background-color:transparent;color:var(--primary-base)}.primary-outline:hover{background-color:var(--primary-hover)}.primary-outline:active{background-color:var(--primary-focus)}.primary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.primary-progress{background-color:transparent;color:var(--primary-base)}.primary-progress:hover{background-color:var(--primary-hover)}.primary-progress:active{background-color:var(--primary-focus)}.primary-progress{background-color:var(--primary-hover);color:var(--primary-base)}.primary-progress span{opacity:.6}.primary-progress:disabled{opacity:.6;cursor:not-allowed}.secondary-solid{background-color:var(--secondary-base);color:var(--typography-contrast)}.secondary-solid:hover{background-color:var(--secondary-medium)}.secondary-solid:active{background-color:var(--secondary-dark)}.secondary-ghost{background-color:transparent;color:var(--secondary-base)}.secondary-ghost:hover{background-color:var(--secondary-hover)}.secondary-ghost:active{background-color:var(--secondary-focus)}.secondary-outline{background-color:transparent;color:var(--secondary-base)}.secondary-outline:hover{background-color:var(--secondary-hover)}.secondary-outline:active{background-color:var(--secondary-focus)}.secondary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.secondary-progress{background-color:transparent;color:var(--secondary-base)}.secondary-progress:hover{background-color:var(--secondary-hover)}.secondary-progress:active{background-color:var(--secondary-focus)}.secondary-progress{background-color:var(--secondary-hover);color:var(--secondary-base)}.secondary-progress span{opacity:.6}.secondary-progress:disabled{opacity:.6;cursor:not-allowed}.slate-solid{background-color:var(--slate-base);color:var(--typography-contrast)}.slate-solid:hover{background-color:var(--slate-medium)}.slate-solid:active{background-color:var(--slate-dark)}.slate-ghost{background-color:transparent;color:var(--slate-base)}.slate-ghost:hover{background-color:var(--slate-hover)}.slate-ghost:active{background-color:var(--slate-focus)}.slate-outline{background-color:transparent;color:var(--slate-base)}.slate-outline:hover{background-color:var(--slate-hover)}.slate-outline:active{background-color:var(--slate-focus)}.slate-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.slate-progress{background-color:transparent;color:var(--slate-base)}.slate-progress:hover{background-color:var(--slate-hover)}.slate-progress:active{background-color:var(--slate-focus)}.slate-progress{background-color:var(--slate-hover);color:var(--slate-base)}.slate-progress span{opacity:.6}.slate-progress:disabled{opacity:.6;cursor:not-allowed}.danger-solid{background-color:var(--red-base);color:var(--typography-contrast)}.danger-solid:hover{background-color:var(--red-medium)}.danger-solid:active{background-color:var(--red-dark)}.danger-ghost{background-color:transparent;color:var(--red-base)}.danger-ghost:hover{background-color:var(--red-hover)}.danger-ghost:active{background-color:var(--red-focus)}.danger-outline{background-color:transparent;color:var(--red-base)}.danger-outline:hover{background-color:var(--red-hover)}.danger-outline:active{background-color:var(--red-focus)}.danger-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.danger-progress{background-color:transparent;color:var(--red-base)}.danger-progress:hover{background-color:var(--red-hover)}.danger-progress:active{background-color:var(--red-focus)}.danger-progress{background-color:var(--red-hover);color:var(--red-base)}.danger-progress span{opacity:.6}.danger-progress:disabled{opacity:.6;cursor:not-allowed}.skeleton-solid{background-color:var(---base);color:var(--typography-contrast)}.skeleton-solid:hover{background-color:var(---medium)}.skeleton-solid:active{background-color:var(---dark)}.skeleton-ghost{background-color:transparent;color:var(---base)}.skeleton-ghost:hover{background-color:var(---hover)}.skeleton-ghost:active{background-color:var(---focus)}.skeleton-outline{background-color:transparent;color:var(---base)}.skeleton-outline:hover{background-color:var(---hover)}.skeleton-outline:active{background-color:var(---focus)}.skeleton-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.skeleton-progress{background-color:transparent;color:var(---base)}.skeleton-progress:hover{background-color:var(---hover)}.skeleton-progress:active{background-color:var(---focus)}.skeleton-progress{background-color:var(---hover);color:var(---base)}.skeleton-progress span{opacity:.6}.skeleton-progress:disabled{opacity:.6;cursor:not-allowed}.warning-solid{background-color:var(--orange-base);color:var(--typography-contrast)}.warning-solid:hover{background-color:var(--orange-medium)}.warning-solid:active{background-color:var(--orange-dark)}.warning-ghost{background-color:transparent;color:var(--orange-base)}.warning-ghost:hover{background-color:var(--orange-hover)}.warning-ghost:active{background-color:var(--orange-focus)}.warning-outline{background-color:transparent;color:var(--orange-base)}.warning-outline:hover{background-color:var(--orange-hover)}.warning-outline:active{background-color:var(--orange-focus)}.warning-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.warning-progress{background-color:transparent;color:var(--orange-base)}.warning-progress:hover{background-color:var(--orange-hover)}.warning-progress:active{background-color:var(--orange-focus)}.warning-progress{background-color:var(--orange-hover);color:var(--orange-base)}.warning-progress span{opacity:.6}.warning-progress:disabled{opacity:.6;cursor:not-allowed}.success-solid{background-color:var(--green-base);color:var(--typography-contrast)}.success-solid:hover{background-color:var(--green-medium)}.success-solid:active{background-color:var(--green-dark)}.success-ghost{background-color:transparent;color:var(--green-base)}.success-ghost:hover{background-color:var(--green-hover)}.success-ghost:active{background-color:var(--green-focus)}.success-outline{background-color:transparent;color:var(--green-base)}.success-outline:hover{background-color:var(--green-hover)}.success-outline:active{background-color:var(--green-focus)}.success-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.success-progress{background-color:transparent;color:var(--green-base)}.success-progress:hover{background-color:var(--green-hover)}.success-progress:active{background-color:var(--green-focus)}.success-progress{background-color:var(--green-hover);color:var(--green-base)}.success-progress span{opacity:.6}.success-progress:disabled{opacity:.6;cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: FwProgressSpinnerComponent, selector: "fw-progress-spinner", inputs: ["mode", "size", "color", "showValue", "value"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["ariaLabel", "size", "color"] }] }); }
1660
- }
1661
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.18", ngImport: i0, type: FwButtonComponent, decorators: [{
1662
- type: Component,
1663
- args: [{ selector: 'fw-button', imports: [FwProgressSpinnerComponent, FwIconComponent], template: "<button\n [type]=\"type()\"\n [class]=\"[color() + '-' + variant(), size()]\"\n [disabled]=\"disabled()\"\n [attr.cdkFocusInitial]=\"focusInitial() ? '' : null\"\n>\n @if (variant() === 'progress') {\n <fw-progress-spinner size=\"small\" [color]=\"getMappedColor()\"></fw-progress-spinner>\n }\n @if (!!leftIcon() && variant() !== 'progress') {\n <fw-icon>{{ leftIcon() }}</fw-icon>\n }\n @if (!leftIcon()) {\n <div class=\"spacer\"></div>\n }\n <span><ng-content></ng-content></span>\n @if (!!rightIcon()) {\n <fw-icon>{{ rightIcon() }}</fw-icon>\n }\n</button>\n", styles: [":host.full-width{flex:1;display:flex}:host.full-width button{flex:1}button{cursor:pointer;font-family:Inter,sans-serif;font-size:14px;line-height:14px;font-style:normal;font-weight:500;display:inline-flex;height:36px;padding:12px;justify-content:center;align-items:center;gap:8px;flex-shrink:0;border:1px solid transparent;border-radius:8px}button .spacer{height:18px;width:0;margin-left:-8px}button fw-icon{height:18px;font-size:20px;width:20px;min-width:20px}button span{white-space:nowrap}button:disabled{opacity:.4;cursor:not-allowed}.large{font-size:16px;height:40px;padding:12px 14px}.large fw-icon{font-size:24px;width:24px;min-width:24px}.small{height:30px;padding:12px 10px}.primary-solid{background-color:var(--primary-base);color:var(--typography-contrast)}.primary-solid:hover{background-color:var(--primary-medium)}.primary-solid:active{background-color:var(--primary-dark)}.primary-ghost{background-color:transparent;color:var(--primary-base)}.primary-ghost:hover{background-color:var(--primary-hover)}.primary-ghost:active{background-color:var(--primary-focus)}.primary-outline{background-color:transparent;color:var(--primary-base)}.primary-outline:hover{background-color:var(--primary-hover)}.primary-outline:active{background-color:var(--primary-focus)}.primary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.primary-progress{background-color:transparent;color:var(--primary-base)}.primary-progress:hover{background-color:var(--primary-hover)}.primary-progress:active{background-color:var(--primary-focus)}.primary-progress{background-color:var(--primary-hover);color:var(--primary-base)}.primary-progress span{opacity:.6}.primary-progress:disabled{opacity:.6;cursor:not-allowed}.secondary-solid{background-color:var(--secondary-base);color:var(--typography-contrast)}.secondary-solid:hover{background-color:var(--secondary-medium)}.secondary-solid:active{background-color:var(--secondary-dark)}.secondary-ghost{background-color:transparent;color:var(--secondary-base)}.secondary-ghost:hover{background-color:var(--secondary-hover)}.secondary-ghost:active{background-color:var(--secondary-focus)}.secondary-outline{background-color:transparent;color:var(--secondary-base)}.secondary-outline:hover{background-color:var(--secondary-hover)}.secondary-outline:active{background-color:var(--secondary-focus)}.secondary-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.secondary-progress{background-color:transparent;color:var(--secondary-base)}.secondary-progress:hover{background-color:var(--secondary-hover)}.secondary-progress:active{background-color:var(--secondary-focus)}.secondary-progress{background-color:var(--secondary-hover);color:var(--secondary-base)}.secondary-progress span{opacity:.6}.secondary-progress:disabled{opacity:.6;cursor:not-allowed}.slate-solid{background-color:var(--slate-base);color:var(--typography-contrast)}.slate-solid:hover{background-color:var(--slate-medium)}.slate-solid:active{background-color:var(--slate-dark)}.slate-ghost{background-color:transparent;color:var(--slate-base)}.slate-ghost:hover{background-color:var(--slate-hover)}.slate-ghost:active{background-color:var(--slate-focus)}.slate-outline{background-color:transparent;color:var(--slate-base)}.slate-outline:hover{background-color:var(--slate-hover)}.slate-outline:active{background-color:var(--slate-focus)}.slate-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.slate-progress{background-color:transparent;color:var(--slate-base)}.slate-progress:hover{background-color:var(--slate-hover)}.slate-progress:active{background-color:var(--slate-focus)}.slate-progress{background-color:var(--slate-hover);color:var(--slate-base)}.slate-progress span{opacity:.6}.slate-progress:disabled{opacity:.6;cursor:not-allowed}.danger-solid{background-color:var(--red-base);color:var(--typography-contrast)}.danger-solid:hover{background-color:var(--red-medium)}.danger-solid:active{background-color:var(--red-dark)}.danger-ghost{background-color:transparent;color:var(--red-base)}.danger-ghost:hover{background-color:var(--red-hover)}.danger-ghost:active{background-color:var(--red-focus)}.danger-outline{background-color:transparent;color:var(--red-base)}.danger-outline:hover{background-color:var(--red-hover)}.danger-outline:active{background-color:var(--red-focus)}.danger-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.danger-progress{background-color:transparent;color:var(--red-base)}.danger-progress:hover{background-color:var(--red-hover)}.danger-progress:active{background-color:var(--red-focus)}.danger-progress{background-color:var(--red-hover);color:var(--red-base)}.danger-progress span{opacity:.6}.danger-progress:disabled{opacity:.6;cursor:not-allowed}.skeleton-solid{background-color:var(---base);color:var(--typography-contrast)}.skeleton-solid:hover{background-color:var(---medium)}.skeleton-solid:active{background-color:var(---dark)}.skeleton-ghost{background-color:transparent;color:var(---base)}.skeleton-ghost:hover{background-color:var(---hover)}.skeleton-ghost:active{background-color:var(---focus)}.skeleton-outline{background-color:transparent;color:var(---base)}.skeleton-outline:hover{background-color:var(---hover)}.skeleton-outline:active{background-color:var(---focus)}.skeleton-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.skeleton-progress{background-color:transparent;color:var(---base)}.skeleton-progress:hover{background-color:var(---hover)}.skeleton-progress:active{background-color:var(---focus)}.skeleton-progress{background-color:var(---hover);color:var(---base)}.skeleton-progress span{opacity:.6}.skeleton-progress:disabled{opacity:.6;cursor:not-allowed}.warning-solid{background-color:var(--orange-base);color:var(--typography-contrast)}.warning-solid:hover{background-color:var(--orange-medium)}.warning-solid:active{background-color:var(--orange-dark)}.warning-ghost{background-color:transparent;color:var(--orange-base)}.warning-ghost:hover{background-color:var(--orange-hover)}.warning-ghost:active{background-color:var(--orange-focus)}.warning-outline{background-color:transparent;color:var(--orange-base)}.warning-outline:hover{background-color:var(--orange-hover)}.warning-outline:active{background-color:var(--orange-focus)}.warning-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.warning-progress{background-color:transparent;color:var(--orange-base)}.warning-progress:hover{background-color:var(--orange-hover)}.warning-progress:active{background-color:var(--orange-focus)}.warning-progress{background-color:var(--orange-hover);color:var(--orange-base)}.warning-progress span{opacity:.6}.warning-progress:disabled{opacity:.6;cursor:not-allowed}.success-solid{background-color:var(--green-base);color:var(--typography-contrast)}.success-solid:hover{background-color:var(--green-medium)}.success-solid:active{background-color:var(--green-dark)}.success-ghost{background-color:transparent;color:var(--green-base)}.success-ghost:hover{background-color:var(--green-hover)}.success-ghost:active{background-color:var(--green-focus)}.success-outline{background-color:transparent;color:var(--green-base)}.success-outline:hover{background-color:var(--green-hover)}.success-outline:active{background-color:var(--green-focus)}.success-outline{border:1px solid var(--separations-base);background-color:var(--page-light)}.success-progress{background-color:transparent;color:var(--green-base)}.success-progress:hover{background-color:var(--green-hover)}.success-progress:active{background-color:var(--green-focus)}.success-progress{background-color:var(--green-hover);color:var(--green-base)}.success-progress span{opacity:.6}.success-progress:disabled{opacity:.6;cursor:not-allowed}\n"] }]
1664
- }], propDecorators: { classes: [{
1665
- type: HostBinding,
1666
- args: ['attr.class']
1667
- }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], leftIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftIcon", required: false }] }], rightIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "rightIcon", required: false }] }], focusInitial: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusInitial", required: false }] }] } });
1668
-
1669
1670
  class FwButtonDirective {
1670
1671
  constructor() {
1671
1672
  this.sanitizer = inject(DomSanitizer);