@theseam/ui-common 2.0.0 → 2.0.1-beta.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/ai/index.d.ts +363 -1
  2. package/carousel/index.d.ts +21 -1
  3. package/data-filters/index.d.ts +26 -7
  4. package/datatable/index.d.ts +299 -3
  5. package/datatable-alterations-display/index.d.ts +61 -1
  6. package/fesm2022/theseam-ui-common-ai.mjs +1368 -1
  7. package/fesm2022/theseam-ui-common-ai.mjs.map +1 -1
  8. package/fesm2022/theseam-ui-common-carousel.mjs +48 -1
  9. package/fesm2022/theseam-ui-common-carousel.mjs.map +1 -1
  10. package/fesm2022/theseam-ui-common-data-filters.mjs +90 -16
  11. package/fesm2022/theseam-ui-common-data-filters.mjs.map +1 -1
  12. package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs +197 -1
  13. package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs.map +1 -1
  14. package/fesm2022/theseam-ui-common-datatable.mjs +668 -4
  15. package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
  16. package/fesm2022/theseam-ui-common-file-input.mjs +156 -1
  17. package/fesm2022/theseam-ui-common-file-input.mjs.map +1 -1
  18. package/fesm2022/theseam-ui-common-icon.mjs +72 -1
  19. package/fesm2022/theseam-ui-common-icon.mjs.map +1 -1
  20. package/fesm2022/theseam-ui-common-table-cell-types.mjs +4 -0
  21. package/fesm2022/theseam-ui-common-table-cell-types.mjs.map +1 -1
  22. package/fesm2022/theseam-ui-common-tooltip.mjs +110 -1
  23. package/fesm2022/theseam-ui-common-tooltip.mjs.map +1 -1
  24. package/fesm2022/theseam-ui-common-widget.mjs +23 -1
  25. package/fesm2022/theseam-ui-common-widget.mjs.map +1 -1
  26. package/file-input/index.d.ts +78 -1
  27. package/icon/index.d.ts +33 -3
  28. package/package.json +3 -3
  29. package/tooltip/index.d.ts +40 -2
  30. package/widget/index.d.ts +17 -2
@@ -8,6 +8,7 @@ import { Subject, BehaviorSubject, fromEvent } from 'rxjs';
8
8
  import { filter, takeUntil } from 'rxjs/operators';
9
9
  import { trigger, transition, style, animate } from '@angular/animations';
10
10
  import { NgIf, NgClass, NgTemplateOutlet, CommonModule } from '@angular/common';
11
+ import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
11
12
 
12
13
  class TheSeamTooltipComponent {
13
14
  content = null;
@@ -743,9 +744,117 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
743
744
  }]
744
745
  }] });
745
746
 
747
+ /**
748
+ * Harness for interacting with tooltip directives in tests
749
+ */
750
+ class TheSeamTooltipHarness extends ComponentHarness {
751
+ static hostSelector = '[seamTooltip]';
752
+ /**
753
+ * Gets a `HarnessPredicate` that can be used to search for a tooltip with specific attributes
754
+ */
755
+ static with(options = {}) {
756
+ return new HarnessPredicate(TheSeamTooltipHarness, options);
757
+ }
758
+ /** Hovers over the element to show the tooltip */
759
+ async hover() {
760
+ return (await this.host()).hover();
761
+ }
762
+ /** Moves the mouse away from the element to hide the tooltip */
763
+ async mouseAway() {
764
+ return (await this.host()).mouseAway();
765
+ }
766
+ /** Focuses the element to show the tooltip */
767
+ async focus() {
768
+ return (await this.host()).focus();
769
+ }
770
+ /** Blurs the element to hide the tooltip */
771
+ async blur() {
772
+ return (await this.host()).blur();
773
+ }
774
+ /** Clicks the element */
775
+ async click() {
776
+ return (await this.host()).click();
777
+ }
778
+ /** Gets whether the tooltip is currently visible */
779
+ async isTooltipVisible() {
780
+ const tooltipId = await this._getTooltipId();
781
+ if (!tooltipId) {
782
+ return false;
783
+ }
784
+ const tooltip = await this.documentRootLocatorFactory().locatorForOptional(`#${tooltipId}.tooltip.show`)();
785
+ return tooltip !== null;
786
+ }
787
+ /** Gets the visible tooltip text content */
788
+ async getVisibleTooltipText() {
789
+ const tooltipId = await this._getTooltipId();
790
+ if (!tooltipId) {
791
+ return null;
792
+ }
793
+ const tooltipInner = await this.documentRootLocatorFactory().locatorForOptional(`#${tooltipId} .tooltip-inner`)();
794
+ if (!tooltipInner) {
795
+ return null;
796
+ }
797
+ return tooltipInner.text();
798
+ }
799
+ /** Gets the visible tooltip classes */
800
+ async getVisibleTooltipClasses() {
801
+ const tooltipId = await this._getTooltipId();
802
+ if (!tooltipId) {
803
+ return [];
804
+ }
805
+ const tooltip = await this.documentRootLocatorFactory().locatorForOptional(`#${tooltipId}.tooltip.show`)();
806
+ if (!tooltip) {
807
+ return [];
808
+ }
809
+ const classAttr = await tooltip.getAttribute('class');
810
+ return classAttr ? classAttr.split(' ').filter((c) => c.trim()) : [];
811
+ }
812
+ /** Gets the tooltip ID from the aria-describedby attribute */
813
+ async _getTooltipId() {
814
+ return (await this.host()).getAttribute('aria-describedby');
815
+ }
816
+ /** Waits for the tooltip to appear */
817
+ async waitForTooltipToShow(timeout = 1000) {
818
+ const start = Date.now();
819
+ while (Date.now() - start < timeout) {
820
+ if (await this.isTooltipVisible()) {
821
+ return;
822
+ }
823
+ await new Promise((resolve) => setTimeout(resolve, 50));
824
+ }
825
+ throw new Error(`Tooltip did not appear within ${timeout}ms`);
826
+ }
827
+ /** Waits for the tooltip to disappear */
828
+ async waitForTooltipToHide(timeout = 1000) {
829
+ const start = Date.now();
830
+ while (Date.now() - start < timeout) {
831
+ if (!(await this.isTooltipVisible())) {
832
+ return;
833
+ }
834
+ await new Promise((resolve) => setTimeout(resolve, 50));
835
+ }
836
+ throw new Error(`Tooltip did not hide within ${timeout}ms`);
837
+ }
838
+ async getTriggerDimensions() {
839
+ const host = await this.host();
840
+ return host.getDimensions();
841
+ }
842
+ async getTooltipDimensions() {
843
+ const tooltipId = await this._getTooltipId();
844
+ if (!tooltipId) {
845
+ return null;
846
+ }
847
+ const tooltip = await this.documentRootLocatorFactory().locatorForOptional(`#${tooltipId}.tooltip.show`)();
848
+ if (!tooltip) {
849
+ return null;
850
+ }
851
+ return tooltip.getDimensions();
852
+ }
853
+ }
854
+
746
855
  /**
747
856
  * Generated bundle index. Do not edit.
748
857
  */
749
858
 
