@theseam/ui-common 1.0.0-beta.12 → 1.0.0-beta.14

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,7 +1,7 @@
1
1
  import { BaseHarnessFilters, ContentContainerComponentHarness, ComponentHarnessConstructor, HarnessPredicate } from '@angular/cdk/testing';
2
2
  import { FocusMonitor } from '@angular/cdk/a11y';
3
3
  import * as i0 from '@angular/core';
4
- import { OnDestroy, ElementRef, Renderer2, EventEmitter } from '@angular/core';
4
+ import { OnDestroy, ElementRef, Renderer2, NgZone, EventEmitter } from '@angular/core';
5
5
  import { ThemeTypes } from '@theseam/ui-common/models';
6
6
  import { CanDisableCtor, CanThemeCtor, CanSizeCtor } from '@theseam/ui-common/core';
7
7
  import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
@@ -141,11 +141,14 @@ declare class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase imple
141
141
  readonly _elementRef: ElementRef;
142
142
  readonly _focusMonitor: FocusMonitor;
143
143
  readonly _renderer: Renderer2;
144
+ protected readonly _ngZone: NgZone;
145
+ private readonly _cleanupClick;
144
146
  /** Tabindex of the button. */
145
147
  tabIndex: number | undefined | null;
146
148
  constructor(_elementRef: ElementRef, _focusMonitor: FocusMonitor, _renderer: Renderer2);
147
149
  ngOnDestroy(): void;
148
150
  _haltDisabledEvents(event: Event): void;
151
+ private _createClickListener;
149
152
  static ɵfac: i0.ɵɵFactoryDeclaration<TheSeamAnchorButtonComponent, never>;
