@theseam/ui-common 1.0.2-beta.83 → 1.0.2-beta.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-icon.mjs","sources":["../../../projects/ui-common/icon/icon/icon.component.ts","../../../projects/ui-common/icon/icon/icon.component.html","../../../projects/ui-common/icon/icon-btn/icon-btn.component.ts","../../../projects/ui-common/icon/icon-notification/icon-notification.component.ts","../../../projects/ui-common/icon/icon.module.ts","../../../projects/ui-common/icon/utils/file-extension-icon.ts","../../../projects/ui-common/icon/utils/get-known-icon.ts","../../../projects/ui-common/icon/theseam-ui-common-icon.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { Component, HostBinding, Input } from '@angular/core'\n\nimport { IconProp, SizeProp } from '@fortawesome/fontawesome-svg-core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\nimport { SeamIcon } from '../icon'\n\n//\n// TODO: Ensure all inputs correctly update the state whenever changed, not just\n// on initial load.\n//\n\n// Browsers that do not support css grayscale filter.\nconst needToFix = /(MSIE 10)|(Trident.*rv:11\\.0)|( Edge\\/[\\d.]+$)/.test(\n navigator.userAgent,\n)\n\nexport type TheSeamIconType =\n | 'borderless-styled-square'\n | 'styled-square'\n | 'image-fill'\n | undefined\n\n@Component({\n selector: 'seam-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n standalone: false,\n})\nexport class IconComponent {\n static ngAcceptInputType_grayscaleOnDisable: BooleanInput\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_showDefaultOnError: BooleanInput\n\n needToFix = needToFix\n\n /** Toggles whether the img/icon will attempt to be grayscale when disabled is true. */\n @Input() @InputBoolean() grayscaleOnDisable = true\n\n /** Toggles the img/icon to grayscale if `grayscaleOnDisable` is true. */\n @Input() @InputBoolean() disabled = false\n\n /**\n * Placed on the `.seam-icon--fa` and `seam-icon--img` elements.\n */\n @Input() iconClass: string | undefined | null\n\n /**\n * The icon to display.\n *\n * If the input icon is a string an `img` element will be used with icon as `src`.\n * If the input is not a string it will be assumed to be a font-awesome IconProp object.\n */\n @Input()\n get icon(): SeamIcon | undefined | null {\n return this._iconUrl || this._iconObj\n }\n set icon(value: SeamIcon | undefined | null) {\n if (typeof value === 'string') {\n this._iconUrl = value\n this._iconObj = undefined\n } else {\n this._iconUrl = undefined\n this._iconObj = value\n }\n\n this._iconUrlBeforeError = undefined\n this._iconObjBeforeError = undefined\n\n if (!this._iconUrl && !this._iconObj) {\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n\n public _iconUrl: string | undefined | null\n public _iconObj: IconProp | undefined | null\n\n private _iconUrlBeforeError: string | undefined | null\n private _iconObjBeforeError: IconProp | undefined | null\n\n /**\n * NOTE: Only works for fa-icon for now.\n */\n @Input() size: SizeProp | undefined | null\n\n /**\n * Toggles whether an image that has thrown the `onerror` event should show\n * the `defaultIcon` instead.\n */\n @Input()\n get showDefaultOnError(): boolean {\n return this._showDefaultOnError\n }\n set showDefaultOnError(value: boolean) {\n this._showDefaultOnError = coerceBooleanProperty(value)\n if (this._hasError) {\n if (this._iconUrlBeforeError || this._iconObjBeforeError) {\n this._iconUrl = this._iconUrlBeforeError\n this._iconObj = this._iconObjBeforeError\n this._iconUrlBeforeError = undefined\n this._iconObjBeforeError = undefined\n } else if (this._showDefaultOnError) {\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n }\n private _showDefaultOnError = false\n\n /**\n * Shown if icon is not set or if showDefaultOnError is true and img has thrown an error.\n */\n @Input()\n get defaultIcon(): SeamIcon | undefined | null {\n return this._defaultIconUrl || this._defaultIconObj\n }\n set defaultIcon(value: SeamIcon | undefined | null) {\n if (typeof value === 'string') {\n this._defaultIconUrl = value\n this._defaultIconObj = undefined\n } else {\n this._defaultIconUrl = undefined\n this._defaultIconObj = value\n }\n\n if (!this._defaultIconUrl && !this._defaultIconObj) {\n this._iconUrl = this._iconUrlBeforeError\n this._iconObj = this._iconObjBeforeError\n }\n\n if (!this._iconUrl && !this._iconObj) {\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n\n public _defaultIconUrl: string | undefined | null\n public _defaultIconObj: IconProp | undefined | null\n\n @Input() iconType: TheSeamIconType | undefined | null\n\n @HostBinding('attr.icon-type')\n get _iconTypeAttr() {\n return this.iconType\n }\n\n private _hasError = false\n\n public _imgError(event: ErrorEvent): void {\n this._hasError = true\n if (\n this._showDefaultOnError &&\n (this._defaultIconUrl || this._defaultIconObj)\n ) {\n this._iconUrlBeforeError = this._iconUrl\n this._iconObjBeforeError = this._iconObj\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n\n @HostBinding('class.disabled')\n get _cssDisabled() {\n return this.disabled || null\n }\n\n @HostBinding('class.no-grayscale')\n get _cssNoGreyscale() {\n return !this.grayscaleOnDisable\n }\n}\n","<fa-icon\n *ngIf=\"_iconObj\"\n class=\"seam-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"\n [size]=\"size || undefined\"\n>\n</fa-icon>\n\n<ng-container *ngIf=\"_iconUrl\">\n <!-- Partial fix for IE greyscale -->\n <ng-container *ngIf=\"needToFix\">\n <ng-container *ngIf=\"disabled && grayscaleOnDisable\">\n <span\n class=\"grayscale-fix\"\n style=\"display: inline-block; position: relative\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n id=\"svgroot\"\n style=\"position: absolute; left: 0; right: 0\"\n viewBox=\"0 0 48 48\"\n width=\"100%\"\n height=\"100%\"\n >\n <defs>\n <filter id=\"gray\">\n <feColorMatrix\n type=\"matrix\"\n values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"\n />\n </filter>\n </defs>\n <image\n filter='url(\"#gray\")'\n preserveAspectRatio=\"none meet\"\n x=\"0\"\n y=\"0\"\n width=\"48\"\n height=\"48\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n [attr.xlink:href]=\"_iconUrl\"\n />\n </svg>\n <img\n class=\"seam-icon--img {{ iconClass }}\"\n style=\"display: block; visibility: hidden\"\n alt=\"Icon\"\n [src]=\"_iconUrl\"\n (error)=\"_imgError($event)\"\n />\n </span>\n </ng-container>\n <ng-container *ngIf=\"!disabled\">\n <img\n class=\"seam-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\"\n alt=\"Icon\"\n (error)=\"_imgError($event)\"\n />\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!needToFix\">\n <img\n class=\"seam-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\"\n alt=\"Icon\"\n (error)=\"_imgError($event)\"\n />\n </ng-container>\n</ng-container>\n\n<ng-content select=\".sr-only,seam-icon-notification\"></ng-content>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n Input,\n Renderer2,\n} from '@angular/core'\n\nimport { SizeProp } from '@fortawesome/fontawesome-svg-core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { ThemeTypes } from '@theseam/ui-common/models'\n\nimport type { SeamIcon } from '../icon'\nimport type { TheSeamIconType } from '../icon/icon.component'\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamIconBtn]',\n template: `\n <seam-icon\n *ngIf=\"icon\"\n [grayscaleOnDisable]=\"grayscaleOnDisable\"\n [disabled]=\"disabled\"\n [iconClass]=\"iconClass\"\n [icon]=\"icon\"\n [size]=\"size\"\n [showDefaultOnError]=\"showDefaultOnError\"\n [iconType]=\"iconType\"\n >\n </seam-icon>\n <ng-content select=\".sr-only,seam-icon-notification\"></ng-content>\n `,\n styles: [],\n host: {\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n standalone: false,\n})\nexport class IconBtnComponent implements DoCheck {\n static ngAcceptInputType_grayscaleOnDisable: BooleanInput\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_showDefaultOnError: BooleanInput\n\n /** Toggles whether the img/icon will attempt to be grayscale when disabled is true. */\n @Input() @InputBoolean() grayscaleOnDisable = true\n\n /** Toggles the img/icon to grayscale if `grayscaleOnDisable` is true. */\n @Input() @InputBoolean() disabled = false\n\n /**\n * Placed on the `.seam-icon--fa` and `seam-icon--img` elements.\n */\n @Input() iconClass: string | undefined | null\n\n /**\n * The icon to display.\n *\n * If the input icon is a string an `img` element will be used with icon as `src`.\n * If the input is not a string it will be assumed to be a font-awesome IconProp object.\n */\n @Input() icon: SeamIcon | undefined | null\n\n /**\n * NOTE: Only works for fa-icon for now.\n */\n @Input() size: SizeProp | undefined | null\n\n /**\n * Toggles whether an image that has thrown the `onerror` event should show\n * the `defaultIcon` instead.\n */\n @Input() @InputBoolean() showDefaultOnError = false\n\n /**\n * Shown if icon is not set or if showDefaultOnError is true and img has thrown an error.\n *\n * NOTE: Not supported for icon-btn yet.\n */\n // @Input() defaultIcon: SeamIcon\n\n @Input() iconType: TheSeamIconType | undefined | null = 'image-fill'\n\n @HostBinding('class.p-0') _cssPadding0 = true\n\n @HostBinding('class.btn') _btn = true\n @HostBinding('class.text-nowrap') _textNoWrap = true\n\n @HostBinding('class.btn-default') get _btnDefault() {\n return this.isBtnTheme('default')\n }\n @HostBinding('class.btn-primary') get _btnPrimary() {\n return this.isBtnTheme('primary')\n }\n @HostBinding('class.btn-secondary') get _btnSecondary() {\n return this.isBtnTheme('secondary')\n }\n @HostBinding('class.btn-success') get _btnSuccess() {\n return this.isBtnTheme('success')\n }\n @HostBinding('class.btn-danger') get _btnDanger() {\n return this.isBtnTheme('danger')\n }\n @HostBinding('class.btn-warning') get _btnWarning() {\n return this.isBtnTheme('warning')\n }\n @HostBinding('class.btn-info') get _btnInfo() {\n return this.isBtnTheme('info')\n }\n @HostBinding('class.btn-light') get _btnLight() {\n return this.isBtnTheme('light')\n }\n @HostBinding('class.btn-dark') get _btnDark() {\n return this.isBtnTheme('dark')\n }\n @HostBinding('class.btn-lightgray') get _btnLightGray() {\n return this.isBtnTheme('lightgray')\n }\n\n @HostBinding('class.btn-sm') get _btnSizeSm() {\n return this.btnSize === 'sm'\n }\n @HostBinding('class.btn-lg') get _btnSizeLg() {\n return this.btnSize === 'lg'\n }\n\n @Input() btnTheme: ThemeTypes | undefined | null = 'default'\n @Input() badgeTheme: ThemeTypes | undefined | null = 'light'\n @Input() badgeText: string | undefined | null = ''\n\n @Input() btnSize: 'sm' | 'lg' | undefined | null\n\n @Input()\n get type(): string | undefined | null {\n return this._type\n }\n set type(value: string | undefined | null) {\n this._type = value\n }\n private _type: string | undefined | null\n\n @Input()\n get role(): string | undefined | null {\n return this._role\n }\n set role(value: string | undefined | null) {\n this._role = value\n }\n private _role: string | undefined | null\n\n constructor(\n private _elementRef: ElementRef<HTMLButtonElement | HTMLAnchorElement>,\n private _renderer: Renderer2,\n ) {}\n\n ngDoCheck() {\n if (this._isButton()) {\n this._renderer.setAttribute(\n this._elementRef.nativeElement,\n 'type',\n this._type || 'button',\n )\n } else if (this._isAnchor()) {\n this._renderer.setAttribute(\n this._elementRef.nativeElement,\n 'role',\n this._role || 'button',\n )\n }\n }\n\n public isBtnTheme(type: ThemeTypes): boolean {\n return this.btnTheme === type\n }\n\n protected _isButton() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'button'\n }\n\n protected _isAnchor() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'button'\n }\n}\n","import {\n animate,\n animation,\n keyframes,\n style,\n transition,\n trigger,\n useAnimation,\n} from '@angular/animations'\nimport { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core'\n\nimport { SizeProp } from '@fortawesome/fontawesome-svg-core'\nimport { faCircle } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\nimport { SeamIcon } from '../icon'\nimport type { TheSeamIconType } from '../icon/icon.component'\n\nexport const pulseAnimation = animation([\n style({ transform: 'scale(1)' }),\n animate(\n '{{ timings }}',\n keyframes([\n style({ transform: 'scale(1)', offset: 0 }),\n style({ transform: 'scale({{ scale }})', offset: 0.5 }),\n style({ transform: 'scale(1)', offset: 1 }),\n ]),\n ),\n])\n\n@Component({\n selector: 'seam-icon-notification',\n template: `\n <seam-icon\n *ngIf=\"icon && !hidden\"\n [@counterChange]=\"count\"\n [grayscaleOnDisable]=\"grayscaleOnDisable\"\n [disabled]=\"disabled\"\n [iconClass]=\"iconClass\"\n [icon]=\"icon\"\n [size]=\"size\"\n [showDefaultOnError]=\"showDefaultOnError\"\n [iconType]=\"iconType\"\n >\n </seam-icon>\n <ng-content select=\".sr-only\"></ng-content>\n `,\n styles: [\n `\n :host {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n }\n\n seam-icon {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 25% !important;\n height: 25% !important;\n min-width: 15px;\n min-height: 15px;\n }\n `,\n ],\n host: {\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n animations: [\n trigger('counterChange', [\n transition(\n ':increment',\n useAnimation(pulseAnimation, {\n params: {\n timings: '400ms ease-in-out',\n scale: 1.2,\n },\n }),\n ),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class IconNotificationComponent implements OnInit {\n static ngAcceptInputType_hidden: BooleanInput\n static ngAcceptInputType_grayscaleOnDisable: BooleanInput\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_showDefaultOnError: BooleanInput\n\n @Input() count: number | undefined | null\n\n @Input() @InputBoolean() hidden = false\n\n /** Toggles whether the img/icon will attempt to be grayscale when disabled is true. */\n @Input() @InputBoolean() grayscaleOnDisable = true\n\n /** Toggles the img/icon to grayscale if `grayscaleOnDisable` is true. */\n @Input() @InputBoolean() disabled = false\n\n /**\n * Placed on the `.seam-icon--fa` and `seam-icon--img` elements.\n */\n @Input() iconClass: string | undefined | null\n\n /**\n * The icon to display.\n *\n * If the input icon is a string an `img` element will be used with icon as `src`.\n * If the input is not a string it will be assumed to be a font-awesome IconProp object.\n */\n @Input() icon: SeamIcon | undefined | null = faCircle\n\n /**\n * Toggles whether an image that has thrown the `onerror` event should show\n * the `defaultIcon` instead.\n */\n @Input() @InputBoolean() showDefaultOnError = false\n\n /**\n * Shown if icon is not set or if showDefaultOnError is true and img has thrown an error.\n *\n * NOTE: Not supported for icon-notification yet.\n */\n // @Input() defaultIcon: SeamIcon\n\n /**\n * NOTE: Only works for fa-icon for now.\n */\n @Input() size: SizeProp | undefined | null\n\n @Input() iconType: TheSeamIconType | undefined | null = 'image-fill'\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit() {\n if (\n this._elementRef &&\n this._elementRef.nativeElement &&\n this._elementRef.nativeElement.parentElement\n ) {\n this._elementRef.nativeElement.parentElement.style.position = 'relative'\n }\n }\n\n // ngDoCheck() {}\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\n\nimport { IconBtnComponent } from './icon-btn/icon-btn.component'\nimport { IconNotificationComponent } from './icon-notification/icon-notification.component'\nimport { IconComponent } from './icon/icon.component'\n\n@NgModule({\n declarations: [IconComponent, IconBtnComponent, IconNotificationComponent],\n imports: [CommonModule, FontAwesomeModule],\n exports: [IconComponent, IconBtnComponent, IconNotificationComponent],\n})\nexport class TheSeamIconModule {}\n","import {\n faFile,\n faFileAlt,\n faFileArchive,\n faFileExcel,\n faFileImage,\n faFilePdf,\n faFilePowerpoint,\n faFileWord,\n} from '@fortawesome/free-regular-svg-icons'\n\nimport { SeamIcon } from '../icon'\n\nconst FILE_EXTENSION_ICONS: { [type: string]: SeamIcon } = {\n pdf: faFilePdf,\n doc: faFileWord,\n docx: faFileWord,\n xls: faFileExcel,\n xlsx: faFileExcel,\n gif: faFileImage,\n jpg: faFileImage,\n jpeg: faFileImage,\n png: faFileImage,\n zip: faFileArchive,\n ppt: faFilePowerpoint,\n pptx: faFilePowerpoint,\n txt: faFileAlt,\n json: faFileAlt,\n}\n\nexport const DEFAULT_FILE_EXTENSION_ICON: SeamIcon = faFile\n\nexport function fileExtensionIcon(\n extension: string | null | undefined,\n defaultIfNotFound: boolean = true,\n): SeamIcon | undefined {\n if (!extension) {\n return defaultIfNotFound ? DEFAULT_FILE_EXTENSION_ICON : undefined\n }\n\n let ext = extension\n if (ext.charAt(0) === '.') {\n ext = ext.substr(1)\n }\n\n const icon = FILE_EXTENSION_ICONS[ext]\n if (!icon && defaultIfNotFound) {\n return DEFAULT_FILE_EXTENSION_ICON\n }\n return icon\n}\n","import {\n faAddressCard,\n faBell,\n faBookmark,\n faCheckCircle,\n faClock,\n faComment,\n faEnvelope,\n faEnvelopeOpen,\n faFile,\n faFileAlt,\n faFileArchive,\n faFileAudio,\n faFileCode,\n faFileExcel,\n faFileImage,\n faFilePdf,\n faFilePowerpoint,\n faFileVideo,\n faFileWord,\n faFolder,\n faFolderOpen,\n faImage,\n faImages,\n faQuestionCircle,\n faSave,\n faStickyNote,\n faTimesCircle,\n faTrashAlt,\n faUser,\n faUserCircle,\n} from '@fortawesome/free-regular-svg-icons'\nimport {\n faBan,\n faChartArea,\n faChartBar,\n faChartLine,\n faCheck,\n faCloudUploadAlt,\n faCog,\n faEdit,\n faExclamation,\n faExclamationCircle,\n faExclamationTriangle,\n faExternalLinkSquareAlt,\n faFileContract,\n faFileCsv,\n faFileDownload,\n faFileExport,\n faFileImport,\n faFileInvoice,\n faFileInvoiceDollar,\n faFileMedical,\n faFileMedicalAlt,\n faFilePrescription,\n faFileSignature,\n faFileUpload,\n faInbox,\n faInfoCircle,\n faLock,\n faLockOpen,\n faPrint,\n faReceipt,\n faReply,\n faShare,\n faSignature,\n faTimes,\n faTrash,\n faUserCheck,\n faUserEdit,\n faUserPlus,\n faUsers,\n faUserTimes,\n} from '@fortawesome/free-solid-svg-icons'\n\nimport { SeamIcon } from '../icon'\n\n// TODO: Decide a good way to do this, so that we don't have to import full icon\n// libraries, but still provide icon choices to use from a string. One way could\n// be to define a dictionary of app icons that we can use that map a unique\n// string to an icon definition.\nconst knownIcons: { [key: string]: SeamIcon } = {\n faAddressCard,\n faBan,\n faBell,\n faBookmark,\n faChartLine,\n faChartArea,\n faChartBar,\n faCheck,\n faCheckCircle,\n faClock,\n faCloudUploadAlt,\n faComment,\n faCog,\n faEdit,\n faEnvelope,\n faEnvelopeOpen,\n faExclamation,\n faExclamationCircle,\n faExclamationTriangle,\n faExternalLinkSquareAlt,\n faFile,\n faFileAlt,\n faFileArchive,\n faFileAudio,\n faFileCode,\n faFileContract,\n faFileCsv,\n faFileDownload,\n faFileExcel,\n faFileExport,\n faFileImage,\n faFileImport,\n faFileInvoice,\n faFileInvoiceDollar,\n faFileMedical,\n faFileMedicalAlt,\n faFilePdf,\n faFilePowerpoint,\n faFilePrescription,\n faFileSignature,\n faFileUpload,\n faFileVideo,\n faFileWord,\n faFolder,\n faFolderOpen,\n faImage,\n faImages,\n faInbox,\n faInfoCircle,\n faLock,\n faLockOpen,\n faPrint,\n faQuestionCircle,\n faReceipt,\n faReply,\n faSave,\n faShare,\n faSignature,\n faStickyNote,\n faTimes,\n faTimesCircle,\n faTrash,\n faTrashAlt,\n faUser,\n faUserCheck,\n faUserCircle,\n faUserEdit,\n faUserTimes,\n faUsers,\n faUserPlus,\n}\n\nexport function getKnownIcon(iconStr: string): SeamIcon | undefined {\n return knownIcons[iconStr]\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.IconComponent"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-icon.mjs","sources":["../../../projects/ui-common/icon/icon/icon.component.ts","../../../projects/ui-common/icon/icon/icon.component.html","../../../projects/ui-common/icon/icon-btn/icon-btn.component.ts","../../../projects/ui-common/icon/icon-notification/icon-notification.component.ts","../../../projects/ui-common/icon/icon.module.ts","../../../projects/ui-common/icon/utils/file-extension-icon.ts","../../../projects/ui-common/icon/utils/get-known-icon.ts","../../../projects/ui-common/icon/testing/icon.harness.ts","../../../projects/ui-common/icon/theseam-ui-common-icon.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { Component, HostBinding, Input } from '@angular/core'\n\nimport { IconProp, SizeProp } from '@fortawesome/fontawesome-svg-core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\nimport { SeamIcon } from '../icon'\n\n//\n// TODO: Ensure all inputs correctly update the state whenever changed, not just\n// on initial load.\n//\n\n// Browsers that do not support css grayscale filter.\nconst needToFix = /(MSIE 10)|(Trident.*rv:11\\.0)|( Edge\\/[\\d.]+$)/.test(\n navigator.userAgent,\n)\n\nexport type TheSeamIconType =\n | 'borderless-styled-square'\n | 'styled-square'\n | 'image-fill'\n | undefined\n\n@Component({\n selector: 'seam-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n standalone: false,\n})\nexport class IconComponent {\n static ngAcceptInputType_grayscaleOnDisable: BooleanInput\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_showDefaultOnError: BooleanInput\n\n needToFix = needToFix\n\n /** Toggles whether the img/icon will attempt to be grayscale when disabled is true. */\n @Input() @InputBoolean() grayscaleOnDisable = true\n\n /** Toggles the img/icon to grayscale if `grayscaleOnDisable` is true. */\n @Input() @InputBoolean() disabled = false\n\n /**\n * Placed on the `.seam-icon--fa` and `seam-icon--img` elements.\n */\n @Input() iconClass: string | undefined | null\n\n /**\n * The icon to display.\n *\n * If the input icon is a string an `img` element will be used with icon as `src`.\n * If the input is not a string it will be assumed to be a font-awesome IconProp object.\n */\n @Input()\n get icon(): SeamIcon | undefined | null {\n return this._iconUrl || this._iconObj\n }\n set icon(value: SeamIcon | undefined | null) {\n if (typeof value === 'string') {\n this._iconUrl = value\n this._iconObj = undefined\n } else {\n this._iconUrl = undefined\n this._iconObj = value\n }\n\n this._iconUrlBeforeError = undefined\n this._iconObjBeforeError = undefined\n\n if (!this._iconUrl && !this._iconObj) {\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n\n public _iconUrl: string | undefined | null\n public _iconObj: IconProp | undefined | null\n\n private _iconUrlBeforeError: string | undefined | null\n private _iconObjBeforeError: IconProp | undefined | null\n\n /**\n * NOTE: Only works for fa-icon for now.\n */\n @Input() size: SizeProp | undefined | null\n\n /**\n * Toggles whether an image that has thrown the `onerror` event should show\n * the `defaultIcon` instead.\n */\n @Input()\n get showDefaultOnError(): boolean {\n return this._showDefaultOnError\n }\n set showDefaultOnError(value: boolean) {\n this._showDefaultOnError = coerceBooleanProperty(value)\n if (this._hasError) {\n if (this._iconUrlBeforeError || this._iconObjBeforeError) {\n this._iconUrl = this._iconUrlBeforeError\n this._iconObj = this._iconObjBeforeError\n this._iconUrlBeforeError = undefined\n this._iconObjBeforeError = undefined\n } else if (this._showDefaultOnError) {\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n }\n private _showDefaultOnError = false\n\n /**\n * Shown if icon is not set or if showDefaultOnError is true and img has thrown an error.\n */\n @Input()\n get defaultIcon(): SeamIcon | undefined | null {\n return this._defaultIconUrl || this._defaultIconObj\n }\n set defaultIcon(value: SeamIcon | undefined | null) {\n if (typeof value === 'string') {\n this._defaultIconUrl = value\n this._defaultIconObj = undefined\n } else {\n this._defaultIconUrl = undefined\n this._defaultIconObj = value\n }\n\n if (!this._defaultIconUrl && !this._defaultIconObj) {\n this._iconUrl = this._iconUrlBeforeError\n this._iconObj = this._iconObjBeforeError\n }\n\n if (!this._iconUrl && !this._iconObj) {\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n\n public _defaultIconUrl: string | undefined | null\n public _defaultIconObj: IconProp | undefined | null\n\n @Input() iconType: TheSeamIconType | undefined | null\n\n @HostBinding('attr.icon-type')\n get _iconTypeAttr() {\n return this.iconType\n }\n\n private _hasError = false\n\n public _imgError(event: ErrorEvent): void {\n this._hasError = true\n if (\n this._showDefaultOnError &&\n (this._defaultIconUrl || this._defaultIconObj)\n ) {\n this._iconUrlBeforeError = this._iconUrl\n this._iconObjBeforeError = this._iconObj\n this._iconUrl = this._defaultIconUrl\n this._iconObj = this._defaultIconObj\n }\n }\n\n @HostBinding('class.disabled')\n get _cssDisabled() {\n return this.disabled || null\n }\n\n @HostBinding('class.no-grayscale')\n get _cssNoGreyscale() {\n return !this.grayscaleOnDisable\n }\n}\n","<fa-icon\n *ngIf=\"_iconObj\"\n class=\"seam-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"\n [size]=\"size || undefined\"\n>\n</fa-icon>\n\n<ng-container *ngIf=\"_iconUrl\">\n <!-- Partial fix for IE greyscale -->\n <ng-container *ngIf=\"needToFix\">\n <ng-container *ngIf=\"disabled && grayscaleOnDisable\">\n <span\n class=\"grayscale-fix\"\n style=\"display: inline-block; position: relative\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n id=\"svgroot\"\n style=\"position: absolute; left: 0; right: 0\"\n viewBox=\"0 0 48 48\"\n width=\"100%\"\n height=\"100%\"\n >\n <defs>\n <filter id=\"gray\">\n <feColorMatrix\n type=\"matrix\"\n values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"\n />\n </filter>\n </defs>\n <image\n filter='url(\"#gray\")'\n preserveAspectRatio=\"none meet\"\n x=\"0\"\n y=\"0\"\n width=\"48\"\n height=\"48\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n [attr.xlink:href]=\"_iconUrl\"\n />\n </svg>\n <img\n class=\"seam-icon--img {{ iconClass }}\"\n style=\"display: block; visibility: hidden\"\n alt=\"Icon\"\n [src]=\"_iconUrl\"\n (error)=\"_imgError($event)\"\n />\n </span>\n </ng-container>\n <ng-container *ngIf=\"!disabled\">\n <img\n class=\"seam-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\"\n alt=\"Icon\"\n (error)=\"_imgError($event)\"\n />\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!needToFix\">\n <img\n class=\"seam-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\"\n alt=\"Icon\"\n (error)=\"_imgError($event)\"\n />\n </ng-container>\n</ng-container>\n\n<ng-content select=\".sr-only,seam-icon-notification\"></ng-content>\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n Input,\n Renderer2,\n} from '@angular/core'\n\nimport { SizeProp } from '@fortawesome/fontawesome-svg-core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport type { ThemeTypes } from '@theseam/ui-common/models'\n\nimport type { SeamIcon } from '../icon'\nimport type { TheSeamIconType } from '../icon/icon.component'\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seamIconBtn]',\n template: `\n <seam-icon\n *ngIf=\"icon\"\n [grayscaleOnDisable]=\"grayscaleOnDisable\"\n [disabled]=\"disabled\"\n [iconClass]=\"iconClass\"\n [icon]=\"icon\"\n [size]=\"size\"\n [showDefaultOnError]=\"showDefaultOnError\"\n [iconType]=\"iconType\"\n >\n </seam-icon>\n <ng-content select=\".sr-only,seam-icon-notification\"></ng-content>\n `,\n styles: [],\n host: {\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n standalone: false,\n})\nexport class IconBtnComponent implements DoCheck {\n static ngAcceptInputType_grayscaleOnDisable: BooleanInput\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_showDefaultOnError: BooleanInput\n\n /** Toggles whether the img/icon will attempt to be grayscale when disabled is true. */\n @Input() @InputBoolean() grayscaleOnDisable = true\n\n /** Toggles the img/icon to grayscale if `grayscaleOnDisable` is true. */\n @Input() @InputBoolean() disabled = false\n\n /**\n * Placed on the `.seam-icon--fa` and `seam-icon--img` elements.\n */\n @Input() iconClass: string | undefined | null\n\n /**\n * The icon to display.\n *\n * If the input icon is a string an `img` element will be used with icon as `src`.\n * If the input is not a string it will be assumed to be a font-awesome IconProp object.\n */\n @Input() icon: SeamIcon | undefined | null\n\n /**\n * NOTE: Only works for fa-icon for now.\n */\n @Input() size: SizeProp | undefined | null\n\n /**\n * Toggles whether an image that has thrown the `onerror` event should show\n * the `defaultIcon` instead.\n */\n @Input() @InputBoolean() showDefaultOnError = false\n\n /**\n * Shown if icon is not set or if showDefaultOnError is true and img has thrown an error.\n *\n * NOTE: Not supported for icon-btn yet.\n */\n // @Input() defaultIcon: SeamIcon\n\n @Input() iconType: TheSeamIconType | undefined | null = 'image-fill'\n\n @HostBinding('class.p-0') _cssPadding0 = true\n\n @HostBinding('class.btn') _btn = true\n @HostBinding('class.text-nowrap') _textNoWrap = true\n\n @HostBinding('class.btn-default') get _btnDefault() {\n return this.isBtnTheme('default')\n }\n @HostBinding('class.btn-primary') get _btnPrimary() {\n return this.isBtnTheme('primary')\n }\n @HostBinding('class.btn-secondary') get _btnSecondary() {\n return this.isBtnTheme('secondary')\n }\n @HostBinding('class.btn-success') get _btnSuccess() {\n return this.isBtnTheme('success')\n }\n @HostBinding('class.btn-danger') get _btnDanger() {\n return this.isBtnTheme('danger')\n }\n @HostBinding('class.btn-warning') get _btnWarning() {\n return this.isBtnTheme('warning')\n }\n @HostBinding('class.btn-info') get _btnInfo() {\n return this.isBtnTheme('info')\n }\n @HostBinding('class.btn-light') get _btnLight() {\n return this.isBtnTheme('light')\n }\n @HostBinding('class.btn-dark') get _btnDark() {\n return this.isBtnTheme('dark')\n }\n @HostBinding('class.btn-lightgray') get _btnLightGray() {\n return this.isBtnTheme('lightgray')\n }\n\n @HostBinding('class.btn-sm') get _btnSizeSm() {\n return this.btnSize === 'sm'\n }\n @HostBinding('class.btn-lg') get _btnSizeLg() {\n return this.btnSize === 'lg'\n }\n\n @Input() btnTheme: ThemeTypes | undefined | null = 'default'\n @Input() badgeTheme: ThemeTypes | undefined | null = 'light'\n @Input() badgeText: string | undefined | null = ''\n\n @Input() btnSize: 'sm' | 'lg' | undefined | null\n\n @Input()\n get type(): string | undefined | null {\n return this._type\n }\n set type(value: string | undefined | null) {\n this._type = value\n }\n private _type: string | undefined | null\n\n @Input()\n get role(): string | undefined | null {\n return this._role\n }\n set role(value: string | undefined | null) {\n this._role = value\n }\n private _role: string | undefined | null\n\n constructor(\n private _elementRef: ElementRef<HTMLButtonElement | HTMLAnchorElement>,\n private _renderer: Renderer2,\n ) {}\n\n ngDoCheck() {\n if (this._isButton()) {\n this._renderer.setAttribute(\n this._elementRef.nativeElement,\n 'type',\n this._type || 'button',\n )\n } else if (this._isAnchor()) {\n this._renderer.setAttribute(\n this._elementRef.nativeElement,\n 'role',\n this._role || 'button',\n )\n }\n }\n\n public isBtnTheme(type: ThemeTypes): boolean {\n return this.btnTheme === type\n }\n\n protected _isButton() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'button'\n }\n\n protected _isAnchor() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'button'\n }\n}\n","import {\n animate,\n animation,\n keyframes,\n style,\n transition,\n trigger,\n useAnimation,\n} from '@angular/animations'\nimport { BooleanInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n} from '@angular/core'\n\nimport { SizeProp } from '@fortawesome/fontawesome-svg-core'\nimport { faCircle } from '@fortawesome/free-solid-svg-icons'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\nimport { SeamIcon } from '../icon'\nimport type { TheSeamIconType } from '../icon/icon.component'\n\nexport const pulseAnimation = animation([\n style({ transform: 'scale(1)' }),\n animate(\n '{{ timings }}',\n keyframes([\n style({ transform: 'scale(1)', offset: 0 }),\n style({ transform: 'scale({{ scale }})', offset: 0.5 }),\n style({ transform: 'scale(1)', offset: 1 }),\n ]),\n ),\n])\n\n@Component({\n selector: 'seam-icon-notification',\n template: `\n <seam-icon\n *ngIf=\"icon && !hidden\"\n [@counterChange]=\"count\"\n [grayscaleOnDisable]=\"grayscaleOnDisable\"\n [disabled]=\"disabled\"\n [iconClass]=\"iconClass\"\n [icon]=\"icon\"\n [size]=\"size\"\n [showDefaultOnError]=\"showDefaultOnError\"\n [iconType]=\"iconType\"\n >\n </seam-icon>\n <ng-content select=\".sr-only\"></ng-content>\n `,\n styles: [\n `\n :host {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n }\n\n seam-icon {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 25% !important;\n height: 25% !important;\n min-width: 15px;\n min-height: 15px;\n }\n `,\n ],\n host: {\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n animations: [\n trigger('counterChange', [\n transition(\n ':increment',\n useAnimation(pulseAnimation, {\n params: {\n timings: '400ms ease-in-out',\n scale: 1.2,\n },\n }),\n ),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class IconNotificationComponent implements OnInit {\n static ngAcceptInputType_hidden: BooleanInput\n static ngAcceptInputType_grayscaleOnDisable: BooleanInput\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_showDefaultOnError: BooleanInput\n\n @Input() count: number | undefined | null\n\n @Input() @InputBoolean() hidden = false\n\n /** Toggles whether the img/icon will attempt to be grayscale when disabled is true. */\n @Input() @InputBoolean() grayscaleOnDisable = true\n\n /** Toggles the img/icon to grayscale if `grayscaleOnDisable` is true. */\n @Input() @InputBoolean() disabled = false\n\n /**\n * Placed on the `.seam-icon--fa` and `seam-icon--img` elements.\n */\n @Input() iconClass: string | undefined | null\n\n /**\n * The icon to display.\n *\n * If the input icon is a string an `img` element will be used with icon as `src`.\n * If the input is not a string it will be assumed to be a font-awesome IconProp object.\n */\n @Input() icon: SeamIcon | undefined | null = faCircle\n\n /**\n * Toggles whether an image that has thrown the `onerror` event should show\n * the `defaultIcon` instead.\n */\n @Input() @InputBoolean() showDefaultOnError = false\n\n /**\n * Shown if icon is not set or if showDefaultOnError is true and img has thrown an error.\n *\n * NOTE: Not supported for icon-notification yet.\n */\n // @Input() defaultIcon: SeamIcon\n\n /**\n * NOTE: Only works for fa-icon for now.\n */\n @Input() size: SizeProp | undefined | null\n\n @Input() iconType: TheSeamIconType | undefined | null = 'image-fill'\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit() {\n if (\n this._elementRef &&\n this._elementRef.nativeElement &&\n this._elementRef.nativeElement.parentElement\n ) {\n this._elementRef.nativeElement.parentElement.style.position = 'relative'\n }\n }\n\n // ngDoCheck() {}\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\n\nimport { IconBtnComponent } from './icon-btn/icon-btn.component'\nimport { IconNotificationComponent } from './icon-notification/icon-notification.component'\nimport { IconComponent } from './icon/icon.component'\n\n@NgModule({\n declarations: [IconComponent, IconBtnComponent, IconNotificationComponent],\n imports: [CommonModule, FontAwesomeModule],\n exports: [IconComponent, IconBtnComponent, IconNotificationComponent],\n})\nexport class TheSeamIconModule {}\n","import {\n faFile,\n faFileAlt,\n faFileArchive,\n faFileExcel,\n faFileImage,\n faFilePdf,\n faFilePowerpoint,\n faFileWord,\n} from '@fortawesome/free-regular-svg-icons'\n\nimport { SeamIcon } from '../icon'\n\nconst FILE_EXTENSION_ICONS: { [type: string]: SeamIcon } = {\n pdf: faFilePdf,\n doc: faFileWord,\n docx: faFileWord,\n xls: faFileExcel,\n xlsx: faFileExcel,\n gif: faFileImage,\n jpg: faFileImage,\n jpeg: faFileImage,\n png: faFileImage,\n zip: faFileArchive,\n ppt: faFilePowerpoint,\n pptx: faFilePowerpoint,\n txt: faFileAlt,\n json: faFileAlt,\n}\n\nexport const DEFAULT_FILE_EXTENSION_ICON: SeamIcon = faFile\n\nexport function fileExtensionIcon(\n extension: string | null | undefined,\n defaultIfNotFound: boolean = true,\n): SeamIcon | undefined {\n if (!extension) {\n return defaultIfNotFound ? DEFAULT_FILE_EXTENSION_ICON : undefined\n }\n\n let ext = extension\n if (ext.charAt(0) === '.') {\n ext = ext.substr(1)\n }\n\n const icon = FILE_EXTENSION_ICONS[ext]\n if (!icon && defaultIfNotFound) {\n return DEFAULT_FILE_EXTENSION_ICON\n }\n return icon\n}\n","import {\n faAddressCard,\n faBell,\n faBookmark,\n faCheckCircle,\n faClock,\n faComment,\n faEnvelope,\n faEnvelopeOpen,\n faFile,\n faFileAlt,\n faFileArchive,\n faFileAudio,\n faFileCode,\n faFileExcel,\n faFileImage,\n faFilePdf,\n faFilePowerpoint,\n faFileVideo,\n faFileWord,\n faFolder,\n faFolderOpen,\n faImage,\n faImages,\n faQuestionCircle,\n faSave,\n faStickyNote,\n faTimesCircle,\n faTrashAlt,\n faUser,\n faUserCircle,\n} from '@fortawesome/free-regular-svg-icons'\nimport {\n faBan,\n faChartArea,\n faChartBar,\n faChartLine,\n faCheck,\n faCloudUploadAlt,\n faCog,\n faEdit,\n faExclamation,\n faExclamationCircle,\n faExclamationTriangle,\n faExternalLinkSquareAlt,\n faFileContract,\n faFileCsv,\n faFileDownload,\n faFileExport,\n faFileImport,\n faFileInvoice,\n faFileInvoiceDollar,\n faFileMedical,\n faFileMedicalAlt,\n faFilePrescription,\n faFileSignature,\n faFileUpload,\n faInbox,\n faInfoCircle,\n faLock,\n faLockOpen,\n faPrint,\n faReceipt,\n faReply,\n faShare,\n faSignature,\n faTimes,\n faTrash,\n faUserCheck,\n faUserEdit,\n faUserPlus,\n faUsers,\n faUserTimes,\n} from '@fortawesome/free-solid-svg-icons'\n\nimport { SeamIcon } from '../icon'\n\n// TODO: Decide a good way to do this, so that we don't have to import full icon\n// libraries, but still provide icon choices to use from a string. One way could\n// be to define a dictionary of app icons that we can use that map a unique\n// string to an icon definition.\nconst knownIcons: { [key: string]: SeamIcon } = {\n faAddressCard,\n faBan,\n faBell,\n faBookmark,\n faChartLine,\n faChartArea,\n faChartBar,\n faCheck,\n faCheckCircle,\n faClock,\n faCloudUploadAlt,\n faComment,\n faCog,\n faEdit,\n faEnvelope,\n faEnvelopeOpen,\n faExclamation,\n faExclamationCircle,\n faExclamationTriangle,\n faExternalLinkSquareAlt,\n faFile,\n faFileAlt,\n faFileArchive,\n faFileAudio,\n faFileCode,\n faFileContract,\n faFileCsv,\n faFileDownload,\n faFileExcel,\n faFileExport,\n faFileImage,\n faFileImport,\n faFileInvoice,\n faFileInvoiceDollar,\n faFileMedical,\n faFileMedicalAlt,\n faFilePdf,\n faFilePowerpoint,\n faFilePrescription,\n faFileSignature,\n faFileUpload,\n faFileVideo,\n faFileWord,\n faFolder,\n faFolderOpen,\n faImage,\n faImages,\n faInbox,\n faInfoCircle,\n faLock,\n faLockOpen,\n faPrint,\n faQuestionCircle,\n faReceipt,\n faReply,\n faSave,\n faShare,\n faSignature,\n faStickyNote,\n faTimes,\n faTimesCircle,\n faTrash,\n faTrashAlt,\n faUser,\n faUserCheck,\n faUserCircle,\n faUserEdit,\n faUserTimes,\n faUsers,\n faUserPlus,\n}\n\nexport function getKnownIcon(iconStr: string): SeamIcon | undefined {\n return knownIcons[iconStr]\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n BaseHarnessFilters,\n ComponentHarnessConstructor,\n ContentContainerComponentHarness,\n HarnessPredicate,\n} from '@angular/cdk/testing'\n\nimport { IconDefinition, IconLookup } from '@fortawesome/fontawesome-svg-core'\nimport { hasProperty } from '@theseam/ui-common/utils'\n\nimport { SeamIcon } from '../icon'\n\n/**\n * Returns only IconLookup for FontAwesome icons\n */\nexport type TestSeamIcon = string | IconLookup\n\nexport function toIconLookup(icon: IconDefinition): IconLookup {\n if (isIconLookup(icon)) {\n return { prefix: icon.prefix, iconName: icon.iconName }\n }\n\n throw new Error(`Invalid icon type: ${typeof icon}`)\n}\n\nfunction isIconLookup(icon: any): icon is IconLookup {\n return hasProperty(icon, 'prefix') && hasProperty(icon, 'iconName')\n}\n\n/** A set of criteria that can be used to filter a list of `TheSeamIconComponentHarness` instances. */\nexport interface TheSeamIconComponentHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose text matches the given value. */\n icon?: string | RegExp | SeamIcon\n}\n\nexport class TheSeamIconComponentHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `TheSeamIconComponent` instance. */\n static hostSelector = 'seam-icon'\n\n private readonly _imgElement = this.locatorForOptional('img')\n private readonly _svgElement = this.locatorForOptional('fa-icon svg')\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a menu item with specific attributes.\n * @param options Options for filtering which menu item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends TheSeamIconComponentHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TheSeamIconComponentHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options).addOption(\n 'icon',\n options.icon,\n async (harness, icon) => {\n const _icon = await harness.getIcon()\n if (_icon === undefined) {\n return false\n }\n\n if (\n typeof _icon === 'string' &&\n (typeof icon === 'string' || icon instanceof RegExp)\n ) {\n return HarnessPredicate.stringMatches(_icon, icon)\n } else if (isIconLookup(_icon) && isIconLookup(icon)) {\n return (\n _icon.prefix === icon.prefix && _icon.iconName === icon.iconName\n )\n }\n\n return false\n },\n )\n }\n\n /** Whether the menu is disabled. */\n async isDisabled(): Promise<boolean> {\n const disabled = (await this.host())\n .getAttribute('class')\n .then((c) => (c === null ? false : c.indexOf('disabled') !== -1))\n return coerceBooleanProperty(await disabled)\n }\n\n /** Get icon image. */\n async getIcon(): Promise<TestSeamIcon | undefined> {\n const img = await this._imgElement()\n const svg = await this._svgElement()\n if (img === null && svg === null) {\n return undefined\n }\n\n if (img !== null) {\n const src = await img.getAttribute('src')\n return typeof src === 'string' ? src : undefined\n } else if (svg !== null) {\n const prefix = await svg.getAttribute('data-prefix')\n const icon = await svg.getAttribute('data-icon')\n if (prefix === null || icon === null) {\n return undefined\n }\n return { prefix, iconName: icon } as IconLookup\n }\n }\n\n /** Get icon type. */\n async getIconType(): Promise<string | undefined> {\n const iconType = await (await this.host()).getAttribute('icon-type')\n return typeof iconType === 'string' ? iconType : undefined\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.IconComponent"],"mappings":"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"}
@@ -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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"}