750
- export { TheSeamTooltipComponent, TheSeamTooltipDirective, TheSeamTooltipModule };
859
+ export { TheSeamTooltipComponent, TheSeamTooltipDirective, TheSeamTooltipHarness, TheSeamTooltipModule };
751
860
  //# sourceMappingURL=theseam-ui-common-tooltip.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-tooltip.mjs","sources":["../../../projects/ui-common/tooltip/tooltip.component.ts","../../../projects/ui-common/tooltip/tooltip.component.html","../../../projects/ui-common/tooltip/tooltip.directive.ts","../../../projects/ui-common/tooltip/tooltip.module.ts","../../../projects/ui-common/tooltip/theseam-ui-common-tooltip.ts"],"sourcesContent":["import {\n AnimationEvent,\n transition,\n trigger,\n style,\n animate,\n} from '@angular/animations'\nimport { NgClass, NgIf, NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\n\nexport type TheSeamTooltipPlacement =\n | 'top'\n | 'top-left'\n | 'top-right'\n | 'bottom'\n | 'bottom-left'\n | 'bottom-right'\n | 'left'\n | 'left-top'\n | 'left-bottom'\n | 'right'\n | 'right-top'\n | 'right-bottom'\n | 'auto'\n\n@Component({\n selector: 'seam-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n animations: [\n trigger('fadeInOut', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('150ms ease-out', style({ opacity: 0.9 })),\n ]),\n transition(':leave', [\n style({ opacity: 0.9 }),\n animate('150ms ease-in', style({ opacity: 0 })),\n ]),\n ]),\n ],\n host: {\n class: 'tooltip show',\n '[id]': 'tooltipId',\n '[@fadeInOut]': '',\n '(@fadeInOut.start)': '_onAnimationStart($event)',\n '(@fadeInOut.done)': '_onAnimationDone($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgIf, NgClass, NgTemplateOutlet],\n})\nexport class TheSeamTooltipComponent implements OnDestroy {\n @Input() content: string | TemplateRef<any> | null = null\n @Input() tooltipClass?: string\n @Input() context?: any\n @Input() placement: TheSeamTooltipPlacement = 'top'\n @Input() actualPlacement?: TheSeamTooltipPlacement // The actual placement determined by CDK Overlay\n @Input() tooltipId?: string\n @Input() triggerElement?: HTMLElement\n\n /** A subject emitting after the tooltip enters the view. */\n readonly _afterEnter = new Subject<void>()\n\n /** A subject emitting after the tooltip exits the view. */\n readonly _afterExit = new Subject<void>()\n\n @HostBinding('class')\n get hostClasses(): string {\n const baseClass = 'tooltip show'\n const placementClass = this._getPlacementClass()\n this._setArrowPosition()\n return `${baseClass} ${placementClass}`\n }\n\n @ViewChild('inner', { static: true }) innerElement!: ElementRef\n @ViewChild('arrow', { static: true }) arrowElement!: ElementRef\n\n ngOnDestroy() {\n this._afterEnter.complete()\n this._afterExit.complete()\n }\n\n get isStringContent(): boolean {\n return typeof this.content === 'string'\n }\n\n get isTemplateContent(): boolean {\n return this.content instanceof TemplateRef\n }\n\n get templateContent(): TemplateRef<any> | null {\n return this.isTemplateContent ? (this.content as TemplateRef<any>) : null\n }\n\n private _getPlacementClass(): string {\n // Use actualPlacement if available, otherwise fall back to initial placement\n const effectivePlacement = this.actualPlacement || this.placement\n\n switch (effectivePlacement) {\n case 'top':\n case 'top-left':\n case 'top-right':\n return 'bs-tooltip-top'\n case 'bottom':\n case 'bottom-left':\n case 'bottom-right':\n return 'bs-tooltip-bottom'\n case 'left':\n case 'left-top':\n case 'left-bottom':\n return 'bs-tooltip-left'\n case 'right':\n case 'right-top':\n case 'right-bottom':\n return 'bs-tooltip-right'\n case 'auto':\n return 'bs-tooltip-auto'\n default:\n return 'bs-tooltip-top'\n }\n }\n\n private _setArrowPosition() {\n if (!this.innerElement || !this.arrowElement || !this.triggerElement) {\n return\n }\n\n // Use actualPlacement if available, otherwise fall back to initial placement\n const effectivePlacement = this.actualPlacement || this.placement\n const paddingOffset = 8 // Default padding offset for arrow positioning\n const minDimension = 50 // Minimum tooltip width/height to use trigger-aligned positioning\n\n const triggerRect = this.triggerElement.getBoundingClientRect()\n const tooltipRect: DOMRect =\n this.innerElement.nativeElement.getBoundingClientRect()\n const arrowRect: DOMRect =\n this.arrowElement.nativeElement.getBoundingClientRect()\n\n // Default arrow offset (8px padding + half arrow size)\n const defaultArrowOffset =\n paddingOffset +\n (effectivePlacement.startsWith('top') ||\n effectivePlacement.startsWith('bottom')\n ? arrowRect.width / 2\n : arrowRect.height / 2)\n\n if (\n effectivePlacement.startsWith('top') ||\n effectivePlacement.startsWith('bottom')\n ) {\n // Check if tooltip is too narrow for trigger-aligned positioning\n if (tooltipRect.width < minDimension) {\n const arrowLeft = (tooltipRect.width - arrowRect.width) / 2\n this.arrowElement.nativeElement.style.left = `${arrowLeft}px`\n return\n }\n\n // Horizontal arrow positioning for top-* and bottom-* placements\n const triggerCenter = triggerRect.left + triggerRect.width / 2\n const adjustedArrowLeft =\n triggerCenter - tooltipRect.left - arrowRect.width / 2\n const arrowCenter =\n tooltipRect.left + adjustedArrowLeft + arrowRect.width / 2\n\n // If arrow's center is outside trigger's horizontal bounds, use default\n if (arrowCenter < triggerRect.left || arrowCenter > triggerRect.right) {\n this.arrowElement.nativeElement.style.left = `${defaultArrowOffset}px`\n return\n }\n\n // Ensure arrow's left is within rounded corner bounds\n const maxArrowLeft =\n tooltipRect.width - arrowRect.width - defaultArrowOffset\n const arrowLeft = Math.min(\n maxArrowLeft,\n Math.max(defaultArrowOffset, adjustedArrowLeft),\n )\n\n this.arrowElement.nativeElement.style.left = `${arrowLeft}px`\n } else if (\n effectivePlacement.startsWith('left') ||\n effectivePlacement.startsWith('right')\n ) {\n // Check if tooltip is too short for trigger-aligned positioning\n if (tooltipRect.height < minDimension) {\n const arrowTop = (tooltipRect.height - arrowRect.height) / 2\n this.arrowElement.nativeElement.style.top = `${arrowTop}px`\n return\n }\n\n // Vertical arrow positioning for left-* and right-* placements\n const triggerCenter = triggerRect.top + triggerRect.height / 2\n const adjustedArrowTop =\n triggerCenter - tooltipRect.top - arrowRect.height / 2\n const arrowCenter =\n tooltipRect.top + adjustedArrowTop + arrowRect.height / 2\n\n // If arrow's center is outside trigger's vertical bounds, use default\n if (arrowCenter < triggerRect.top || arrowCenter > triggerRect.bottom) {\n this.arrowElement.nativeElement.style.top = `${defaultArrowOffset}px`\n return\n }\n\n // Ensure arrow's top is within rounded corner bounds\n const maxArrowTop =\n tooltipRect.height - arrowRect.height - defaultArrowOffset\n const arrowTop = Math.min(\n maxArrowTop,\n Math.max(defaultArrowOffset, adjustedArrowTop),\n )\n\n this.arrowElement.nativeElement.style.top = `${arrowTop}px`\n }\n }\n\n /** Emit lifecycle events based on animation `start` callback. */\n _onAnimationStart(event: AnimationEvent) {\n // Animation start handling if needed\n }\n\n /** Emit lifecycle events based on animation `done` callback. */\n _onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'void') {\n this._afterExit.next()\n this._afterExit.complete()\n } else {\n this._afterEnter.next()\n this._afterEnter.complete()\n }\n }\n}\n","<div #inner class=\"tooltip-inner\" [ngClass]=\"tooltipClass\">\n <!-- String content -->\n <span *ngIf=\"isStringContent\">{{ content }}</span>\n\n <!-- Template content -->\n <ng-container *ngIf=\"isTemplateContent\">\n <ng-container\n *ngTemplateOutlet=\"templateContent; context: context\"\n ></ng-container>\n </ng-container>\n</div>\n<div #arrow class=\"arrow\"></div>\n","import {\n coerceBooleanProperty,\n coerceNumberProperty,\n} from '@angular/cdk/coercion'\nimport { ESCAPE } from '@angular/cdk/keycodes'\nimport {\n ConnectionPositionPair,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay'\nimport { ComponentPortal } from '@angular/cdk/portal'\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core'\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs'\nimport { takeUntil, filter } from 'rxjs/operators'\n\nimport {\n TheSeamTooltipComponent,\n TheSeamTooltipPlacement,\n} from './tooltip.component'\n\nexport type TheSeamTooltipTrigger = 'hover' | 'focus' | 'both'\nexport type TheSeamTooltipPlacementInput =\n | TheSeamTooltipPlacement\n | TheSeamTooltipPlacement[]\n | string\n\n/**\n * A custom tooltip directive that replaces \\`ngbTooltip\\` with zero dependencies.\n * Supports both string and template content with full Bootstrap 4.6 compatibility.\n *\n * ## Features\n * - **String & Template Content**: Support for both simple text and complex HTML content\n * - **Multiple Triggers**: Hover, focus, or both\n * - **Flexible Positioning**: 12 placement options with auto-fallback\n * - **Configurable Timing**: Customizable show/hide delays\n * - **Bootstrap Compatible**: Uses Bootstrap 4.6 classes for seamless integration\n * - **Accessibility**: Full ARIA support and keyboard navigation\n * - **Performance**: Lazy creation and proper cleanup\n *\n * ## Migration from ngbTooltip\n * ```typescript\n * // Before\n * <button ngbTooltip=\"Help text\" placement=\"top\" tooltipClass=\"custom\">\n *\n * // After\n * <button seamTooltip=\"Help text\" placement=\"top\" tooltipClass=\"custom\">\n * ```\n */\n@Directive({\n selector: '[seamTooltip]',\n host: {\n '[attr.aria-describedby]': 'tooltipOpen() ? _tooltipId : null',\n },\n exportAs: 'seamTooltip',\n})\nexport class TheSeamTooltipDirective implements OnInit, OnChanges, OnDestroy {\n private readonly _elementRef = inject(ElementRef<HTMLElement>)\n private readonly _viewContainerRef = inject(ViewContainerRef)\n private readonly _overlay = inject(Overlay)\n\n private readonly _ngUnsubscribe = new Subject<void>()\n private readonly _tooltipId = `seam-tooltip-${Math.random().toString(36).slice(2, 11)}`\n\n @Input() seamTooltip: string | TemplateRef<any> | null = null\n\n @Input() tooltipClass?: string\n\n @Input() placement?: TheSeamTooltipPlacementInput | null = 'top'\n\n @Input() container?: string | HTMLElement\n\n @Input()\n get disableTooltip() {\n return this._disableTooltip.value\n }\n set disableTooltip(val: boolean) {\n this._disableTooltip.next(coerceBooleanProperty(val))\n }\n private readonly _disableTooltip = new BehaviorSubject<boolean>(false)\n\n @Input()\n get showDelay() {\n return this._showDelay.value\n }\n set showDelay(val: number) {\n this._showDelay.next(coerceNumberProperty(val, 500))\n }\n private readonly _showDelay = new BehaviorSubject<number>(500)\n\n @Input()\n get hideDelay() {\n return this._hideDelay.value\n }\n set hideDelay(val: number) {\n this._hideDelay.next(coerceNumberProperty(val, 0))\n }\n private readonly _hideDelay = new BehaviorSubject<number>(0)\n\n @Input() trigger: TheSeamTooltipTrigger = 'both'\n\n private _active = false\n private _overlayRef: OverlayRef | null = null\n private _compRef: ComponentRef<TheSeamTooltipComponent> | null = null\n private _showTimeoutId: any = null\n private _hideTimeoutId: any = null\n private _eventListenersSubject = new Subject<void>()\n private _documentKeydownSubject = new Subject<void>()\n\n ngOnInit() {\n this._setupEventListeners()\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Re-setup event listeners if trigger changes\n if (changes['trigger'] && !changes['trigger'].firstChange) {\n // Clear any pending timeouts\n this._clearTimeouts()\n // Close any existing tooltip first\n this._closeTooltip()\n // Re-setup event listeners with new trigger\n this._setupEventListeners()\n }\n }\n\n ngOnDestroy() {\n this._clearTimeouts()\n this._closeTooltip()\n this._eventListenersSubject.next()\n this._eventListenersSubject.complete()\n this._documentKeydownSubject.next()\n this._documentKeydownSubject.complete()\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _setupEventListeners() {\n // Clean up existing event listeners\n this._eventListenersSubject.next()\n this._eventListenersSubject.complete()\n this._eventListenersSubject = new Subject<void>()\n\n const element = this._elementRef.nativeElement\n\n // Mouse events for hover trigger\n if (this.trigger === 'hover' || this.trigger === 'both') {\n fromEvent(element, 'mouseenter')\n .pipe(\n filter(() => !this._disableTooltip.value && !!this.seamTooltip),\n takeUntil(this._eventListenersSubject),\n )\n .subscribe(() => this._scheduleShow())\n\n fromEvent(element, 'mouseleave')\n .pipe(takeUntil(this._eventListenersSubject))\n .subscribe(() => this._scheduleHide())\n }\n\n // Focus events for focus trigger\n if (this.trigger === 'focus' || this.trigger === 'both') {\n fromEvent(element, 'focus')\n .pipe(\n filter(() => !this._disableTooltip.value && !!this.seamTooltip),\n takeUntil(this._eventListenersSubject),\n )\n .subscribe(() => this._scheduleShow())\n\n fromEvent(element, 'blur')\n .pipe(takeUntil(this._eventListenersSubject))\n .subscribe(() => this._scheduleHide())\n }\n }\n\n private _scheduleShow() {\n this._clearTimeouts()\n\n if (this._active) {\n return\n }\n\n this._showTimeoutId = setTimeout(() => {\n this._showTooltip()\n }, this.showDelay)\n }\n\n private _scheduleHide() {\n this._clearTimeouts()\n\n if (!this._active) {\n return\n }\n\n this._hideTimeoutId = setTimeout(() => {\n this._closeTooltip()\n }, this.hideDelay)\n }\n\n private _clearTimeouts() {\n if (this._showTimeoutId) {\n clearTimeout(this._showTimeoutId)\n this._showTimeoutId = null\n }\n if (this._hideTimeoutId) {\n clearTimeout(this._hideTimeoutId)\n this._hideTimeoutId = null\n }\n }\n\n private _showTooltip(): void {\n if (this._active || !this.seamTooltip || this._disableTooltip.value) {\n return\n }\n\n this._active = true\n\n const positionStrategy = this._getOverlayPosition()\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n })\n\n this._compRef = this._overlayRef.attach(\n new ComponentPortal(TheSeamTooltipComponent, this._viewContainerRef),\n )\n\n // Set component properties\n const parsedPlacements = this._parsePlacementInput(this.placement)\n this._compRef.instance.content = this.seamTooltip\n this._compRef.instance.tooltipClass = this.tooltipClass\n this._compRef.instance.placement = parsedPlacements[0] || 'top' // Use first placement for initial display\n this._compRef.instance.tooltipId = this._tooltipId\n this._compRef.instance.triggerElement = this._elementRef.nativeElement\n this._compRef.changeDetectorRef.markForCheck()\n\n // Listen for position changes to update placement class\n positionStrategy.positionChanges\n .pipe(takeUntil(this._ngUnsubscribe))\n .subscribe((positionChange) => {\n if (this._compRef && positionChange.connectionPair) {\n const actualPlacement = this._getPlacementFromConnectionPair(\n positionChange.connectionPair,\n )\n this._compRef.instance.actualPlacement = actualPlacement\n this._compRef.changeDetectorRef.markForCheck()\n }\n })\n\n // Listen for tooltip exit animation\n this._compRef.instance._afterExit\n .pipe(takeUntil(this._ngUnsubscribe))\n .subscribe(() => {\n // Only detach if still attached (defensive check since _closeTooltip may have already detached)\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef.detach()\n }\n // Ensure cleanup happens even if _closeTooltip didn't run\n if (this._active || this._overlayRef || this._compRef) {\n this._resetTooltip()\n }\n })\n\n // Set up document-level Escape key listener\n this._setupDocumentKeydownListener()\n }\n\n private _setupDocumentKeydownListener(): void {\n // Clean up any existing document listener\n this._documentKeydownSubject.next()\n this._documentKeydownSubject.complete()\n this._documentKeydownSubject = new Subject<void>()\n\n // Set up document-level Escape key listener\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter((event) => {\n // Check both keyCode and key for better compatibility\n return (\n (event.keyCode === ESCAPE || event.key === 'Escape') && this._active\n )\n }),\n takeUntil(this._documentKeydownSubject),\n takeUntil(this._ngUnsubscribe),\n )\n .subscribe(() => this._closeTooltip())\n }\n\n private _closeTooltip(): void {\n if (!this._active || !this._compRef) {\n return\n }\n\n // Mark as inactive immediately to prevent new tooltips from being blocked\n this._active = false\n\n // Clean up document listener\n this._documentKeydownSubject.next()\n\n // Immediately clean up for tests (when using NoopAnimationsModule)\n // In real usage, this will be handled by the animation callback\n this._resetTooltip()\n }\n\n private _resetTooltip(): void {\n this._active = false\n\n // Dispose of overlay if it exists and hasn't been disposed already\n if (this._overlayRef) {\n if (this._overlayRef.hasAttached()) {\n this._overlayRef.detach()\n }\n this._overlayRef.dispose()\n this._overlayRef = null\n }\n\n this._compRef = null\n }\n\n public tooltipOpen(): boolean {\n return this._active && this._compRef !== null\n }\n\n private _parsePlacementInput(\n placement?: TheSeamTooltipPlacementInput | null,\n ): TheSeamTooltipPlacement[] {\n if (placement === undefined || placement === null) {\n return ['top'] // Default placement\n }\n\n if (typeof placement === 'string') {\n if (placement === 'auto') {\n return ['auto']\n }\n // Parse space-delimited string\n const placements = placement.split(/\\s+/).filter((p) => p.trim())\n return placements.filter((p) =>\n this._isValidPlacement(p),\n ) as TheSeamTooltipPlacement[]\n }\n\n if (Array.isArray(placement)) {\n return placement.filter((p) => this._isValidPlacement(p))\n }\n\n return [placement]\n }\n\n private _isValidPlacement(\n placement: string,\n ): placement is TheSeamTooltipPlacement {\n const validPlacements: TheSeamTooltipPlacement[] = [\n 'top',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'left-top',\n 'left-bottom',\n 'right',\n 'right-top',\n 'right-bottom',\n 'auto',\n ]\n return validPlacements.includes(placement as TheSeamTooltipPlacement)\n }\n\n private _getOverlayPosition(): FlexibleConnectedPositionStrategy {\n const positions = this._getPositions()\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(true)\n }\n\n private _getPositions(): ConnectionPositionPair[] {\n const parsedPlacements = this._parsePlacementInput(this.placement)\n\n // If 'auto' is specified or no valid placements, return all positions\n if (parsedPlacements.includes('auto') || parsedPlacements.length === 0) {\n return [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ]\n }\n\n // Return positions for specified placements only\n const positions: ConnectionPositionPair[] = []\n\n for (const placement of parsedPlacements) {\n const placementPositions = this._getPositionForPlacement(placement)\n positions.push(...placementPositions)\n }\n\n return positions\n }\n\n private _getPositionForPlacement(\n placement: TheSeamTooltipPlacement,\n ): ConnectionPositionPair[] {\n switch (placement) {\n case 'top':\n return [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n },\n ]\n case 'top-left':\n return [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n case 'top-right':\n return [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]\n case 'bottom':\n return [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n },\n ]\n case 'bottom-left':\n return [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n ]\n case 'bottom-right':\n return [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n ]\n case 'left':\n return [\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ]\n case 'left-top':\n return [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n },\n ]\n case 'left-bottom':\n return [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]\n case 'right':\n return [\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n ]\n case 'right-top':\n return [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n ]\n case 'right-bottom':\n return [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n case 'auto':\n default:\n return [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ]\n }\n }\n\n private _getPlacementFromConnectionPair(\n connectionPair: ConnectionPositionPair,\n ): TheSeamTooltipPlacement {\n const { originX, originY, overlayX, overlayY } = connectionPair\n\n // Top placements (overlay below origin)\n if (originY === 'top' && overlayY === 'bottom') {\n if (originX === 'start' && overlayX === 'start') return 'top-left'\n if (originX === 'end' && overlayX === 'end') return 'top-right'\n if (originX === 'center' && overlayX === 'center') return 'top'\n }\n\n // Bottom placements (overlay above origin)\n if (originY === 'bottom' && overlayY === 'top') {\n if (originX === 'start' && overlayX === 'start') return 'bottom-left'\n if (originX === 'end' && overlayX === 'end') return 'bottom-right'\n if (originX === 'center' && overlayX === 'center') return 'bottom'\n }\n\n // Left placements (overlay to the right of origin)\n if (originX === 'start' && overlayX === 'end') {\n if (originY === 'top' && overlayY === 'top') return 'left-top'\n if (originY === 'bottom' && overlayY === 'bottom') return 'left-bottom'\n if (originY === 'center' && overlayY === 'center') return 'left'\n }\n\n // Right placements (overlay to the left of origin)\n if (originX === 'end' && overlayX === 'start') {\n if (originY === 'top' && overlayY === 'top') return 'right-top'\n if (originY === 'bottom' && overlayY === 'bottom') return 'right-bottom'\n if (originY === 'center' && overlayY === 'center') return 'right'\n }\n\n // Default fallback\n return 'top'\n }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { OverlayModule } from '@angular/cdk/overlay'\n\nimport { TheSeamTooltipComponent } from './tooltip.component'\nimport { TheSeamTooltipDirective } from './tooltip.directive'\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n TheSeamTooltipComponent,\n TheSeamTooltipDirective,\n ],\n exports: [TheSeamTooltipDirective],\n})\nexport class TheSeamTooltipModule {}\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-tooltip.mjs","sources":["../../../projects/ui-common/tooltip/tooltip.component.ts","../../../projects/ui-common/tooltip/tooltip.component.html","../../../projects/ui-common/tooltip/tooltip.directive.ts","../../../projects/ui-common/tooltip/tooltip.module.ts","../../../projects/ui-common/tooltip/testing/tooltip.harness.ts","../../../projects/ui-common/tooltip/theseam-ui-common-tooltip.ts"],"sourcesContent":["import {\n AnimationEvent,\n transition,\n trigger,\n style,\n animate,\n} from '@angular/animations'\nimport { NgClass, NgIf, NgTemplateOutlet } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\n\nexport type TheSeamTooltipPlacement =\n | 'top'\n | 'top-left'\n | 'top-right'\n | 'bottom'\n | 'bottom-left'\n | 'bottom-right'\n | 'left'\n | 'left-top'\n | 'left-bottom'\n | 'right'\n | 'right-top'\n | 'right-bottom'\n | 'auto'\n\n@Component({\n selector: 'seam-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n animations: [\n trigger('fadeInOut', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('150ms ease-out', style({ opacity: 0.9 })),\n ]),\n transition(':leave', [\n style({ opacity: 0.9 }),\n animate('150ms ease-in', style({ opacity: 0 })),\n ]),\n ]),\n ],\n host: {\n class: 'tooltip show',\n '[id]': 'tooltipId',\n '[@fadeInOut]': '',\n '(@fadeInOut.start)': '_onAnimationStart($event)',\n '(@fadeInOut.done)': '_onAnimationDone($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgIf, NgClass, NgTemplateOutlet],\n})\nexport class TheSeamTooltipComponent implements OnDestroy {\n @Input() content: string | TemplateRef<any> | null = null\n @Input() tooltipClass?: string\n @Input() context?: any\n @Input() placement: TheSeamTooltipPlacement = 'top'\n @Input() actualPlacement?: TheSeamTooltipPlacement // The actual placement determined by CDK Overlay\n @Input() tooltipId?: string\n @Input() triggerElement?: HTMLElement\n\n /** A subject emitting after the tooltip enters the view. */\n readonly _afterEnter = new Subject<void>()\n\n /** A subject emitting after the tooltip exits the view. */\n readonly _afterExit = new Subject<void>()\n\n @HostBinding('class')\n get hostClasses(): string {\n const baseClass = 'tooltip show'\n const placementClass = this._getPlacementClass()\n this._setArrowPosition()\n return `${baseClass} ${placementClass}`\n }\n\n @ViewChild('inner', { static: true }) innerElement!: ElementRef\n @ViewChild('arrow', { static: true }) arrowElement!: ElementRef\n\n ngOnDestroy() {\n this._afterEnter.complete()\n this._afterExit.complete()\n }\n\n get isStringContent(): boolean {\n return typeof this.content === 'string'\n }\n\n get isTemplateContent(): boolean {\n return this.content instanceof TemplateRef\n }\n\n get templateContent(): TemplateRef<any> | null {\n return this.isTemplateContent ? (this.content as TemplateRef<any>) : null\n }\n\n private _getPlacementClass(): string {\n // Use actualPlacement if available, otherwise fall back to initial placement\n const effectivePlacement = this.actualPlacement || this.placement\n\n switch (effectivePlacement) {\n case 'top':\n case 'top-left':\n case 'top-right':\n return 'bs-tooltip-top'\n case 'bottom':\n case 'bottom-left':\n case 'bottom-right':\n return 'bs-tooltip-bottom'\n case 'left':\n case 'left-top':\n case 'left-bottom':\n return 'bs-tooltip-left'\n case 'right':\n case 'right-top':\n case 'right-bottom':\n return 'bs-tooltip-right'\n case 'auto':\n return 'bs-tooltip-auto'\n default:\n return 'bs-tooltip-top'\n }\n }\n\n private _setArrowPosition() {\n if (!this.innerElement || !this.arrowElement || !this.triggerElement) {\n return\n }\n\n // Use actualPlacement if available, otherwise fall back to initial placement\n const effectivePlacement = this.actualPlacement || this.placement\n const paddingOffset = 8 // Default padding offset for arrow positioning\n const minDimension = 50 // Minimum tooltip width/height to use trigger-aligned positioning\n\n const triggerRect = this.triggerElement.getBoundingClientRect()\n const tooltipRect: DOMRect =\n this.innerElement.nativeElement.getBoundingClientRect()\n const arrowRect: DOMRect =\n this.arrowElement.nativeElement.getBoundingClientRect()\n\n // Default arrow offset (8px padding + half arrow size)\n const defaultArrowOffset =\n paddingOffset +\n (effectivePlacement.startsWith('top') ||\n effectivePlacement.startsWith('bottom')\n ? arrowRect.width / 2\n : arrowRect.height / 2)\n\n if (\n effectivePlacement.startsWith('top') ||\n effectivePlacement.startsWith('bottom')\n ) {\n // Check if tooltip is too narrow for trigger-aligned positioning\n if (tooltipRect.width < minDimension) {\n const arrowLeft = (tooltipRect.width - arrowRect.width) / 2\n this.arrowElement.nativeElement.style.left = `${arrowLeft}px`\n return\n }\n\n // Horizontal arrow positioning for top-* and bottom-* placements\n const triggerCenter = triggerRect.left + triggerRect.width / 2\n const adjustedArrowLeft =\n triggerCenter - tooltipRect.left - arrowRect.width / 2\n const arrowCenter =\n tooltipRect.left + adjustedArrowLeft + arrowRect.width / 2\n\n // If arrow's center is outside trigger's horizontal bounds, use default\n if (arrowCenter < triggerRect.left || arrowCenter > triggerRect.right) {\n this.arrowElement.nativeElement.style.left = `${defaultArrowOffset}px`\n return\n }\n\n // Ensure arrow's left is within rounded corner bounds\n const maxArrowLeft =\n tooltipRect.width - arrowRect.width - defaultArrowOffset\n const arrowLeft = Math.min(\n maxArrowLeft,\n Math.max(defaultArrowOffset, adjustedArrowLeft),\n )\n\n this.arrowElement.nativeElement.style.left = `${arrowLeft}px`\n } else if (\n effectivePlacement.startsWith('left') ||\n effectivePlacement.startsWith('right')\n ) {\n // Check if tooltip is too short for trigger-aligned positioning\n if (tooltipRect.height < minDimension) {\n const arrowTop = (tooltipRect.height - arrowRect.height) / 2\n this.arrowElement.nativeElement.style.top = `${arrowTop}px`\n return\n }\n\n // Vertical arrow positioning for left-* and right-* placements\n const triggerCenter = triggerRect.top + triggerRect.height / 2\n const adjustedArrowTop =\n triggerCenter - tooltipRect.top - arrowRect.height / 2\n const arrowCenter =\n tooltipRect.top + adjustedArrowTop + arrowRect.height / 2\n\n // If arrow's center is outside trigger's vertical bounds, use default\n if (arrowCenter < triggerRect.top || arrowCenter > triggerRect.bottom) {\n this.arrowElement.nativeElement.style.top = `${defaultArrowOffset}px`\n return\n }\n\n // Ensure arrow's top is within rounded corner bounds\n const maxArrowTop =\n tooltipRect.height - arrowRect.height - defaultArrowOffset\n const arrowTop = Math.min(\n maxArrowTop,\n Math.max(defaultArrowOffset, adjustedArrowTop),\n )\n\n this.arrowElement.nativeElement.style.top = `${arrowTop}px`\n }\n }\n\n /** Emit lifecycle events based on animation `start` callback. */\n _onAnimationStart(event: AnimationEvent) {\n // Animation start handling if needed\n }\n\n /** Emit lifecycle events based on animation `done` callback. */\n _onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'void') {\n this._afterExit.next()\n this._afterExit.complete()\n } else {\n this._afterEnter.next()\n this._afterEnter.complete()\n }\n }\n}\n","<div #inner class=\"tooltip-inner\" [ngClass]=\"tooltipClass\">\n <!-- String content -->\n <span *ngIf=\"isStringContent\">{{ content }}</span>\n\n <!-- Template content -->\n <ng-container *ngIf=\"isTemplateContent\">\n <ng-container\n *ngTemplateOutlet=\"templateContent; context: context\"\n ></ng-container>\n </ng-container>\n</div>\n<div #arrow class=\"arrow\"></div>\n","import {\n coerceBooleanProperty,\n coerceNumberProperty,\n} from '@angular/cdk/coercion'\nimport { ESCAPE } from '@angular/cdk/keycodes'\nimport {\n ConnectionPositionPair,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay'\nimport { ComponentPortal } from '@angular/cdk/portal'\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core'\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs'\nimport { takeUntil, filter } from 'rxjs/operators'\n\nimport {\n TheSeamTooltipComponent,\n TheSeamTooltipPlacement,\n} from './tooltip.component'\n\nexport type TheSeamTooltipTrigger = 'hover' | 'focus' | 'both'\nexport type TheSeamTooltipPlacementInput =\n | TheSeamTooltipPlacement\n | TheSeamTooltipPlacement[]\n | string\n\n/**\n * A custom tooltip directive that replaces \\`ngbTooltip\\` with zero dependencies.\n * Supports both string and template content with full Bootstrap 4.6 compatibility.\n *\n * ## Features\n * - **String & Template Content**: Support for both simple text and complex HTML content\n * - **Multiple Triggers**: Hover, focus, or both\n * - **Flexible Positioning**: 12 placement options with auto-fallback\n * - **Configurable Timing**: Customizable show/hide delays\n * - **Bootstrap Compatible**: Uses Bootstrap 4.6 classes for seamless integration\n * - **Accessibility**: Full ARIA support and keyboard navigation\n * - **Performance**: Lazy creation and proper cleanup\n *\n * ## Migration from ngbTooltip\n * ```typescript\n * // Before\n * <button ngbTooltip=\"Help text\" placement=\"top\" tooltipClass=\"custom\">\n *\n * // After\n * <button seamTooltip=\"Help text\" placement=\"top\" tooltipClass=\"custom\">\n * ```\n */\n@Directive({\n selector: '[seamTooltip]',\n host: {\n '[attr.aria-describedby]': 'tooltipOpen() ? _tooltipId : null',\n },\n exportAs: 'seamTooltip',\n})\nexport class TheSeamTooltipDirective implements OnInit, OnChanges, OnDestroy {\n private readonly _elementRef = inject(ElementRef<HTMLElement>)\n private readonly _viewContainerRef = inject(ViewContainerRef)\n private readonly _overlay = inject(Overlay)\n\n private readonly _ngUnsubscribe = new Subject<void>()\n private readonly _tooltipId = `seam-tooltip-${Math.random().toString(36).slice(2, 11)}`\n\n @Input() seamTooltip: string | TemplateRef<any> | null = null\n\n @Input() tooltipClass?: string\n\n @Input() placement?: TheSeamTooltipPlacementInput | null = 'top'\n\n @Input() container?: string | HTMLElement\n\n @Input()\n get disableTooltip() {\n return this._disableTooltip.value\n }\n set disableTooltip(val: boolean) {\n this._disableTooltip.next(coerceBooleanProperty(val))\n }\n private readonly _disableTooltip = new BehaviorSubject<boolean>(false)\n\n @Input()\n get showDelay() {\n return this._showDelay.value\n }\n set showDelay(val: number) {\n this._showDelay.next(coerceNumberProperty(val, 500))\n }\n private readonly _showDelay = new BehaviorSubject<number>(500)\n\n @Input()\n get hideDelay() {\n return this._hideDelay.value\n }\n set hideDelay(val: number) {\n this._hideDelay.next(coerceNumberProperty(val, 0))\n }\n private readonly _hideDelay = new BehaviorSubject<number>(0)\n\n @Input() trigger: TheSeamTooltipTrigger = 'both'\n\n private _active = false\n private _overlayRef: OverlayRef | null = null\n private _compRef: ComponentRef<TheSeamTooltipComponent> | null = null\n private _showTimeoutId: any = null\n private _hideTimeoutId: any = null\n private _eventListenersSubject = new Subject<void>()\n private _documentKeydownSubject = new Subject<void>()\n\n ngOnInit() {\n this._setupEventListeners()\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Re-setup event listeners if trigger changes\n if (changes['trigger'] && !changes['trigger'].firstChange) {\n // Clear any pending timeouts\n this._clearTimeouts()\n // Close any existing tooltip first\n this._closeTooltip()\n // Re-setup event listeners with new trigger\n this._setupEventListeners()\n }\n }\n\n ngOnDestroy() {\n this._clearTimeouts()\n this._closeTooltip()\n this._eventListenersSubject.next()\n this._eventListenersSubject.complete()\n this._documentKeydownSubject.next()\n this._documentKeydownSubject.complete()\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _setupEventListeners() {\n // Clean up existing event listeners\n this._eventListenersSubject.next()\n this._eventListenersSubject.complete()\n this._eventListenersSubject = new Subject<void>()\n\n const element = this._elementRef.nativeElement\n\n // Mouse events for hover trigger\n if (this.trigger === 'hover' || this.trigger === 'both') {\n fromEvent(element, 'mouseenter')\n .pipe(\n filter(() => !this._disableTooltip.value && !!this.seamTooltip),\n takeUntil(this._eventListenersSubject),\n )\n .subscribe(() => this._scheduleShow())\n\n fromEvent(element, 'mouseleave')\n .pipe(takeUntil(this._eventListenersSubject))\n .subscribe(() => this._scheduleHide())\n }\n\n // Focus events for focus trigger\n if (this.trigger === 'focus' || this.trigger === 'both') {\n fromEvent(element, 'focus')\n .pipe(\n filter(() => !this._disableTooltip.value && !!this.seamTooltip),\n takeUntil(this._eventListenersSubject),\n )\n .subscribe(() => this._scheduleShow())\n\n fromEvent(element, 'blur')\n .pipe(takeUntil(this._eventListenersSubject))\n .subscribe(() => this._scheduleHide())\n }\n }\n\n private _scheduleShow() {\n this._clearTimeouts()\n\n if (this._active) {\n return\n }\n\n this._showTimeoutId = setTimeout(() => {\n this._showTooltip()\n }, this.showDelay)\n }\n\n private _scheduleHide() {\n this._clearTimeouts()\n\n if (!this._active) {\n return\n }\n\n this._hideTimeoutId = setTimeout(() => {\n this._closeTooltip()\n }, this.hideDelay)\n }\n\n private _clearTimeouts() {\n if (this._showTimeoutId) {\n clearTimeout(this._showTimeoutId)\n this._showTimeoutId = null\n }\n if (this._hideTimeoutId) {\n clearTimeout(this._hideTimeoutId)\n this._hideTimeoutId = null\n }\n }\n\n private _showTooltip(): void {\n if (this._active || !this.seamTooltip || this._disableTooltip.value) {\n return\n }\n\n this._active = true\n\n const positionStrategy = this._getOverlayPosition()\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n })\n\n this._compRef = this._overlayRef.attach(\n new ComponentPortal(TheSeamTooltipComponent, this._viewContainerRef),\n )\n\n // Set component properties\n const parsedPlacements = this._parsePlacementInput(this.placement)\n this._compRef.instance.content = this.seamTooltip\n this._compRef.instance.tooltipClass = this.tooltipClass\n this._compRef.instance.placement = parsedPlacements[0] || 'top' // Use first placement for initial display\n this._compRef.instance.tooltipId = this._tooltipId\n this._compRef.instance.triggerElement = this._elementRef.nativeElement\n this._compRef.changeDetectorRef.markForCheck()\n\n // Listen for position changes to update placement class\n positionStrategy.positionChanges\n .pipe(takeUntil(this._ngUnsubscribe))\n .subscribe((positionChange) => {\n if (this._compRef && positionChange.connectionPair) {\n const actualPlacement = this._getPlacementFromConnectionPair(\n positionChange.connectionPair,\n )\n this._compRef.instance.actualPlacement = actualPlacement\n this._compRef.changeDetectorRef.markForCheck()\n }\n })\n\n // Listen for tooltip exit animation\n this._compRef.instance._afterExit\n .pipe(takeUntil(this._ngUnsubscribe))\n .subscribe(() => {\n // Only detach if still attached (defensive check since _closeTooltip may have already detached)\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef.detach()\n }\n // Ensure cleanup happens even if _closeTooltip didn't run\n if (this._active || this._overlayRef || this._compRef) {\n this._resetTooltip()\n }\n })\n\n // Set up document-level Escape key listener\n this._setupDocumentKeydownListener()\n }\n\n private _setupDocumentKeydownListener(): void {\n // Clean up any existing document listener\n this._documentKeydownSubject.next()\n this._documentKeydownSubject.complete()\n this._documentKeydownSubject = new Subject<void>()\n\n // Set up document-level Escape key listener\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter((event) => {\n // Check both keyCode and key for better compatibility\n return (\n (event.keyCode === ESCAPE || event.key === 'Escape') && this._active\n )\n }),\n takeUntil(this._documentKeydownSubject),\n takeUntil(this._ngUnsubscribe),\n )\n .subscribe(() => this._closeTooltip())\n }\n\n private _closeTooltip(): void {\n if (!this._active || !this._compRef) {\n return\n }\n\n // Mark as inactive immediately to prevent new tooltips from being blocked\n this._active = false\n\n // Clean up document listener\n this._documentKeydownSubject.next()\n\n // Immediately clean up for tests (when using NoopAnimationsModule)\n // In real usage, this will be handled by the animation callback\n this._resetTooltip()\n }\n\n private _resetTooltip(): void {\n this._active = false\n\n // Dispose of overlay if it exists and hasn't been disposed already\n if (this._overlayRef) {\n if (this._overlayRef.hasAttached()) {\n this._overlayRef.detach()\n }\n this._overlayRef.dispose()\n this._overlayRef = null\n }\n\n this._compRef = null\n }\n\n public tooltipOpen(): boolean {\n return this._active && this._compRef !== null\n }\n\n private _parsePlacementInput(\n placement?: TheSeamTooltipPlacementInput | null,\n ): TheSeamTooltipPlacement[] {\n if (placement === undefined || placement === null) {\n return ['top'] // Default placement\n }\n\n if (typeof placement === 'string') {\n if (placement === 'auto') {\n return ['auto']\n }\n // Parse space-delimited string\n const placements = placement.split(/\\s+/).filter((p) => p.trim())\n return placements.filter((p) =>\n this._isValidPlacement(p),\n ) as TheSeamTooltipPlacement[]\n }\n\n if (Array.isArray(placement)) {\n return placement.filter((p) => this._isValidPlacement(p))\n }\n\n return [placement]\n }\n\n private _isValidPlacement(\n placement: string,\n ): placement is TheSeamTooltipPlacement {\n const validPlacements: TheSeamTooltipPlacement[] = [\n 'top',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'left-top',\n 'left-bottom',\n 'right',\n 'right-top',\n 'right-bottom',\n 'auto',\n ]\n return validPlacements.includes(placement as TheSeamTooltipPlacement)\n }\n\n private _getOverlayPosition(): FlexibleConnectedPositionStrategy {\n const positions = this._getPositions()\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(true)\n }\n\n private _getPositions(): ConnectionPositionPair[] {\n const parsedPlacements = this._parsePlacementInput(this.placement)\n\n // If 'auto' is specified or no valid placements, return all positions\n if (parsedPlacements.includes('auto') || parsedPlacements.length === 0) {\n return [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ]\n }\n\n // Return positions for specified placements only\n const positions: ConnectionPositionPair[] = []\n\n for (const placement of parsedPlacements) {\n const placementPositions = this._getPositionForPlacement(placement)\n positions.push(...placementPositions)\n }\n\n return positions\n }\n\n private _getPositionForPlacement(\n placement: TheSeamTooltipPlacement,\n ): ConnectionPositionPair[] {\n switch (placement) {\n case 'top':\n return [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n },\n ]\n case 'top-left':\n return [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n case 'top-right':\n return [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]\n case 'bottom':\n return [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n },\n ]\n case 'bottom-left':\n return [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n ]\n case 'bottom-right':\n return [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n ]\n case 'left':\n return [\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ]\n case 'left-top':\n return [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n },\n ]\n case 'left-bottom':\n return [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]\n case 'right':\n return [\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n ]\n case 'right-top':\n return [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n ]\n case 'right-bottom':\n return [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n case 'auto':\n default:\n return [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n },\n ]\n }\n }\n\n private _getPlacementFromConnectionPair(\n connectionPair: ConnectionPositionPair,\n ): TheSeamTooltipPlacement {\n const { originX, originY, overlayX, overlayY } = connectionPair\n\n // Top placements (overlay below origin)\n if (originY === 'top' && overlayY === 'bottom') {\n if (originX === 'start' && overlayX === 'start') return 'top-left'\n if (originX === 'end' && overlayX === 'end') return 'top-right'\n if (originX === 'center' && overlayX === 'center') return 'top'\n }\n\n // Bottom placements (overlay above origin)\n if (originY === 'bottom' && overlayY === 'top') {\n if (originX === 'start' && overlayX === 'start') return 'bottom-left'\n if (originX === 'end' && overlayX === 'end') return 'bottom-right'\n if (originX === 'center' && overlayX === 'center') return 'bottom'\n }\n\n // Left placements (overlay to the right of origin)\n if (originX === 'start' && overlayX === 'end') {\n if (originY === 'top' && overlayY === 'top') return 'left-top'\n if (originY === 'bottom' && overlayY === 'bottom') return 'left-bottom'\n if (originY === 'center' && overlayY === 'center') return 'left'\n }\n\n // Right placements (overlay to the left of origin)\n if (originX === 'end' && overlayX === 'start') {\n if (originY === 'top' && overlayY === 'top') return 'right-top'\n if (originY === 'bottom' && overlayY === 'bottom') return 'right-bottom'\n if (originY === 'center' && overlayY === 'center') return 'right'\n }\n\n // Default fallback\n return 'top'\n }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { OverlayModule } from '@angular/cdk/overlay'\n\nimport { TheSeamTooltipComponent } from './tooltip.component'\nimport { TheSeamTooltipDirective } from './tooltip.directive'\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n TheSeamTooltipComponent,\n TheSeamTooltipDirective,\n ],\n exports: [TheSeamTooltipDirective],\n})\nexport class TheSeamTooltipModule {}\n","import {\n ComponentHarness,\n HarnessPredicate,\n BaseHarnessFilters,\n ElementDimensions,\n} from '@angular/cdk/testing'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface TheSeamTooltipHarnessFilters extends BaseHarnessFilters {\n // Empty - use selector-based filtering\n}\n\n/**\n * Harness for interacting with tooltip directives in tests\n */\nexport class TheSeamTooltipHarness extends ComponentHarness {\n static hostSelector = '[seamTooltip]'\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a tooltip with specific attributes\n */\n static with(\n options: TheSeamTooltipHarnessFilters = {},\n ): HarnessPredicate<TheSeamTooltipHarness> {\n return new HarnessPredicate(TheSeamTooltipHarness, options)\n }\n\n /** Hovers over the element to show the tooltip */\n async hover(): Promise<void> {\n return (await this.host()).hover()\n }\n\n /** Moves the mouse away from the element to hide the tooltip */\n async mouseAway(): Promise<void> {\n return (await this.host()).mouseAway()\n }\n\n /** Focuses the element to show the tooltip */\n async focus(): Promise<void> {\n return (await this.host()).focus()\n }\n\n /** Blurs the element to hide the tooltip */\n async blur(): Promise<void> {\n return (await this.host()).blur()\n }\n\n /** Clicks the element */\n async click(): Promise<void> {\n return (await this.host()).click()\n }\n\n /** Gets whether the tooltip is currently visible */\n async isTooltipVisible(): Promise<boolean> {\n const tooltipId = await this._getTooltipId()\n if (!tooltipId) {\n return false\n }\n const tooltip = await this.documentRootLocatorFactory().locatorForOptional(\n `#${tooltipId}.tooltip.show`,\n )()\n return tooltip !== null\n }\n\n /** Gets the visible tooltip text content */\n async getVisibleTooltipText(): Promise<string | null> {\n const tooltipId = await this._getTooltipId()\n if (!tooltipId) {\n return null\n }\n const tooltipInner =\n await this.documentRootLocatorFactory().locatorForOptional(\n `#${tooltipId} .tooltip-inner`,\n )()\n if (!tooltipInner) {\n return null\n }\n return tooltipInner.text()\n }\n\n /** Gets the visible tooltip classes */\n async getVisibleTooltipClasses(): Promise<string[]> {\n const tooltipId = await this._getTooltipId()\n if (!tooltipId) {\n return []\n }\n const tooltip = await this.documentRootLocatorFactory().locatorForOptional(\n `#${tooltipId}.tooltip.show`,\n )()\n if (!tooltip) {\n return []\n }\n const classAttr = await tooltip.getAttribute('class')\n return classAttr ? classAttr.split(' ').filter((c) => c.trim()) : []\n }\n\n /** Gets the tooltip ID from the aria-describedby attribute */\n private async _getTooltipId(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-describedby')\n }\n\n /** Waits for the tooltip to appear */\n async waitForTooltipToShow(timeout: number = 1000): Promise<void> {\n const start = Date.now()\n while (Date.now() - start < timeout) {\n if (await this.isTooltipVisible()) {\n return\n }\n await new Promise((resolve) => setTimeout(resolve, 50))\n }\n throw new Error(`Tooltip did not appear within ${timeout}ms`)\n }\n\n /** Waits for the tooltip to disappear */\n async waitForTooltipToHide(timeout: number = 1000): Promise<void> {\n const start = Date.now()\n while (Date.now() - start < timeout) {\n if (!(await this.isTooltipVisible())) {\n return\n }\n await new Promise((resolve) => setTimeout(resolve, 50))\n }\n throw new Error(`Tooltip did not hide within ${timeout}ms`)\n }\n\n async getTriggerDimensions(): Promise<ElementDimensions | null> {\n const host = await this.host()\n return host.getDimensions()\n }\n\n async getTooltipDimensions(): Promise<ElementDimensions | null> {\n const tooltipId = await this._getTooltipId()\n if (!tooltipId) {\n return null\n }\n const tooltip = await this.documentRootLocatorFactory().locatorForOptional(\n `#${tooltipId}.tooltip.show`,\n )()\n if (!tooltip) {\n return null\n }\n return tooltip.getDimensions()\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -29,6 +29,7 @@ import { ComponentPortal } from '@angular/cdk/portal';
