@theseam/ui-common 1.0.2-beta.79 → 1.0.2-beta.84
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/ai/index.d.ts +83 -16
- package/carousel/index.d.ts +21 -1
- package/datatable/index.d.ts +299 -3
- package/datatable-alterations-display/index.d.ts +61 -1
- package/fesm2022/theseam-ui-common-ai.mjs +95 -49
- package/fesm2022/theseam-ui-common-ai.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-carousel.mjs +48 -1
- package/fesm2022/theseam-ui-common-carousel.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs +197 -1
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable.mjs +668 -4
- package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-file-input.mjs +156 -1
- package/fesm2022/theseam-ui-common-file-input.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-icon.mjs +72 -1
- package/fesm2022/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tooltip.mjs +110 -1
- package/fesm2022/theseam-ui-common-tooltip.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-widget.mjs +23 -1
- package/fesm2022/theseam-ui-common-widget.mjs.map +1 -1
- package/file-input/index.d.ts +78 -1
- package/icon/index.d.ts +33 -3
- package/package.json +1 -1
- package/tooltip/index.d.ts +40 -2
- package/widget/index.d.ts +17 -2
|
@@ -12,6 +12,7 @@ import * as i1 from '@theseam/ui-common/icon';
|
|
|
12
12
|
import { TheSeamIconModule } from '@theseam/ui-common/icon';
|
|
13
13
|
import * as i2 from '@theseam/ui-common/buttons';
|
|
14
14
|
import { TheSeamButtonsModule } from '@theseam/ui-common/buttons';
|
|
15
|
+
import { ComponentHarness } from '@angular/cdk/testing';
|
|
15
16
|
|
|
16
17
|
class TheSeamCarouselSlideDirective {
|
|
17
18
|
template = inject((TemplateRef));
|
|
@@ -259,9 +260,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
259
260
|
}]
|
|
260
261
|
}] });
|
|
261
262
|
|
|
263
|
+
class TheSeamCarouselHarness extends ComponentHarness {
|
|
264
|
+
static hostSelector = 'seam-carousel';
|
|
265
|
+
_content = this.locatorFor('.carousel-content');
|
|
266
|
+
_prevSlideButton = this.locatorForOptional('[title="Go to previous slide"]');
|
|
267
|
+
_nextSlideButton = this.locatorForOptional('[title="Go to next slide"]');
|
|
268
|
+
_playButton = this.locatorForOptional('[title="Play"]');
|
|
269
|
+
_pauseButton = this.locatorForOptional('[title="Pause"]');
|
|
270
|
+
async activeTileIndex() {
|
|
271
|
+
return (await this._content()).getAttribute('data-slide-index');
|
|
272
|
+
}
|
|
273
|
+
async goToPreviousSlide() {
|
|
274
|
+
const prevSlideButton = await this._prevSlideButton();
|
|
275
|
+
if (prevSlideButton === null) {
|
|
276
|
+
throw Error('Previous slide button not found.');
|
|
277
|
+
}
|
|
278
|
+
return prevSlideButton.click();
|
|
279
|
+
}
|
|
280
|
+
async goToNextSlide() {
|
|
281
|
+
const nextSlideButton = await this._nextSlideButton();
|
|
282
|
+
if (nextSlideButton === null) {
|
|
283
|
+
throw Error('Next slide button not found.');
|
|
284
|
+
}
|
|
285
|
+
return nextSlideButton.click();
|
|
286
|
+
}
|
|
287
|
+
async goToSlide(index) {
|
|
288
|
+
return (await this.locatorFor(`[title="Go to slide ${index + 1}"]`)()).click();
|
|
289
|
+
}
|
|
290
|
+
async hasPreviousSlideButton() {
|
|
291
|
+
return (await this._prevSlideButton()) !== null;
|
|
292
|
+
}
|
|
293
|
+
async hasNextSlideButton() {
|
|
294
|
+
return (await this._nextSlideButton()) !== null;
|
|
295
|
+
}
|
|
296
|
+
async hasSlideButton(index) {
|
|
297
|
+
return ((await this.locatorForAll(`[title="Go to slide ${index + 1}"]`)()) !==
|
|
298
|
+
null);
|
|
299
|
+
}
|
|
300
|
+
async hasSlideButtons() {
|
|
301
|
+
return (await this.locatorForAll('[title^="Go to slide"]')()).length > 0;
|
|
302
|
+
}
|
|
303
|
+
async hasAutoPlayToggleButton() {
|
|
304
|
+
return ((await this._playButton()) !== null ||
|
|
305
|
+
(await this._pauseButton()) !== null);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
262
309
|
/**
|
|
263
310
|
* Generated bundle index. Do not edit.
|
|
264
311
|
*/
|
|
265
312
|
|
|
266
|
-
export { TheSeamCarouselComponent, TheSeamCarouselModule, TheSeamCarouselSlideDirective };
|
|
313
|
+
export { TheSeamCarouselComponent, TheSeamCarouselHarness, TheSeamCarouselModule, TheSeamCarouselSlideDirective };
|
|
267
314
|
//# sourceMappingURL=theseam-ui-common-carousel.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-carousel.mjs","sources":["../../../projects/ui-common/carousel/carousel-slide.directive.ts","../../../projects/ui-common/carousel/carousel.component.ts","../../../projects/ui-common/carousel/carousel.component.html","../../../projects/ui-common/carousel/carousel.module.ts","../../../projects/ui-common/carousel/theseam-ui-common-carousel.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core'\n\n@Directive({\n selector: '[seamCarouselSlide]',\n exportAs: 'seamCarouselSlide',\n})\nexport class TheSeamCarouselSlideDirective {\n private readonly template = inject(TemplateRef<any>)\n}\n","import { animate, style, transition, trigger } from '@angular/animations'\nimport { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common'\nimport {\n Component,\n ContentChildren,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n} from '@angular/core'\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion'\nimport {\n BehaviorSubject,\n combineLatest,\n interval,\n Observable,\n Subject,\n} from 'rxjs'\nimport {\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators'\n\nimport {\n faAngleLeft,\n faAngleRight,\n faPause,\n faPlay,\n} from '@fortawesome/free-solid-svg-icons'\nimport { InputBoolean, InputNumber } from '@theseam/ui-common/core'\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamButtonsModule } from '@theseam/ui-common/buttons'\n\nimport { TheSeamCarouselSlideDirective } from './carousel-slide.directive'\n\n@Component({\n selector: 'seam-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss'],\n animations: [\n trigger('fadeInOut', [\n transition('* => *', [\n style({ opacity: '0', height: '*' }),\n animate(250, style({ opacity: '1', height: '*' })),\n ]),\n ]),\n ],\n exportAs: 'seamCarousel',\n imports: [\n NgIf,\n NgFor,\n NgTemplateOutlet,\n AsyncPipe,\n TheSeamIconModule,\n TheSeamButtonsModule,\n ],\n})\nexport class TheSeamCarouselComponent implements OnInit, OnDestroy {\n static ngAcceptInputType_slideInterval: NumberInput\n static ngAcceptInputType_autoPlay: BooleanInput\n static ngAcceptInputType_pauseOnHover: BooleanInput\n static ngAcceptInputType_pauseOnFocus: BooleanInput\n static ngAcceptInputType_showPager: BooleanInput\n static ngAcceptInputType_showNavButtons: BooleanInput\n static ngAcceptInputType_showPauseButton: BooleanInput\n\n readonly faAngleRight = faAngleRight\n readonly faAngleLeft = faAngleLeft\n readonly faPause = faPause\n readonly faPlay = faPlay\n\n /**\n * Duration in ms that slide is displayed before paging.\n * Only applicable when `autoPlay === true`.\n * Defaults to 10000ms.\n */\n @Input() @InputNumber(10000) slideInterval = 10000\n\n /**\n * When `true`, carousel will page automatically.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() autoPlay = true\n\n /**\n * When `true`, will pause automatic paging when user mouses over carousel.\n * Timer will restart when user mouses out.\n * Only applicable when `autoPlay === true`.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() pauseOnHover = true\n\n /**\n * When `true`, will pause automatic paging when user focuses in on item in carousel.\n * Timer will restart when user focuses out.\n * Only applicable when `autoPlay === true`.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() pauseOnFocus = true\n\n /**\n * When `true`, will show pager row at the bottom of the carousel with clickable buttons to navigate directly to a page.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() showPager = true\n\n /**\n * When `true`, will show left and right nav button on either side of the carousel to navigate through pages.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() showNavButtons = true\n\n /**\n * When `true`, will show pause/play button to stop/restart automatic paging.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() showPauseButton = true\n\n @ContentChildren(TheSeamCarouselSlideDirective)\n get slides(): QueryList<TheSeamCarouselSlideDirective> | undefined {\n return this._slides.value\n }\n set slides(value: QueryList<TheSeamCarouselSlideDirective> | undefined) {\n // Check if slides were added or removed that would make the active index not exist.\n const count = value?.length || 0\n const maxIdx = count >= 0 ? count - 1 : 0\n const activeIdx = this._pollActiveIndex.value\n if (activeIdx > maxIdx) {\n this._pollActiveIndex.next(maxIdx)\n } else if (count > 0 && activeIdx < 0) {\n this._pollActiveIndex.next(0)\n }\n\n this._slides.next(value)\n }\n private readonly _slides = new BehaviorSubject<\n QueryList<TheSeamCarouselSlideDirective> | undefined\n >(undefined)\n public readonly slides$ = this._slides.asObservable()\n\n public readonly activeSlide$: Observable<any | undefined>\n\n private readonly _pollActiveIndex = new BehaviorSubject<number>(0)\n public readonly activeIndex$ = this._pollActiveIndex.asObservable()\n\n private readonly _carouselPaused = new BehaviorSubject<boolean>(false)\n public readonly carouselPaused$ = this._carouselPaused.asObservable()\n\n private readonly _carouselStopped = new BehaviorSubject<boolean>(false)\n public readonly carouselStopped$ = this._carouselStopped.asObservable()\n\n private readonly _resetInterval = new Subject<void>()\n\n constructor() {\n this.activeSlide$ = this._pollActiveIndex.pipe(\n startWith(0),\n switchMap((i) => this.slides$.pipe(map((slides) => slides?.get(i)))),\n )\n }\n\n ngOnInit(): void {\n combineLatest([this.carouselPaused$, this.carouselStopped$])\n .pipe(\n tap(([paused, stopped]) => {\n if (paused || stopped) {\n this._resetInterval.next(undefined)\n } else {\n this._startInterval()\n }\n }),\n )\n .subscribe()\n }\n\n ngOnDestroy(): void {\n this._resetInterval.next(undefined)\n this._resetInterval.complete()\n }\n\n private _startInterval() {\n this._resetInterval.next(undefined)\n if (this.autoPlay) {\n interval(this.slideInterval)\n .pipe(\n takeUntil(this._resetInterval),\n tap(() => {\n this.pageCarousel(1)\n }),\n )\n .subscribe()\n }\n }\n\n focusIn() {\n if (this.pauseOnFocus) {\n this.pauseTimer()\n }\n }\n\n focusOut() {\n if (this.pauseOnFocus) {\n this.startTimer()\n }\n }\n\n mouseEnter() {\n if (this.pauseOnHover) {\n this.pauseTimer()\n }\n }\n\n mouseLeave() {\n if (this.pauseOnHover) {\n this.startTimer()\n }\n }\n\n pauseTimer() {\n this._carouselPaused.next(true)\n }\n\n startTimer() {\n if (!this._carouselStopped.value) {\n this._carouselPaused.next(false)\n }\n }\n\n setCarousel(i: number) {\n this._pollActiveIndex.next(i)\n }\n\n pageCarousel(step: number) {\n this.slides$\n .pipe(\n take(1),\n filter((slides) => notNullOrUndefined(slides)),\n map((slides) => {\n const slidesLen = slides?.length || 1\n let index = this._pollActiveIndex.value\n index = index + step\n index = index < 0 ? slidesLen + index : index % slidesLen\n this._pollActiveIndex.next(index)\n }),\n )\n .subscribe()\n }\n\n toggleCarouselStop() {\n const carouselStopped = this._carouselStopped.value\n this._carouselStopped.next(!carouselStopped)\n }\n}\n","<ng-container *ngIf=\"slides$ | async as slides\">\n <div\n class=\"position-relative\"\n *ngIf=\"slides.length\"\n (focusin)=\"focusIn()\"\n (mouseenter)=\"mouseEnter()\"\n (focusout)=\"focusOut()\"\n (mouseleave)=\"mouseLeave()\"\n >\n <div class=\"d-flex\" style=\"min-height: 150px\">\n <button\n *ngIf=\"showNavButtons && slides.length > 1\"\n seamButton\n class=\"carousel-arrow px-2\"\n (click)=\"pageCarousel(-1)\"\n title=\"Go to previous slide\"\n >\n <seam-icon [icon]=\"faAngleLeft\"></seam-icon>\n </button>\n\n <div\n *ngIf=\"activeSlide$ | async as slide\"\n [@fadeInOut]=\"slide.template\"\n class=\"flex-grow-1 d-flex align-items-center\"\n >\n <div\n class=\"carousel-content w-100 py-1 px-2\"\n [attr.data-slide-index]=\"activeIndex$ | async\"\n >\n <ng-template [ngTemplateOutlet]=\"$any(slide.template)\"></ng-template>\n </div>\n </div>\n\n <button\n *ngIf=\"showNavButtons && slides.length > 1\"\n seamButton\n class=\"carousel-arrow px-2\"\n (click)=\"pageCarousel(1)\"\n title=\"Go to next slide\"\n >\n <seam-icon [icon]=\"faAngleRight\"></seam-icon>\n </button>\n </div>\n\n <div\n class=\"carousel-pages d-flex flex-wrap justify-content-center mt-3 mx-auto\"\n *ngIf=\"showPager && slides.length > 1\"\n >\n <button\n *ngFor=\"let q of slides; let i = index\"\n seamButton\n theme=\"light\"\n class=\"carousel-page\"\n [class.active]=\"(activeIndex$ | async) === i\"\n (click)=\"setCarousel(i)\"\n [title]=\"'Go to slide ' + (i + 1)\"\n ></button>\n </div>\n\n <div class=\"carousel-controls\" *ngIf=\"showPauseButton && autoPlay\">\n <button\n *ngIf=\"slides.length > 1\"\n seamButton\n (click)=\"toggleCarouselStop()\"\n [title]=\"(carouselStopped$ | async) ? 'Play' : 'Pause'\"\n >\n <seam-icon\n [icon]=\"faPlay\"\n *ngIf=\"carouselStopped$ | async; else pauseButton\"\n ></seam-icon>\n <ng-template #pauseButton>\n <seam-icon [icon]=\"faPause\"></seam-icon>\n </ng-template>\n </button>\n </div>\n </div>\n</ng-container>\n","import { NgModule } from '@angular/core'\n\nimport { TheSeamCarouselSlideDirective } from './carousel-slide.directive'\nimport { TheSeamCarouselComponent } from './carousel.component'\n\n@NgModule({\n imports: [TheSeamCarouselComponent, TheSeamCarouselSlideDirective],\n exports: [TheSeamCarouselComponent, TheSeamCarouselSlideDirective],\n})\nexport class TheSeamCarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-carousel.mjs","sources":["../../../projects/ui-common/carousel/carousel-slide.directive.ts","../../../projects/ui-common/carousel/carousel.component.ts","../../../projects/ui-common/carousel/carousel.component.html","../../../projects/ui-common/carousel/carousel.module.ts","../../../projects/ui-common/carousel/testing/carousel-harness.ts","../../../projects/ui-common/carousel/theseam-ui-common-carousel.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core'\n\n@Directive({\n selector: '[seamCarouselSlide]',\n exportAs: 'seamCarouselSlide',\n})\nexport class TheSeamCarouselSlideDirective {\n private readonly template = inject(TemplateRef<any>)\n}\n","import { animate, style, transition, trigger } from '@angular/animations'\nimport { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common'\nimport {\n Component,\n ContentChildren,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n} from '@angular/core'\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion'\nimport {\n BehaviorSubject,\n combineLatest,\n interval,\n Observable,\n Subject,\n} from 'rxjs'\nimport {\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators'\n\nimport {\n faAngleLeft,\n faAngleRight,\n faPause,\n faPlay,\n} from '@fortawesome/free-solid-svg-icons'\nimport { InputBoolean, InputNumber } from '@theseam/ui-common/core'\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamButtonsModule } from '@theseam/ui-common/buttons'\n\nimport { TheSeamCarouselSlideDirective } from './carousel-slide.directive'\n\n@Component({\n selector: 'seam-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss'],\n animations: [\n trigger('fadeInOut', [\n transition('* => *', [\n style({ opacity: '0', height: '*' }),\n animate(250, style({ opacity: '1', height: '*' })),\n ]),\n ]),\n ],\n exportAs: 'seamCarousel',\n imports: [\n NgIf,\n NgFor,\n NgTemplateOutlet,\n AsyncPipe,\n TheSeamIconModule,\n TheSeamButtonsModule,\n ],\n})\nexport class TheSeamCarouselComponent implements OnInit, OnDestroy {\n static ngAcceptInputType_slideInterval: NumberInput\n static ngAcceptInputType_autoPlay: BooleanInput\n static ngAcceptInputType_pauseOnHover: BooleanInput\n static ngAcceptInputType_pauseOnFocus: BooleanInput\n static ngAcceptInputType_showPager: BooleanInput\n static ngAcceptInputType_showNavButtons: BooleanInput\n static ngAcceptInputType_showPauseButton: BooleanInput\n\n readonly faAngleRight = faAngleRight\n readonly faAngleLeft = faAngleLeft\n readonly faPause = faPause\n readonly faPlay = faPlay\n\n /**\n * Duration in ms that slide is displayed before paging.\n * Only applicable when `autoPlay === true`.\n * Defaults to 10000ms.\n */\n @Input() @InputNumber(10000) slideInterval = 10000\n\n /**\n * When `true`, carousel will page automatically.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() autoPlay = true\n\n /**\n * When `true`, will pause automatic paging when user mouses over carousel.\n * Timer will restart when user mouses out.\n * Only applicable when `autoPlay === true`.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() pauseOnHover = true\n\n /**\n * When `true`, will pause automatic paging when user focuses in on item in carousel.\n * Timer will restart when user focuses out.\n * Only applicable when `autoPlay === true`.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() pauseOnFocus = true\n\n /**\n * When `true`, will show pager row at the bottom of the carousel with clickable buttons to navigate directly to a page.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() showPager = true\n\n /**\n * When `true`, will show left and right nav button on either side of the carousel to navigate through pages.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() showNavButtons = true\n\n /**\n * When `true`, will show pause/play button to stop/restart automatic paging.\n * Defaults to `true`.\n */\n @Input() @InputBoolean() showPauseButton = true\n\n @ContentChildren(TheSeamCarouselSlideDirective)\n get slides(): QueryList<TheSeamCarouselSlideDirective> | undefined {\n return this._slides.value\n }\n set slides(value: QueryList<TheSeamCarouselSlideDirective> | undefined) {\n // Check if slides were added or removed that would make the active index not exist.\n const count = value?.length || 0\n const maxIdx = count >= 0 ? count - 1 : 0\n const activeIdx = this._pollActiveIndex.value\n if (activeIdx > maxIdx) {\n this._pollActiveIndex.next(maxIdx)\n } else if (count > 0 && activeIdx < 0) {\n this._pollActiveIndex.next(0)\n }\n\n this._slides.next(value)\n }\n private readonly _slides = new BehaviorSubject<\n QueryList<TheSeamCarouselSlideDirective> | undefined\n >(undefined)\n public readonly slides$ = this._slides.asObservable()\n\n public readonly activeSlide$: Observable<any | undefined>\n\n private readonly _pollActiveIndex = new BehaviorSubject<number>(0)\n public readonly activeIndex$ = this._pollActiveIndex.asObservable()\n\n private readonly _carouselPaused = new BehaviorSubject<boolean>(false)\n public readonly carouselPaused$ = this._carouselPaused.asObservable()\n\n private readonly _carouselStopped = new BehaviorSubject<boolean>(false)\n public readonly carouselStopped$ = this._carouselStopped.asObservable()\n\n private readonly _resetInterval = new Subject<void>()\n\n constructor() {\n this.activeSlide$ = this._pollActiveIndex.pipe(\n startWith(0),\n switchMap((i) => this.slides$.pipe(map((slides) => slides?.get(i)))),\n )\n }\n\n ngOnInit(): void {\n combineLatest([this.carouselPaused$, this.carouselStopped$])\n .pipe(\n tap(([paused, stopped]) => {\n if (paused || stopped) {\n this._resetInterval.next(undefined)\n } else {\n this._startInterval()\n }\n }),\n )\n .subscribe()\n }\n\n ngOnDestroy(): void {\n this._resetInterval.next(undefined)\n this._resetInterval.complete()\n }\n\n private _startInterval() {\n this._resetInterval.next(undefined)\n if (this.autoPlay) {\n interval(this.slideInterval)\n .pipe(\n takeUntil(this._resetInterval),\n tap(() => {\n this.pageCarousel(1)\n }),\n )\n .subscribe()\n }\n }\n\n focusIn() {\n if (this.pauseOnFocus) {\n this.pauseTimer()\n }\n }\n\n focusOut() {\n if (this.pauseOnFocus) {\n this.startTimer()\n }\n }\n\n mouseEnter() {\n if (this.pauseOnHover) {\n this.pauseTimer()\n }\n }\n\n mouseLeave() {\n if (this.pauseOnHover) {\n this.startTimer()\n }\n }\n\n pauseTimer() {\n this._carouselPaused.next(true)\n }\n\n startTimer() {\n if (!this._carouselStopped.value) {\n this._carouselPaused.next(false)\n }\n }\n\n setCarousel(i: number) {\n this._pollActiveIndex.next(i)\n }\n\n pageCarousel(step: number) {\n this.slides$\n .pipe(\n take(1),\n filter((slides) => notNullOrUndefined(slides)),\n map((slides) => {\n const slidesLen = slides?.length || 1\n let index = this._pollActiveIndex.value\n index = index + step\n index = index < 0 ? slidesLen + index : index % slidesLen\n this._pollActiveIndex.next(index)\n }),\n )\n .subscribe()\n }\n\n toggleCarouselStop() {\n const carouselStopped = this._carouselStopped.value\n this._carouselStopped.next(!carouselStopped)\n }\n}\n","<ng-container *ngIf=\"slides$ | async as slides\">\n <div\n class=\"position-relative\"\n *ngIf=\"slides.length\"\n (focusin)=\"focusIn()\"\n (mouseenter)=\"mouseEnter()\"\n (focusout)=\"focusOut()\"\n (mouseleave)=\"mouseLeave()\"\n >\n <div class=\"d-flex\" style=\"min-height: 150px\">\n <button\n *ngIf=\"showNavButtons && slides.length > 1\"\n seamButton\n class=\"carousel-arrow px-2\"\n (click)=\"pageCarousel(-1)\"\n title=\"Go to previous slide\"\n >\n <seam-icon [icon]=\"faAngleLeft\"></seam-icon>\n </button>\n\n <div\n *ngIf=\"activeSlide$ | async as slide\"\n [@fadeInOut]=\"slide.template\"\n class=\"flex-grow-1 d-flex align-items-center\"\n >\n <div\n class=\"carousel-content w-100 py-1 px-2\"\n [attr.data-slide-index]=\"activeIndex$ | async\"\n >\n <ng-template [ngTemplateOutlet]=\"$any(slide.template)\"></ng-template>\n </div>\n </div>\n\n <button\n *ngIf=\"showNavButtons && slides.length > 1\"\n seamButton\n class=\"carousel-arrow px-2\"\n (click)=\"pageCarousel(1)\"\n title=\"Go to next slide\"\n >\n <seam-icon [icon]=\"faAngleRight\"></seam-icon>\n </button>\n </div>\n\n <div\n class=\"carousel-pages d-flex flex-wrap justify-content-center mt-3 mx-auto\"\n *ngIf=\"showPager && slides.length > 1\"\n >\n <button\n *ngFor=\"let q of slides; let i = index\"\n seamButton\n theme=\"light\"\n class=\"carousel-page\"\n [class.active]=\"(activeIndex$ | async) === i\"\n (click)=\"setCarousel(i)\"\n [title]=\"'Go to slide ' + (i + 1)\"\n ></button>\n </div>\n\n <div class=\"carousel-controls\" *ngIf=\"showPauseButton && autoPlay\">\n <button\n *ngIf=\"slides.length > 1\"\n seamButton\n (click)=\"toggleCarouselStop()\"\n [title]=\"(carouselStopped$ | async) ? 'Play' : 'Pause'\"\n >\n <seam-icon\n [icon]=\"faPlay\"\n *ngIf=\"carouselStopped$ | async; else pauseButton\"\n ></seam-icon>\n <ng-template #pauseButton>\n <seam-icon [icon]=\"faPause\"></seam-icon>\n </ng-template>\n </button>\n </div>\n </div>\n</ng-container>\n","import { NgModule } from '@angular/core'\n\nimport { TheSeamCarouselSlideDirective } from './carousel-slide.directive'\nimport { TheSeamCarouselComponent } from './carousel.component'\n\n@NgModule({\n imports: [TheSeamCarouselComponent, TheSeamCarouselSlideDirective],\n exports: [TheSeamCarouselComponent, TheSeamCarouselSlideDirective],\n})\nexport class TheSeamCarouselModule {}\n","import { ComponentHarness } from '@angular/cdk/testing'\n\nexport class TheSeamCarouselHarness extends ComponentHarness {\n static hostSelector = 'seam-carousel'\n\n _content = this.locatorFor('.carousel-content')\n _prevSlideButton = this.locatorForOptional('[title=\"Go to previous slide\"]')\n _nextSlideButton = this.locatorForOptional('[title=\"Go to next slide\"]')\n _playButton = this.locatorForOptional('[title=\"Play\"]')\n _pauseButton = this.locatorForOptional('[title=\"Pause\"]')\n\n public async activeTileIndex() {\n return (await this._content()).getAttribute('data-slide-index')\n }\n\n public async goToPreviousSlide() {\n const prevSlideButton = await this._prevSlideButton()\n if (prevSlideButton === null) {\n throw Error('Previous slide button not found.')\n }\n return prevSlideButton.click()\n }\n\n public async goToNextSlide() {\n const nextSlideButton = await this._nextSlideButton()\n if (nextSlideButton === null) {\n throw Error('Next slide button not found.')\n }\n return nextSlideButton.click()\n }\n\n public async goToSlide(index: number) {\n return (\n await this.locatorFor(`[title=\"Go to slide ${index + 1}\"]`)()\n ).click()\n }\n\n public async hasPreviousSlideButton() {\n return (await this._prevSlideButton()) !== null\n }\n\n public async hasNextSlideButton() {\n return (await this._nextSlideButton()) !== null\n }\n\n public async hasSlideButton(index: number) {\n return (\n (await this.locatorForAll(`[title=\"Go to slide ${index + 1}\"]`)()) !==\n null\n )\n }\n\n public async hasSlideButtons() {\n return (await this.locatorForAll('[title^=\"Go to slide\"]')()).length > 0\n }\n\n public async hasAutoPlayToggleButton() {\n return (\n (await this._playButton()) !== null ||\n (await this._pauseButton()) !== null\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import * as i3 from '@theseam/ui-common/icon';
|
|
|
7
7
|
import { TheSeamIconModule } from '@theseam/ui-common/icon';
|
|
8
8
|
import { Subject, takeUntil } from 'rxjs';
|
|
9
9
|
import * as i1 from '@theseam/ui-common/layout';
|
|
10
|
+
import { ComponentHarness } from '@angular/cdk/testing';
|
|
10
11
|
|
|
11
12
|
class AlterationDisplayService {
|
|
12
13
|
/**
|
|
@@ -339,6 +340,201 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
339
340
|
type: Input
|
|
340
341
|
}] } });
|
|
341
342
|
|
|
343
|
+
class AlterationItemHarness extends ComponentHarness {
|
|
344
|
+
static hostSelector = 'seam-alteration-item';
|
|
345
|
+
_getCard = this.locatorFor('.card');
|
|
346
|
+
_getTypeBadge = this.locatorFor('[data-testid^="alteration-type-"]');
|
|
347
|
+
_getIcon = this.locatorFor('[data-testid^="alteration-icon-"]');
|
|
348
|
+
_getSummary = this.locatorFor('[data-testid="alteration-summary"]');
|
|
349
|
+
_getDiffState = this.locatorForOptional('[data-testid="alteration-diff-state"]');
|
|
350
|
+
_getDetails = this.locatorForAll('[data-testid="alteration-detail"]');
|
|
351
|
+
async getType() {
|
|
352
|
+
const badge = await this._getTypeBadge();
|
|
353
|
+
const testId = await badge.getAttribute('data-testid');
|
|
354
|
+
return testId?.replace('alteration-type-', '') || '';
|
|
355
|
+
}
|
|
356
|
+
async getTypeDisplayName() {
|
|
357
|
+
const badge = await this._getTypeBadge();
|
|
358
|
+
return badge.text();
|
|
359
|
+
}
|
|
360
|
+
async getSummary() {
|
|
361
|
+
const summary = await this._getSummary();
|
|
362
|
+
return summary.text();
|
|
363
|
+
}
|
|
364
|
+
async getDiffState() {
|
|
365
|
+
const diffElement = await this._getDiffState();
|
|
366
|
+
if (!diffElement) {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
const text = await diffElement.text();
|
|
370
|
+
if (text.includes('+'))
|
|
371
|
+
return 'added';
|
|
372
|
+
if (text.includes('-'))
|
|
373
|
+
return 'removed';
|
|
374
|
+
if (text.includes('~'))
|
|
375
|
+
return 'changed';
|
|
376
|
+
return 'unchanged';
|
|
377
|
+
}
|
|
378
|
+
async getDetails() {
|
|
379
|
+
const detailElements = await this._getDetails();
|
|
380
|
+
return Promise.all(detailElements.map((el) => el.text()));
|
|
381
|
+
}
|
|
382
|
+
async hasDetails() {
|
|
383
|
+
const details = await this._getDetails();
|
|
384
|
+
return details.length > 0;
|
|
385
|
+
}
|
|
386
|
+
async hasBorderSuccess() {
|
|
387
|
+
const card = await this._getCard();
|
|
388
|
+
const classes = await card.getAttribute('class');
|
|
389
|
+
return classes?.includes('border-success') || false;
|
|
390
|
+
}
|
|
391
|
+
async hasBorderDanger() {
|
|
392
|
+
const card = await this._getCard();
|
|
393
|
+
const classes = await card.getAttribute('class');
|
|
394
|
+
return classes?.includes('border-danger') || false;
|
|
395
|
+
}
|
|
396
|
+
async hasBorderWarning() {
|
|
397
|
+
const card = await this._getCard();
|
|
398
|
+
const classes = await card.getAttribute('class');
|
|
399
|
+
return classes?.includes('border-warning') || false;
|
|
400
|
+
}
|
|
401
|
+
async getBadgeClass() {
|
|
402
|
+
const badge = await this._getTypeBadge();
|
|
403
|
+
const classes = await badge.getAttribute('class');
|
|
404
|
+
const badgeClasses = classes?.split(' ').filter((cls) => cls.startsWith('badge-')) || [];
|
|
405
|
+
return badgeClasses[0] || '';
|
|
406
|
+
}
|
|
407
|
+
async isVisible() {
|
|
408
|
+
try {
|
|
409
|
+
await this._getCard();
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
class AlterationsListHarness extends ComponentHarness {
|
|
419
|
+
static hostSelector = 'seam-alterations-list';
|
|
420
|
+
_getTitle = this.locatorForOptional('[data-testid="alterations-list-title"]');
|
|
421
|
+
_getCount = this.locatorForOptional('[data-testid="alterations-list-count"]');
|
|
422
|
+
_getEmptyState = this.locatorForOptional('[data-testid="alterations-list-empty"]');
|
|
423
|
+
_getItems = this.locatorForAll(AlterationItemHarness);
|
|
424
|
+
async getTitle() {
|
|
425
|
+
const titleElement = await this._getTitle();
|
|
426
|
+
return titleElement ? titleElement.text() : null;
|
|
427
|
+
}
|
|
428
|
+
async getCount() {
|
|
429
|
+
const countElement = await this._getCount();
|
|
430
|
+
return countElement ? countElement.text() : null;
|
|
431
|
+
}
|
|
432
|
+
async hasEmptyState() {
|
|
433
|
+
const emptyState = await this._getEmptyState();
|
|
434
|
+
return emptyState !== null;
|
|
435
|
+
}
|
|
436
|
+
async getEmptyStateText() {
|
|
437
|
+
const emptyState = await this._getEmptyState();
|
|
438
|
+
return emptyState ? emptyState.text() : null;
|
|
439
|
+
}
|
|
440
|
+
async getItems() {
|
|
441
|
+
return this._getItems();
|
|
442
|
+
}
|
|
443
|
+
async getItemCount() {
|
|
444
|
+
const items = await this.getItems();
|
|
445
|
+
return items.length;
|
|
446
|
+
}
|
|
447
|
+
async getItemByType(type) {
|
|
448
|
+
const items = await this.getItems();
|
|
449
|
+
for (const item of items) {
|
|
450
|
+
const itemType = await item.getType();
|
|
451
|
+
if (itemType === type) {
|
|
452
|
+
return item;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
457
|
+
async getItemTypes() {
|
|
458
|
+
const items = await this.getItems();
|
|
459
|
+
const types = [];
|
|
460
|
+
for (const item of items) {
|
|
461
|
+
const type = await item.getType();
|
|
462
|
+
types.push(type);
|
|
463
|
+
}
|
|
464
|
+
return types;
|
|
465
|
+
}
|
|
466
|
+
async hasItems() {
|
|
467
|
+
const items = await this.getItems();
|
|
468
|
+
return items.length > 0;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
class AlterationsDiffHarness extends ComponentHarness {
|
|
473
|
+
static hostSelector = 'seam-alterations-diff';
|
|
474
|
+
_getDiffSummary = this.locatorForOptional('[data-testid="diff-summary"]');
|
|
475
|
+
_getCurrentList = this.locatorForOptional('[data-testid="current-alterations-list"]');
|
|
476
|
+
_getPendingList = this.locatorForOptional('[data-testid="pending-alterations-list"]');
|
|
477
|
+
_getCurrentListMobile = this.locatorForOptional('[data-testid="current-alterations-list-mobile"]');
|
|
478
|
+
_getPendingListMobile = this.locatorForOptional('[data-testid="pending-alterations-list-mobile"]');
|
|
479
|
+
_getDesktopLayout = this.locatorForOptional('[data-testid="desktop-layout"]');
|
|
480
|
+
_getMobileLayout = this.locatorForOptional('[data-testid="mobile-layout"]');
|
|
481
|
+
async hasDiffSummary() {
|
|
482
|
+
const summary = await this._getDiffSummary();
|
|
483
|
+
return summary !== null;
|
|
484
|
+
}
|
|
485
|
+
async getDiffSummaryText() {
|
|
486
|
+
const summary = await this._getDiffSummary();
|
|
487
|
+
return summary ? summary.text() : null;
|
|
488
|
+
}
|
|
489
|
+
async isDesktopLayout() {
|
|
490
|
+
const desktop = await this._getDesktopLayout();
|
|
491
|
+
return desktop !== null;
|
|
492
|
+
}
|
|
493
|
+
async isMobileLayout() {
|
|
494
|
+
const mobile = await this._getMobileLayout();
|
|
495
|
+
return mobile !== null;
|
|
496
|
+
}
|
|
497
|
+
async getCurrentList() {
|
|
498
|
+
try {
|
|
499
|
+
// Try desktop layout first
|
|
500
|
+
return await this.locatorFor(AlterationsListHarness)();
|
|
501
|
+
}
|
|
502
|
+
catch {
|
|
503
|
+
return null;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
async getPendingList() {
|
|
507
|
+
try {
|
|
508
|
+
// Try to get the second list (pending)
|
|
509
|
+
const lists = await this.locatorForAll(AlterationsListHarness)();
|
|
510
|
+
return lists.length > 1 ? lists[1] : null;
|
|
511
|
+
}
|
|
512
|
+
catch {
|
|
513
|
+
return null;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
async getCurrentItemCount() {
|
|
517
|
+
const currentList = await this.getCurrentList();
|
|
518
|
+
return currentList ? currentList.getItemCount() : 0;
|
|
519
|
+
}
|
|
520
|
+
async getPendingItemCount() {
|
|
521
|
+
const pendingList = await this.getPendingList();
|
|
522
|
+
return pendingList ? pendingList.getItemCount() : 0;
|
|
523
|
+
}
|
|
524
|
+
async hasCurrentEmptyState() {
|
|
525
|
+
const currentList = await this.getCurrentList();
|
|
526
|
+
return currentList ? currentList.hasEmptyState() : false;
|
|
527
|
+
}
|
|
528
|
+
async hasPendingEmptyState() {
|
|
529
|
+
const pendingList = await this.getPendingList();
|
|
530
|
+
return pendingList ? pendingList.hasEmptyState() : false;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/*
|
|
535
|
+
* Public API Surface of datatable-alterations-display testing
|
|
536
|
+
*/
|
|
537
|
+
|
|
342
538
|
/*
|
|
343
539
|
* Public API Surface of datatable-alterations-display
|
|
344
540
|
*/
|
|
@@ -348,5 +544,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
348
544
|
* Generated bundle index. Do not edit.
|
|
349
545
|
*/
|
|
350
546
|
|
|
351
|
-
export { AlterationDisplayService, AlterationItemComponent, AlterationsDiffComponent, AlterationsListComponent };
|
|
547
|
+
export { AlterationDisplayService, AlterationItemComponent, AlterationItemHarness, AlterationsDiffComponent, AlterationsDiffHarness, AlterationsListComponent, AlterationsListHarness };
|
|
352
548
|
//# sourceMappingURL=theseam-ui-common-datatable-alterations-display.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-datatable-alterations-display.mjs","sources":["../../../projects/ui-common/datatable-alterations-display/services/alteration-display.service.ts","../../../projects/ui-common/datatable-alterations-display/alteration-item/alteration-item.component.ts","../../../projects/ui-common/datatable-alterations-display/alteration-item/alteration-item.component.html","../../../projects/ui-common/datatable-alterations-display/alterations-list/alterations-list.component.ts","../../../projects/ui-common/datatable-alterations-display/alterations-list/alterations-list.component.html","../../../projects/ui-common/datatable-alterations-display/alterations-diff/alterations-diff.component.ts","../../../projects/ui-common/datatable-alterations-display/alterations-diff/alterations-diff.component.html","../../../projects/ui-common/datatable-alterations-display/public-api.ts","../../../projects/ui-common/datatable-alterations-display/theseam-ui-common-datatable-alterations-display.ts"],"sourcesContent":["import { Injectable } from '@angular/core'\n\nimport {\n AlterationDisplayItem,\n AlterationDiffState,\n} from '../models/alteration-display.model'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AlterationDisplayService {\n /**\n * Calculate the differences between current and pending alterations\n */\n calculateDiff(\n current: AlterationDisplayItem[],\n pending: AlterationDisplayItem[],\n ): AlterationDiffState {\n const currentIds = new Set(current.map((item) => item.id))\n const pendingIds = new Set(pending.map((item) => item.id))\n\n const added = pending.filter((item) => !currentIds.has(item.id))\n const removed = current.filter((item) => !pendingIds.has(item.id))\n\n const unchanged: AlterationDisplayItem[] = []\n const changed: AlterationDisplayItem[] = []\n\n // Check for changes in items that exist in both arrays\n for (const currentItem of current) {\n if (pendingIds.has(currentItem.id)) {\n const pendingItem = pending.find((item) => item.id === currentItem.id)!\n\n if (this._areItemsEqual(currentItem, pendingItem)) {\n unchanged.push(currentItem)\n } else {\n changed.push(pendingItem) // Use the pending version for changed items\n }\n }\n }\n\n return {\n added,\n removed,\n changed,\n unchanged,\n }\n }\n\n /**\n * Group and sort alteration items by type and sort order\n */\n groupAndSortItems(items: AlterationDisplayItem[]): AlterationDisplayItem[] {\n // Define type order: sort, order, hide-column, width, filter (filters last due to variation)\n const typeOrder: Record<string, number> = {\n sort: 1,\n order: 2,\n 'hide-column': 3,\n width: 4,\n filter: 5,\n }\n\n return items.sort((a, b) => {\n // First sort by type\n const typeOrderA = typeOrder[a.type] || 999\n const typeOrderB = typeOrder[b.type] || 999\n\n if (typeOrderA !== typeOrderB) {\n return typeOrderA - typeOrderB\n }\n\n // Then sort by sortOrder within the same type\n const sortOrderA = a.sortOrder || 0\n const sortOrderB = b.sortOrder || 0\n\n if (sortOrderA !== sortOrderB) {\n return sortOrderA - sortOrderB\n }\n\n // Finally sort by id for consistent ordering\n return a.id.localeCompare(b.id)\n })\n }\n\n /**\n * Get a user-friendly type display name\n */\n getTypeDisplayName(type: string): string {\n const typeNames: Record<string, string> = {\n sort: 'Sort',\n order: 'Order',\n 'hide-column': 'Visibility',\n width: 'Width',\n filter: 'Filter',\n }\n return typeNames[type] || type\n }\n\n /**\n * Get an icon name for the alteration type (FontAwesome icon names)\n */\n getTypeIconName(type: string): string {\n const typeIcons: Record<string, string> = {\n sort: 'sort',\n order: 'arrows-alt',\n 'hide-column': 'eye-slash',\n width: 'arrows-alt-h',\n filter: 'filter',\n }\n return typeIcons[type] || 'cog'\n }\n\n private _areItemsEqual(\n item1: AlterationDisplayItem,\n item2: AlterationDisplayItem,\n ): boolean {\n // Compare all properties except sortOrder (which shouldn't affect equality)\n return (\n item1.id === item2.id &&\n item1.type === item2.type &&\n item1.summary === item2.summary &&\n this._areArraysEqual(item1.details || [], item2.details || [])\n )\n }\n\n private _areArraysEqual(arr1: string[], arr2: string[]): boolean {\n if (arr1.length !== arr2.length) {\n return false\n }\n\n return arr1.every((item, index) => item === arr2[index])\n }\n}\n","import { Component, Input } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport {\n faSort,\n faArrowsAlt,\n faEyeSlash,\n faArrowsAltH,\n faFilter,\n faCog,\n} from '@fortawesome/free-solid-svg-icons'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\n\nimport {\n AlterationDisplayItem,\n AlterationVisualState,\n} from '../models/alteration-display.model'\nimport { AlterationDisplayService } from '../services/alteration-display.service'\n\n@Component({\n selector: 'seam-alteration-item',\n standalone: true,\n imports: [CommonModule, TheSeamIconModule],\n templateUrl: './alteration-item.component.html',\n styleUrls: ['./alteration-item.component.scss'],\n})\nexport class AlterationItemComponent {\n @Input() item!: AlterationDisplayItem\n @Input() compact = true\n\n // FontAwesome icons\n private readonly typeIcons = {\n sort: faSort,\n order: faArrowsAlt,\n 'hide-column': faEyeSlash,\n width: faArrowsAltH,\n filter: faFilter,\n default: faCog,\n }\n\n constructor(private alterationDisplayService: AlterationDisplayService) {}\n\n get typeDisplayName(): string {\n return this.alterationDisplayService.getTypeDisplayName(this.item.type)\n }\n\n get typeIcon() {\n return (\n this.typeIcons[this.item.type as keyof typeof this.typeIcons] ||\n this.typeIcons.default\n )\n }\n\n get borderClass(): string {\n switch (this.item.diffState) {\n case 'added':\n return 'border-success'\n case 'removed':\n return 'border-danger'\n case 'changed':\n return 'border-warning'\n default:\n return ''\n }\n }\n\n get badgeClass(): string {\n switch (this.item.type) {\n case 'sort':\n return 'badge-primary'\n case 'order':\n return 'badge-info'\n case 'hide-column':\n return 'badge-secondary'\n case 'width':\n return 'badge-dark'\n case 'filter':\n return 'badge-warning'\n default:\n return 'badge-secondary'\n }\n }\n}\n","<div\n class=\"card card-body py-2 px-3 mb-2\"\n [class]=\"borderClass\"\n [attr.data-testid]=\"'alteration-item-' + item.id\"\n>\n <div class=\"d-flex align-items-center\">\n <!-- Type badge -->\n <span\n class=\"badge mr-2\"\n [class]=\"badgeClass\"\n [attr.data-testid]=\"'alteration-type-' + item.type\"\n >\n {{ typeDisplayName }}\n </span>\n\n <!-- Type icon -->\n <seam-icon\n [icon]=\"typeIcon\"\n class=\"mr-2 text-muted\"\n [attr.data-testid]=\"'alteration-icon-' + item.type\"\n >\n </seam-icon>\n\n <!-- Summary text -->\n <span class=\"flex-grow-1\" [attr.data-testid]=\"'alteration-summary'\">\n {{ item.summary }}\n </span>\n\n <!-- Diff state indicator (optional visual indicator) -->\n <span\n *ngIf=\"item.diffState\"\n class=\"ml-2 small text-muted\"\n [attr.data-testid]=\"'alteration-diff-state'\"\n >\n <ng-container [ngSwitch]=\"item.diffState\">\n <span *ngSwitchCase=\"'added'\" class=\"text-success\">+</span>\n <span *ngSwitchCase=\"'removed'\" class=\"text-danger\">-</span>\n <span *ngSwitchCase=\"'changed'\" class=\"text-warning\">~</span>\n </ng-container>\n </span>\n </div>\n\n <!-- Expanded details (for future enhancement) -->\n <div\n *ngIf=\"!compact && item.details && item.details.length > 0\"\n class=\"mt-2 pt-2 border-top\"\n >\n <ul class=\"list-unstyled mb-0 small text-muted\">\n <li\n *ngFor=\"let detail of item.details\"\n [attr.data-testid]=\"'alteration-detail'\"\n >\n {{ detail }}\n </li>\n </ul>\n </div>\n</div>\n","import { Component, Input } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport {\n AlterationDisplayItem,\n AlterationVisualState,\n} from '../models/alteration-display.model'\nimport { AlterationDisplayService } from '../services/alteration-display.service'\nimport { AlterationItemComponent } from '../alteration-item/alteration-item.component'\n\n@Component({\n selector: 'seam-alterations-list',\n standalone: true,\n imports: [CommonModule, AlterationItemComponent],\n templateUrl: './alterations-list.component.html',\n styleUrls: ['./alterations-list.component.scss'],\n})\nexport class AlterationsListComponent {\n @Input() items: AlterationDisplayItem[] = []\n @Input() title?: string\n @Input() diffState?: 'current' | 'pending'\n @Input() groupByType = true\n @Input() sortWithinType = true\n @Input() compact = true\n\n constructor(private alterationDisplayService: AlterationDisplayService) {}\n\n get sortedItems(): AlterationDisplayItem[] {\n if (!this.groupByType && !this.sortWithinType) {\n return this.items\n }\n\n return this.alterationDisplayService.groupAndSortItems(this.items)\n }\n\n get hasItems(): boolean {\n return this.items && this.items.length > 0\n }\n\n trackByItemId(index: number, item: AlterationDisplayItem): string {\n return item.id\n }\n}\n","<div\n class=\"alterations-list\"\n [attr.data-testid]=\"'alterations-list-' + (diffState || 'default')\"\n>\n <!-- Title header -->\n <div *ngIf=\"title\" class=\"mb-3\">\n <h6\n class=\"mb-1 text-muted font-weight-bold\"\n [attr.data-testid]=\"'alterations-list-title'\"\n >\n {{ title }}\n </h6>\n <small class=\"text-muted\" [attr.data-testid]=\"'alterations-list-count'\">\n {{ items.length }} alteration{{ items.length === 1 ? '' : 's' }}\n </small>\n </div>\n\n <!-- Items list -->\n <div *ngIf=\"hasItems; else emptyState\" class=\"alterations-items\">\n <seam-alteration-item\n *ngFor=\"let item of sortedItems; trackBy: trackByItemId\"\n [item]=\"item\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'list-item-' + item.id\"\n >\n </seam-alteration-item>\n </div>\n\n <!-- Empty state -->\n <ng-template #emptyState>\n <div\n class=\"text-center py-4 text-muted\"\n [attr.data-testid]=\"'alterations-list-empty'\"\n >\n <p class=\"mb-0\">No alterations</p>\n <small>No changes have been made to the table configuration.</small>\n </div>\n </ng-template>\n</div>\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { Subject, takeUntil } from 'rxjs'\n\nimport { TheSeamLayoutService } from '@theseam/ui-common/layout'\n\nimport {\n AlterationDisplayItem,\n AlterationDiffState,\n AlterationDiffMode,\n AlterationVisualState,\n} from '../models/alteration-display.model'\nimport { AlterationDisplayService } from '../services/alteration-display.service'\nimport { AlterationsListComponent } from '../alterations-list/alterations-list.component'\n\n@Component({\n selector: 'seam-alterations-diff',\n standalone: true,\n imports: [CommonModule, AlterationsListComponent],\n templateUrl: './alterations-diff.component.html',\n styleUrls: ['./alterations-diff.component.scss'],\n})\nexport class AlterationsDiffComponent implements OnInit, OnDestroy {\n @Input() currentItems: AlterationDisplayItem[] = []\n @Input() pendingItems: AlterationDisplayItem[] = []\n @Input() diffMode: AlterationDiffMode = 'auto'\n @Input() initialDiffState?: AlterationDiffState\n @Input() compact = true\n\n isMobile = false\n diffState: AlterationDiffState | null = null\n\n private destroy$ = new Subject<void>()\n\n constructor(\n private layoutService: TheSeamLayoutService,\n private alterationDisplayService: AlterationDisplayService,\n ) {}\n\n ngOnInit(): void {\n // Subscribe to mobile breakpoint changes\n this.layoutService\n .observe('lt-md')\n .pipe(takeUntil(this.destroy$))\n .subscribe((isMobile) => {\n this.isMobile = isMobile\n })\n\n // Calculate diff state\n this.calculateDiffState()\n }\n\n ngOnDestroy(): void {\n this.destroy$.next()\n this.destroy$.complete()\n }\n\n get currentItemsWithDiffState(): AlterationDisplayItem[] {\n if (!this.diffState) {\n return this.currentItems\n }\n\n return this.currentItems.map((item) => ({\n ...item,\n _diffState: this.getItemDiffState(item, 'current'),\n }))\n }\n\n get pendingItemsWithDiffState(): AlterationDisplayItem[] {\n if (!this.diffState) {\n return this.pendingItems\n }\n\n return this.pendingItems.map((item) => ({\n ...item,\n _diffState: this.getItemDiffState(item, 'pending'),\n }))\n }\n\n get hasDifferences(): boolean {\n if (!this.diffState) {\n return false\n }\n\n return (\n this.diffState.added.length > 0 ||\n this.diffState.removed.length > 0 ||\n this.diffState.changed.length > 0\n )\n }\n\n get differenceSummary(): string {\n if (!this.diffState) {\n return 'No differences calculated'\n }\n\n const parts: string[] = []\n\n if (this.diffState.added.length > 0) {\n parts.push(`${this.diffState.added.length} added`)\n }\n\n if (this.diffState.removed.length > 0) {\n parts.push(`${this.diffState.removed.length} removed`)\n }\n\n if (this.diffState.changed.length > 0) {\n parts.push(`${this.diffState.changed.length} changed`)\n }\n\n if (parts.length === 0) {\n return 'No differences'\n }\n\n return parts.join(', ')\n }\n\n private calculateDiffState(): void {\n if (this.diffMode === 'manual' && this.initialDiffState) {\n this.diffState = this.initialDiffState\n } else {\n this.diffState = this.alterationDisplayService.calculateDiff(\n this.currentItems,\n this.pendingItems,\n )\n }\n }\n\n private getItemDiffState(\n item: AlterationDisplayItem,\n context: 'current' | 'pending',\n ): AlterationVisualState | undefined {\n if (!this.diffState) {\n return undefined\n }\n\n const itemId = item.id\n\n if (this.diffState.added.some((addedItem) => addedItem.id === itemId)) {\n return context === 'pending' ? 'added' : undefined\n }\n\n if (\n this.diffState.removed.some((removedItem) => removedItem.id === itemId)\n ) {\n return context === 'current' ? 'removed' : undefined\n }\n\n if (\n this.diffState.changed.some((changedItem) => changedItem.id === itemId)\n ) {\n return 'changed'\n }\n\n return 'unchanged'\n }\n}\n","<div class=\"alterations-diff\" [attr.data-testid]=\"'alterations-diff'\">\n <!-- Diff summary header -->\n <div\n *ngIf=\"hasDifferences\"\n class=\"mb-3 p-2 bg-light border rounded\"\n [attr.data-testid]=\"'diff-summary'\"\n >\n <small class=\"text-muted font-weight-bold\">\n Changes: {{ differenceSummary }}\n </small>\n </div>\n\n <!-- Desktop layout: Side-by-side -->\n <div\n *ngIf=\"!isMobile; else mobileLayout\"\n class=\"row\"\n [attr.data-testid]=\"'desktop-layout'\"\n >\n <!-- Current alterations column -->\n <div class=\"col-md-6 pr-md-2\">\n <seam-alterations-list\n [items]=\"currentItems\"\n [title]=\"'Current Alterations'\"\n [diffState]=\"'current'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'current-alterations-list'\"\n >\n </seam-alterations-list>\n </div>\n\n <!-- Pending alterations column -->\n <div class=\"col-md-6 pl-md-2\">\n <seam-alterations-list\n [items]=\"pendingItems\"\n [title]=\"'Pending Alterations'\"\n [diffState]=\"'pending'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'pending-alterations-list'\"\n >\n </seam-alterations-list>\n </div>\n </div>\n\n <!-- Mobile layout: Stacked -->\n <ng-template #mobileLayout>\n <div class=\"mobile-layout\" [attr.data-testid]=\"'mobile-layout'\">\n <!-- Current alterations -->\n <div class=\"mb-4\">\n <seam-alterations-list\n [items]=\"currentItems\"\n [title]=\"'Current Alterations'\"\n [diffState]=\"'current'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'current-alterations-list-mobile'\"\n >\n </seam-alterations-list>\n </div>\n\n <!-- Pending alterations -->\n <div>\n <seam-alterations-list\n [items]=\"pendingItems\"\n [title]=\"'Pending Alterations'\"\n [diffState]=\"'pending'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'pending-alterations-list-mobile'\"\n >\n </seam-alterations-list>\n </div>\n </div>\n </ng-template>\n</div>\n","/*\n * Public API Surface of datatable-alterations-display\n */\n\n// Models\nexport * from './models/alteration-display.model'\n\n// Services\nexport * from './services/alteration-display.service'\n\n// Components\nexport * from './alteration-item/alteration-item.component'\nexport * from './alterations-list/alterations-list.component'\nexport * from './alterations-diff/alterations-diff.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AlterationDisplayService","i2.AlterationDisplayService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-datatable-alterations-display.mjs","sources":["../../../projects/ui-common/datatable-alterations-display/services/alteration-display.service.ts","../../../projects/ui-common/datatable-alterations-display/alteration-item/alteration-item.component.ts","../../../projects/ui-common/datatable-alterations-display/alteration-item/alteration-item.component.html","../../../projects/ui-common/datatable-alterations-display/alterations-list/alterations-list.component.ts","../../../projects/ui-common/datatable-alterations-display/alterations-list/alterations-list.component.html","../../../projects/ui-common/datatable-alterations-display/alterations-diff/alterations-diff.component.ts","../../../projects/ui-common/datatable-alterations-display/alterations-diff/alterations-diff.component.html","../../../projects/ui-common/datatable-alterations-display/testing/alteration-item.harness.ts","../../../projects/ui-common/datatable-alterations-display/testing/alterations-list.harness.ts","../../../projects/ui-common/datatable-alterations-display/testing/alterations-diff.harness.ts","../../../projects/ui-common/datatable-alterations-display/testing/index.ts","../../../projects/ui-common/datatable-alterations-display/public-api.ts","../../../projects/ui-common/datatable-alterations-display/theseam-ui-common-datatable-alterations-display.ts"],"sourcesContent":["import { Injectable } from '@angular/core'\n\nimport {\n AlterationDisplayItem,\n AlterationDiffState,\n} from '../models/alteration-display.model'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AlterationDisplayService {\n /**\n * Calculate the differences between current and pending alterations\n */\n calculateDiff(\n current: AlterationDisplayItem[],\n pending: AlterationDisplayItem[],\n ): AlterationDiffState {\n const currentIds = new Set(current.map((item) => item.id))\n const pendingIds = new Set(pending.map((item) => item.id))\n\n const added = pending.filter((item) => !currentIds.has(item.id))\n const removed = current.filter((item) => !pendingIds.has(item.id))\n\n const unchanged: AlterationDisplayItem[] = []\n const changed: AlterationDisplayItem[] = []\n\n // Check for changes in items that exist in both arrays\n for (const currentItem of current) {\n if (pendingIds.has(currentItem.id)) {\n const pendingItem = pending.find((item) => item.id === currentItem.id)!\n\n if (this._areItemsEqual(currentItem, pendingItem)) {\n unchanged.push(currentItem)\n } else {\n changed.push(pendingItem) // Use the pending version for changed items\n }\n }\n }\n\n return {\n added,\n removed,\n changed,\n unchanged,\n }\n }\n\n /**\n * Group and sort alteration items by type and sort order\n */\n groupAndSortItems(items: AlterationDisplayItem[]): AlterationDisplayItem[] {\n // Define type order: sort, order, hide-column, width, filter (filters last due to variation)\n const typeOrder: Record<string, number> = {\n sort: 1,\n order: 2,\n 'hide-column': 3,\n width: 4,\n filter: 5,\n }\n\n return items.sort((a, b) => {\n // First sort by type\n const typeOrderA = typeOrder[a.type] || 999\n const typeOrderB = typeOrder[b.type] || 999\n\n if (typeOrderA !== typeOrderB) {\n return typeOrderA - typeOrderB\n }\n\n // Then sort by sortOrder within the same type\n const sortOrderA = a.sortOrder || 0\n const sortOrderB = b.sortOrder || 0\n\n if (sortOrderA !== sortOrderB) {\n return sortOrderA - sortOrderB\n }\n\n // Finally sort by id for consistent ordering\n return a.id.localeCompare(b.id)\n })\n }\n\n /**\n * Get a user-friendly type display name\n */\n getTypeDisplayName(type: string): string {\n const typeNames: Record<string, string> = {\n sort: 'Sort',\n order: 'Order',\n 'hide-column': 'Visibility',\n width: 'Width',\n filter: 'Filter',\n }\n return typeNames[type] || type\n }\n\n /**\n * Get an icon name for the alteration type (FontAwesome icon names)\n */\n getTypeIconName(type: string): string {\n const typeIcons: Record<string, string> = {\n sort: 'sort',\n order: 'arrows-alt',\n 'hide-column': 'eye-slash',\n width: 'arrows-alt-h',\n filter: 'filter',\n }\n return typeIcons[type] || 'cog'\n }\n\n private _areItemsEqual(\n item1: AlterationDisplayItem,\n item2: AlterationDisplayItem,\n ): boolean {\n // Compare all properties except sortOrder (which shouldn't affect equality)\n return (\n item1.id === item2.id &&\n item1.type === item2.type &&\n item1.summary === item2.summary &&\n this._areArraysEqual(item1.details || [], item2.details || [])\n )\n }\n\n private _areArraysEqual(arr1: string[], arr2: string[]): boolean {\n if (arr1.length !== arr2.length) {\n return false\n }\n\n return arr1.every((item, index) => item === arr2[index])\n }\n}\n","import { Component, Input } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport {\n faSort,\n faArrowsAlt,\n faEyeSlash,\n faArrowsAltH,\n faFilter,\n faCog,\n} from '@fortawesome/free-solid-svg-icons'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\n\nimport {\n AlterationDisplayItem,\n AlterationVisualState,\n} from '../models/alteration-display.model'\nimport { AlterationDisplayService } from '../services/alteration-display.service'\n\n@Component({\n selector: 'seam-alteration-item',\n standalone: true,\n imports: [CommonModule, TheSeamIconModule],\n templateUrl: './alteration-item.component.html',\n styleUrls: ['./alteration-item.component.scss'],\n})\nexport class AlterationItemComponent {\n @Input() item!: AlterationDisplayItem\n @Input() compact = true\n\n // FontAwesome icons\n private readonly typeIcons = {\n sort: faSort,\n order: faArrowsAlt,\n 'hide-column': faEyeSlash,\n width: faArrowsAltH,\n filter: faFilter,\n default: faCog,\n }\n\n constructor(private alterationDisplayService: AlterationDisplayService) {}\n\n get typeDisplayName(): string {\n return this.alterationDisplayService.getTypeDisplayName(this.item.type)\n }\n\n get typeIcon() {\n return (\n this.typeIcons[this.item.type as keyof typeof this.typeIcons] ||\n this.typeIcons.default\n )\n }\n\n get borderClass(): string {\n switch (this.item.diffState) {\n case 'added':\n return 'border-success'\n case 'removed':\n return 'border-danger'\n case 'changed':\n return 'border-warning'\n default:\n return ''\n }\n }\n\n get badgeClass(): string {\n switch (this.item.type) {\n case 'sort':\n return 'badge-primary'\n case 'order':\n return 'badge-info'\n case 'hide-column':\n return 'badge-secondary'\n case 'width':\n return 'badge-dark'\n case 'filter':\n return 'badge-warning'\n default:\n return 'badge-secondary'\n }\n }\n}\n","<div\n class=\"card card-body py-2 px-3 mb-2\"\n [class]=\"borderClass\"\n [attr.data-testid]=\"'alteration-item-' + item.id\"\n>\n <div class=\"d-flex align-items-center\">\n <!-- Type badge -->\n <span\n class=\"badge mr-2\"\n [class]=\"badgeClass\"\n [attr.data-testid]=\"'alteration-type-' + item.type\"\n >\n {{ typeDisplayName }}\n </span>\n\n <!-- Type icon -->\n <seam-icon\n [icon]=\"typeIcon\"\n class=\"mr-2 text-muted\"\n [attr.data-testid]=\"'alteration-icon-' + item.type\"\n >\n </seam-icon>\n\n <!-- Summary text -->\n <span class=\"flex-grow-1\" [attr.data-testid]=\"'alteration-summary'\">\n {{ item.summary }}\n </span>\n\n <!-- Diff state indicator (optional visual indicator) -->\n <span\n *ngIf=\"item.diffState\"\n class=\"ml-2 small text-muted\"\n [attr.data-testid]=\"'alteration-diff-state'\"\n >\n <ng-container [ngSwitch]=\"item.diffState\">\n <span *ngSwitchCase=\"'added'\" class=\"text-success\">+</span>\n <span *ngSwitchCase=\"'removed'\" class=\"text-danger\">-</span>\n <span *ngSwitchCase=\"'changed'\" class=\"text-warning\">~</span>\n </ng-container>\n </span>\n </div>\n\n <!-- Expanded details (for future enhancement) -->\n <div\n *ngIf=\"!compact && item.details && item.details.length > 0\"\n class=\"mt-2 pt-2 border-top\"\n >\n <ul class=\"list-unstyled mb-0 small text-muted\">\n <li\n *ngFor=\"let detail of item.details\"\n [attr.data-testid]=\"'alteration-detail'\"\n >\n {{ detail }}\n </li>\n </ul>\n </div>\n</div>\n","import { Component, Input } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport {\n AlterationDisplayItem,\n AlterationVisualState,\n} from '../models/alteration-display.model'\nimport { AlterationDisplayService } from '../services/alteration-display.service'\nimport { AlterationItemComponent } from '../alteration-item/alteration-item.component'\n\n@Component({\n selector: 'seam-alterations-list',\n standalone: true,\n imports: [CommonModule, AlterationItemComponent],\n templateUrl: './alterations-list.component.html',\n styleUrls: ['./alterations-list.component.scss'],\n})\nexport class AlterationsListComponent {\n @Input() items: AlterationDisplayItem[] = []\n @Input() title?: string\n @Input() diffState?: 'current' | 'pending'\n @Input() groupByType = true\n @Input() sortWithinType = true\n @Input() compact = true\n\n constructor(private alterationDisplayService: AlterationDisplayService) {}\n\n get sortedItems(): AlterationDisplayItem[] {\n if (!this.groupByType && !this.sortWithinType) {\n return this.items\n }\n\n return this.alterationDisplayService.groupAndSortItems(this.items)\n }\n\n get hasItems(): boolean {\n return this.items && this.items.length > 0\n }\n\n trackByItemId(index: number, item: AlterationDisplayItem): string {\n return item.id\n }\n}\n","<div\n class=\"alterations-list\"\n [attr.data-testid]=\"'alterations-list-' + (diffState || 'default')\"\n>\n <!-- Title header -->\n <div *ngIf=\"title\" class=\"mb-3\">\n <h6\n class=\"mb-1 text-muted font-weight-bold\"\n [attr.data-testid]=\"'alterations-list-title'\"\n >\n {{ title }}\n </h6>\n <small class=\"text-muted\" [attr.data-testid]=\"'alterations-list-count'\">\n {{ items.length }} alteration{{ items.length === 1 ? '' : 's' }}\n </small>\n </div>\n\n <!-- Items list -->\n <div *ngIf=\"hasItems; else emptyState\" class=\"alterations-items\">\n <seam-alteration-item\n *ngFor=\"let item of sortedItems; trackBy: trackByItemId\"\n [item]=\"item\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'list-item-' + item.id\"\n >\n </seam-alteration-item>\n </div>\n\n <!-- Empty state -->\n <ng-template #emptyState>\n <div\n class=\"text-center py-4 text-muted\"\n [attr.data-testid]=\"'alterations-list-empty'\"\n >\n <p class=\"mb-0\">No alterations</p>\n <small>No changes have been made to the table configuration.</small>\n </div>\n </ng-template>\n</div>\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { Subject, takeUntil } from 'rxjs'\n\nimport { TheSeamLayoutService } from '@theseam/ui-common/layout'\n\nimport {\n AlterationDisplayItem,\n AlterationDiffState,\n AlterationDiffMode,\n AlterationVisualState,\n} from '../models/alteration-display.model'\nimport { AlterationDisplayService } from '../services/alteration-display.service'\nimport { AlterationsListComponent } from '../alterations-list/alterations-list.component'\n\n@Component({\n selector: 'seam-alterations-diff',\n standalone: true,\n imports: [CommonModule, AlterationsListComponent],\n templateUrl: './alterations-diff.component.html',\n styleUrls: ['./alterations-diff.component.scss'],\n})\nexport class AlterationsDiffComponent implements OnInit, OnDestroy {\n @Input() currentItems: AlterationDisplayItem[] = []\n @Input() pendingItems: AlterationDisplayItem[] = []\n @Input() diffMode: AlterationDiffMode = 'auto'\n @Input() initialDiffState?: AlterationDiffState\n @Input() compact = true\n\n isMobile = false\n diffState: AlterationDiffState | null = null\n\n private destroy$ = new Subject<void>()\n\n constructor(\n private layoutService: TheSeamLayoutService,\n private alterationDisplayService: AlterationDisplayService,\n ) {}\n\n ngOnInit(): void {\n // Subscribe to mobile breakpoint changes\n this.layoutService\n .observe('lt-md')\n .pipe(takeUntil(this.destroy$))\n .subscribe((isMobile) => {\n this.isMobile = isMobile\n })\n\n // Calculate diff state\n this.calculateDiffState()\n }\n\n ngOnDestroy(): void {\n this.destroy$.next()\n this.destroy$.complete()\n }\n\n get currentItemsWithDiffState(): AlterationDisplayItem[] {\n if (!this.diffState) {\n return this.currentItems\n }\n\n return this.currentItems.map((item) => ({\n ...item,\n _diffState: this.getItemDiffState(item, 'current'),\n }))\n }\n\n get pendingItemsWithDiffState(): AlterationDisplayItem[] {\n if (!this.diffState) {\n return this.pendingItems\n }\n\n return this.pendingItems.map((item) => ({\n ...item,\n _diffState: this.getItemDiffState(item, 'pending'),\n }))\n }\n\n get hasDifferences(): boolean {\n if (!this.diffState) {\n return false\n }\n\n return (\n this.diffState.added.length > 0 ||\n this.diffState.removed.length > 0 ||\n this.diffState.changed.length > 0\n )\n }\n\n get differenceSummary(): string {\n if (!this.diffState) {\n return 'No differences calculated'\n }\n\n const parts: string[] = []\n\n if (this.diffState.added.length > 0) {\n parts.push(`${this.diffState.added.length} added`)\n }\n\n if (this.diffState.removed.length > 0) {\n parts.push(`${this.diffState.removed.length} removed`)\n }\n\n if (this.diffState.changed.length > 0) {\n parts.push(`${this.diffState.changed.length} changed`)\n }\n\n if (parts.length === 0) {\n return 'No differences'\n }\n\n return parts.join(', ')\n }\n\n private calculateDiffState(): void {\n if (this.diffMode === 'manual' && this.initialDiffState) {\n this.diffState = this.initialDiffState\n } else {\n this.diffState = this.alterationDisplayService.calculateDiff(\n this.currentItems,\n this.pendingItems,\n )\n }\n }\n\n private getItemDiffState(\n item: AlterationDisplayItem,\n context: 'current' | 'pending',\n ): AlterationVisualState | undefined {\n if (!this.diffState) {\n return undefined\n }\n\n const itemId = item.id\n\n if (this.diffState.added.some((addedItem) => addedItem.id === itemId)) {\n return context === 'pending' ? 'added' : undefined\n }\n\n if (\n this.diffState.removed.some((removedItem) => removedItem.id === itemId)\n ) {\n return context === 'current' ? 'removed' : undefined\n }\n\n if (\n this.diffState.changed.some((changedItem) => changedItem.id === itemId)\n ) {\n return 'changed'\n }\n\n return 'unchanged'\n }\n}\n","<div class=\"alterations-diff\" [attr.data-testid]=\"'alterations-diff'\">\n <!-- Diff summary header -->\n <div\n *ngIf=\"hasDifferences\"\n class=\"mb-3 p-2 bg-light border rounded\"\n [attr.data-testid]=\"'diff-summary'\"\n >\n <small class=\"text-muted font-weight-bold\">\n Changes: {{ differenceSummary }}\n </small>\n </div>\n\n <!-- Desktop layout: Side-by-side -->\n <div\n *ngIf=\"!isMobile; else mobileLayout\"\n class=\"row\"\n [attr.data-testid]=\"'desktop-layout'\"\n >\n <!-- Current alterations column -->\n <div class=\"col-md-6 pr-md-2\">\n <seam-alterations-list\n [items]=\"currentItems\"\n [title]=\"'Current Alterations'\"\n [diffState]=\"'current'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'current-alterations-list'\"\n >\n </seam-alterations-list>\n </div>\n\n <!-- Pending alterations column -->\n <div class=\"col-md-6 pl-md-2\">\n <seam-alterations-list\n [items]=\"pendingItems\"\n [title]=\"'Pending Alterations'\"\n [diffState]=\"'pending'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'pending-alterations-list'\"\n >\n </seam-alterations-list>\n </div>\n </div>\n\n <!-- Mobile layout: Stacked -->\n <ng-template #mobileLayout>\n <div class=\"mobile-layout\" [attr.data-testid]=\"'mobile-layout'\">\n <!-- Current alterations -->\n <div class=\"mb-4\">\n <seam-alterations-list\n [items]=\"currentItems\"\n [title]=\"'Current Alterations'\"\n [diffState]=\"'current'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'current-alterations-list-mobile'\"\n >\n </seam-alterations-list>\n </div>\n\n <!-- Pending alterations -->\n <div>\n <seam-alterations-list\n [items]=\"pendingItems\"\n [title]=\"'Pending Alterations'\"\n [diffState]=\"'pending'\"\n [compact]=\"compact\"\n [attr.data-testid]=\"'pending-alterations-list-mobile'\"\n >\n </seam-alterations-list>\n </div>\n </div>\n </ng-template>\n</div>\n","import { ComponentHarness } from '@angular/cdk/testing'\n\nexport class AlterationItemHarness extends ComponentHarness {\n static hostSelector = 'seam-alteration-item'\n\n private _getCard = this.locatorFor('.card')\n private _getTypeBadge = this.locatorFor('[data-testid^=\"alteration-type-\"]')\n private _getIcon = this.locatorFor('[data-testid^=\"alteration-icon-\"]')\n private _getSummary = this.locatorFor('[data-testid=\"alteration-summary\"]')\n private _getDiffState = this.locatorForOptional(\n '[data-testid=\"alteration-diff-state\"]',\n )\n private _getDetails = this.locatorForAll('[data-testid=\"alteration-detail\"]')\n\n async getType(): Promise<string> {\n const badge = await this._getTypeBadge()\n const testId = await badge.getAttribute('data-testid')\n return testId?.replace('alteration-type-', '') || ''\n }\n\n async getTypeDisplayName(): Promise<string> {\n const badge = await this._getTypeBadge()\n return badge.text()\n }\n\n async getSummary(): Promise<string> {\n const summary = await this._getSummary()\n return summary.text()\n }\n\n async getDiffState(): Promise<string | null> {\n const diffElement = await this._getDiffState()\n if (!diffElement) {\n return null\n }\n const text = await diffElement.text()\n if (text.includes('+')) return 'added'\n if (text.includes('-')) return 'removed'\n if (text.includes('~')) return 'changed'\n return 'unchanged'\n }\n\n async getDetails(): Promise<string[]> {\n const detailElements = await this._getDetails()\n return Promise.all(detailElements.map((el) => el.text()))\n }\n\n async hasDetails(): Promise<boolean> {\n const details = await this._getDetails()\n return details.length > 0\n }\n\n async hasBorderSuccess(): Promise<boolean> {\n const card = await this._getCard()\n const classes = await card.getAttribute('class')\n return classes?.includes('border-success') || false\n }\n\n async hasBorderDanger(): Promise<boolean> {\n const card = await this._getCard()\n const classes = await card.getAttribute('class')\n return classes?.includes('border-danger') || false\n }\n\n async hasBorderWarning(): Promise<boolean> {\n const card = await this._getCard()\n const classes = await card.getAttribute('class')\n return classes?.includes('border-warning') || false\n }\n\n async getBadgeClass(): Promise<string> {\n const badge = await this._getTypeBadge()\n const classes = await badge.getAttribute('class')\n const badgeClasses =\n classes?.split(' ').filter((cls) => cls.startsWith('badge-')) || []\n return badgeClasses[0] || ''\n }\n\n async isVisible(): Promise<boolean> {\n try {\n await this._getCard()\n return true\n } catch {\n return false\n }\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing'\nimport { AlterationItemHarness } from './alteration-item.harness'\n\nexport class AlterationsListHarness extends ComponentHarness {\n static hostSelector = 'seam-alterations-list'\n\n private _getTitle = this.locatorForOptional(\n '[data-testid=\"alterations-list-title\"]',\n )\n private _getCount = this.locatorForOptional(\n '[data-testid=\"alterations-list-count\"]',\n )\n private _getEmptyState = this.locatorForOptional(\n '[data-testid=\"alterations-list-empty\"]',\n )\n private _getItems = this.locatorForAll(AlterationItemHarness)\n\n async getTitle(): Promise<string | null> {\n const titleElement = await this._getTitle()\n return titleElement ? titleElement.text() : null\n }\n\n async getCount(): Promise<string | null> {\n const countElement = await this._getCount()\n return countElement ? countElement.text() : null\n }\n\n async hasEmptyState(): Promise<boolean> {\n const emptyState = await this._getEmptyState()\n return emptyState !== null\n }\n\n async getEmptyStateText(): Promise<string | null> {\n const emptyState = await this._getEmptyState()\n return emptyState ? emptyState.text() : null\n }\n\n async getItems(): Promise<AlterationItemHarness[]> {\n return this._getItems()\n }\n\n async getItemCount(): Promise<number> {\n const items = await this.getItems()\n return items.length\n }\n\n async getItemByType(type: string): Promise<AlterationItemHarness | null> {\n const items = await this.getItems()\n for (const item of items) {\n const itemType = await item.getType()\n if (itemType === type) {\n return item\n }\n }\n return null\n }\n\n async getItemTypes(): Promise<string[]> {\n const items = await this.getItems()\n const types: string[] = []\n for (const item of items) {\n const type = await item.getType()\n types.push(type)\n }\n return types\n }\n\n async hasItems(): Promise<boolean> {\n const items = await this.getItems()\n return items.length > 0\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing'\nimport { AlterationsListHarness } from './alterations-list.harness'\n\nexport class AlterationsDiffHarness extends ComponentHarness {\n static hostSelector = 'seam-alterations-diff'\n\n private _getDiffSummary = this.locatorForOptional(\n '[data-testid=\"diff-summary\"]',\n )\n private _getCurrentList = this.locatorForOptional(\n '[data-testid=\"current-alterations-list\"]',\n )\n private _getPendingList = this.locatorForOptional(\n '[data-testid=\"pending-alterations-list\"]',\n )\n private _getCurrentListMobile = this.locatorForOptional(\n '[data-testid=\"current-alterations-list-mobile\"]',\n )\n private _getPendingListMobile = this.locatorForOptional(\n '[data-testid=\"pending-alterations-list-mobile\"]',\n )\n private _getDesktopLayout = this.locatorForOptional(\n '[data-testid=\"desktop-layout\"]',\n )\n private _getMobileLayout = this.locatorForOptional(\n '[data-testid=\"mobile-layout\"]',\n )\n\n async hasDiffSummary(): Promise<boolean> {\n const summary = await this._getDiffSummary()\n return summary !== null\n }\n\n async getDiffSummaryText(): Promise<string | null> {\n const summary = await this._getDiffSummary()\n return summary ? summary.text() : null\n }\n\n async isDesktopLayout(): Promise<boolean> {\n const desktop = await this._getDesktopLayout()\n return desktop !== null\n }\n\n async isMobileLayout(): Promise<boolean> {\n const mobile = await this._getMobileLayout()\n return mobile !== null\n }\n\n async getCurrentList(): Promise<AlterationsListHarness | null> {\n try {\n // Try desktop layout first\n return await this.locatorFor(AlterationsListHarness)()\n } catch {\n return null\n }\n }\n\n async getPendingList(): Promise<AlterationsListHarness | null> {\n try {\n // Try to get the second list (pending)\n const lists = await this.locatorForAll(AlterationsListHarness)()\n return lists.length > 1 ? lists[1] : null\n } catch {\n return null\n }\n }\n\n async getCurrentItemCount(): Promise<number> {\n const currentList = await this.getCurrentList()\n return currentList ? currentList.getItemCount() : 0\n }\n\n async getPendingItemCount(): Promise<number> {\n const pendingList = await this.getPendingList()\n return pendingList ? pendingList.getItemCount() : 0\n }\n\n async hasCurrentEmptyState(): Promise<boolean> {\n const currentList = await this.getCurrentList()\n return currentList ? currentList.hasEmptyState() : false\n }\n\n async hasPendingEmptyState(): Promise<boolean> {\n const pendingList = await this.getPendingList()\n return pendingList ? pendingList.hasEmptyState() : false\n }\n}\n","/*\n * Public API Surface of datatable-alterations-display testing\n */\n\nexport * from './alteration-item.harness'\nexport * from './alterations-list.harness'\nexport * from './alterations-diff.harness'\n","/*\n * Public API Surface of datatable-alterations-display\n */\n\n// Models\nexport * from './models/alteration-display.model'\n\n// Services\nexport * from './services/alteration-display.service'\n\n// Components\nexport * from './alteration-item/alteration-item.component'\nexport * from './alterations-list/alterations-list.component'\nexport * from './alterations-diff/alterations-diff.component'\n\nexport * from './testing'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AlterationDisplayService","i2.AlterationDisplayService"],"mappings":"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"}
|