@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.
- package/buttons/index.d.ts +4 -1
- package/datatable/index.d.ts +4 -1
- package/fesm2022/theseam-ui-common-buttons.mjs +9 -5
- package/fesm2022/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-exporter.mjs +21 -4
- package/fesm2022/theseam-ui-common-data-exporter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable.mjs +11 -2
- package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-framework.mjs.map +1 -1
- package/package.json +48 -48
package/buttons/index.d.ts
CHANGED
|
@@ -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
|
}
|
package/datatable/index.d.ts
CHANGED
|
@@ -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: {
|
|
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: {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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' }),
|