29
29
  import * as i1$4 from '@theseam/ui-common/dynamic-component-loader';
30
30
  import { CdkTableModule } from '@angular/cdk/table';
31
31
  import { RouterModule } from '@angular/router';
32
+ import { ContentContainerComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
32
33
 
33
34
  function extendStyles(dest, source) {
34
35
  for (const key in source) {
@@ -1432,9 +1433,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1432
1433
  }]
1433
1434
  }] });
1434
1435
 
1436
+ class TheSeamWidgetHarness extends ContentContainerComponentHarness {
1437
+ /** The selector for the host element of a `WidgetComponent` instance. */
1438
+ static hostSelector = 'seam-widget';
1439
+ /**
1440
+ * Gets a `HarnessPredicate` that can be used to search for a menu item with specific attributes.
1441
+ * @param options Options for filtering which menu item instances are considered a match.
1442
+ * @return a `HarnessPredicate` configured with the given options.
1443
+ */
1444
+ static with(options = {}) {
1445
+ return new HarnessPredicate(this, options);
1446
+ // .addOption('text', options.text, (harness, text) =>
1447
+ // HarnessPredicate.stringMatches(harness.getText(), text),
1448
+ // )
1449
+ // .addOption(
1450
+ // 'hasSubmenu',
1451
+ // options.hasSubmenu,
1452
+ // async (harness, hasSubmenu) => (await harness.hasSubmenu()) === hasSubmenu,
1453
+ // )
1454
+ }
1455
+ }
1456
+
1435
1457
  /**
1436
1458
  * Generated bundle index. Do not edit.
1437
1459
  */
