@studiohyperdrive/ngx-inform
Version:
A lightweight ARIA compliant customizable approach for common and complex inform flows in Angular.
1 lines • 39.7 kB
Source Map (JSON)
{"version":3,"file":"studiohyperdrive-ngx-inform.mjs","sources":["../../../../libs/angular/inform/src/lib/tokens/tooltip/tooltip-configuration.token.ts","../../../../libs/angular/inform/src/lib/tokens/modal/modal-configuration.token.ts","../../../../libs/angular/inform/src/lib/services/tooltip/tooltip.service.ts","../../../../libs/angular/inform/src/lib/services/modal/modal.service.ts","../../../../libs/angular/inform/src/lib/directives/tooltip/tooltip.directive.ts","../../../../libs/angular/inform/src/lib/providers/tooltip/tooltip-configuration.provider.ts","../../../../libs/angular/inform/src/lib/providers/modal/modal-configuration.provider.ts","../../../../libs/angular/inform/src/lib/abstracts/tooltip/tooltip.abstract.component.ts","../../../../libs/angular/inform/src/lib/abstracts/modal/modal.abstract.component.ts","../../../../libs/angular/inform/src/studiohyperdrive-ngx-inform.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { NgxTooltipConfiguration } from '../../types';\n\n/**\n * A token to provide the necessary configuration to the NgxTooltipDirective. This is exported\n * due to testing frameworks (like Storybook) not being able to resolve the InjectionToken in the\n * `provideNgxTooltipConfiguration`.\n */\nexport const NgxTooltipConfigurationToken = new InjectionToken<NgxTooltipConfiguration>(\n\t'NgxTooltipConfiguration'\n);\n","import { InjectionToken } from '@angular/core';\n\nimport { NgxModalConfiguration } from '../../types';\n\n/**\n * A token to provide the optional configuration to the NgxModalService\n */\n// This is exported due to testing frameworks (like Storybook) not being able to resolve the InjectionToken in the `provideNgxTooltipConfiguration`.\nexport const NgxModalConfigurationToken = new InjectionToken<NgxModalConfiguration>(\n\t'NgxModalConfiguration'\n);\n","import {\n\tConnectedPosition,\n\tOverlay,\n\tOverlayPositionBuilder,\n\tOverlayRef,\n} from '@angular/cdk/overlay';\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\nimport { BehaviorSubject, pairwise, Subject, takeUntil, tap } from 'rxjs';\nimport { NgxTooltipConfigurationToken } from '../../tokens';\nimport {\n\tNgxTooltipConfiguration,\n\tNgxTooltipEvent,\n\tNgxTooltipItem,\n\tNgxTooltipPosition,\n} from '../../types';\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class NgxTooltipService implements OnDestroy {\n\t// Iben: The id of the active tooltip\n\tprivate activeTooltip: string = undefined;\n\n\t/**\n\t * A subject to hold the tooltip events\n\t */\n\tprivate readonly tooltipEventsSubject: BehaviorSubject<NgxTooltipEvent | undefined> =\n\t\tnew BehaviorSubject<NgxTooltipEvent | undefined>(undefined);\n\n\t/**\n\t * A subject to hold the destroy event\n\t */\n\tprivate readonly onDestroySubject: Subject<void> = new Subject();\n\n\t/**\n\t * The overlayRef used to attach the tooltip too\n\t */\n\tprivate overlayRef: OverlayRef;\n\n\t/**\n\t * The position record for the tooltip\n\t */\n\tprivate readonly positionRecord: Record<NgxTooltipPosition, ConnectedPosition> = {\n\t\tbelow: { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n\t\tabove: { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n\t\tleft: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n\t\tright: { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' },\n\t};\n\n\tconstructor(\n\t\t@Inject(NgxTooltipConfigurationToken)\n\t\tprivate readonly configuration: NgxTooltipConfiguration,\n\t\tprivate readonly overlayService: Overlay,\n\t\tprivate readonly overlayPositionBuilder: OverlayPositionBuilder\n\t) {\n\t\t// Iben: Listen to the tooltip events and handle accordingly\n\t\tthis.tooltipEventsSubject\n\t\t\t.pipe(\n\t\t\t\tpairwise(),\n\t\t\t\ttap(([previous, next]) => {\n\t\t\t\t\t// Iben: When we enter an element, we show the tooltip\n\t\t\t\t\tif (next.active && next.source === 'element') {\n\t\t\t\t\t\t// Iben: Check if we have a previous element, and if so, if we have to remove it\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tprevious &&\n\t\t\t\t\t\t\tthis.overlayRef?.hasAttached() &&\n\t\t\t\t\t\t\tthis.activeTooltip !== next.id\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.removeToolTip();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Iben: Add the new tooltip\n\t\t\t\t\t\tconst { component, text, position, elementRef, id } = next;\n\n\t\t\t\t\t\tthis.showToolTip({\n\t\t\t\t\t\t\tcomponent: component,\n\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\tposition: position,\n\t\t\t\t\t\t\telementRef: elementRef,\n\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Iben: We do a check on previous here so we can continue safely in the upcoming checks\n\t\t\t\t\tif (!previous) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Iben: If we're entering a new element, we early exit\n\t\t\t\t\tif (previous.id !== next.id) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Iben: If the sources are the same, we check if we need to remove the tooltip\n\t\t\t\t\t// In this case we either leave the tooltip or leave the element\n\t\t\t\t\tif (previous.source === next.source) {\n\t\t\t\t\t\tif (!next.active) {\n\t\t\t\t\t\t\tthis.removeToolTip();\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Iben: If both actives are false (element => tooltip => outside or tooltip => element => outside), we remove the tooltip\n\t\t\t\t\tif (!next.active && !previous.active) {\n\t\t\t\t\t\tthis.removeToolTip();\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.onDestroySubject.asObservable())\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\t/**\n\t * Show a tooltip\n\t *\n\t * @param tooltip - The configuration of the tooltip\n\t */\n\tpublic showToolTip(tooltip: NgxTooltipItem): void {\n\t\t// Iben: If no tooltip was provided or if we already have a tooltip attached, we early exit\n\t\tif (!tooltip || this.overlayRef?.hasAttached()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Iben: Get the configuration of the tooltip\n\t\tconst { text, component, position, elementRef, id } = tooltip;\n\n\t\t// Iben: Set the active tooltip\n\t\tthis.activeTooltip = id;\n\n\t\t// Iben: Get the tooltip position. If no position was provided by the tooltip, we use the configured default, if none is configured we use 'above'\n\t\tconst tooltipPosition = position || this.configuration.defaultPosition || 'above';\n\n\t\t// Iben: If the previous overlayRef still exists, we remove it\n\t\tif (!this.overlayRef) {\n\t\t\tthis.overlayRef = this.overlayService.create({\n\t\t\t\t// Iben: Set the scroll strategy to reposition so that whenever the user scrolls, the tooltip is still near the element\n\t\t\t\tscrollStrategy: this.overlayService.scrollStrategies.reposition(),\n\t\t\t});\n\t\t}\n\n\t\t// Iben: Create the position of the overlay\n\t\tconst positionStrategy = this.overlayPositionBuilder\n\t\t\t.flexibleConnectedTo(elementRef)\n\t\t\t.withPositions([this.positionRecord[tooltipPosition]]);\n\n\t\t// Iben: Update the position of the current overlayRef\n\t\tthis.overlayRef.updatePositionStrategy(positionStrategy);\n\n\t\t// Iben: Create a new component portal\n\t\tconst tooltipPortal = new ComponentPortal(component || this.configuration.component);\n\n\t\t// Iben: Attach the tooltipPortal to the overlayRef\n\t\tconst tooltipRef = this.overlayRef.attach(tooltipPortal);\n\n\t\t// Iben: Pass the data to the component\n\t\tconst tooltipComponent = tooltipRef.instance;\n\n\t\ttooltipComponent.text = text;\n\t\ttooltipComponent.position = tooltipPosition;\n\t\ttooltipComponent.positionClass = `ngx-tooltip-position-${tooltipPosition}`;\n\t\ttooltipComponent.id = id;\n\t}\n\n\t/**\n\t * Removes the tooltip.\n\t */\n\tpublic removeToolTip(): void {\n\t\tif (this.activeTooltip) {\n\t\t\t// Iben: Unset the active tooltip\n\t\t\tthis.activeTooltip = undefined;\n\n\t\t\t// Iben: Remove the active tooltip from view\n\t\t\tthis.overlayRef.detach();\n\t\t}\n\t}\n\n\t/**\n\t * Dispatches the tooltip event to the subject\n\t *\n\t * @param event - A tooltip event\n\t */\n\tpublic setToolTipEvent(event: NgxTooltipEvent): void {\n\t\t// Iben: We add a delay so that the user can navigate between the tooltip and the element\n\t\tsetTimeout(\n\t\t\t() => {\n\t\t\t\tthis.tooltipEventsSubject.next(event);\n\t\t\t},\n\t\t\tevent.active ? 0 : 100\n\t\t);\n\t}\n\n\t/**\n\t * Emit the destroy event\n\t */\n\tpublic ngOnDestroy(): void {\n\t\tthis.onDestroySubject.next();\n\t\tthis.onDestroySubject.complete();\n\t}\n}\n","import { Inject, Injectable, Optional, Type } from '@angular/core';\nimport { Dialog } from '@angular/cdk/dialog';\nimport {\n\tBehaviorSubject,\n\tcombineLatest,\n\tfilter,\n\tmap,\n\tNEVER,\n\tObservable,\n\tstartWith,\n\ttakeUntil,\n\ttap,\n} from 'rxjs';\n\nimport { NgxModalActionType, NgxModalConfiguration, NgxModalOptions } from '../../types';\nimport { NgxModalConfigurationToken } from '../../tokens';\nimport { NgxModalAbstractComponent } from '../../abstracts';\n\n/**\n * A wrapper service to Angular CDK Dialog that provides a WCAG/ARIA compliant implementation of modals\n *\n * @export\n * @class NgxModalService\n */\n@Injectable({ providedIn: 'root' })\nexport class NgxModalService {\n\t/**\n\t * A subject that keeps track of whether a modal is currently active\n\t */\n\tprivate hasModalSubject: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n\t/**\n\t * An observable that keeps track of whether a modal is currently active.\n\t */\n\tpublic readonly hasActiveModal$: Observable<boolean> = this.hasModalSubject.asObservable();\n\n\tconstructor(\n\t\t@Optional()\n\t\t@Inject(NgxModalConfigurationToken)\n\t\tprivate readonly configuration: NgxModalConfiguration,\n\t\tprivate readonly dialogService: Dialog\n\t) {}\n\n\t/**\n\t * Opens a modal based on the provided options\n\t *\n\t * @param {NgxModalOptions<ActionType>} options - The modal options\n\t */\n\tpublic open<ActionType extends NgxModalActionType = string, DataType = any>(\n\t\toptions: NgxModalOptions<ActionType, DataType>\n\t): Observable<ActionType> {\n\t\t// Iben: If a previous modal is still active, we early exit.\n\t\tif (this.hasModalSubject.value) {\n\t\t\tconsole.warn(\n\t\t\t\t'NgxInform: An active modal is currently displayed, close the active modal before opening a new one'\n\t\t\t);\n\n\t\t\treturn NEVER;\n\t\t}\n\n\t\t// Iben: Declare the modal as active\n\t\tthis.hasModalSubject.next(true);\n\n\t\t// Iben: Fetch the type of component we wish to show\n\t\tconst configuration = this.configuration?.modals?.[options.type];\n\t\tconst component: Type<NgxModalAbstractComponent<ActionType, DataType>> =\n\t\t\toptions.component ||\n\t\t\t(configuration.component as Type<NgxModalAbstractComponent<ActionType, DataType>>);\n\n\t\t// Iben: Check if all the correct parameters are set and return NEVER when they're not correctly set\n\t\tif (!this.runARIAChecks<ActionType>(options, component)) {\n\t\t\treturn NEVER;\n\t\t}\n\n\t\t// Iben: Render the modal\n\t\tconst modal = this.createModalComponent<ActionType, DataType>(options, component);\n\n\t\t// Iben: Return the modal action\n\t\treturn combineLatest([\n\t\t\t// Iben: Set the start value to undefined so both actions at least emit once\n\t\t\tmodal.action.pipe(startWith(undefined)),\n\t\t\tmodal.close.pipe(\n\t\t\t\t// Iben: Map so we can keep the emit value void, but can work with the filter later down the line\n\t\t\t\tmap(() => 'NgxModalClose'),\n\t\t\t\t// Iben: Set the start value to undefined so both actions at least emit once\n\t\t\t\tstartWith(undefined)\n\t\t\t),\n\t\t]).pipe(\n\t\t\t// Iben: Only emit if one of the two actions actually has an emit\n\t\t\tfilter(([action, closed]: [ActionType, 'NgxModalClose']) => {\n\t\t\t\treturn Boolean(action) || Boolean(closed);\n\t\t\t}),\n\t\t\tmap(([action, closed]: [ActionType, 'NgxModalClose']) => {\n\t\t\t\treturn closed || action;\n\t\t\t}),\n\t\t\ttap((action: ActionType | 'NgxModalClose') => {\n\t\t\t\t// Iben: If the autoClose is specifically set to false, we early exit unless we're running in a close event\n\t\t\t\tif (\n\t\t\t\t\taction !== 'NgxModalClose' &&\n\t\t\t\t\t((options.autoClose !== undefined && options.autoClose === false) ||\n\t\t\t\t\t\t(configuration?.autoClose !== undefined &&\n\t\t\t\t\t\t\tconfiguration.autoClose === false))\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Iben: Close the modal\n\t\t\t\tthis.close(options.onClose);\n\t\t\t}),\n\t\t\t// Iben: Map the action back to the ActionType\n\t\t\tmap((action: ActionType | 'NgxModalClose') => {\n\t\t\t\treturn action === 'NgxModalClose' ? undefined : (action as ActionType);\n\t\t\t}),\n\t\t\t// Wouter: Unsubscribe wen no modal is open\n\t\t\ttakeUntil(this.hasModalSubject.pipe(filter((hasModal) => !hasModal)))\n\t\t);\n\t}\n\n\t/**\n\t * Closes the currently active modal\n\t *\n\t * * @param onClose - An optional onClose function\n\t */\n\tpublic close(onClose?: () => void): void {\n\t\t// Iben: Close the modal\n\t\tthis.dialogService.closeAll();\n\n\t\t// Wouter: The setTimeout delay is needed, so that the `open` method can emit before its subscription end gets triggered\n\t\tsetTimeout(() => {\n\t\t\t// Iben: Mark the modal as closed\n\t\t\tthis.hasModalSubject.next(false);\n\t\t});\n\t\t// Iben: Run an optional onClose function\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\t/**\n\t * Checks if all the necessary preconditions are met\n\t *\n\t * @param options - The options of the modal\n\t * @param component - The component we wish to render\n\t */\n\tprivate runARIAChecks<ActionType extends NgxModalActionType>(\n\t\toptions: NgxModalOptions<ActionType>,\n\t\tcomponent: Type<NgxModalAbstractComponent<ActionType>>\n\t): boolean {\n\t\t// Iben: If no component was found, we return NEVER and throw an error\n\t\tif (!component) {\n\t\t\tconsole.error(\n\t\t\t\t'NgxInform: No component was provided or found in the configuration to render.'\n\t\t\t);\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// Iben: If no description was provided when required, we return NEVER and throw an error\n\t\tif (!this.hasRequiredDescription(options)) {\n\t\t\tconsole.error(\n\t\t\t\t'NgxInform: The role of the modal was set to \"alertdialog\" but no \"describedById\" was provided.'\n\t\t\t);\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Creates the modal component\n\t *\n\t * @param options - The options of the modal\n\t * @param component - The component we wish to render\n\t */\n\tprivate createModalComponent<ActionType extends NgxModalActionType, DataType = any>(\n\t\toptions: NgxModalOptions<ActionType>,\n\t\tcomponent: Type<NgxModalAbstractComponent<ActionType, DataType>>\n\t): NgxModalAbstractComponent<ActionType> {\n\t\tconst configuration = this.configuration?.modals?.[options.type];\n\n\t\t// Iben: Create the modal and render it\n\t\tconst dialogRef = this.dialogService.open(component, {\n\t\t\trole: configuration?.role || options.role,\n\t\t\tariaLabel: options.label,\n\t\t\tariaLabelledBy: options.labelledById,\n\t\t\tariaDescribedBy: options.describedById,\n\t\t\tdisableClose: true,\n\t\t\trestoreFocus: this.getValue(undefined, options.restoreFocus, true),\n\t\t\tautoFocus: this.getValue(undefined, options.autoFocus, true),\n\t\t\tviewContainerRef: options.viewContainerRef,\n\t\t\tdirection: configuration?.direction || options.direction,\n\t\t\thasBackdrop: this.getValue(configuration?.hasBackdrop, options.hasBackdrop, true),\n\t\t\tpanelClass: this.getValue(configuration?.panelClass, options.panelClass, []),\n\t\t\tcloseOnNavigation: this.getValue(\n\t\t\t\tconfiguration?.closeOnNavigation,\n\t\t\t\toptions.closeOnNavigation,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcloseOnDestroy: true,\n\t\t\tcloseOnOverlayDetachments: true,\n\t\t});\n\t\tconst modal = dialogRef.componentInstance;\n\n\t\t// Iben: Set the data of the modal\n\t\tmodal.data = this.getValue(configuration?.data, options.data, undefined);\n\t\tmodal.ariaDescribedBy = options.describedById;\n\t\tmodal.ariaLabelledBy = options.labelledById;\n\n\t\treturn modal;\n\t}\n\n\t/**\n\t * Checks if the description is provided when the role requires it\n\t *\n\t * @param options - The options of the modal\n\t */\n\tprivate hasRequiredDescription<ActionType extends NgxModalActionType>(\n\t\toptions: NgxModalOptions<ActionType>\n\t): boolean {\n\t\t// Iben: If the options has provided a default type, we check based on the configuration role\n\t\tif (options.type) {\n\t\t\tconst configuration = this.configuration?.modals[options.type];\n\n\t\t\treturn !(configuration.role === 'alertdialog' && !options.describedById);\n\t\t}\n\n\t\t// Iben: Check based on the options role\n\t\treturn !(options.role === 'alertdialog' && !options.describedById);\n\t}\n\n\t/**\n\t * Returns a value based on whether one of the overwrites is defined\n\t *\n\t * @private\n\t * @param configurationValue - The overwrite on configuration level\n\t * @param optionsValue - The overwrite on options level\n\t * @param defaultValue - The default value if no overwrite was defined\n\t */\n\tprivate getValue(configurationValue: any, optionsValue: any, defaultValue: any): any {\n\t\tif (configurationValue === undefined && optionsValue === undefined) {\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\tif (optionsValue !== undefined) {\n\t\t\treturn optionsValue;\n\t\t}\n\n\t\treturn configurationValue;\n\t}\n}\n","import { Directive, ElementRef, HostBinding, HostListener, Input, Type } from '@angular/core';\nimport { UUID } from 'angular2-uuid';\n\nimport { NgxTooltipAbstractComponent } from '../../abstracts';\nimport { NgxTooltipPosition } from '../../types';\nimport { NgxTooltipService } from '../../services';\n\n/**\n * A directive that adds a ARIA compliant tooltip to a component\n *\n * @export\n * @class NgxTooltipDirective\n */\n@Directive({\n\tselector: '[ngxTooltip]',\n\tstandalone: true,\n})\nexport class NgxTooltipDirective {\n\t/**\n\t * Show the tooltip on hover\n\t */\n\t@HostListener('mouseenter') showOnMouseEnter() {\n\t\tthis.showTooltip();\n\t}\n\n\t/**\n\t * Show the tooltip on focus\n\t */\n\t@HostListener('focus') showOnFocus() {\n\t\tthis.showTooltip();\n\t}\n\n\t/**\n\t * Remove the tooltip on leaving hover\n\t */\n\t@HostListener('mouseleave') removeOnMouseOut() {\n\t\tthis.removeTooltip();\n\t}\n\n\t/**\n\t * Remove the tooltip on blur\n\t */\n\t@HostListener('blur') removeOnBlur() {\n\t\tthis.removeTooltip();\n\t}\n\n\t/**\n\t * Remove the tooltip on escape pressed\n\t */\n\t@HostListener('document:keydown.escape') onEscape() {\n\t\tthis.tooltipService.removeToolTip();\n\t}\n\n\t/**\n\t * Make the item tabbable\n\t */\n\t@HostBinding('tabIndex') private readonly index = 0;\n\n\t/**\n\t * The id of the tooltip, unique in the DOM, required for accessibility. By default, this is an autogenerated UUID.\n\t */\n\t@HostBinding('attr.aria-describedby') @Input() public ngxTooltipId: string = UUID.UUID();\n\n\t/**\n\t * The text of the tooltip\n\t */\n\t@Input({ required: true }) public ngxTooltip: string;\n\n\t/**\n\t * An optional component we can pass to replace the default configured component\n\t */\n\t@Input() public ngxTooltipComponent: Type<NgxTooltipAbstractComponent>;\n\n\t/**\n\t * An optional position we can pass to tooltip, by default this is 'above'.\n\t */\n\t// Iben: The default is set in the NgxTooltipService\n\t@Input() public ngxTooltipPosition: NgxTooltipPosition;\n\n\t/**\n\t * Prevent the tooltip from being shown, by default this is false.\n\t */\n\t@Input() public ngxTooltipDisabled: boolean = false;\n\n\tconstructor(\n\t\tprivate readonly tooltipService: NgxTooltipService,\n\t\tprivate readonly elementRef: ElementRef\n\t) {}\n\n\t/**\n\t * Show the tooltip if it is not visible yet\n\t */\n\tprivate showTooltip(): void {\n\t\t// Iben: Early exit when the tooltip is disabled\n\t\tif (this.ngxTooltipDisabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Iben: Show the tooltip\n\t\tthis.tooltipService.setToolTipEvent({\n\t\t\ttext: this.ngxTooltip,\n\t\t\tposition: this.ngxTooltipPosition,\n\t\t\tcomponent: this.ngxTooltipComponent,\n\t\t\telementRef: this.elementRef,\n\t\t\tid: this.ngxTooltipId,\n\t\t\tsource: 'element',\n\t\t\tactive: true,\n\t\t});\n\t}\n\n\t/**\n\t * Remove the tooltip\n\t */\n\tprivate removeTooltip(): void {\n\t\t// Iben: Early exit when the tooltip is disabled\n\t\tif (this.ngxTooltipDisabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Iben: Emit a remove event\n\t\tthis.tooltipService.setToolTipEvent({\n\t\t\tid: this.ngxTooltipId,\n\t\t\tsource: 'element',\n\t\t\tactive: false,\n\t\t});\n\t}\n}\n","import { Provider } from '@angular/core';\nimport { NgxTooltipConfiguration } from '../../types';\nimport { NgxTooltipConfigurationToken } from '../../tokens';\n\n/**\n * Provides the configuration for the NgxTooltipDirective\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxTooltipConfiguration = (\n\tconfiguration: NgxTooltipConfiguration\n): Provider => {\n\treturn {\n\t\tprovide: NgxTooltipConfigurationToken,\n\t\tuseValue: configuration,\n\t};\n};\n","import { Provider } from '@angular/core';\nimport { NgxModalConfiguration } from '../../types';\nimport { NgxModalConfigurationToken } from '../../tokens';\n\n/**\n * Provides the configuration for the NgxModalService\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxModalConfiguration = (configuration: NgxModalConfiguration): Provider => {\n\treturn {\n\t\tprovide: NgxModalConfigurationToken,\n\t\tuseValue: configuration,\n\t};\n};\n","import { Directive, HostBinding, HostListener, Input } from '@angular/core';\n\nimport { NgxTooltipPosition, NgxTooltipPositionClass } from '../../types';\nimport { NgxTooltipService } from '../../services';\n\n/**\n * An abstract for the NgxTooltipDirective\n */\n@Directive()\nexport abstract class NgxTooltipAbstractComponent {\n\t/**\n\t * Set tooltip as active\n\t */\n\t@HostListener('mouseenter') showOnMouseEnter() {\n\t\tthis.ngxTooltipService.setToolTipEvent({\n\t\t\tid: this.id,\n\t\t\tsource: 'tooltip',\n\t\t\tactive: true,\n\t\t});\n\t}\n\n\t/**\n\t * Set the tooltip as inactive\n\t */\n\t@HostListener('mouseleave') removeOnMouseOut() {\n\t\tthis.ngxTooltipService.setToolTipEvent({\n\t\t\tid: this.id,\n\t\t\tsource: 'tooltip',\n\t\t\tactive: false,\n\t\t});\n\t}\n\n\t/**\n\t * The role of the component\n\t */\n\t@HostBinding('role') public readonly role = 'tooltip';\n\n\t/**\n\t * The position class of the tooltip\n\t */\n\t@HostBinding('class') @Input() public positionClass: NgxTooltipPositionClass;\n\n\t/**\n\t * The id of the tooltip\n\t */\n\t@HostBinding('id') @Input({ required: true }) public id: string;\n\n\t/**\n\t * The current position of the tooltip\n\t */\n\t@Input({ required: true }) public position: NgxTooltipPosition;\n\n\t/**\n\t * The text of the tooltip\n\t */\n\t@Input({ required: true }) public text: string;\n\n\tconstructor(private readonly ngxTooltipService: NgxTooltipService) {}\n}\n","import {\n\tAfterViewInit,\n\tDirective,\n\tElementRef,\n\tEventEmitter,\n\tHostListener,\n\tInject,\n\tInput,\n\tOutput,\n\tPLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { NgxModalActionType } from '../../types';\n\n/**\n * An abstract for the NgxModalService\n */\n@Directive()\nexport class NgxModalAbstractComponent<ActionType extends NgxModalActionType, DataType = any>\n\timplements AfterViewInit\n{\n\t/**\n\t * Remove the modal on escape pressed\n\t */\n\t@HostListener('document:keydown.escape') private onEscape() {\n\t\tthis.close.emit();\n\t}\n\n\t/**\n\t * An optional aria-labelledby property\n\t */\n\t@Input() public ariaLabelledBy: string;\n\n\t/**\n\t * An optional aria-describedBy property\n\t */\n\t@Input() public ariaDescribedBy: string;\n\n\t/**\n\t * Optional data that can be passed to the modal\n\t */\n\t@Input() public data: DataType;\n\n\t/**\n\t * An emitter that will emit an action we can later respond to\n\t */\n\t@Output() public action: EventEmitter<ActionType> = new EventEmitter<ActionType>();\n\n\t/**\n\t * An emitter that will emit if the modal is closed\n\t */\n\t@Output() public close: EventEmitter<void> = new EventEmitter<void>();\n\n\tconstructor(\n\t\t@Inject(PLATFORM_ID) private platformId: string,\n\t\tprivate readonly elementRef: ElementRef<HTMLElement>\n\t) {}\n\n\tpublic ngAfterViewInit(): void {\n\t\t// Iben: If we are in the browser, check if either of the two accessibility labels are set\n\t\tif (isPlatformBrowser(this.platformId) && (this.ariaLabelledBy || this.ariaDescribedBy)) {\n\t\t\t// Iben: Find the element with the id and the parent\n\t\t\tconst element = document.getElementById(this.ariaLabelledBy || this.ariaDescribedBy);\n\t\t\tconst parent = this.elementRef.nativeElement;\n\n\t\t\t// Iben: If no corresponding element was found or if it isn't part of the modal, throw an error\n\t\t\tif (!element || !parent.contains(element)) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`NgxModalAbstractComponent: The ${\n\t\t\t\t\t\tthis.ariaLabelledBy ? '\"aria-labelledBy\"' : 'aria-describedBy'\n\t\t\t\t\t} property was passed to the modal but no element with said id was found. Because of that, the necessary accessibility attributes could not be set. Please add an id with the value \"${\n\t\t\t\t\t\tthis.ariaLabelledBy || this.ariaDescribedBy\n\t\t\t\t\t}\" to an element of the modal.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.NgxTooltipService"],"mappings":"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"}