150
153
  static ɵcmp: i0.ɵɵComponentDeclaration<TheSeamAnchorButtonComponent, "a[seamButton]", ["seamButton", "seamButtonBaseAnchor"], { "disabled": { "alias": "disabled"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "size": { "alias": "size"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, {}, never, ["*"], false, never>;
151
154
  }
@@ -594,6 +594,7 @@ interface ColumnsAlterationsChangedEvent {
594
594
  declare class ColumnsAlterationsManagerService {
595
595
  private readonly _changesSubject;
596
596
  private _alterations;
597
+ private _defaultSorts;
597
598
  readonly changes: Observable<ColumnsAlterationsChangedEvent>;
598
599
  constructor();
599
600
  get(): ColumnsAlteration[];
@@ -616,6 +617,7 @@ declare class ColumnsAlterationsManagerService {
616
617
  clear(options?: {
617
618
  emitEvent?: boolean;
618
619
  }): ColumnsAlterationsChangedRecord[];
620
+ setDefaultSorts(sorts: SortItem[]): void;
619
621
  private _removeNonPersistant;
620
622
  private _emitChanges;
621
623
  static ɵfac: i0.ɵɵFactoryDeclaration<ColumnsAlterationsManagerService, never>;
@@ -746,7 +748,7 @@ interface ICellContext {
746
748
  declare const THESEAM_DATATABLE: InjectionToken<DataFilter>;
747
749
  declare const _THESEAM_DATATABLE: any;
748
750
  declare const _THESEAM_DATATABLE_ACCESSOR: any;
749
- declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, TheSeamDatatableAccessor, CollectionViewer {
751
+ declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, OnChanges, TheSeamDatatableAccessor, CollectionViewer {
750
752
  private readonly _preferences;
751
753
  private readonly _columnsManager;
752
754
  private readonly _columnsAlterationsManager;
@@ -937,6 +939,7 @@ declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, TheSe
937
939
  ngOnDestroy(): void;
938
940
  private _setMenuBarFilters;
939
941
  getColumnComponent(propName: string): DatatableColumnComponent | null;
942
+ ngOnChanges(changes: SimpleChanges): void;
940
943
  _columnData(col: any): {
941
944
  col: any;
942
945
  comp: DatatableColumnComponent | null;
@@ -2,7 +2,7 @@ import { ThemeNames, OutlineThemeNames } from '@theseam/ui-common/models';
2
2
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
3
  import { HarnessPredicate, ContentContainerComponentHarness } from '@angular/cdk/testing';
4
4
  import * as i0 from '@angular/core';
5
- import { Component, Input, ChangeDetectionStrategy, HostBinding, forwardRef, EventEmitter, Output, NgModule } from '@angular/core';
5
+ import { Component, Input, ChangeDetectionStrategy, inject, NgZone, HostBinding, forwardRef, EventEmitter, Output, NgModule } from '@angular/core';
6
6
  import { mixinSize, mixinTheme, mixinDisabled, InputBoolean, InputNumber } from '@theseam/ui-common/core';
7
7
  import * as i1 from '@angular/cdk/a11y';
8
8
  import { __decorate } from 'tslib';
@@ -226,6 +226,8 @@ class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase {
226
226
  _elementRef;
227
227
  _focusMonitor;
228
228
  _renderer;
229
+ _ngZone = inject(NgZone);
230
+ _cleanupClick = this._createClickListener();
229
231
  /** Tabindex of the button. */
230
232
  tabIndex;
231
233
  // TODO: Consider adding dev warning for `window.opener` exploit. Could maybe
@@ -242,6 +244,7 @@ class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase {
242
244
  }
243
245
  ngOnDestroy() {
244
246
  super.ngOnDestroy();
247
+ this._cleanupClick();
245
248
  }
246
249
  _haltDisabledEvents(event) {
247
250
  // A disabled button shouldn't apply any actions
@@ -250,8 +253,11 @@ class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase {
250
253
  event.stopImmediatePropagation();
251
254
  }
252
255
  }
256
+ _createClickListener() {
257
+ return this._ngZone.runOutsideAngular(() => this._renderer.listen(this._elementRef.nativeElement, 'click', (event) => this._haltDisabledEvents(event)));
258
+ }
253
259
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: TheSeamAnchorButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
254
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.7", type: TheSeamAnchorButtonComponent, isStandalone: false, selector: "a[seamButton]", inputs: { disabled: "disabled", theme: "theme", size: "size", tabIndex: "tabIndex" }, host: { listeners: { "click": "_haltDisabledEvents($event)" }, properties: { "attr.tabindex": "disabled ? -1 : (tabIndex || 0)", "attr.disabled": "disabled || null", "attr.aria-disabled": "disabled.toString()" }, classAttribute: "btn" }, exportAs: ["seamButton", "seamButtonBaseAnchor"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.7", type: TheSeamAnchorButtonComponent, isStandalone: false, selector: "a[seamButton]", inputs: { disabled: "disabled", theme: "theme", size: "size", tabIndex: "tabIndex" }, host: { properties: { "attr.tabindex": "disabled ? -1 : (tabIndex || 0)", "attr.disabled": "disabled || null", "attr.aria-disabled": "disabled.toString()" }, classAttribute: "btn" }, exportAs: ["seamButton", "seamButtonBaseAnchor"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
255
261
  }
256
262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: TheSeamAnchorButtonComponent, decorators: [{
257
263
  type: Component,
@@ -261,7 +267,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
261
267
  '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',
262
268
  '[attr.disabled]': 'disabled || null',
263
269
  '[attr.aria-disabled]': 'disabled.toString()',
264
- '(click)': '_haltDisabledEvents($event)',
265
270
  }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-content></ng-content>\n" }]
266
271
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.Renderer2 }], propDecorators: { tabIndex: [{
267
272
  type: Input
@@ -319,7 +324,7 @@ class TheSeamAnchorBadgeButtonComponent extends TheSeamAnchorButtonComponent {
319
324
  super.ngOnDestroy();
320
325
  }
321
326
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: TheSeamAnchorBadgeButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
322
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.7", type: TheSeamAnchorBadgeButtonComponent, isStandalone: false, selector: "a[seamBadgeButton]", inputs: { disabled: "disabled", theme: "theme", size: "size", badgeTheme: "badgeTheme", badgeText: "badgeText" }, host: { listeners: { "click": "_haltDisabledEvents($event)" }, properties: { "attr.tabindex": "disabled ? -1 : (tabIndex || 0)", "attr.disabled": "disabled || null", "attr.aria-disabled": "disabled.toString()", "class.text-nowrap": "this._textNoWrap" }, classAttribute: "btn" }, exportAs: ["seamBadgeButton", "seamBadgeButtonAnchor"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<span class=\"ml-2 badge badge-{{ badgeTheme }}\">{{ badgeText }}</span>\n", styles: [""] });
327
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.7", type: TheSeamAnchorBadgeButtonComponent, isStandalone: false, selector: "a[seamBadgeButton]", inputs: { disabled: "disabled", theme: "theme", size: "size", badgeTheme: "badgeTheme", badgeText: "badgeText" }, host: { properties: { "attr.tabindex": "disabled ? -1 : (tabIndex || 0)", "attr.disabled": "disabled || null", "attr.aria-disabled": "disabled.toString()", "class.text-nowrap": "this._textNoWrap" }, classAttribute: "btn" }, exportAs: ["seamBadgeButton", "seamBadgeButtonAnchor"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<span class=\"ml-2 badge badge-{{ badgeTheme }}\">{{ badgeText }}</span>\n", styles: [""] });
323
328
  }
324
329
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: TheSeamAnchorBadgeButtonComponent, decorators: [{
325
330
  type: Component,
@@ -328,7 +333,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
328
333
  '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',
329
334
  '[attr.disabled]': 'disabled || null',
330
335
  '[attr.aria-disabled]': 'disabled.toString()',
331
- '(click)': '_haltDisabledEvents($event)',
332
336
  }, standalone: false, template: "<ng-content></ng-content>\n<span class=\"ml-2 badge badge-{{ badgeTheme }}\">{{ badgeText }}</span>\n" }]
333
337
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.Renderer2 }], propDecorators: { _textNoWrap: [{
334
338
  type: HostBinding,
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-buttons.mjs","sources":["../../../projects/ui-common/buttons/testing/base-button.harness.ts","../../../projects/ui-common/buttons/testing/base-badge-button.harness.ts","../../../projects/ui-common/buttons/testing/anchor-badge-button.harness.ts","../../../projects/ui-common/buttons/testing/anchor-button.harness.ts","../../../projects/ui-common/buttons/testing/badge-button.harness.ts","../../../projects/ui-common/buttons/testing/button.harness.ts","../../../projects/ui-common/buttons/testing/toggle-button.harness.ts","../../../projects/ui-common/buttons/button/button.component.ts","../../../projects/ui-common/buttons/button/button.component.html","../../../projects/ui-common/buttons/badge-button/badge-button.component.ts","../../../projects/ui-common/buttons/badge-button/badge-button.component.html","../../../projects/ui-common/buttons/progress-circle-button/progress-circle-button.component.ts","../../../projects/ui-common/buttons/progress-circle-button/progress-circle-button.component.html","../../../projects/ui-common/buttons/toggle-button/toggle-button.component.ts","../../../projects/ui-common/buttons/toggle-button/toggle-button.component.html","../../../projects/ui-common/buttons/buttons.module.ts","../../../projects/ui-common/buttons/theseam-ui-common-buttons.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n BaseHarnessFilters,\n ComponentHarness,\n ComponentHarnessConstructor,\n ContentContainerComponentHarness,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\n// import { TheSeamMenuHarness } from './button.harness'\n// import { animatingWait } from './utils'\n\nimport { OutlineThemeNames, ThemeNames } from '@theseam/ui-common/models'\n\nconst THEME_NAMES = [...ThemeNames, ...OutlineThemeNames]\nconst THEME_CLASSES = THEME_NAMES.map((t) => `btn-${t}`)\n\nfunction getButtonThemeClass(classListString: string | null) {\n return (classListString?.split(' ') || []).find((c) =>\n THEME_CLASSES.includes(c),\n )\n}\n\n/** A set of criteria that can be used to filter a list of `TheSeamBaseButtonComponentHarness` instances. */\nexport interface TheSeamBaseButtonComponentHarnessFilters\n extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp\n type?: 'button' | 'submit' | 'reset'\n}\n\nexport function createBaseButtonComponentHarnessPredicate<\n T extends TheSeamBaseButtonComponentHarness,\n>(\n componentHarness: ComponentHarnessConstructor<T>,\n options: TheSeamBaseButtonComponentHarnessFilters = {},\n): HarnessPredicate<T> {\n return new HarnessPredicate(componentHarness, options)\n .addOption('text', options.text, (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text),\n )\n .addOption('type', options.type, (harness, type) =>\n HarnessPredicate.stringMatches(harness.getType(), type),\n )\n}\n\nexport class TheSeamBaseButtonComponentHarness extends ContentContainerComponentHarness<string> {\n /** Whether the button is disabled. */\n async isDisabled(): Promise<boolean> {\n const disabled = (await this.host()).getAttribute('disabled')\n return coerceBooleanProperty(await disabled)\n }\n\n async hasDisabledAria(): Promise<boolean> {\n const ariaValue = await (await this.host()).getAttribute('aria-disabled')\n return ariaValue === 'true'\n }\n\n async getType(): Promise<string | null> {\n return (await this.host()).getAttribute('type')\n }\n\n /** Gets the text of the button item. */\n async getText(): Promise<string> {\n return (await this.host()).text()\n }\n\n /** Gets the theme of the button item. */\n async getTheme(): Promise<string | null> {\n return (await this.host())\n .getAttribute('class')\n .then((c) => getButtonThemeClass(c)?.replace('btn-', '') || null)\n }\n\n async click(): Promise<void> {\n return (await this.host()).click()\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport { OutlineThemeNames, ThemeNames } from '@theseam/ui-common/models'\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\nconst THEME_NAMES = [...ThemeNames, ...OutlineThemeNames]\nconst THEME_CLASSES = THEME_NAMES.map((t) => `badge-${t}`)\n\nfunction getbadgeThemeClass(classListString: string | null) {\n return (classListString?.split(' ') || []).find((c) =>\n THEME_CLASSES.includes(c),\n )\n}\n\n/** A set of criteria that can be used to filter a list of `TheSeamBaseBadgeButtonComponentHarness` instances. */\nexport type TheSeamBaseBadgeButtonComponentHarnessFilters =\n TheSeamBaseButtonComponentHarnessFilters\n\nexport function createBaseBadgeButtonComponentHarnessPredicate<\n T extends TheSeamBaseBadgeButtonComponentHarness,\n>(\n componentHarness: ComponentHarnessConstructor<T>,\n options: TheSeamBaseBadgeButtonComponentHarnessFilters = {},\n): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(componentHarness, options)\n}\n\nexport class TheSeamBaseBadgeButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n private readonly _badgeElement = this.locatorFor('.badge')\n\n /** Gets the text of the button item. */\n async getText(): Promise<string> {\n return (await this.host()).text({ exclude: '.badge' })\n }\n\n /** Gets the text of the badge. */\n async getBadgeText(): Promise<string> {\n return (await this._badgeElement()).text()\n }\n\n /** Gets the theme of the badge. */\n async getBadgeTheme(): Promise<string | null> {\n return (await this._badgeElement())\n .getAttribute('class')\n .then((c) => getbadgeThemeClass(c)?.replace('badge-', '') || null)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseBadgeButtonComponentHarness,\n TheSeamBaseBadgeButtonComponentHarnessFilters,\n createBaseBadgeButtonComponentHarnessPredicate,\n} from './base-badge-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamAnchorBadgeButtonComponentHarness` instances. */\nexport type TheSeamAnchorBadgeButtonComponentHarnessFilters =\n TheSeamBaseBadgeButtonComponentHarnessFilters\n\nexport class TheSeamAnchorBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonComponentHarness {\n /** The selector for the host element of a `TheSeamAnchorBadgeButtonComponent` instance. */\n static hostSelector = 'a[seamBadgeButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamAnchorBadgeButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamAnchorBadgeButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseBadgeButtonComponentHarnessPredicate(this, options)\n }\n\n async getTabIndex(): Promise<number> {\n const tabIndex = await (await this.host()).getAttribute('tabindex')\n return Number(tabIndex)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamAnchorButtonComponentHarness` instances. */\nexport type TheSeamAnchorButtonComponentHarnessFilters =\n TheSeamBaseButtonComponentHarnessFilters\n\nexport class TheSeamAnchorButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n /** The selector for the host element of a `TheSeamAnchorButtonComponent` instance. */\n static hostSelector = 'a[seamButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamAnchorButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamAnchorButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(this, options)\n }\n\n async getTabIndex(): Promise<number> {\n const tabIndex = await (await this.host()).getAttribute('tabindex')\n return Number(tabIndex)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseBadgeButtonComponentHarness,\n TheSeamBaseBadgeButtonComponentHarnessFilters,\n createBaseBadgeButtonComponentHarnessPredicate,\n} from './base-badge-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamBadgeButtonComponentHarness` instances. */\nexport type TheSeamBadgeButtonComponentHarnessFilters =\n TheSeamBaseBadgeButtonComponentHarnessFilters\n\nexport class TheSeamBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonComponentHarness {\n /** The selector for the host element of a `TheSeamBadgeButtonComponent` instance. */\n static hostSelector = 'button[seamBadgeButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamBadgeButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamBadgeButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseBadgeButtonComponentHarnessPredicate(this, options)\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\n// import { TheSeamMenuHarness } from './button.harness'\n// import { animatingWait } from './utils'\n\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamButtonComponentHarness` instances. */\nexport type TheSeamButtonComponentHarnessFilters =\n TheSeamBaseButtonComponentHarnessFilters\n\nexport class TheSeamButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n /** The selector for the host element of a `TheSeamButtonComponent` instance. */\n static hostSelector = 'button[seamButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(this, options)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamToggleButtonComponentHarness` instances. */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface TheSeamToggleButtonComponentHarnessFilters\n extends TheSeamBaseButtonComponentHarnessFilters {}\n\nexport class TheSeamToggleButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n /** The selector for the host element of a `TheSeamToggleButtonComponent` instance. */\n static hostSelector = 'button[seamToggleButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamToggleButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamToggleButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(this, options)\n }\n\n /**\n * Clicks the button.\n */\n public async click() {\n return (await this.host()).click()\n }\n\n /** Gets the theme of the button item. */\n async isActive(): Promise<boolean> {\n return (await this.host())\n .getAttribute('class')\n .then((c) => c?.split(' ').indexOf('active') !== -1 || false)\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core'\n\nimport {\n CanDisableCtor,\n CanSizeCtor,\n CanThemeCtor,\n mixinDisabled,\n mixinSize,\n mixinTheme,\n} from '@theseam/ui-common/core'\n\n@Component({\n template: '',\n standalone: false,\n})\nclass TheSeamButtonBase implements OnDestroy {\n constructor(\n public readonly _elementRef: ElementRef,\n public readonly _focusMonitor: FocusMonitor,\n public readonly _renderer: Renderer2,\n ) {\n this._focusMonitor.monitor(this._elementRef, true)\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef)\n }\n\n /** Focuses the button. */\n focus(): void {\n this._getHostElement().focus()\n }\n\n _getHostElement() {\n return this._elementRef.nativeElement\n }\n}\n\nconst _TheSeamButtonMixinBase: CanDisableCtor &\n CanThemeCtor &\n CanSizeCtor &\n typeof TheSeamButtonBase = mixinSize(\n mixinTheme(mixinDisabled(TheSeamButtonBase), 'btn'),\n 'btn',\n)\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamButton]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'seamButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class TheSeamButtonComponent\n extends _TheSeamButtonMixinBase\n implements OnDestroy\n{\n /** ARIA type for the button. */\n @Input() type: 'button' | 'submit' | 'reset' = 'button'\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[seamButton]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'seamButton,seamButtonBaseAnchor',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n class: 'btn',\n // '[class.disabled]': 'disabled || null',\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_haltDisabledEvents($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class TheSeamAnchorButtonComponent\n extends _TheSeamButtonMixinBase\n implements OnDestroy\n{\n /** Tabindex of the button. */\n @Input() tabIndex: number | undefined | null\n\n // TODO: Consider adding dev warning for `window.opener` exploit. Could maybe\n // add `rel` it if the href isn't on the current domain or not specified in an\n // injected list. This probably isn't needed and may be to strict for our\n // usage, so I am just adding this as a reminder to think about it.\n //\n // rel=\"noopener noreferrer\"\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n\n _haltDisabledEvents(event: Event) {\n // A disabled button shouldn't apply any actions\n if (this.disabled) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n}\n","<ng-content></ng-content>\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport {\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core'\n\nimport type { ThemeTypes } from '@theseam/ui-common/models'\n\nimport {\n TheSeamAnchorButtonComponent,\n TheSeamButtonComponent,\n} from '../button/button.component'\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamBadgeButton]',\n templateUrl: './badge-button.component.html',\n styleUrls: ['./badge-button.component.scss'],\n exportAs: 'seamBadgeButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n standalone: false,\n})\nexport class TheSeamBadgeButtonComponent\n extends TheSeamButtonComponent\n implements OnDestroy\n{\n @HostBinding('class.text-nowrap') _textNoWrap = true\n\n @Input() badgeTheme: ThemeTypes = 'light'\n @Input() badgeText = ''\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[seamBadgeButton]',\n templateUrl: './badge-button.component.html',\n styleUrls: ['./badge-button.component.scss'],\n exportAs: 'seamBadgeButton,seamBadgeButtonAnchor',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n class: 'btn',\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_haltDisabledEvents($event)',\n },\n standalone: false,\n})\nexport class TheSeamAnchorBadgeButtonComponent\n extends TheSeamAnchorButtonComponent\n implements OnDestroy\n{\n @HostBinding('class.text-nowrap') _textNoWrap = true\n\n @Input() badgeTheme: ThemeTypes = 'light'\n @Input() badgeText = ''\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n","<ng-content></ng-content>\n<span class=\"ml-2 badge badge-{{ badgeTheme }}\">{{ badgeText }}</span>\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion'\nimport {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core'\n\nimport { InputBoolean, InputNumber } from '@theseam/ui-common/core'\n\nimport { TheSeamButtonComponent } from '../button/button.component'\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamProgressCircleButton]',\n templateUrl: './progress-circle-button.component.html',\n styleUrls: ['./progress-circle-button.component.scss'],\n exportAs: 'seamProgressCircleButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n standalone: false,\n})\nexport class TheSeamProgressCircleButtonComponent\n extends TheSeamButtonComponent\n implements OnDestroy\n{\n static ngAcceptInputType_fillBackground: BooleanInput\n static ngAcceptInputType_showText: BooleanInput\n static ngAcceptInputType_hiddenOnEmpty: BooleanInput\n static ngAcceptInputType_percentage: NumberInput\n\n @Input() @InputBoolean() fillBackground = false\n @Input() @InputBoolean() showText = false\n @Input() @InputBoolean() hiddenOnEmpty = true\n\n @Input() @InputNumber(0) percentage = 100\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n","<ng-content></ng-content>\n<seam-progress-circle\n class=\"progress-circle-btn--icon\"\n [fillBackground]=\"fillBackground\"\n [showText]=\"showText\"\n [hiddenOnEmpty]=\"hiddenOnEmpty\"\n [percentage]=\"percentage\"\n>\n</seam-progress-circle>\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\nimport { TheSeamButtonComponent } from '../button/button.component'\n\nexport const TOGGLE_BUTTON_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TheSeamToggleButtonComponent),\n multi: true,\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamToggleButton]',\n templateUrl: './toggle-button.component.html',\n styleUrls: ['./toggle-button.component.scss'],\n exportAs: 'seamToggleButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n '(click)': '_toggleValue()',\n },\n providers: [TOGGLE_BUTTON_VALUE_ACCESSOR],\n standalone: false,\n})\nexport class TheSeamToggleButtonComponent\n extends TheSeamButtonComponent\n implements OnDestroy, ControlValueAccessor\n{\n static ngAcceptInputType_val: BooleanInput\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('value') @InputBoolean() val = false\n\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() readonly change = new EventEmitter<boolean>()\n\n onChange: any\n onTouched: any\n\n @HostBinding('class.active')\n get _activeCssClass() {\n return this.value ? coerceBooleanProperty(this.value) : false\n }\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n\n get value(): boolean {\n return this.val\n }\n\n set value(value: boolean) {\n this.val = value\n this.change.emit(this.val)\n if (this.onChange) {\n this.onChange(value)\n }\n if (this.onTouched) {\n this.onTouched()\n }\n }\n\n writeValue(value: any): void {\n this.value = value\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled\n }\n\n _toggleValue() {\n this.value = !this.value\n }\n}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamProgressModule } from '@theseam/ui-common/progress'\n\nimport {\n TheSeamAnchorBadgeButtonComponent,\n TheSeamBadgeButtonComponent,\n} from './badge-button/badge-button.component'\nimport {\n TheSeamAnchorButtonComponent,\n TheSeamButtonComponent,\n} from './button/button.component'\nimport { TheSeamProgressCircleButtonComponent } from './progress-circle-button/progress-circle-button.component'\nimport { TheSeamToggleButtonComponent } from './toggle-button/toggle-button.component'\n\n@NgModule({\n declarations: [\n TheSeamBadgeButtonComponent,\n TheSeamProgressCircleButtonComponent,\n TheSeamToggleButtonComponent,\n TheSeamButtonComponent,\n TheSeamAnchorButtonComponent,\n TheSeamAnchorBadgeButtonComponent,\n ],\n imports: [CommonModule, TheSeamProgressModule],\n exports: [\n TheSeamBadgeButtonComponent,\n TheSeamProgressCircleButtonComponent,\n TheSeamToggleButtonComponent,\n TheSeamButtonComponent,\n TheSeamAnchorButtonComponent,\n TheSeamAnchorBadgeButtonComponent,\n ],\n})\nexport class TheSeamButtonsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["THEME_NAMES","THEME_CLASSES"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-buttons.mjs","sources":["../../../projects/ui-common/buttons/testing/base-button.harness.ts","../../../projects/ui-common/buttons/testing/base-badge-button.harness.ts","../../../projects/ui-common/buttons/testing/anchor-badge-button.harness.ts","../../../projects/ui-common/buttons/testing/anchor-button.harness.ts","../../../projects/ui-common/buttons/testing/badge-button.harness.ts","../../../projects/ui-common/buttons/testing/button.harness.ts","../../../projects/ui-common/buttons/testing/toggle-button.harness.ts","../../../projects/ui-common/buttons/button/button.component.ts","../../../projects/ui-common/buttons/button/button.component.html","../../../projects/ui-common/buttons/badge-button/badge-button.component.ts","../../../projects/ui-common/buttons/badge-button/badge-button.component.html","../../../projects/ui-common/buttons/progress-circle-button/progress-circle-button.component.ts","../../../projects/ui-common/buttons/progress-circle-button/progress-circle-button.component.html","../../../projects/ui-common/buttons/toggle-button/toggle-button.component.ts","../../../projects/ui-common/buttons/toggle-button/toggle-button.component.html","../../../projects/ui-common/buttons/buttons.module.ts","../../../projects/ui-common/buttons/theseam-ui-common-buttons.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n BaseHarnessFilters,\n ComponentHarness,\n ComponentHarnessConstructor,\n ContentContainerComponentHarness,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\n// import { TheSeamMenuHarness } from './button.harness'\n// import { animatingWait } from './utils'\n\nimport { OutlineThemeNames, ThemeNames } from '@theseam/ui-common/models'\n\nconst THEME_NAMES = [...ThemeNames, ...OutlineThemeNames]\nconst THEME_CLASSES = THEME_NAMES.map((t) => `btn-${t}`)\n\nfunction getButtonThemeClass(classListString: string | null) {\n return (classListString?.split(' ') || []).find((c) =>\n THEME_CLASSES.includes(c),\n )\n}\n\n/** A set of criteria that can be used to filter a list of `TheSeamBaseButtonComponentHarness` instances. */\nexport interface TheSeamBaseButtonComponentHarnessFilters\n extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n text?: string | RegExp\n type?: 'button' | 'submit' | 'reset'\n}\n\nexport function createBaseButtonComponentHarnessPredicate<\n T extends TheSeamBaseButtonComponentHarness,\n>(\n componentHarness: ComponentHarnessConstructor<T>,\n options: TheSeamBaseButtonComponentHarnessFilters = {},\n): HarnessPredicate<T> {\n return new HarnessPredicate(componentHarness, options)\n .addOption('text', options.text, (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text),\n )\n .addOption('type', options.type, (harness, type) =>\n HarnessPredicate.stringMatches(harness.getType(), type),\n )\n}\n\nexport class TheSeamBaseButtonComponentHarness extends ContentContainerComponentHarness<string> {\n /** Whether the button is disabled. */\n async isDisabled(): Promise<boolean> {\n const disabled = (await this.host()).getAttribute('disabled')\n return coerceBooleanProperty(await disabled)\n }\n\n async hasDisabledAria(): Promise<boolean> {\n const ariaValue = await (await this.host()).getAttribute('aria-disabled')\n return ariaValue === 'true'\n }\n\n async getType(): Promise<string | null> {\n return (await this.host()).getAttribute('type')\n }\n\n /** Gets the text of the button item. */\n async getText(): Promise<string> {\n return (await this.host()).text()\n }\n\n /** Gets the theme of the button item. */\n async getTheme(): Promise<string | null> {\n return (await this.host())\n .getAttribute('class')\n .then((c) => getButtonThemeClass(c)?.replace('btn-', '') || null)\n }\n\n async click(): Promise<void> {\n return (await this.host()).click()\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport { OutlineThemeNames, ThemeNames } from '@theseam/ui-common/models'\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\nconst THEME_NAMES = [...ThemeNames, ...OutlineThemeNames]\nconst THEME_CLASSES = THEME_NAMES.map((t) => `badge-${t}`)\n\nfunction getbadgeThemeClass(classListString: string | null) {\n return (classListString?.split(' ') || []).find((c) =>\n THEME_CLASSES.includes(c),\n )\n}\n\n/** A set of criteria that can be used to filter a list of `TheSeamBaseBadgeButtonComponentHarness` instances. */\nexport type TheSeamBaseBadgeButtonComponentHarnessFilters =\n TheSeamBaseButtonComponentHarnessFilters\n\nexport function createBaseBadgeButtonComponentHarnessPredicate<\n T extends TheSeamBaseBadgeButtonComponentHarness,\n>(\n componentHarness: ComponentHarnessConstructor<T>,\n options: TheSeamBaseBadgeButtonComponentHarnessFilters = {},\n): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(componentHarness, options)\n}\n\nexport class TheSeamBaseBadgeButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n private readonly _badgeElement = this.locatorFor('.badge')\n\n /** Gets the text of the button item. */\n async getText(): Promise<string> {\n return (await this.host()).text({ exclude: '.badge' })\n }\n\n /** Gets the text of the badge. */\n async getBadgeText(): Promise<string> {\n return (await this._badgeElement()).text()\n }\n\n /** Gets the theme of the badge. */\n async getBadgeTheme(): Promise<string | null> {\n return (await this._badgeElement())\n .getAttribute('class')\n .then((c) => getbadgeThemeClass(c)?.replace('badge-', '') || null)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseBadgeButtonComponentHarness,\n TheSeamBaseBadgeButtonComponentHarnessFilters,\n createBaseBadgeButtonComponentHarnessPredicate,\n} from './base-badge-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamAnchorBadgeButtonComponentHarness` instances. */\nexport type TheSeamAnchorBadgeButtonComponentHarnessFilters =\n TheSeamBaseBadgeButtonComponentHarnessFilters\n\nexport class TheSeamAnchorBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonComponentHarness {\n /** The selector for the host element of a `TheSeamAnchorBadgeButtonComponent` instance. */\n static hostSelector = 'a[seamBadgeButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamAnchorBadgeButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamAnchorBadgeButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseBadgeButtonComponentHarnessPredicate(this, options)\n }\n\n async getTabIndex(): Promise<number> {\n const tabIndex = await (await this.host()).getAttribute('tabindex')\n return Number(tabIndex)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamAnchorButtonComponentHarness` instances. */\nexport type TheSeamAnchorButtonComponentHarnessFilters =\n TheSeamBaseButtonComponentHarnessFilters\n\nexport class TheSeamAnchorButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n /** The selector for the host element of a `TheSeamAnchorButtonComponent` instance. */\n static hostSelector = 'a[seamButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamAnchorButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamAnchorButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(this, options)\n }\n\n async getTabIndex(): Promise<number> {\n const tabIndex = await (await this.host()).getAttribute('tabindex')\n return Number(tabIndex)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseBadgeButtonComponentHarness,\n TheSeamBaseBadgeButtonComponentHarnessFilters,\n createBaseBadgeButtonComponentHarnessPredicate,\n} from './base-badge-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamBadgeButtonComponentHarness` instances. */\nexport type TheSeamBadgeButtonComponentHarnessFilters =\n TheSeamBaseBadgeButtonComponentHarnessFilters\n\nexport class TheSeamBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonComponentHarness {\n /** The selector for the host element of a `TheSeamBadgeButtonComponent` instance. */\n static hostSelector = 'button[seamBadgeButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamBadgeButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamBadgeButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseBadgeButtonComponentHarnessPredicate(this, options)\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\n// import { TheSeamMenuHarness } from './button.harness'\n// import { animatingWait } from './utils'\n\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamButtonComponentHarness` instances. */\nexport type TheSeamButtonComponentHarnessFilters =\n TheSeamBaseButtonComponentHarnessFilters\n\nexport class TheSeamButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n /** The selector for the host element of a `TheSeamButtonComponent` instance. */\n static hostSelector = 'button[seamButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(this, options)\n }\n}\n","import {\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport {\n TheSeamBaseButtonComponentHarness,\n TheSeamBaseButtonComponentHarnessFilters,\n createBaseButtonComponentHarnessPredicate,\n} from './base-button.harness'\n\n/** A set of criteria that can be used to filter a list of `TheSeamToggleButtonComponentHarness` instances. */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface TheSeamToggleButtonComponentHarnessFilters\n extends TheSeamBaseButtonComponentHarnessFilters {}\n\nexport class TheSeamToggleButtonComponentHarness extends TheSeamBaseButtonComponentHarness {\n /** The selector for the host element of a `TheSeamToggleButtonComponent` instance. */\n static hostSelector = 'button[seamToggleButton]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button item with specific attributes.\n * @param options Options for filtering which button item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamToggleButtonComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamToggleButtonComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return createBaseButtonComponentHarnessPredicate(this, options)\n }\n\n /**\n * Clicks the button.\n */\n public async click() {\n return (await this.host()).click()\n }\n\n /** Gets the theme of the button item. */\n async isActive(): Promise<boolean> {\n return (await this.host())\n .getAttribute('class')\n .then((c) => c?.split(' ').indexOf('active') !== -1 || false)\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n Renderer2,\n} from '@angular/core'\n\nimport {\n CanDisableCtor,\n CanSizeCtor,\n CanThemeCtor,\n mixinDisabled,\n mixinSize,\n mixinTheme,\n} from '@theseam/ui-common/core'\n\n@Component({\n template: '',\n standalone: false,\n})\nclass TheSeamButtonBase implements OnDestroy {\n constructor(\n public readonly _elementRef: ElementRef,\n public readonly _focusMonitor: FocusMonitor,\n public readonly _renderer: Renderer2,\n ) {\n this._focusMonitor.monitor(this._elementRef, true)\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef)\n }\n\n /** Focuses the button. */\n focus(): void {\n this._getHostElement().focus()\n }\n\n _getHostElement() {\n return this._elementRef.nativeElement\n }\n}\n\nconst _TheSeamButtonMixinBase: CanDisableCtor &\n CanThemeCtor &\n CanSizeCtor &\n typeof TheSeamButtonBase = mixinSize(\n mixinTheme(mixinDisabled(TheSeamButtonBase), 'btn'),\n 'btn',\n)\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamButton]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'seamButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class TheSeamButtonComponent\n extends _TheSeamButtonMixinBase\n implements OnDestroy\n{\n /** ARIA type for the button. */\n @Input() type: 'button' | 'submit' | 'reset' = 'button'\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[seamButton]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'seamButton,seamButtonBaseAnchor',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n class: 'btn',\n // '[class.disabled]': 'disabled || null',\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class TheSeamAnchorButtonComponent\n extends _TheSeamButtonMixinBase\n implements OnDestroy\n{\n protected readonly _ngZone = inject(NgZone)\n\n private readonly _cleanupClick = this._createClickListener()\n\n /** Tabindex of the button. */\n @Input() tabIndex: number | undefined | null\n\n // TODO: Consider adding dev warning for `window.opener` exploit. Could maybe\n // add `rel` it if the href isn't on the current domain or not specified in an\n // injected list. This probably isn't needed and may be to strict for our\n // usage, so I am just adding this as a reminder to think about it.\n //\n // rel=\"noopener noreferrer\"\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n this._cleanupClick()\n }\n\n _haltDisabledEvents(event: Event) {\n // A disabled button shouldn't apply any actions\n if (this.disabled) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n\n private _createClickListener() {\n return this._ngZone.runOutsideAngular(() =>\n this._renderer.listen(\n this._elementRef.nativeElement,\n 'click',\n (event: Event) => this._haltDisabledEvents(event),\n ),\n )\n }\n}\n","<ng-content></ng-content>\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport {\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core'\n\nimport type { ThemeTypes } from '@theseam/ui-common/models'\n\nimport {\n TheSeamAnchorButtonComponent,\n TheSeamButtonComponent,\n} from '../button/button.component'\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamBadgeButton]',\n templateUrl: './badge-button.component.html',\n styleUrls: ['./badge-button.component.scss'],\n exportAs: 'seamBadgeButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n standalone: false,\n})\nexport class TheSeamBadgeButtonComponent\n extends TheSeamButtonComponent\n implements OnDestroy\n{\n @HostBinding('class.text-nowrap') _textNoWrap = true\n\n @Input() badgeTheme: ThemeTypes = 'light'\n @Input() badgeText = ''\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[seamBadgeButton]',\n templateUrl: './badge-button.component.html',\n styleUrls: ['./badge-button.component.scss'],\n exportAs: 'seamBadgeButton,seamBadgeButtonAnchor',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n class: 'btn',\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n },\n standalone: false,\n})\nexport class TheSeamAnchorBadgeButtonComponent\n extends TheSeamAnchorButtonComponent\n implements OnDestroy\n{\n @HostBinding('class.text-nowrap') _textNoWrap = true\n\n @Input() badgeTheme: ThemeTypes = 'light'\n @Input() badgeText = ''\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n","<ng-content></ng-content>\n<span class=\"ml-2 badge badge-{{ badgeTheme }}\">{{ badgeText }}</span>\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion'\nimport {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core'\n\nimport { InputBoolean, InputNumber } from '@theseam/ui-common/core'\n\nimport { TheSeamButtonComponent } from '../button/button.component'\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamProgressCircleButton]',\n templateUrl: './progress-circle-button.component.html',\n styleUrls: ['./progress-circle-button.component.scss'],\n exportAs: 'seamProgressCircleButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n standalone: false,\n})\nexport class TheSeamProgressCircleButtonComponent\n extends TheSeamButtonComponent\n implements OnDestroy\n{\n static ngAcceptInputType_fillBackground: BooleanInput\n static ngAcceptInputType_showText: BooleanInput\n static ngAcceptInputType_hiddenOnEmpty: BooleanInput\n static ngAcceptInputType_percentage: NumberInput\n\n @Input() @InputBoolean() fillBackground = false\n @Input() @InputBoolean() showText = false\n @Input() @InputBoolean() hiddenOnEmpty = true\n\n @Input() @InputNumber(0) percentage = 100\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n}\n","<ng-content></ng-content>\n<seam-progress-circle\n class=\"progress-circle-btn--icon\"\n [fillBackground]=\"fillBackground\"\n [showText]=\"showText\"\n [hiddenOnEmpty]=\"hiddenOnEmpty\"\n [percentage]=\"percentage\"\n>\n</seam-progress-circle>\n","import { FocusMonitor } from '@angular/cdk/a11y'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\nimport { TheSeamButtonComponent } from '../button/button.component'\n\nexport const TOGGLE_BUTTON_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TheSeamToggleButtonComponent),\n multi: true,\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamToggleButton]',\n templateUrl: './toggle-button.component.html',\n styleUrls: ['./toggle-button.component.scss'],\n exportAs: 'seamToggleButton',\n inputs: ['disabled', 'theme', 'size'],\n host: {\n '[attr.type]': 'type',\n class: 'btn',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n '(click)': '_toggleValue()',\n },\n providers: [TOGGLE_BUTTON_VALUE_ACCESSOR],\n standalone: false,\n})\nexport class TheSeamToggleButtonComponent\n extends TheSeamButtonComponent\n implements OnDestroy, ControlValueAccessor\n{\n static ngAcceptInputType_val: BooleanInput\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('value') @InputBoolean() val = false\n\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() readonly change = new EventEmitter<boolean>()\n\n onChange: any\n onTouched: any\n\n @HostBinding('class.active')\n get _activeCssClass() {\n return this.value ? coerceBooleanProperty(this.value) : false\n }\n\n constructor(\n readonly _elementRef: ElementRef,\n readonly _focusMonitor: FocusMonitor,\n readonly _renderer: Renderer2,\n ) {\n super(_elementRef, _focusMonitor, _renderer)\n }\n\n ngOnDestroy() {\n super.ngOnDestroy()\n }\n\n get value(): boolean {\n return this.val\n }\n\n set value(value: boolean) {\n this.val = value\n this.change.emit(this.val)\n if (this.onChange) {\n this.onChange(value)\n }\n if (this.onTouched) {\n this.onTouched()\n }\n }\n\n writeValue(value: any): void {\n this.value = value\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled\n }\n\n _toggleValue() {\n this.value = !this.value\n }\n}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamProgressModule } from '@theseam/ui-common/progress'\n\nimport {\n TheSeamAnchorBadgeButtonComponent,\n TheSeamBadgeButtonComponent,\n} from './badge-button/badge-button.component'\nimport {\n TheSeamAnchorButtonComponent,\n TheSeamButtonComponent,\n} from './button/button.component'\nimport { TheSeamProgressCircleButtonComponent } from './progress-circle-button/progress-circle-button.component'\nimport { TheSeamToggleButtonComponent } from './toggle-button/toggle-button.component'\n\n@NgModule({\n declarations: [\n TheSeamBadgeButtonComponent,\n TheSeamProgressCircleButtonComponent,\n TheSeamToggleButtonComponent,\n TheSeamButtonComponent,\n TheSeamAnchorButtonComponent,\n TheSeamAnchorBadgeButtonComponent,\n ],\n imports: [CommonModule, TheSeamProgressModule],\n exports: [\n TheSeamBadgeButtonComponent,\n TheSeamProgressCircleButtonComponent,\n TheSeamToggleButtonComponent,\n TheSeamButtonComponent,\n TheSeamAnchorButtonComponent,\n TheSeamAnchorBadgeButtonComponent,\n ],\n})\nexport class TheSeamButtonsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["THEME_NAMES","THEME_CLASSES"],"mappings":"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"}
@@ -12,13 +12,31 @@ function exportOperator(exportFn) {
12
12
  return (source$) => source$.pipe(switchMap(exportFn));
13
13
  }
14
14
 
15
+ // TODO: We may be able to avoid this by getting the Storybook tsconfig and our
16
+ // apps Angular builds more in-sync or when Storybook updates the builder that
17
+ // it uses. For now, this should give a reliable ESM and CJS interop for the
18
+ // XLSX library.
19
+ /**
20
+ * Imports the XLSX library.
21
+ *
22
+ * This should be used instead of direct dynamic imports to ensure
23
+ * compatibility. It may be better to just import normally, but most datatables
24
+ * don't do client-side XLSX processing so dynamic imports are preferred.
25
+ *
26
+ * @returns The XLSX library.
27
+ */
28
+ async function importXlsx() {
29
+ // TODO: Fix typing for the dynamic imports
30
+ const XLSX = await import('xlsx');
31
+ return XLSX.default ?? XLSX;
32
+ }
33
+
15
34
  class CSVDataExporter {
16
35
  name = 'exporter:csv';
17
36
  label = 'CSV';
18
37
  icon = faFileCsv;
19
38
  export(data) {
20
- // TODO: Fix typing for the dynamic imports
21
- return wrapIntoObservable(import('xlsx')).pipe(switchMap((XLSX) => {
39
+ return wrapIntoObservable(importXlsx()).pipe(switchMap((XLSX) => {
22
40
  const ws = XLSX.utils.json_to_sheet(data);
23
41
  const out = XLSX.utils.sheet_to_csv(ws);
24
42
  // NOTE: `out` should not be passed as a string, but the fileDataFromBuffer
@@ -43,8 +61,7 @@ class XLSXDataExporter {
43
61
  label = 'XLSX';
44
62
  icon = faFileExcel;
45
63
  export(data) {
46
- // TODO: Fix typing for the dynamic imports
47
- return wrapIntoObservable(import('xlsx')).pipe(switchMap((XLSX) => {
64
+ return wrapIntoObservable(importXlsx()).pipe(switchMap((XLSX) => {
48
65
  const ws = XLSX.utils.json_to_sheet(data);
49
66
  const wb = { Sheets: { data: ws }, SheetNames: ['data'] };
50
67
  const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-data-exporter.mjs","sources":["../../../projects/ui-common/data-exporter/data-exporter.ts","../../../projects/ui-common/data-exporter/exporters/csv-exporter.ts","../../../projects/ui-common/data-exporter/exporters/xlsx-exporter.ts","../../../projects/ui-common/data-exporter/data-exporter.module.ts","../../../projects/ui-common/data-exporter/theseam-ui-common-data-exporter.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { IconProp } from '@fortawesome/fontawesome-svg-core'\n\nexport type IDataExporterFunction = <T>(data: T[]) => Observable<T[]>\n\nexport interface IDataExporter {\n /**\n * Name to identify the exporter.\n */\n readonly name: string\n\n /**\n * Label to use for exporter in user visible text.\n *\n * default: `name`\n */\n label?: string\n\n /**\n * Icon to represent exporter.\n */\n icon?: string | IconProp\n\n /**\n * Pass the rows directly to the export function without any mapping.\n */\n skipDataMapping?: boolean\n\n /**\n * Export the data based on the data to some format.\n */\n export<T>(data: T[]): Observable<boolean>\n}\n\nexport const THESEAM_DATA_EXPORTER = new InjectionToken<IDataExporter>(\n 'TheSeamDataExporter',\n)\n\nexport function exportOperator<T>(exportFn: IDataExporterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(exportFn))\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileCsv } from '@fortawesome/free-solid-svg-icons'\nimport FileSaver from 'file-saver'\n\nimport {\n fileDataFromBuffer,\n wrapIntoObservable,\n} from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\n\n@Injectable()\nexport class CSVDataExporter implements IDataExporter {\n public readonly name = 'exporter:csv'\n\n public label = 'CSV'\n\n public icon = faFileCsv\n\n public export<T>(data: T[]): Observable<boolean> {\n // TODO: Fix typing for the dynamic imports\n return wrapIntoObservable(import('xlsx')).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n\n const out = XLSX.utils.sheet_to_csv(ws)\n\n // NOTE: `out` should not be passed as a string, but the fileDataFromBuffer\n // function happens to works with a string. When the build issue about the\n // function argument is figured out then this should be fixed.\n return (\n from(fileDataFromBuffer(out as any))\n // return from(fileDataFromBuffer(Buffer.from(out)))\n .pipe(\n tap((fileData) => {\n FileSaver.saveAs(fileData.blob, `Export.csv`)\n }),\n mapTo(true),\n )\n )\n }),\n )\n }\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileExcel } from '@fortawesome/free-solid-svg-icons'\nimport { Buffer } from 'buffer/'\nimport FileSaver from 'file-saver'\n\nimport {\n fileDataFromBuffer,\n wrapIntoObservable,\n} from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\n\n@Injectable()\nexport class XLSXDataExporter implements IDataExporter {\n public readonly name = 'exporter:xlsx'\n\n public label = 'XLSX'\n\n public icon = faFileExcel\n\n public export<T>(data: T[]): Observable<boolean> {\n // TODO: Fix typing for the dynamic imports\n return wrapIntoObservable(import('xlsx')).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n const wb = { Sheets: { data: ws }, SheetNames: ['data'] }\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n\n return from(fileDataFromBuffer(Buffer.from(excelBuffer))).pipe(\n tap((fileData) => {\n FileSaver.saveAs(fileData.blob, `Export.xlsx`)\n }),\n mapTo(true),\n )\n }),\n )\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { CSVDataExporter } from './exporters/csv-exporter'\nimport { XLSXDataExporter } from './exporters/xlsx-exporter'\n\nimport { THESEAM_DATA_EXPORTER } from './data-exporter'\n\n@NgModule({\n declarations: [],\n imports: [],\n providers: [\n { provide: THESEAM_DATA_EXPORTER, useClass: CSVDataExporter, multi: true },\n { provide: THESEAM_DATA_EXPORTER, useClass: XLSXDataExporter, multi: true },\n ],\n})\nexport class TheSeamDataExporterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-data-exporter.mjs","sources":["../../../projects/ui-common/data-exporter/data-exporter.ts","../../../projects/ui-common/data-exporter/import-xlsx.ts","../../../projects/ui-common/data-exporter/exporters/csv-exporter.ts","../../../projects/ui-common/data-exporter/exporters/xlsx-exporter.ts","../../../projects/ui-common/data-exporter/data-exporter.module.ts","../../../projects/ui-common/data-exporter/theseam-ui-common-data-exporter.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { IconProp } from '@fortawesome/fontawesome-svg-core'\n\nexport type IDataExporterFunction = <T>(data: T[]) => Observable<T[]>\n\nexport interface IDataExporter {\n /**\n * Name to identify the exporter.\n */\n readonly name: string\n\n /**\n * Label to use for exporter in user visible text.\n *\n * default: `name`\n */\n label?: string\n\n /**\n * Icon to represent exporter.\n */\n icon?: string | IconProp\n\n /**\n * Pass the rows directly to the export function without any mapping.\n */\n skipDataMapping?: boolean\n\n /**\n * Export the data based on the data to some format.\n */\n export<T>(data: T[]): Observable<boolean>\n}\n\nexport const THESEAM_DATA_EXPORTER = new InjectionToken<IDataExporter>(\n 'TheSeamDataExporter',\n)\n\nexport function exportOperator<T>(exportFn: IDataExporterFunction) {\n return (source$: Observable<T[]>) => source$.pipe(switchMap(exportFn))\n}\n","// TODO: We may be able to avoid this by getting the Storybook tsconfig and our\n// apps Angular builds more in-sync or when Storybook updates the builder that\n// it uses. For now, this should give a reliable ESM and CJS interop for the\n// XLSX library.\n\n/**\n * Imports the XLSX library.\n *\n * This should be used instead of direct dynamic imports to ensure\n * compatibility. It may be better to just import normally, but most datatables\n * don't do client-side XLSX processing so dynamic imports are preferred.\n *\n * @returns The XLSX library.\n */\nexport async function importXlsx(): Promise<any> {\n // TODO: Fix typing for the dynamic imports\n const XLSX = await import('xlsx')\n return XLSX.default ?? XLSX\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileCsv } from '@fortawesome/free-solid-svg-icons'\nimport FileSaver from 'file-saver'\n\nimport {\n fileDataFromBuffer,\n wrapIntoObservable,\n} from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\nimport { importXlsx } from '../import-xlsx'\n\n@Injectable()\nexport class CSVDataExporter implements IDataExporter {\n public readonly name = 'exporter:csv'\n\n public label = 'CSV'\n\n public icon = faFileCsv\n\n public export<T>(data: T[]): Observable<boolean> {\n return wrapIntoObservable(importXlsx()).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n\n const out = XLSX.utils.sheet_to_csv(ws)\n\n // NOTE: `out` should not be passed as a string, but the fileDataFromBuffer\n // function happens to works with a string. When the build issue about the\n // function argument is figured out then this should be fixed.\n return (\n from(fileDataFromBuffer(out as any))\n // return from(fileDataFromBuffer(Buffer.from(out)))\n .pipe(\n tap((fileData) => {\n FileSaver.saveAs(fileData.blob, `Export.csv`)\n }),\n mapTo(true),\n )\n )\n }),\n )\n }\n}\n","import { Injectable } from '@angular/core'\nimport { from, Observable } from 'rxjs'\nimport { mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport { faFileExcel } from '@fortawesome/free-solid-svg-icons'\nimport { Buffer } from 'buffer/'\nimport FileSaver from 'file-saver'\n\nimport {\n fileDataFromBuffer,\n wrapIntoObservable,\n} from '@theseam/ui-common/utils'\n\nimport { IDataExporter } from '../data-exporter'\nimport { importXlsx } from '../import-xlsx'\n\n@Injectable()\nexport class XLSXDataExporter implements IDataExporter {\n public readonly name = 'exporter:xlsx'\n\n public label = 'XLSX'\n\n public icon = faFileExcel\n\n public export<T>(data: T[]): Observable<boolean> {\n return wrapIntoObservable(importXlsx()).pipe(\n switchMap((XLSX: any) => {\n const ws = XLSX.utils.json_to_sheet(data)\n const wb = { Sheets: { data: ws }, SheetNames: ['data'] }\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n\n return from(fileDataFromBuffer(Buffer.from(excelBuffer))).pipe(\n tap((fileData) => {\n FileSaver.saveAs(fileData.blob, `Export.xlsx`)\n }),\n mapTo(true),\n )\n }),\n )\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { CSVDataExporter } from './exporters/csv-exporter'\nimport { XLSXDataExporter } from './exporters/xlsx-exporter'\n\nimport { THESEAM_DATA_EXPORTER } from './data-exporter'\n\n@NgModule({\n declarations: [],\n imports: [],\n providers: [\n { provide: THESEAM_DATA_EXPORTER, useClass: CSVDataExporter, multi: true },\n { provide: THESEAM_DATA_EXPORTER, useClass: XLSXDataExporter, multi: true },\n ],\n})\nexport class TheSeamDataExporterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1893,6 +1893,7 @@ class WidthColumnsAlteration extends ColumnsAlteration {
1893
1893
  class ColumnsAlterationsManagerService {
1894
1894
  _changesSubject = new Subject();
1895
1895
  _alterations = [];
1896
+ _defaultSorts = [];
1896
1897
  changes;
1897
1898
  constructor() {
1898
1899
  this.changes = this._changesSubject.asObservable();
@@ -1983,7 +1984,7 @@ class ColumnsAlterationsManagerService {
1983
1984
  break;
1984
1985
  }
1985
1986
  case 'sort': {
1986
- const alteration = new SortColumnsAlteration({ sorts: [] }, false);
1987
+ const alteration = new SortColumnsAlteration({ sorts: [...this._defaultSorts] }, false);
1987
1988
  changes.push(...this.add([alteration]));
1988
1989
  break;
1989
1990
  }
@@ -2000,6 +2001,9 @@ class ColumnsAlterationsManagerService {
2000
2001
  this._emitChanges(changes);
2001
2002
  return changes;
2002
2003
  }
2004
+ setDefaultSorts(sorts) {
2005
+ this._defaultSorts = sorts;
2006
+ }
2003
2007
  _removeNonPersistant() {
2004
2008
  const nonPersistent = this._alterations.filter((x) => !x.persistent);
2005
2009
  this.remove(nonPersistent, { emitEvent: false });
@@ -3376,6 +3380,11 @@ class DatatableComponent {
3376
3380
  }
3377
3381
  return null;
3378
3382
  }
3383
+ ngOnChanges(changes) {
3384
+ if (changes['sorts']) {
3385
+ this._columnsAlterationsManager.setDefaultSorts(this._sorts);
3386
+ }
3387
+ }
3379
3388
  _columnData(col) {
3380
3389
  const comp = this.getColumnComponent(col.prop);
3381
3390
  return { col, comp };
@@ -3479,7 +3488,7 @@ class DatatableComponent {
3479
3488
  ColumnsManagerService,
3480
3489
  ColumnsAlterationsManagerService,
3481
3490
  ColumnsFiltersService,
3482
- ], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }, { propertyName: "columnFilterTemplates", predicate: TheSeamDatatableColumnFilterDirective }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: DatatableComponent$1, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: DatatableComponent$1, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"$any(cssClasses)\"\n [messages]=\"$any(messages)\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\"\n >\n <ngx-datatable-group-header\n [rowHeight]=\"50\"\n #myGroupHeader\n *ngIf=\"groupRowsBy\"\n >\n <ng-template\n let-group=\"group\"\n let-expanded=\"expanded\"\n ngx-datatable-group-header-template\n >\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\"\n >\n <!-- <b>Age: {{ group.age }}</b> -->\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail\n *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\"\n >\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer\n *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\"\n >\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template\n #headerTpl\n ngx-datatable-header-template\n let-column=\"column\"\n let-sortFn=\"sortFn\"\n>\n <seam-datatable-column-header\n [column]=\"column\"\n [sortFn]=\"sortFn\"\n [columnFilterIcon]=\"columnFilterIcon\"\n [columnFilterUpdateMethod]=\"columnFilterUpdateMethod\"\n [columnFilterUpdateDebounce]=\"columnFilterUpdateDebounce\"\n ></seam-datatable-column-header>\n</ng-template>\n\n<ng-template\n #cellTypeSelectorTpl\n ngx-datatable-cell-template\n let-value=\"value\"\n let-rowIndex=\"rowIndex\"\n let-row=\"row\"\n let-column=\"column\"\n>\n <seam-table-cell-type-selector\n *ngIf=\"row\"\n [type]=\"$any(column).cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\"\n >\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template\n #actionMenuCellTpl\n ngx-datatable-cell-template\n let-value=\"value\"\n let-rowIndex=\"rowIndex\"\n let-row=\"row\"\n>\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n row: row,\n rowIndex: rowIndex,\n }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus === 'disabled'\"\n (click)=\"tree.onTreeAction()\"\n >\n <span *ngIf=\"tree.treeStatus === 'loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus === 'collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus === 'expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus === 'disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}::ng-deep .ngx-datatable .datatable-body-row{position:relative}::ng-deep .ngx-datatable .datatable-row-right{position:absolute!important;top:0}::ng-deep .ngx-datatable .datatable-row-right{right:0}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarVDynamic", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "ghostLoadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "disableRowCheck", "rowDraggable", "enableClearingSortState", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction", "rowDragEvents"] }, { kind: "directive", type: i6.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i6.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "checkboxable", "template"], outputs: ["toggle"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i6.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i6.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i6.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i7.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: i8.TheSeamElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"], exportAs: ["seamElemResized"] }, { kind: "component", type: i9.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "component", type: DatatableColumnHeaderComponent, selector: "seam-datatable-column-header", inputs: ["column", "sortFn", "columnFilterIcon", "columnFilterUpdateMethod", "columnFilterUpdateDebounce"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], animations: [
3491
+ ], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }, { propertyName: "columnFilterTemplates", predicate: TheSeamDatatableColumnFilterDirective }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: DatatableComponent$1, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: DatatableComponent$1, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"$any(cssClasses)\"\n [messages]=\"$any(messages)\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\"\n >\n <ngx-datatable-group-header\n [rowHeight]=\"50\"\n #myGroupHeader\n *ngIf=\"groupRowsBy\"\n >\n <ng-template\n let-group=\"group\"\n let-expanded=\"expanded\"\n ngx-datatable-group-header-template\n >\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\"\n >\n <!-- <b>Age: {{ group.age }}</b> -->\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail\n *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\"\n >\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer\n *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\"\n >\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template\n #headerTpl\n ngx-datatable-header-template\n let-column=\"column\"\n let-sortFn=\"sortFn\"\n>\n <seam-datatable-column-header\n [column]=\"column\"\n [sortFn]=\"sortFn\"\n [columnFilterIcon]=\"columnFilterIcon\"\n [columnFilterUpdateMethod]=\"columnFilterUpdateMethod\"\n [columnFilterUpdateDebounce]=\"columnFilterUpdateDebounce\"\n ></seam-datatable-column-header>\n</ng-template>\n\n<ng-template\n #cellTypeSelectorTpl\n ngx-datatable-cell-template\n let-value=\"value\"\n let-rowIndex=\"rowIndex\"\n let-row=\"row\"\n let-column=\"column\"\n>\n <seam-table-cell-type-selector\n *ngIf=\"row\"\n [type]=\"$any(column).cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\"\n >\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template\n #actionMenuCellTpl\n ngx-datatable-cell-template\n let-value=\"value\"\n let-rowIndex=\"rowIndex\"\n let-row=\"row\"\n>\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n row: row,\n rowIndex: rowIndex,\n }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus === 'disabled'\"\n (click)=\"tree.onTreeAction()\"\n >\n <span *ngIf=\"tree.treeStatus === 'loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus === 'collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus === 'expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus === 'disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}::ng-deep .ngx-datatable .datatable-body-row{position:relative}::ng-deep .ngx-datatable .datatable-row-right{position:absolute!important;top:0}::ng-deep .ngx-datatable .datatable-row-right{right:0}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarVDynamic", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "ghostLoadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "disableRowCheck", "rowDraggable", "enableClearingSortState", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction", "rowDragEvents"] }, { kind: "directive", type: i6.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i6.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "checkboxable", "template"], outputs: ["toggle"] }, { kind: "directive", type: i6.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i6.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i6.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i6.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i7.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: i8.TheSeamElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"], exportAs: ["seamElemResized"] }, { kind: "component", type: i9.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "component", type: DatatableColumnHeaderComponent, selector: "seam-datatable-column-header", inputs: ["column", "sortFn", "columnFilterIcon", "columnFilterUpdateMethod", "columnFilterUpdateDebounce"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], animations: [
3483
3492
  trigger('slideDown', [
3484
3493
  transition(':enter', [
3485
3494
  style({ transform: 'translateY(-20%)', opacity: '0' }),