1438
1460
 
1439
- export { CURRENT_WIDGET_PREFERENCES_VERSION, EMPTY_WIDGET_PREFERENCES, THESEAM_WIDGETS, THESEAM_WIDGET_ACCESSOR, THESEAM_WIDGET_DATA, THESEAM_WIDGET_DEFAULTS, THESEAM_WIDGET_PREFERENCES_ACCESSOR, TheSeamWidgetButtonGroupModule, TheSeamWidgetContentHeaderModule, TheSeamWidgetDescriptionModule, TheSeamWidgetEmptyLabelModule, TheSeamWidgetFooterLinkModule, TheSeamWidgetFooterTextModule, TheSeamWidgetHeaderBadgeModule, TheSeamWidgetListGroupModule, TheSeamWidgetModule, TheSeamWidgetTableModule, TheSeamWidgetTileListModule, TheSeamWidgetTileModule, WidgetButtonGroupComponent, WidgetComponent, WidgetContentHeaderComponent, WidgetDescriptionComponent, WidgetDragHandleDirective, WidgetEmptyLabelComponent, WidgetFooterComponent, WidgetFooterLinkComponent, WidgetFooterTextComponent, WidgetHeaderBadgeComponent, WidgetIconTplDirective, WidgetListGroupComponent, WidgetListGroupItemAnchorComponent, WidgetListGroupItemButtonComponent, WidgetListGroupItemComponent, WidgetListGroupItemIconTplDirective, WidgetPreferencesService, WidgetRegistryService, WidgetTableComponent, WidgetTileComponent, WidgetTileFooterComponent, WidgetTileFooterItemComponent, WidgetTileGroupComponent, WidgetTileListComponent, WidgetTileSecondaryIconDirective, WidgetTitleTplDirective, extendStyles, toggleNativeDragInteractions };
1461
+ export { CURRENT_WIDGET_PREFERENCES_VERSION, EMPTY_WIDGET_PREFERENCES, THESEAM_WIDGETS, THESEAM_WIDGET_ACCESSOR, THESEAM_WIDGET_DATA, THESEAM_WIDGET_DEFAULTS, THESEAM_WIDGET_PREFERENCES_ACCESSOR, TheSeamWidgetButtonGroupModule, TheSeamWidgetContentHeaderModule, TheSeamWidgetDescriptionModule, TheSeamWidgetEmptyLabelModule, TheSeamWidgetFooterLinkModule, TheSeamWidgetFooterTextModule, TheSeamWidgetHarness, TheSeamWidgetHeaderBadgeModule, TheSeamWidgetListGroupModule, TheSeamWidgetModule, TheSeamWidgetTableModule, TheSeamWidgetTileListModule, TheSeamWidgetTileModule, WidgetButtonGroupComponent, WidgetComponent, WidgetContentHeaderComponent, WidgetDescriptionComponent, WidgetDragHandleDirective, WidgetEmptyLabelComponent, WidgetFooterComponent, WidgetFooterLinkComponent, WidgetFooterTextComponent, WidgetHeaderBadgeComponent, WidgetIconTplDirective, WidgetListGroupComponent, WidgetListGroupItemAnchorComponent, WidgetListGroupItemButtonComponent, WidgetListGroupItemComponent, WidgetListGroupItemIconTplDirective, WidgetPreferencesService, WidgetRegistryService, WidgetTableComponent, WidgetTileComponent, WidgetTileFooterComponent, WidgetTileFooterItemComponent, WidgetTileGroupComponent, WidgetTileListComponent, WidgetTileSecondaryIconDirective, WidgetTitleTplDirective, extendStyles, toggleNativeDragInteractions };
1440
1462
  //# sourceMappingURL=theseam-ui-common-widget.mjs.map