ng-primitives 0.114.0 → 0.114.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dialog/index.d.ts
CHANGED
|
@@ -54,12 +54,15 @@ declare class NgpDialogDescription implements OnDestroy {
|
|
|
54
54
|
|
|
55
55
|
declare class NgpDialogOverlay {
|
|
56
56
|
private readonly dialogRef;
|
|
57
|
+
private startedPointerDownOnOverlay;
|
|
57
58
|
/**
|
|
58
59
|
* Whether the dialog should close on backdrop click.
|
|
59
60
|
* @default `true`
|
|
60
61
|
*/
|
|
61
62
|
readonly closeOnClick: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
62
|
-
protected
|
|
63
|
+
protected onPointerDown(event: Event): void;
|
|
64
|
+
protected onClick(event: Event): void;
|
|
65
|
+
protected resetPointerOrigin(): void;
|
|
63
66
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgpDialogOverlay, never>;
|
|
64
67
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpDialogOverlay, "[ngpDialogOverlay]", ["ngpDialogOverlay"], { "closeOnClick": { "alias": "ngpDialogOverlayCloseOnClick"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.NgpExitAnimation; inputs: {}; outputs: {}; }]>;
|
|
65
68
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, input, Directive, booleanAttribute,
|
|
2
|
+
import { InjectionToken, inject, input, Directive, booleanAttribute, ApplicationRef, Injector, ViewContainerRef, isDevMode, Injectable, output, HostListener, signal } from '@angular/core';
|
|
3
3
|
import { uniqueId, onChange } from 'ng-primitives/utils';
|
|
4
4
|
import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
|
|
5
5
|
import * as i1 from 'ng-primitives/internal';
|
|
@@ -214,6 +214,7 @@ function injectDialogRef() {
|
|
|
214
214
|
class NgpDialogOverlay {
|
|
215
215
|
constructor() {
|
|
216
216
|
this.dialogRef = injectDialogRef();
|
|
217
|
+
this.startedPointerDownOnOverlay = false;
|
|
217
218
|
/**
|
|
218
219
|
* Whether the dialog should close on backdrop click.
|
|
219
220
|
* @default `true`
|
|
@@ -224,13 +225,24 @@ class NgpDialogOverlay {
|
|
|
224
225
|
transform: booleanAttribute,
|
|
225
226
|
}]));
|
|
226
227
|
}
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
onPointerDown(event) {
|
|
229
|
+
this.startedPointerDownOnOverlay = event.target === event.currentTarget;
|
|
230
|
+
}
|
|
231
|
+
onClick(event) {
|
|
232
|
+
const shouldClose = this.startedPointerDownOnOverlay &&
|
|
233
|
+
event.target === event.currentTarget &&
|
|
234
|
+
this.closeOnClick() &&
|
|
235
|
+
!this.dialogRef.disableClose;
|
|
236
|
+
this.resetPointerOrigin();
|
|
237
|
+
if (shouldClose) {
|
|
229
238
|
this.dialogRef.close(undefined, 'mouse');
|
|
230
239
|
}
|
|
231
240
|
}
|
|
241
|
+
resetPointerOrigin() {
|
|
242
|
+
this.startedPointerDownOnOverlay = false;
|
|
243
|
+
}
|
|
232
244
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpDialogOverlay, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
233
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpDialogOverlay, isStandalone: true, selector: "[ngpDialogOverlay]", inputs: { closeOnClick: { classPropertyName: "closeOnClick", publicName: "ngpDialogOverlayCloseOnClick", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "
|
|
245
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpDialogOverlay, isStandalone: true, selector: "[ngpDialogOverlay]", inputs: { closeOnClick: { classPropertyName: "closeOnClick", publicName: "ngpDialogOverlayCloseOnClick", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerdown": "onPointerDown($event)", "click": "onClick($event)", "pointercancel": "resetPointerOrigin()" } }, exportAs: ["ngpDialogOverlay"], hostDirectives: [{ directive: i1.NgpExitAnimation }], ngImport: i0 }); }
|
|
234
246
|
}
|
|
235
247
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpDialogOverlay, decorators: [{
|
|
236
248
|
type: Directive,
|
|
@@ -238,11 +250,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
238
250
|
selector: '[ngpDialogOverlay]',
|
|
239
251
|
exportAs: 'ngpDialogOverlay',
|
|
240
252
|
hostDirectives: [NgpExitAnimation],
|
|
253
|
+
host: {
|
|
254
|
+
'(pointerdown)': 'onPointerDown($event)',
|
|
255
|
+
'(click)': 'onClick($event)',
|
|
256
|
+
'(pointercancel)': 'resetPointerOrigin()',
|
|
257
|
+
},
|
|
241
258
|
}]
|
|
242
|
-
}], propDecorators: { closeOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpDialogOverlayCloseOnClick", required: false }] }]
|
|
243
|
-
type: HostListener,
|
|
244
|
-
args: ['click']
|
|
245
|
-
}] } });
|
|
259
|
+
}], propDecorators: { closeOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpDialogOverlayCloseOnClick", required: false }] }] } });
|
|
246
260
|
|
|
247
261
|
class NgpDialogTitle {
|
|
248
262
|
constructor() {
|
|
@@ -359,9 +373,14 @@ class NgpDialogManager {
|
|
|
359
373
|
// Auto-detect parent overlay: if the trigger element lives inside an existing overlay
|
|
360
374
|
// (e.g. a dialog opened from a popover), register as its child so that clicks inside
|
|
361
375
|
// the dialog don't dismiss the parent overlay.
|
|
362
|
-
|
|
376
|
+
// Only inherit parentId from other dialogs — non-dialog overlays (menus, popovers)
|
|
377
|
+
// may close after triggering the dialog open, which would cascade-close the dialog.
|
|
378
|
+
let parentId = activeElement instanceof HTMLElement
|
|
363
379
|
? this.registry.findContainingOverlay(activeElement)
|
|
364
380
|
: null;
|
|
381
|
+
if (parentId !== null && !this.openDialogs.some(d => d.id === parentId)) {
|
|
382
|
+
parentId = null;
|
|
383
|
+
}
|
|
365
384
|
// Register with the overlay registry for centralized escape-key routing.
|
|
366
385
|
// outsidePress is false because the NgpDialogOverlay directive handles its own backdrop clicks.
|
|
367
386
|
this.registry.register({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-dialog.mjs","sources":["../../../../packages/ng-primitives/dialog/src/config/dialog-config.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog-state.ts","../../../../packages/ng-primitives/dialog/src/dialog-description/dialog-description.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog-ref.ts","../../../../packages/ng-primitives/dialog/src/dialog-overlay/dialog-overlay.ts","../../../../packages/ng-primitives/dialog/src/dialog-title/dialog-title.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog.service.ts","../../../../packages/ng-primitives/dialog/src/dialog-trigger/dialog-trigger.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog.ts","../../../../packages/ng-primitives/dialog/src/ng-primitives-dialog.ts"],"sourcesContent":["import { InjectionToken, Injector, Provider, ViewContainerRef, inject } from '@angular/core';\nimport { ScrollStrategy } from 'ng-primitives/portal';\n\n/** Valid ARIA roles for a dialog. */\nexport type NgpDialogRole = 'dialog' | 'alertdialog';\n\nexport interface NgpDialogConfig<T = any> {\n /** The view container to attach the dialog to. */\n viewContainerRef?: ViewContainerRef;\n\n /** The injector to use for the dialog. Defaults to the view container's injector.*/\n injector?: Injector;\n\n /** ID for the dialog. If omitted, a unique one will be generated. */\n id?: string;\n\n /** The role of the dialog. */\n role?: NgpDialogRole;\n\n /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n modal?: boolean;\n\n /**\n * Whether the dialog should close when the user navigates. This includes both browser history\n * navigation (back/forward) and programmatic route changes (e.g. router.navigate()).\n */\n closeOnNavigation?: boolean;\n\n /** Whether the dialog should close when the user presses the escape key. */\n closeOnEscape?: boolean;\n\n /** Whether the dialog should close when the user clicks the overlay. */\n closeOnClick?: boolean;\n\n /** Scroll strategy to be used for the dialog. */\n scrollStrategy?: ScrollStrategy;\n\n data?: T;\n}\n\nexport const defaultDialogConfig: NgpDialogConfig = {\n role: 'dialog',\n modal: true,\n closeOnNavigation: true,\n closeOnEscape: true,\n closeOnClick: true,\n};\n\nexport const NgpDialogConfigToken = new InjectionToken<NgpDialogConfig>('NgpDialogConfigToken');\n\n/**\n * Provide the default Dialog configuration\n * @param config The Dialog configuration\n * @returns The provider\n */\nexport function provideDialogConfig(config: Partial<NgpDialogConfig>): Provider[] {\n return [\n {\n provide: NgpDialogConfigToken,\n useValue: { ...defaultDialogConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Dialog configuration\n * @returns The global Dialog configuration\n */\nexport function injectDialogConfig(): NgpDialogConfig {\n return inject(NgpDialogConfigToken, { optional: true }) ?? defaultDialogConfig;\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpDialog } from './dialog';\n\n/**\n * The state token for the Dialog primitive.\n */\nexport const NgpDialogStateToken = createStateToken<NgpDialog<any, any>>('Dialog');\n\n/**\n * Provides the Dialog state.\n */\nexport const provideDialogState = createStateProvider(NgpDialogStateToken);\n\n/**\n * Injects the Dialog state.\n */\nexport const injectDialogState = createStateInjector<NgpDialog>(NgpDialogStateToken);\n\n/**\n * The Dialog state registration function.\n */\nexport const dialogState = createState(NgpDialogStateToken);\n","import { Directive, input, OnDestroy } from '@angular/core';\nimport { onChange, uniqueId } from 'ng-primitives/utils';\nimport { injectDialogState } from '../dialog/dialog-state';\n\n@Directive({\n selector: '[ngpDialogDescription]',\n exportAs: 'ngpDialogDescription',\n host: {\n '[id]': 'id()',\n },\n})\nexport class NgpDialogDescription implements OnDestroy {\n /** Access the dialog */\n private readonly dialog = injectDialogState();\n\n /** The id of the descriptions. */\n readonly id = input<string>(uniqueId('ngp-dialog-description'));\n\n constructor() {\n onChange(this.id, (id, prevId) => {\n if (prevId) {\n this.dialog().removeDescribedBy(prevId);\n }\n\n if (id) {\n this.dialog().setDescribedBy(id);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.dialog().removeDescribedBy(this.id());\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { inject, Injector } from '@angular/core';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport { NgpOverlayRef } from 'ng-primitives/portal';\nimport { defer, EMPTY, fromEvent, Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport { NgpDialogConfig } from '../config/dialog-config';\n\n/** Minimal portal interface needed by the dialog ref. */\nexport interface NgpDialogPortalRef {\n getElements(): HTMLElement[];\n detach(immediate?: boolean): Promise<void>;\n}\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nexport class NgpDialogRef<T = unknown, R = unknown> implements NgpOverlayRef {\n /** Whether the user is allowed to close the dialog. */\n disableClose: boolean | undefined;\n\n /** Whether the escape key is allowed to close the dialog. */\n closeOnEscape: boolean | undefined;\n\n /** Emits when the dialog has been closed. */\n readonly closed = new Subject<{ focusOrigin?: FocusOrigin; result?: R }>();\n\n /**\n * Observable that emits the dialog result when closed.\n */\n readonly afterClosed: Observable<R | undefined> = this.closed.pipe(map(event => event.result));\n\n /** Data passed from the dialog opener. */\n readonly data: T;\n\n /** Unique ID for the dialog. */\n readonly id: string;\n\n /** @internal Store the injector */\n injector: Injector | undefined;\n\n /** Whether the dialog is closing. */\n private closing = false;\n\n /** @internal Portal reference for element access and detach. */\n portal: NgpDialogPortalRef | null = null;\n\n /** Emits on keyboard events within the dialog. */\n readonly keydownEvents: Observable<KeyboardEvent>;\n\n /**\n * Emits pointer events (click, auxclick, contextmenu) that happen outside of the dialog.\n * Fed by the NgpOverlayRegistry with CDK-compatible stacking awareness.\n * @internal\n */\n readonly outsidePointerEvents$ = new Subject<MouseEvent>();\n\n /** Emits on pointer events that happen outside of the dialog. */\n readonly outsidePointerEvents: Observable<MouseEvent> = this.outsidePointerEvents$.asObservable();\n\n constructor(\n readonly config: NgpDialogConfig<T>,\n private readonly document: Document,\n ) {\n this.data = config.data as T;\n this.id = config.id!; // By the time the dialog is created we are guaranteed to have an ID.\n this.closeOnEscape = config.closeOnEscape ?? true;\n\n // Use defer() so the observable is created on subscribe — by then the portal will be set.\n this.keydownEvents = defer(() => {\n const elements = this.getElements();\n if (!elements.length) return EMPTY;\n return fromEvent<KeyboardEvent>(this.document, 'keydown').pipe(\n filter(event => elements.some(el => el.contains(event.target as Node))),\n takeUntil(this.closed),\n );\n });\n }\n\n /**\n * Updates the position of the dialog. No-op since dialogs are CSS-centered.\n */\n updatePosition(): this {\n return this;\n }\n\n /**\n * NgpOverlayRef implementation — called by the registry for escape-key dismiss.\n */\n hide(options?: { immediate?: boolean; origin?: FocusOrigin }): void {\n if (this.disableClose) {\n return;\n }\n this.close(undefined, options?.origin);\n }\n\n /**\n * NgpOverlayRef implementation — called by the registry for descendant cascade.\n * Skips exit animations and tears down immediately.\n */\n async hideImmediate(): Promise<void> {\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n\n // Detach the portal immediately — no exit animation\n if (this.portal) {\n await this.portal.detach(true);\n this.portal = null;\n }\n\n this.closed.next({});\n this.closed.complete();\n }\n\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param focusOrigin The origin of the focus event that triggered the close.\n */\n async close(result?: R, focusOrigin?: FocusOrigin): Promise<void> {\n // If the dialog is already closed, do nothing.\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n\n const exitAnimationManager = this.injector?.get(NgpExitAnimationManager, undefined, {\n optional: true,\n });\n if (exitAnimationManager) {\n await exitAnimationManager.exit();\n }\n\n // Detach the portal (immediate since exit animation already ran)\n if (this.portal) {\n await this.portal.detach(true);\n this.portal = null;\n }\n\n this.closed.next({ focusOrigin, result });\n this.closed.complete();\n }\n\n /**\n * @deprecated Access dialog methods directly instead (keydownEvents, outsidePointerEvents,\n * updatePosition, close). This shim will be removed in the next major version.\n */\n get overlayRef(): {\n keydownEvents: () => Observable<KeyboardEvent>;\n outsidePointerEvents: () => Observable<MouseEvent>;\n updatePosition: () => NgpDialogRef<T, R>;\n dispose: () => Promise<void>;\n detachments: () => Observable<{ focusOrigin?: FocusOrigin; result?: R }>;\n overlayElement: HTMLElement | undefined;\n } {\n return {\n keydownEvents: () => this.keydownEvents,\n outsidePointerEvents: () => this.outsidePointerEvents,\n updatePosition: () => this.updatePosition(),\n dispose: () => this.close(),\n detachments: () => this.closed.asObservable(),\n overlayElement: this.getElements()[0] as HTMLElement | undefined,\n };\n }\n\n /**\n * Get the portal elements.\n * @internal\n */\n getElements(): HTMLElement[] {\n return this.portal?.getElements() ?? [];\n }\n}\n\nexport function injectDialogRef<T = unknown, R = unknown>(): NgpDialogRef<T, R> {\n return inject<NgpDialogRef<T, R>>(NgpDialogRef);\n}\n","import { booleanAttribute, Directive, HostListener, input } from '@angular/core';\nimport { NgpExitAnimation } from 'ng-primitives/internal';\nimport { injectDialogRef } from '../dialog/dialog-ref';\n\n@Directive({\n selector: '[ngpDialogOverlay]',\n exportAs: 'ngpDialogOverlay',\n hostDirectives: [NgpExitAnimation],\n})\nexport class NgpDialogOverlay {\n private readonly dialogRef = injectDialogRef();\n\n /**\n * Whether the dialog should close on backdrop click.\n * @default `true`\n */\n readonly closeOnClick = input(this.dialogRef.config.closeOnClick, {\n alias: 'ngpDialogOverlayCloseOnClick',\n transform: booleanAttribute,\n });\n\n @HostListener('click')\n protected close(): void {\n if (this.closeOnClick() && !this.dialogRef.disableClose) {\n this.dialogRef.close(undefined, 'mouse');\n }\n }\n}\n","import { Directive, input, OnDestroy } from '@angular/core';\nimport { onChange, uniqueId } from 'ng-primitives/utils';\nimport { injectDialogState } from '../dialog/dialog-state';\n\n@Directive({\n selector: '[ngpDialogTitle]',\n exportAs: 'ngpDialogTitle',\n host: {\n '[id]': 'id()',\n },\n})\nexport class NgpDialogTitle implements OnDestroy {\n /** Access the dialog. */\n private readonly dialog = injectDialogState();\n\n /** The id of the title. */\n readonly id = input<string>(uniqueId('ngp-dialog-title'));\n\n constructor() {\n onChange(this.id, (id, prevId) => {\n if (prevId) {\n this.dialog().removeLabelledBy(prevId);\n }\n\n if (id) {\n this.dialog().setLabelledBy(id);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.dialog().removeLabelledBy(this.id());\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ApplicationRef,\n Injectable,\n Injector,\n OnDestroy,\n StaticProvider,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n isDevMode,\n} from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport {\n BlockScrollStrategy,\n NgpOverlayRegistry,\n ScrollStrategy,\n createPortal,\n} from 'ng-primitives/portal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable, Subject, Subscription, defer } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { NgpDialogConfig, injectDialogConfig } from '../config/dialog-config';\nimport { NgpDialogRef } from './dialog-ref';\n\n/**\n * Originally based on Angular CDK Dialog service.\n * Re-implemented to use ng-primitives/portal instead of @angular/cdk/overlay.\n */\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgpDialogManager implements OnDestroy {\n private readonly applicationRef = inject(ApplicationRef);\n private readonly injector = inject(Injector);\n private readonly document = inject<Document>(DOCUMENT);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly viewportRuler = inject(ViewportRuler);\n private readonly registry = inject(NgpOverlayRegistry);\n private readonly defaultOptions = injectDialogConfig();\n private readonly parentDialogManager = inject(NgpDialogManager, {\n optional: true,\n skipSelf: true,\n });\n private readonly router = inject(Router, { optional: true });\n\n private openDialogsAtThisLevel: NgpDialogRef[] = [];\n private readonly afterAllClosedAtThisLevel = new Subject<void>();\n private readonly afterOpenedAtThisLevel = new Subject<NgpDialogRef>();\n private ariaHiddenElements = new Map<Element, string | null>();\n private routerSubscription: Subscription | undefined;\n\n /** Scroll blocking strategy — shared across all dialogs. */\n private scrollStrategy: ScrollStrategy | null = null;\n\n /** Keeps track of the currently-open dialogs. */\n get openDialogs(): readonly NgpDialogRef[] {\n return this.parentDialogManager\n ? this.parentDialogManager.openDialogs\n : this.openDialogsAtThisLevel;\n }\n\n /** Stream that emits when a dialog has been opened. */\n get afterOpened(): Subject<NgpDialogRef> {\n return this.parentDialogManager\n ? this.parentDialogManager.afterOpened\n : this.afterOpenedAtThisLevel;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n readonly afterAllClosed: Observable<void> = defer(() =>\n this.openDialogs.length\n ? this.getAfterAllClosed()\n : this.getAfterAllClosed().pipe(startWith(undefined)),\n );\n\n /**\n * Opens a modal dialog containing the given template or component.\n */\n open(\n templateRefOrComponentType: TemplateRef<NgpDialogContext> | Type<unknown>,\n config?: NgpDialogConfig,\n ): NgpDialogRef;\n\n /**\n * Opens a modal dialog containing the given template or component with typed data.\n */\n open<T, R = unknown>(\n templateRefOrComponentType: TemplateRef<NgpDialogContext<T, R>> | Type<unknown>,\n config: NgpDialogConfig<T> & { data: T },\n ): NgpDialogRef<T, R>;\n\n /**\n * Opens a modal dialog with typed result but no data (explicit void for data type).\n */\n open<T extends void, R>(\n templateRefOrComponentType: TemplateRef<NgpDialogContext<T, R>> | Type<unknown>,\n config?: NgpDialogConfig,\n ): NgpDialogRef<T, R>;\n\n open(\n templateRefOrComponentType: TemplateRef<any> | Type<unknown>,\n config?: NgpDialogConfig<any>,\n ): NgpDialogRef<any, any> {\n // store the current active element so we can focus it after the dialog is closed\n const activeElement = this.document.activeElement;\n\n // this is not ideal, but there is a case where a dialog trigger is within an overlay (e.g. menu),\n // which may be removed before the dialog is closed. This is not desired, so we need to access a view container ref\n // that is not within the overlay. To solve this we use the view container ref of the root component.\n // Could this have any unintended side effects? For example, the dialog would not be closed during route changes?\n const viewContainerRef =\n this.applicationRef.components[0]?.injector.get(ViewContainerRef) ??\n config?.viewContainerRef ??\n config?.injector?.get(ViewContainerRef);\n\n const defaults = this.defaultOptions;\n config = { ...defaults, viewContainerRef, ...config };\n config.id = config.id ?? uniqueId('ngp-dialog');\n\n if (config.id && this.getDialogById(config.id) && isDevMode()) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n\n const dialogRef = new NgpDialogRef(config, this.document);\n const injector = this.createInjector(config, dialogRef);\n\n // store the injector in the dialog ref - this is so we can access the exit animation manager\n dialogRef.injector = injector;\n\n const context: NgpDialogContext = {\n $implicit: dialogRef,\n close: dialogRef.close.bind(dialogRef),\n };\n\n // Create the portal using our portal system\n const portal = createPortal(\n templateRefOrComponentType,\n config.viewContainerRef!,\n injector,\n context,\n );\n\n // Attach the portal to document.body\n portal.attach(this.document.body);\n\n // Store the portal reference on the dialog ref for element access and cleanup\n dialogRef.portal = portal;\n\n // If this is the first dialog that we're opening, hide all the non-overlay content\n // and enable scroll blocking.\n if (!this.openDialogs.length) {\n this.hideNonDialogContentFromAssistiveTechnology(portal.getElements());\n this.enableScrollBlocking(config);\n }\n\n // Auto-detect parent overlay: if the trigger element lives inside an existing overlay\n // (e.g. a dialog opened from a popover), register as its child so that clicks inside\n // the dialog don't dismiss the parent overlay.\n const parentId =\n activeElement instanceof HTMLElement\n ? this.registry.findContainingOverlay(activeElement)\n : null;\n\n // Register with the overlay registry for centralized escape-key routing.\n // outsidePress is false because the NgpDialogOverlay directive handles its own backdrop clicks.\n this.registry.register({\n id: dialogRef.id,\n parentId,\n overlay: dialogRef,\n getElements: () => dialogRef.getElements(),\n triggerElement: (activeElement as HTMLElement) ?? this.document.body,\n dismissPolicy: {\n outsidePress: false,\n escapeKey: config.closeOnEscape ?? true,\n },\n outsidePointerEvents$: dialogRef.outsidePointerEvents$,\n });\n\n (this.openDialogs as NgpDialogRef[]).push(dialogRef as NgpDialogRef<any, any>);\n this.afterOpened.next(dialogRef as NgpDialogRef<any, any>);\n this.subscribeToRouterEvents();\n\n dialogRef.closed.subscribe(closeResult => {\n // Deregister from the overlay registry\n this.registry.deregister(dialogRef.id);\n this.removeOpenDialog(dialogRef as NgpDialogRef<any, any>, true);\n // Focus the trigger element after the dialog closes.\n if (activeElement instanceof HTMLElement && this.document.body.contains(activeElement)) {\n // Its not great that we are relying on an internal API here, but we need to in order to\n // try and best determine the focus origin when it is programmatically closed by the user.\n this.focusMonitor.focusVia(\n activeElement,\n closeResult.focusOrigin ?? (this.focusMonitor as any)._lastFocusOrigin,\n );\n }\n });\n\n return dialogRef;\n }\n\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll(): void {\n reverseForEach(this.openDialogs, dialog => dialog.close());\n }\n\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id: string): NgpDialogRef | undefined {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n\n /**\n * Subscribe to router navigation events so that dialogs with `closeOnNavigation`\n * are closed when the user navigates. This handles both browser popstate events\n * and programmatic route changes (e.g. router.navigate()).\n */\n private subscribeToRouterEvents(): void {\n if (this.routerSubscription || !this.router) {\n return;\n }\n\n this.routerSubscription = this.router.events.subscribe(event => {\n if (event instanceof NavigationStart && this.openDialogs.length) {\n // Close dialogs that have closeOnNavigation enabled (iterate in reverse as closing modifies the array)\n let i = this.openDialogs.length;\n while (i--) {\n const dialog = this.openDialogs[i];\n if (dialog.config.closeOnNavigation !== false) {\n dialog.close();\n }\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n // determines when `aria-hidden` is removed from elements outside the dialog.\n reverseForEach(this.openDialogsAtThisLevel, dialog => {\n // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n this.removeOpenDialog(dialog, false);\n });\n\n // Make a second pass and close the remaining dialogs. We do this second pass in order to\n // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n // that should be closed and dialogs that should not.\n reverseForEach(this.openDialogsAtThisLevel, dialog => dialog.close());\n\n this.afterAllClosedAtThisLevel.complete();\n this.afterOpenedAtThisLevel.complete();\n this.openDialogsAtThisLevel = [];\n this.routerSubscription?.unsubscribe();\n }\n\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n */\n private createInjector<T, R>(\n config: NgpDialogConfig<T>,\n dialogRef: NgpDialogRef<T, R>,\n ): Injector {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers: StaticProvider[] = [\n { provide: NgpDialogRef, useValue: dialogRef },\n { provide: NgpExitAnimationManager, useClass: NgpExitAnimationManager },\n ];\n\n // Fall back to the service's own injector (root injector) to ensure\n // ApplicationRef and other platform providers are available.\n return Injector.create({ parent: userInjector || this.injector, providers });\n }\n\n /**\n * Removes a dialog from the array of open dialogs.\n */\n private removeOpenDialog(dialogRef: NgpDialogRef, emitEvent: boolean) {\n const index = this.openDialogs.indexOf(dialogRef);\n\n if (index > -1) {\n (this.openDialogs as NgpDialogRef[]).splice(index, 1);\n\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this.ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n\n this.ariaHiddenElements.clear();\n this.disableScrollBlocking();\n\n if (emitEvent) {\n this.getAfterAllClosed().next();\n }\n }\n }\n }\n\n /**\n * Enable scroll blocking when the first dialog opens.\n */\n private enableScrollBlocking(config?: NgpDialogConfig): void {\n if (!this.scrollStrategy) {\n this.scrollStrategy =\n config?.scrollStrategy ?? new BlockScrollStrategy(this.viewportRuler, this.document);\n }\n this.scrollStrategy.enable();\n }\n\n /**\n * Disable scroll blocking when the last dialog closes.\n */\n private disableScrollBlocking(): void {\n this.scrollStrategy?.disable();\n this.scrollStrategy = null;\n }\n\n /**\n * Hides all of the content that isn't a dialog portal from assistive technology.\n */\n private hideNonDialogContentFromAssistiveTechnology(portalElements: HTMLElement[]) {\n const body = this.document.body;\n const bodyChildren = body.children;\n\n for (let i = bodyChildren.length - 1; i > -1; i--) {\n const sibling = bodyChildren[i];\n\n if (\n !portalElements.includes(sibling as HTMLElement) &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live')\n ) {\n this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n\n private getAfterAllClosed(): Subject<void> {\n const parent = this.parentDialogManager;\n return parent ? parent.getAfterAllClosed() : this.afterAllClosedAtThisLevel;\n }\n}\n\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach<T>(items: T[] | readonly T[], callback: (current: T) => void) {\n let i = items.length;\n\n while (i--) {\n callback(items[i]);\n }\n}\n\nexport interface NgpDialogContext<T = unknown, R = unknown> {\n $implicit: NgpDialogRef<T, R>;\n close: (result?: R) => void;\n}\n\nexport function injectDialogManager(): NgpDialogManager {\n return inject(NgpDialogManager);\n}\n","import { Directive, HostListener, inject, input, output, TemplateRef } from '@angular/core';\nimport { injectDialogConfig } from '../config/dialog-config';\nimport { NgpDialogRef } from '../dialog/dialog-ref';\nimport { NgpDialogContext, NgpDialogManager } from '../dialog/dialog.service';\n\n@Directive({\n selector: '[ngpDialogTrigger]',\n exportAs: 'ngpDialogTrigger',\n})\nexport class NgpDialogTrigger<T = unknown> {\n /** Access the global configuration */\n private readonly config = injectDialogConfig();\n\n /** Access the dialog manager. */\n private readonly dialogManager = inject(NgpDialogManager);\n\n /** The template to launch. */\n readonly template = input.required<TemplateRef<NgpDialogContext>>({\n alias: 'ngpDialogTrigger',\n });\n\n /** Emits whenever the dialog is closed with the given result. */\n readonly closed = output<T>({ alias: 'ngpDialogTriggerClosed' });\n\n /**\n * Whether the dialog should close on escape.\n * @default `true`\n */\n readonly closeOnEscape = input(this.config.closeOnEscape, {\n alias: 'ngpDialogTriggerCloseOnEscape',\n });\n\n /**\n * Store the dialog ref.\n * @internal\n */\n private dialogRef: NgpDialogRef | null = null;\n\n @HostListener('click')\n protected launch(): void {\n this.dialogRef = this.dialogManager.open(this.template(), {\n closeOnEscape: this.closeOnEscape(),\n });\n this.dialogRef.closed.subscribe(({ result }) => {\n this.closed.emit(result as T);\n return (this.dialogRef = null);\n });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, HostListener, input, OnDestroy, signal } from '@angular/core';\nimport { NgpFocusTrap } from 'ng-primitives/focus-trap';\nimport { NgpExitAnimation } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectDialogConfig } from '../config/dialog-config';\nimport { injectDialogRef } from './dialog-ref';\nimport { dialogState, provideDialogState } from './dialog-state';\n\n@Directive({\n selector: '[ngpDialog]',\n exportAs: 'ngpDialog',\n providers: [provideDialogState()],\n hostDirectives: [NgpFocusTrap, NgpExitAnimation],\n host: {\n tabindex: '-1',\n '[id]': 'state.id()',\n '[attr.role]': 'state.role()',\n '[attr.aria-modal]': 'state.modal()',\n '[attr.aria-labelledby]': 'labelledBy().join(\" \")',\n '[attr.aria-describedby]': 'describedBy().join(\" \")',\n },\n})\nexport class NgpDialog<T = unknown, R = unknown> implements OnDestroy {\n private readonly config = injectDialogConfig();\n\n /** Access the dialog ref */\n private readonly dialogRef = injectDialogRef<T, R>();\n\n /** The id of the dialog */\n readonly id = input<string>(uniqueId('ngp-dialog'));\n\n /** The dialog role. */\n readonly role = input(this.config.role, {\n alias: 'ngpDialogRole',\n });\n\n /** Whether the dialog is a modal. */\n readonly modal = input<boolean, BooleanInput>(this.config.modal ?? false, {\n alias: 'ngpDialogModal',\n transform: booleanAttribute,\n });\n\n /** The labelledby ids */\n protected readonly labelledBy = signal<string[]>([]);\n\n /** The describedby ids */\n protected readonly describedBy = signal<string[]>([]);\n\n /** The dialog state */\n protected readonly state = dialogState<NgpDialog<T, R>>(this);\n\n ngOnDestroy(): void {\n this.close();\n }\n\n /** Close the dialog. */\n close(result?: R): void {\n this.dialogRef.close(result);\n }\n\n /** Stop click events from propagating to the overlay */\n @HostListener('click', ['$event'])\n protected onClick(event: Event): void {\n event.stopPropagation();\n }\n\n /** @internal register a labelledby id */\n setLabelledBy(id: string): void {\n this.labelledBy.update(ids => [...ids, id]);\n }\n\n /** @internal register a describedby id */\n setDescribedBy(id: string): void {\n this.describedBy.update(ids => [...ids, id]);\n }\n\n /** @internal remove a labelledby id */\n removeLabelledBy(id: string): void {\n this.labelledBy.update(ids => ids.filter(i => i !== id));\n }\n\n /** @internal remove a describedby id */\n removeDescribedBy(id: string): void {\n this.describedBy.update(ids => ids.filter(i => i !== id));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-dialog.mjs","sources":["../../../../packages/ng-primitives/dialog/src/config/dialog-config.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog-state.ts","../../../../packages/ng-primitives/dialog/src/dialog-description/dialog-description.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog-ref.ts","../../../../packages/ng-primitives/dialog/src/dialog-overlay/dialog-overlay.ts","../../../../packages/ng-primitives/dialog/src/dialog-title/dialog-title.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog.service.ts","../../../../packages/ng-primitives/dialog/src/dialog-trigger/dialog-trigger.ts","../../../../packages/ng-primitives/dialog/src/dialog/dialog.ts","../../../../packages/ng-primitives/dialog/src/ng-primitives-dialog.ts"],"sourcesContent":["import { InjectionToken, Injector, Provider, ViewContainerRef, inject } from '@angular/core';\nimport { ScrollStrategy } from 'ng-primitives/portal';\n\n/** Valid ARIA roles for a dialog. */\nexport type NgpDialogRole = 'dialog' | 'alertdialog';\n\nexport interface NgpDialogConfig<T = any> {\n /** The view container to attach the dialog to. */\n viewContainerRef?: ViewContainerRef;\n\n /** The injector to use for the dialog. Defaults to the view container's injector.*/\n injector?: Injector;\n\n /** ID for the dialog. If omitted, a unique one will be generated. */\n id?: string;\n\n /** The role of the dialog. */\n role?: NgpDialogRole;\n\n /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n modal?: boolean;\n\n /**\n * Whether the dialog should close when the user navigates. This includes both browser history\n * navigation (back/forward) and programmatic route changes (e.g. router.navigate()).\n */\n closeOnNavigation?: boolean;\n\n /** Whether the dialog should close when the user presses the escape key. */\n closeOnEscape?: boolean;\n\n /** Whether the dialog should close when the user clicks the overlay. */\n closeOnClick?: boolean;\n\n /** Scroll strategy to be used for the dialog. */\n scrollStrategy?: ScrollStrategy;\n\n data?: T;\n}\n\nexport const defaultDialogConfig: NgpDialogConfig = {\n role: 'dialog',\n modal: true,\n closeOnNavigation: true,\n closeOnEscape: true,\n closeOnClick: true,\n};\n\nexport const NgpDialogConfigToken = new InjectionToken<NgpDialogConfig>('NgpDialogConfigToken');\n\n/**\n * Provide the default Dialog configuration\n * @param config The Dialog configuration\n * @returns The provider\n */\nexport function provideDialogConfig(config: Partial<NgpDialogConfig>): Provider[] {\n return [\n {\n provide: NgpDialogConfigToken,\n useValue: { ...defaultDialogConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Dialog configuration\n * @returns The global Dialog configuration\n */\nexport function injectDialogConfig(): NgpDialogConfig {\n return inject(NgpDialogConfigToken, { optional: true }) ?? defaultDialogConfig;\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpDialog } from './dialog';\n\n/**\n * The state token for the Dialog primitive.\n */\nexport const NgpDialogStateToken = createStateToken<NgpDialog<any, any>>('Dialog');\n\n/**\n * Provides the Dialog state.\n */\nexport const provideDialogState = createStateProvider(NgpDialogStateToken);\n\n/**\n * Injects the Dialog state.\n */\nexport const injectDialogState = createStateInjector<NgpDialog>(NgpDialogStateToken);\n\n/**\n * The Dialog state registration function.\n */\nexport const dialogState = createState(NgpDialogStateToken);\n","import { Directive, input, OnDestroy } from '@angular/core';\nimport { onChange, uniqueId } from 'ng-primitives/utils';\nimport { injectDialogState } from '../dialog/dialog-state';\n\n@Directive({\n selector: '[ngpDialogDescription]',\n exportAs: 'ngpDialogDescription',\n host: {\n '[id]': 'id()',\n },\n})\nexport class NgpDialogDescription implements OnDestroy {\n /** Access the dialog */\n private readonly dialog = injectDialogState();\n\n /** The id of the descriptions. */\n readonly id = input<string>(uniqueId('ngp-dialog-description'));\n\n constructor() {\n onChange(this.id, (id, prevId) => {\n if (prevId) {\n this.dialog().removeDescribedBy(prevId);\n }\n\n if (id) {\n this.dialog().setDescribedBy(id);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.dialog().removeDescribedBy(this.id());\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { inject, Injector } from '@angular/core';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport { NgpOverlayRef } from 'ng-primitives/portal';\nimport { defer, EMPTY, fromEvent, Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport { NgpDialogConfig } from '../config/dialog-config';\n\n/** Minimal portal interface needed by the dialog ref. */\nexport interface NgpDialogPortalRef {\n getElements(): HTMLElement[];\n detach(immediate?: boolean): Promise<void>;\n}\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nexport class NgpDialogRef<T = unknown, R = unknown> implements NgpOverlayRef {\n /** Whether the user is allowed to close the dialog. */\n disableClose: boolean | undefined;\n\n /** Whether the escape key is allowed to close the dialog. */\n closeOnEscape: boolean | undefined;\n\n /** Emits when the dialog has been closed. */\n readonly closed = new Subject<{ focusOrigin?: FocusOrigin; result?: R }>();\n\n /**\n * Observable that emits the dialog result when closed.\n */\n readonly afterClosed: Observable<R | undefined> = this.closed.pipe(map(event => event.result));\n\n /** Data passed from the dialog opener. */\n readonly data: T;\n\n /** Unique ID for the dialog. */\n readonly id: string;\n\n /** @internal Store the injector */\n injector: Injector | undefined;\n\n /** Whether the dialog is closing. */\n private closing = false;\n\n /** @internal Portal reference for element access and detach. */\n portal: NgpDialogPortalRef | null = null;\n\n /** Emits on keyboard events within the dialog. */\n readonly keydownEvents: Observable<KeyboardEvent>;\n\n /**\n * Emits pointer events (click, auxclick, contextmenu) that happen outside of the dialog.\n * Fed by the NgpOverlayRegistry with CDK-compatible stacking awareness.\n * @internal\n */\n readonly outsidePointerEvents$ = new Subject<MouseEvent>();\n\n /** Emits on pointer events that happen outside of the dialog. */\n readonly outsidePointerEvents: Observable<MouseEvent> = this.outsidePointerEvents$.asObservable();\n\n constructor(\n readonly config: NgpDialogConfig<T>,\n private readonly document: Document,\n ) {\n this.data = config.data as T;\n this.id = config.id!; // By the time the dialog is created we are guaranteed to have an ID.\n this.closeOnEscape = config.closeOnEscape ?? true;\n\n // Use defer() so the observable is created on subscribe — by then the portal will be set.\n this.keydownEvents = defer(() => {\n const elements = this.getElements();\n if (!elements.length) return EMPTY;\n return fromEvent<KeyboardEvent>(this.document, 'keydown').pipe(\n filter(event => elements.some(el => el.contains(event.target as Node))),\n takeUntil(this.closed),\n );\n });\n }\n\n /**\n * Updates the position of the dialog. No-op since dialogs are CSS-centered.\n */\n updatePosition(): this {\n return this;\n }\n\n /**\n * NgpOverlayRef implementation — called by the registry for escape-key dismiss.\n */\n hide(options?: { immediate?: boolean; origin?: FocusOrigin }): void {\n if (this.disableClose) {\n return;\n }\n this.close(undefined, options?.origin);\n }\n\n /**\n * NgpOverlayRef implementation — called by the registry for descendant cascade.\n * Skips exit animations and tears down immediately.\n */\n async hideImmediate(): Promise<void> {\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n\n // Detach the portal immediately — no exit animation\n if (this.portal) {\n await this.portal.detach(true);\n this.portal = null;\n }\n\n this.closed.next({});\n this.closed.complete();\n }\n\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param focusOrigin The origin of the focus event that triggered the close.\n */\n async close(result?: R, focusOrigin?: FocusOrigin): Promise<void> {\n // If the dialog is already closed, do nothing.\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n\n const exitAnimationManager = this.injector?.get(NgpExitAnimationManager, undefined, {\n optional: true,\n });\n if (exitAnimationManager) {\n await exitAnimationManager.exit();\n }\n\n // Detach the portal (immediate since exit animation already ran)\n if (this.portal) {\n await this.portal.detach(true);\n this.portal = null;\n }\n\n this.closed.next({ focusOrigin, result });\n this.closed.complete();\n }\n\n /**\n * @deprecated Access dialog methods directly instead (keydownEvents, outsidePointerEvents,\n * updatePosition, close). This shim will be removed in the next major version.\n */\n get overlayRef(): {\n keydownEvents: () => Observable<KeyboardEvent>;\n outsidePointerEvents: () => Observable<MouseEvent>;\n updatePosition: () => NgpDialogRef<T, R>;\n dispose: () => Promise<void>;\n detachments: () => Observable<{ focusOrigin?: FocusOrigin; result?: R }>;\n overlayElement: HTMLElement | undefined;\n } {\n return {\n keydownEvents: () => this.keydownEvents,\n outsidePointerEvents: () => this.outsidePointerEvents,\n updatePosition: () => this.updatePosition(),\n dispose: () => this.close(),\n detachments: () => this.closed.asObservable(),\n overlayElement: this.getElements()[0] as HTMLElement | undefined,\n };\n }\n\n /**\n * Get the portal elements.\n * @internal\n */\n getElements(): HTMLElement[] {\n return this.portal?.getElements() ?? [];\n }\n}\n\nexport function injectDialogRef<T = unknown, R = unknown>(): NgpDialogRef<T, R> {\n return inject<NgpDialogRef<T, R>>(NgpDialogRef);\n}\n","import { booleanAttribute, Directive, input } from '@angular/core';\nimport { NgpExitAnimation } from 'ng-primitives/internal';\nimport { injectDialogRef } from '../dialog/dialog-ref';\n\n@Directive({\n selector: '[ngpDialogOverlay]',\n exportAs: 'ngpDialogOverlay',\n hostDirectives: [NgpExitAnimation],\n host: {\n '(pointerdown)': 'onPointerDown($event)',\n '(click)': 'onClick($event)',\n '(pointercancel)': 'resetPointerOrigin()',\n },\n})\nexport class NgpDialogOverlay {\n private readonly dialogRef = injectDialogRef();\n private startedPointerDownOnOverlay = false;\n\n /**\n * Whether the dialog should close on backdrop click.\n * @default `true`\n */\n readonly closeOnClick = input(this.dialogRef.config.closeOnClick, {\n alias: 'ngpDialogOverlayCloseOnClick',\n transform: booleanAttribute,\n });\n\n protected onPointerDown(event: Event): void {\n this.startedPointerDownOnOverlay = event.target === event.currentTarget;\n }\n\n protected onClick(event: Event): void {\n const shouldClose =\n this.startedPointerDownOnOverlay &&\n event.target === event.currentTarget &&\n this.closeOnClick() &&\n !this.dialogRef.disableClose;\n\n this.resetPointerOrigin();\n\n if (shouldClose) {\n this.dialogRef.close(undefined, 'mouse');\n }\n }\n\n protected resetPointerOrigin(): void {\n this.startedPointerDownOnOverlay = false;\n }\n}\n","import { Directive, input, OnDestroy } from '@angular/core';\nimport { onChange, uniqueId } from 'ng-primitives/utils';\nimport { injectDialogState } from '../dialog/dialog-state';\n\n@Directive({\n selector: '[ngpDialogTitle]',\n exportAs: 'ngpDialogTitle',\n host: {\n '[id]': 'id()',\n },\n})\nexport class NgpDialogTitle implements OnDestroy {\n /** Access the dialog. */\n private readonly dialog = injectDialogState();\n\n /** The id of the title. */\n readonly id = input<string>(uniqueId('ngp-dialog-title'));\n\n constructor() {\n onChange(this.id, (id, prevId) => {\n if (prevId) {\n this.dialog().removeLabelledBy(prevId);\n }\n\n if (id) {\n this.dialog().setLabelledBy(id);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.dialog().removeLabelledBy(this.id());\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ApplicationRef,\n Injectable,\n Injector,\n OnDestroy,\n StaticProvider,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n isDevMode,\n} from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport {\n BlockScrollStrategy,\n NgpOverlayRegistry,\n ScrollStrategy,\n createPortal,\n} from 'ng-primitives/portal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable, Subject, Subscription, defer } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { NgpDialogConfig, injectDialogConfig } from '../config/dialog-config';\nimport { NgpDialogRef } from './dialog-ref';\n\n/**\n * Originally based on Angular CDK Dialog service.\n * Re-implemented to use ng-primitives/portal instead of @angular/cdk/overlay.\n */\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgpDialogManager implements OnDestroy {\n private readonly applicationRef = inject(ApplicationRef);\n private readonly injector = inject(Injector);\n private readonly document = inject<Document>(DOCUMENT);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly viewportRuler = inject(ViewportRuler);\n private readonly registry = inject(NgpOverlayRegistry);\n private readonly defaultOptions = injectDialogConfig();\n private readonly parentDialogManager = inject(NgpDialogManager, {\n optional: true,\n skipSelf: true,\n });\n private readonly router = inject(Router, { optional: true });\n\n private openDialogsAtThisLevel: NgpDialogRef[] = [];\n private readonly afterAllClosedAtThisLevel = new Subject<void>();\n private readonly afterOpenedAtThisLevel = new Subject<NgpDialogRef>();\n private ariaHiddenElements = new Map<Element, string | null>();\n private routerSubscription: Subscription | undefined;\n\n /** Scroll blocking strategy — shared across all dialogs. */\n private scrollStrategy: ScrollStrategy | null = null;\n\n /** Keeps track of the currently-open dialogs. */\n get openDialogs(): readonly NgpDialogRef[] {\n return this.parentDialogManager\n ? this.parentDialogManager.openDialogs\n : this.openDialogsAtThisLevel;\n }\n\n /** Stream that emits when a dialog has been opened. */\n get afterOpened(): Subject<NgpDialogRef> {\n return this.parentDialogManager\n ? this.parentDialogManager.afterOpened\n : this.afterOpenedAtThisLevel;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n readonly afterAllClosed: Observable<void> = defer(() =>\n this.openDialogs.length\n ? this.getAfterAllClosed()\n : this.getAfterAllClosed().pipe(startWith(undefined)),\n );\n\n /**\n * Opens a modal dialog containing the given template or component.\n */\n open(\n templateRefOrComponentType: TemplateRef<NgpDialogContext> | Type<unknown>,\n config?: NgpDialogConfig,\n ): NgpDialogRef;\n\n /**\n * Opens a modal dialog containing the given template or component with typed data.\n */\n open<T, R = unknown>(\n templateRefOrComponentType: TemplateRef<NgpDialogContext<T, R>> | Type<unknown>,\n config: NgpDialogConfig<T> & { data: T },\n ): NgpDialogRef<T, R>;\n\n /**\n * Opens a modal dialog with typed result but no data (explicit void for data type).\n */\n open<T extends void, R>(\n templateRefOrComponentType: TemplateRef<NgpDialogContext<T, R>> | Type<unknown>,\n config?: NgpDialogConfig,\n ): NgpDialogRef<T, R>;\n\n open(\n templateRefOrComponentType: TemplateRef<any> | Type<unknown>,\n config?: NgpDialogConfig<any>,\n ): NgpDialogRef<any, any> {\n // store the current active element so we can focus it after the dialog is closed\n const activeElement = this.document.activeElement;\n\n // this is not ideal, but there is a case where a dialog trigger is within an overlay (e.g. menu),\n // which may be removed before the dialog is closed. This is not desired, so we need to access a view container ref\n // that is not within the overlay. To solve this we use the view container ref of the root component.\n // Could this have any unintended side effects? For example, the dialog would not be closed during route changes?\n const viewContainerRef =\n this.applicationRef.components[0]?.injector.get(ViewContainerRef) ??\n config?.viewContainerRef ??\n config?.injector?.get(ViewContainerRef);\n\n const defaults = this.defaultOptions;\n config = { ...defaults, viewContainerRef, ...config };\n config.id = config.id ?? uniqueId('ngp-dialog');\n\n if (config.id && this.getDialogById(config.id) && isDevMode()) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n\n const dialogRef = new NgpDialogRef(config, this.document);\n const injector = this.createInjector(config, dialogRef);\n\n // store the injector in the dialog ref - this is so we can access the exit animation manager\n dialogRef.injector = injector;\n\n const context: NgpDialogContext = {\n $implicit: dialogRef,\n close: dialogRef.close.bind(dialogRef),\n };\n\n // Create the portal using our portal system\n const portal = createPortal(\n templateRefOrComponentType,\n config.viewContainerRef!,\n injector,\n context,\n );\n\n // Attach the portal to document.body\n portal.attach(this.document.body);\n\n // Store the portal reference on the dialog ref for element access and cleanup\n dialogRef.portal = portal;\n\n // If this is the first dialog that we're opening, hide all the non-overlay content\n // and enable scroll blocking.\n if (!this.openDialogs.length) {\n this.hideNonDialogContentFromAssistiveTechnology(portal.getElements());\n this.enableScrollBlocking(config);\n }\n\n // Auto-detect parent overlay: if the trigger element lives inside an existing overlay\n // (e.g. a dialog opened from a popover), register as its child so that clicks inside\n // the dialog don't dismiss the parent overlay.\n // Only inherit parentId from other dialogs — non-dialog overlays (menus, popovers)\n // may close after triggering the dialog open, which would cascade-close the dialog.\n let parentId =\n activeElement instanceof HTMLElement\n ? this.registry.findContainingOverlay(activeElement)\n : null;\n\n if (parentId !== null && !this.openDialogs.some(d => d.id === parentId)) {\n parentId = null;\n }\n\n // Register with the overlay registry for centralized escape-key routing.\n // outsidePress is false because the NgpDialogOverlay directive handles its own backdrop clicks.\n this.registry.register({\n id: dialogRef.id,\n parentId,\n overlay: dialogRef,\n getElements: () => dialogRef.getElements(),\n triggerElement: (activeElement as HTMLElement) ?? this.document.body,\n dismissPolicy: {\n outsidePress: false,\n escapeKey: config.closeOnEscape ?? true,\n },\n outsidePointerEvents$: dialogRef.outsidePointerEvents$,\n });\n\n (this.openDialogs as NgpDialogRef[]).push(dialogRef as NgpDialogRef<any, any>);\n this.afterOpened.next(dialogRef as NgpDialogRef<any, any>);\n this.subscribeToRouterEvents();\n\n dialogRef.closed.subscribe(closeResult => {\n // Deregister from the overlay registry\n this.registry.deregister(dialogRef.id);\n this.removeOpenDialog(dialogRef as NgpDialogRef<any, any>, true);\n // Focus the trigger element after the dialog closes.\n if (activeElement instanceof HTMLElement && this.document.body.contains(activeElement)) {\n // Its not great that we are relying on an internal API here, but we need to in order to\n // try and best determine the focus origin when it is programmatically closed by the user.\n this.focusMonitor.focusVia(\n activeElement,\n closeResult.focusOrigin ?? (this.focusMonitor as any)._lastFocusOrigin,\n );\n }\n });\n\n return dialogRef;\n }\n\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll(): void {\n reverseForEach(this.openDialogs, dialog => dialog.close());\n }\n\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id: string): NgpDialogRef | undefined {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n\n /**\n * Subscribe to router navigation events so that dialogs with `closeOnNavigation`\n * are closed when the user navigates. This handles both browser popstate events\n * and programmatic route changes (e.g. router.navigate()).\n */\n private subscribeToRouterEvents(): void {\n if (this.routerSubscription || !this.router) {\n return;\n }\n\n this.routerSubscription = this.router.events.subscribe(event => {\n if (event instanceof NavigationStart && this.openDialogs.length) {\n // Close dialogs that have closeOnNavigation enabled (iterate in reverse as closing modifies the array)\n let i = this.openDialogs.length;\n while (i--) {\n const dialog = this.openDialogs[i];\n if (dialog.config.closeOnNavigation !== false) {\n dialog.close();\n }\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n // determines when `aria-hidden` is removed from elements outside the dialog.\n reverseForEach(this.openDialogsAtThisLevel, dialog => {\n // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n this.removeOpenDialog(dialog, false);\n });\n\n // Make a second pass and close the remaining dialogs. We do this second pass in order to\n // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n // that should be closed and dialogs that should not.\n reverseForEach(this.openDialogsAtThisLevel, dialog => dialog.close());\n\n this.afterAllClosedAtThisLevel.complete();\n this.afterOpenedAtThisLevel.complete();\n this.openDialogsAtThisLevel = [];\n this.routerSubscription?.unsubscribe();\n }\n\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n */\n private createInjector<T, R>(\n config: NgpDialogConfig<T>,\n dialogRef: NgpDialogRef<T, R>,\n ): Injector {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers: StaticProvider[] = [\n { provide: NgpDialogRef, useValue: dialogRef },\n { provide: NgpExitAnimationManager, useClass: NgpExitAnimationManager },\n ];\n\n // Fall back to the service's own injector (root injector) to ensure\n // ApplicationRef and other platform providers are available.\n return Injector.create({ parent: userInjector || this.injector, providers });\n }\n\n /**\n * Removes a dialog from the array of open dialogs.\n */\n private removeOpenDialog(dialogRef: NgpDialogRef, emitEvent: boolean) {\n const index = this.openDialogs.indexOf(dialogRef);\n\n if (index > -1) {\n (this.openDialogs as NgpDialogRef[]).splice(index, 1);\n\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this.ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n\n this.ariaHiddenElements.clear();\n this.disableScrollBlocking();\n\n if (emitEvent) {\n this.getAfterAllClosed().next();\n }\n }\n }\n }\n\n /**\n * Enable scroll blocking when the first dialog opens.\n */\n private enableScrollBlocking(config?: NgpDialogConfig): void {\n if (!this.scrollStrategy) {\n this.scrollStrategy =\n config?.scrollStrategy ?? new BlockScrollStrategy(this.viewportRuler, this.document);\n }\n this.scrollStrategy.enable();\n }\n\n /**\n * Disable scroll blocking when the last dialog closes.\n */\n private disableScrollBlocking(): void {\n this.scrollStrategy?.disable();\n this.scrollStrategy = null;\n }\n\n /**\n * Hides all of the content that isn't a dialog portal from assistive technology.\n */\n private hideNonDialogContentFromAssistiveTechnology(portalElements: HTMLElement[]) {\n const body = this.document.body;\n const bodyChildren = body.children;\n\n for (let i = bodyChildren.length - 1; i > -1; i--) {\n const sibling = bodyChildren[i];\n\n if (\n !portalElements.includes(sibling as HTMLElement) &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live')\n ) {\n this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n\n private getAfterAllClosed(): Subject<void> {\n const parent = this.parentDialogManager;\n return parent ? parent.getAfterAllClosed() : this.afterAllClosedAtThisLevel;\n }\n}\n\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach<T>(items: T[] | readonly T[], callback: (current: T) => void) {\n let i = items.length;\n\n while (i--) {\n callback(items[i]);\n }\n}\n\nexport interface NgpDialogContext<T = unknown, R = unknown> {\n $implicit: NgpDialogRef<T, R>;\n close: (result?: R) => void;\n}\n\nexport function injectDialogManager(): NgpDialogManager {\n return inject(NgpDialogManager);\n}\n","import { Directive, HostListener, inject, input, output, TemplateRef } from '@angular/core';\nimport { injectDialogConfig } from '../config/dialog-config';\nimport { NgpDialogRef } from '../dialog/dialog-ref';\nimport { NgpDialogContext, NgpDialogManager } from '../dialog/dialog.service';\n\n@Directive({\n selector: '[ngpDialogTrigger]',\n exportAs: 'ngpDialogTrigger',\n})\nexport class NgpDialogTrigger<T = unknown> {\n /** Access the global configuration */\n private readonly config = injectDialogConfig();\n\n /** Access the dialog manager. */\n private readonly dialogManager = inject(NgpDialogManager);\n\n /** The template to launch. */\n readonly template = input.required<TemplateRef<NgpDialogContext>>({\n alias: 'ngpDialogTrigger',\n });\n\n /** Emits whenever the dialog is closed with the given result. */\n readonly closed = output<T>({ alias: 'ngpDialogTriggerClosed' });\n\n /**\n * Whether the dialog should close on escape.\n * @default `true`\n */\n readonly closeOnEscape = input(this.config.closeOnEscape, {\n alias: 'ngpDialogTriggerCloseOnEscape',\n });\n\n /**\n * Store the dialog ref.\n * @internal\n */\n private dialogRef: NgpDialogRef | null = null;\n\n @HostListener('click')\n protected launch(): void {\n this.dialogRef = this.dialogManager.open(this.template(), {\n closeOnEscape: this.closeOnEscape(),\n });\n this.dialogRef.closed.subscribe(({ result }) => {\n this.closed.emit(result as T);\n return (this.dialogRef = null);\n });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, HostListener, input, OnDestroy, signal } from '@angular/core';\nimport { NgpFocusTrap } from 'ng-primitives/focus-trap';\nimport { NgpExitAnimation } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectDialogConfig } from '../config/dialog-config';\nimport { injectDialogRef } from './dialog-ref';\nimport { dialogState, provideDialogState } from './dialog-state';\n\n@Directive({\n selector: '[ngpDialog]',\n exportAs: 'ngpDialog',\n providers: [provideDialogState()],\n hostDirectives: [NgpFocusTrap, NgpExitAnimation],\n host: {\n tabindex: '-1',\n '[id]': 'state.id()',\n '[attr.role]': 'state.role()',\n '[attr.aria-modal]': 'state.modal()',\n '[attr.aria-labelledby]': 'labelledBy().join(\" \")',\n '[attr.aria-describedby]': 'describedBy().join(\" \")',\n },\n})\nexport class NgpDialog<T = unknown, R = unknown> implements OnDestroy {\n private readonly config = injectDialogConfig();\n\n /** Access the dialog ref */\n private readonly dialogRef = injectDialogRef<T, R>();\n\n /** The id of the dialog */\n readonly id = input<string>(uniqueId('ngp-dialog'));\n\n /** The dialog role. */\n readonly role = input(this.config.role, {\n alias: 'ngpDialogRole',\n });\n\n /** Whether the dialog is a modal. */\n readonly modal = input<boolean, BooleanInput>(this.config.modal ?? false, {\n alias: 'ngpDialogModal',\n transform: booleanAttribute,\n });\n\n /** The labelledby ids */\n protected readonly labelledBy = signal<string[]>([]);\n\n /** The describedby ids */\n protected readonly describedBy = signal<string[]>([]);\n\n /** The dialog state */\n protected readonly state = dialogState<NgpDialog<T, R>>(this);\n\n ngOnDestroy(): void {\n this.close();\n }\n\n /** Close the dialog. */\n close(result?: R): void {\n this.dialogRef.close(result);\n }\n\n /** Stop click events from propagating to the overlay */\n @HostListener('click', ['$event'])\n protected onClick(event: Event): void {\n event.stopPropagation();\n }\n\n /** @internal register a labelledby id */\n setLabelledBy(id: string): void {\n this.labelledBy.update(ids => [...ids, id]);\n }\n\n /** @internal register a describedby id */\n setDescribedBy(id: string): void {\n this.describedBy.update(ids => [...ids, id]);\n }\n\n /** @internal remove a labelledby id */\n removeLabelledBy(id: string): void {\n this.labelledBy.update(ids => ids.filter(i => i !== id));\n }\n\n /** @internal remove a describedby id */\n removeDescribedBy(id: string): void {\n this.describedBy.update(ids => ids.filter(i => i !== id));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "ng-primitives",
|
|
3
3
|
"description": "Angular Primitives is a low-level headless UI component library with a focus on accessibility, customization, and developer experience. ",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
-
"version": "0.114.
|
|
5
|
+
"version": "0.114.1",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"angular",
|
|
8
8
|
"primitives",
|