ng-primitives 0.97.0 → 0.98.0
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/fesm2022/ng-primitives-dialog.mjs +4 -0
- package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs +15 -3
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-popover.mjs +15 -3
- package/fesm2022/ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +15 -3
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/menu/index.d.ts +20 -2
- package/package.json +1 -1
- package/popover/index.d.ts +14 -2
- package/schematics/ng-generate/templates/toast/toast.__fileSuffix@dasherize__.ts.template +72 -8
- package/toast/index.d.ts +1 -1
- package/tooltip/index.d.ts +14 -2
|
@@ -349,6 +349,10 @@ class NgpDialogManager {
|
|
|
349
349
|
scrollStrategy: config.scrollStrategy || this.scrollStrategy,
|
|
350
350
|
hasBackdrop: false,
|
|
351
351
|
disposeOnNavigation: config.closeOnNavigation,
|
|
352
|
+
// required for v21 - the CDK launches overlays using the popover api which means any other overlays
|
|
353
|
+
// such as select dropdowns, or tooltips will appear behind the dialog, regardless of z-index
|
|
354
|
+
// this disables the use of popovers
|
|
355
|
+
usePopover: false,
|
|
352
356
|
});
|
|
353
357
|
return state;
|
|
354
358
|
}
|
|
@@ -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 { ScrollStrategy } from '@angular/cdk/overlay';\nimport { InjectionToken, Injector, Provider, ViewContainerRef, inject } from '@angular/core';\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 /** Scroll strategy to be used for the dialog. This determines how the dialog responds to scrolling underneath the panel element. */\n scrollStrategy?: ScrollStrategy;\n\n /**\n * Whether the dialog should close when the user navigates backwards or forwards through browser\n * history.\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 click the overlay. */\n closeOnClick?: boolean;\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 { hasModifierKey } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { inject, Injector } from '@angular/core';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { NgpDialogConfig } from '../config/dialog-config';\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nexport class NgpDialogRef<T = unknown, R = unknown> {\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 /** Emits when on keyboard events within the dialog. */\n readonly keydownEvents: Observable<KeyboardEvent>;\n\n /** Emits on pointer events that happen outside of the dialog. */\n readonly outsidePointerEvents: Observable<MouseEvent>;\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 /** Subscription to external detachments of the dialog. */\n private detachSubscription: Subscription;\n\n /** @internal Store the injector */\n injector: Injector | undefined;\n\n /** Whether the dialog is closing. */\n private closing = false;\n\n constructor(\n readonly overlayRef: OverlayRef,\n readonly config: NgpDialogConfig<T>,\n ) {\n this.data = config.data;\n this.keydownEvents = overlayRef.keydownEvents();\n this.outsidePointerEvents = overlayRef.outsidePointerEvents();\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 this.keydownEvents.subscribe(event => {\n if (\n event.key === 'Escape' &&\n !this.disableClose &&\n this.closeOnEscape !== false &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n this.close(undefined, 'keyboard');\n }\n });\n\n this.detachSubscription = overlayRef.detachments().subscribe(() => this.close());\n }\n\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param options Additional options to customize the closing behavior.\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 this.overlayRef.dispose();\n this.detachSubscription.unsubscribe();\n this.closed.next({ focusOrigin, result });\n this.closed.complete();\n }\n\n /** Updates the position of the dialog based on the current position strategy. */\n updatePosition(): this {\n this.overlayRef.updatePosition();\n return this;\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 { injectDialogConfig } from '../config/dialog-config';\nimport { injectDialogRef } from '../dialog/dialog-ref';\n\n@Directive({\n selector: '[ngpDialogOverlay]',\n exportAs: 'ngpDialogOverlay',\n hostDirectives: [NgpExitAnimation],\n})\nexport class NgpDialogOverlay {\n /** Access the global configuration */\n private readonly config = injectDialogConfig();\n\n /** Access the dialog ref. */\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.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 { Overlay, OverlayConfig, OverlayContainer, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n Injectable,\n Injector,\n OnDestroy,\n StaticProvider,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n isDevMode,\n DOCUMENT,\n} from '@angular/core';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable, Subject, defer } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { NgpDialogConfig, injectDialogConfig } from '../config/dialog-config';\nimport { NgpDialogRef } from './dialog-ref';\n\n/**\n * This is based on the Angular CDK Dialog service.\n * https://github.com/angular/components/blob/main/src/cdk/dialog/dialog.ts\n */\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgpDialogManager implements OnDestroy {\n private readonly applicationRef = inject(ApplicationRef);\n private readonly document = inject<Document>(DOCUMENT);\n private readonly overlay = inject(Overlay);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly defaultOptions = injectDialogConfig();\n private readonly parentDialogManager = inject(NgpDialogManager, {\n optional: true,\n skipSelf: true,\n });\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly scrollStrategy: ScrollStrategy =\n this.defaultOptions.scrollStrategy ?? this.overlay.scrollStrategies.block();\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\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.\n */\n open<T, R>(\n templateRefOrComponentType: TemplateRef<NgpDialogContext<T, R>> | Type<unknown>,\n config?: NgpDialogConfig<T>,\n ): NgpDialogRef<T, R> {\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 overlayConfig = this.getOverlayConfig(config);\n const overlayRef = this.overlay.create(overlayConfig);\n const dialogRef = new NgpDialogRef<T, R>(overlayRef, config);\n const injector = this.createInjector(config, dialogRef, undefined);\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<T, R> = {\n $implicit: dialogRef,\n close: dialogRef.close.bind(dialogRef),\n };\n\n if (templateRefOrComponentType instanceof TemplateRef) {\n overlayRef.attach(\n new TemplatePortal(templateRefOrComponentType, config.viewContainerRef!, context, injector),\n );\n } else {\n overlayRef.attach(\n new ComponentPortal(templateRefOrComponentType, config.viewContainerRef!, injector),\n );\n }\n\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n this.hideNonDialogContentFromAssistiveTechnology();\n }\n\n (this.openDialogs as NgpDialogRef[]).push(dialogRef as NgpDialogRef<any, any>);\n this.afterOpened.next(dialogRef as NgpDialogRef<any, any>);\n\n dialogRef.closed.subscribe(closeResult => {\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 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 }\n\n /**\n * Creates an overlay config from a dialog config.\n */\n private getOverlayConfig(config: NgpDialogConfig): OverlayConfig {\n const state = new OverlayConfig({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: config.scrollStrategy || this.scrollStrategy,\n hasBackdrop: false,\n disposeOnNavigation: config.closeOnNavigation,\n });\n\n return state;\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 fallbackInjector: Injector | undefined,\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 return Injector.create({ parent: userInjector || fallbackInjector, 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\n if (emitEvent) {\n this.getAfterAllClosed().next();\n }\n }\n }\n }\n\n /** Hides all of the content that isn't an overlay from assistive technology. */\n private hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this.overlayContainer.getContainerElement();\n\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n\n if (\n sibling !== overlayContainer &&\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\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 { ScrollStrategy } from '@angular/cdk/overlay';\nimport { InjectionToken, Injector, Provider, ViewContainerRef, inject } from '@angular/core';\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 /** Scroll strategy to be used for the dialog. This determines how the dialog responds to scrolling underneath the panel element. */\n scrollStrategy?: ScrollStrategy;\n\n /**\n * Whether the dialog should close when the user navigates backwards or forwards through browser\n * history.\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 click the overlay. */\n closeOnClick?: boolean;\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 { hasModifierKey } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { inject, Injector } from '@angular/core';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { NgpDialogConfig } from '../config/dialog-config';\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nexport class NgpDialogRef<T = unknown, R = unknown> {\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 /** Emits when on keyboard events within the dialog. */\n readonly keydownEvents: Observable<KeyboardEvent>;\n\n /** Emits on pointer events that happen outside of the dialog. */\n readonly outsidePointerEvents: Observable<MouseEvent>;\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 /** Subscription to external detachments of the dialog. */\n private detachSubscription: Subscription;\n\n /** @internal Store the injector */\n injector: Injector | undefined;\n\n /** Whether the dialog is closing. */\n private closing = false;\n\n constructor(\n readonly overlayRef: OverlayRef,\n readonly config: NgpDialogConfig<T>,\n ) {\n this.data = config.data;\n this.keydownEvents = overlayRef.keydownEvents();\n this.outsidePointerEvents = overlayRef.outsidePointerEvents();\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 this.keydownEvents.subscribe(event => {\n if (\n event.key === 'Escape' &&\n !this.disableClose &&\n this.closeOnEscape !== false &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n this.close(undefined, 'keyboard');\n }\n });\n\n this.detachSubscription = overlayRef.detachments().subscribe(() => this.close());\n }\n\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param options Additional options to customize the closing behavior.\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 this.overlayRef.dispose();\n this.detachSubscription.unsubscribe();\n this.closed.next({ focusOrigin, result });\n this.closed.complete();\n }\n\n /** Updates the position of the dialog based on the current position strategy. */\n updatePosition(): this {\n this.overlayRef.updatePosition();\n return this;\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 { injectDialogConfig } from '../config/dialog-config';\nimport { injectDialogRef } from '../dialog/dialog-ref';\n\n@Directive({\n selector: '[ngpDialogOverlay]',\n exportAs: 'ngpDialogOverlay',\n hostDirectives: [NgpExitAnimation],\n})\nexport class NgpDialogOverlay {\n /** Access the global configuration */\n private readonly config = injectDialogConfig();\n\n /** Access the dialog ref. */\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.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 { Overlay, OverlayConfig, OverlayContainer, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n DOCUMENT,\n Injectable,\n Injector,\n OnDestroy,\n StaticProvider,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n isDevMode,\n} from '@angular/core';\nimport { NgpExitAnimationManager } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable, Subject, defer } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { NgpDialogConfig, injectDialogConfig } from '../config/dialog-config';\nimport { NgpDialogRef } from './dialog-ref';\n\n/**\n * This is based on the Angular CDK Dialog service.\n * https://github.com/angular/components/blob/main/src/cdk/dialog/dialog.ts\n */\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgpDialogManager implements OnDestroy {\n private readonly applicationRef = inject(ApplicationRef);\n private readonly document = inject<Document>(DOCUMENT);\n private readonly overlay = inject(Overlay);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly defaultOptions = injectDialogConfig();\n private readonly parentDialogManager = inject(NgpDialogManager, {\n optional: true,\n skipSelf: true,\n });\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly scrollStrategy: ScrollStrategy =\n this.defaultOptions.scrollStrategy ?? this.overlay.scrollStrategies.block();\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\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.\n */\n open<T, R>(\n templateRefOrComponentType: TemplateRef<NgpDialogContext<T, R>> | Type<unknown>,\n config?: NgpDialogConfig<T>,\n ): NgpDialogRef<T, R> {\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 overlayConfig = this.getOverlayConfig(config);\n const overlayRef = this.overlay.create(overlayConfig);\n const dialogRef = new NgpDialogRef<T, R>(overlayRef, config);\n const injector = this.createInjector(config, dialogRef, undefined);\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<T, R> = {\n $implicit: dialogRef,\n close: dialogRef.close.bind(dialogRef),\n };\n\n if (templateRefOrComponentType instanceof TemplateRef) {\n overlayRef.attach(\n new TemplatePortal(templateRefOrComponentType, config.viewContainerRef!, context, injector),\n );\n } else {\n overlayRef.attach(\n new ComponentPortal(templateRefOrComponentType, config.viewContainerRef!, injector),\n );\n }\n\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n this.hideNonDialogContentFromAssistiveTechnology();\n }\n\n (this.openDialogs as NgpDialogRef[]).push(dialogRef as NgpDialogRef<any, any>);\n this.afterOpened.next(dialogRef as NgpDialogRef<any, any>);\n\n dialogRef.closed.subscribe(closeResult => {\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 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 }\n\n /**\n * Creates an overlay config from a dialog config.\n */\n private getOverlayConfig(config: NgpDialogConfig): OverlayConfig {\n const state = new OverlayConfig({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: config.scrollStrategy || this.scrollStrategy,\n hasBackdrop: false,\n disposeOnNavigation: config.closeOnNavigation,\n // required for v21 - the CDK launches overlays using the popover api which means any other overlays\n // such as select dropdowns, or tooltips will appear behind the dialog, regardless of z-index\n // this disables the use of popovers\n usePopover: false,\n } as any);\n\n return state;\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 fallbackInjector: Injector | undefined,\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 return Injector.create({ parent: userInjector || fallbackInjector, 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\n if (emitEvent) {\n this.getAfterAllClosed().next();\n }\n }\n }\n }\n\n /** Hides all of the content that isn't an overlay from assistive technology. */\n private hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this.overlayContainer.getContainerElement();\n\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n\n if (\n sibling !== overlayContainer &&\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\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,4 +1,4 @@
|
|
|
1
|
-
import { createOverlay, injectOverlay, coerceOffset } from 'ng-primitives/portal';
|
|
1
|
+
import { createOverlay, injectOverlay, coerceOffset, coerceShift } from 'ng-primitives/portal';
|
|
2
2
|
export { injectOverlayContext as injectMenuContext } from 'ng-primitives/portal';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, inject, Injector, ViewContainerRef, signal, computed, input, booleanAttribute, Directive } from '@angular/core';
|
|
@@ -16,6 +16,7 @@ const defaultMenuConfig = {
|
|
|
16
16
|
flip: true,
|
|
17
17
|
container: 'body',
|
|
18
18
|
scrollBehavior: 'block',
|
|
19
|
+
shift: undefined,
|
|
19
20
|
};
|
|
20
21
|
const NgpMenuConfigToken = new InjectionToken('NgpMenuConfigToken');
|
|
21
22
|
/**
|
|
@@ -466,6 +467,16 @@ class NgpMenuTrigger {
|
|
|
466
467
|
alias: 'ngpMenuTriggerFlip',
|
|
467
468
|
transform: booleanAttribute,
|
|
468
469
|
}]));
|
|
470
|
+
/**
|
|
471
|
+
* Configure shift behavior to keep the menu in view.
|
|
472
|
+
* Can be a boolean to enable/disable, or an object with padding and limiter options.
|
|
473
|
+
* @default undefined (enabled by default in overlay)
|
|
474
|
+
*/
|
|
475
|
+
this.shift = input(this.config.shift, ...(ngDevMode ? [{ debugName: "shift", alias: 'ngpMenuTriggerShift',
|
|
476
|
+
transform: coerceShift }] : [{
|
|
477
|
+
alias: 'ngpMenuTriggerShift',
|
|
478
|
+
transform: coerceShift,
|
|
479
|
+
}]));
|
|
469
480
|
/**
|
|
470
481
|
* Define the container in which the menu should be attached.
|
|
471
482
|
* @default document.body
|
|
@@ -495,6 +506,7 @@ class NgpMenuTrigger {
|
|
|
495
506
|
placement: this.placement,
|
|
496
507
|
offset: this.offset,
|
|
497
508
|
flip: this.flip,
|
|
509
|
+
shift: this.shift(),
|
|
498
510
|
container: this.container,
|
|
499
511
|
scrollBehavior: this.scrollBehavior,
|
|
500
512
|
context: this.context,
|
|
@@ -522,7 +534,7 @@ class NgpMenuTrigger {
|
|
|
522
534
|
this.state.toggle(event);
|
|
523
535
|
}
|
|
524
536
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
525
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpMenuTrigger, isStandalone: true, selector: "[ngpMenuTrigger]", inputs: { menu: { classPropertyName: "menu", publicName: "ngpMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpMenuTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpMenuTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpMenuTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpMenuTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpMenuTriggerContainer", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "ngpMenuTriggerScrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "ngpMenuTriggerContext", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideMenuTriggerState()], exportAs: ["ngpMenuTrigger"], ngImport: i0 }); }
|
|
537
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpMenuTrigger, isStandalone: true, selector: "[ngpMenuTrigger]", inputs: { menu: { classPropertyName: "menu", publicName: "ngpMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpMenuTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpMenuTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpMenuTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpMenuTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "ngpMenuTriggerShift", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpMenuTriggerContainer", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "ngpMenuTriggerScrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "ngpMenuTriggerContext", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideMenuTriggerState()], exportAs: ["ngpMenuTrigger"], ngImport: i0 }); }
|
|
526
538
|
}
|
|
527
539
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpMenuTrigger, decorators: [{
|
|
528
540
|
type: Directive,
|
|
@@ -531,7 +543,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
531
543
|
exportAs: 'ngpMenuTrigger',
|
|
532
544
|
providers: [provideMenuTriggerState()],
|
|
533
545
|
}]
|
|
534
|
-
}], propDecorators: { menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerDisabled", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerOffset", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerFlip", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerContainer", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerScrollBehavior", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerContext", required: false }] }] } });
|
|
546
|
+
}], propDecorators: { menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerDisabled", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerOffset", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerFlip", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerShift", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerContainer", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerScrollBehavior", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpMenuTriggerContext", required: false }] }] } });
|
|
535
547
|
|
|
536
548
|
/**
|
|
537
549
|
* The `NgpMenu` is a container for menu items.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-menu.mjs","sources":["../../../../packages/ng-primitives/menu/src/config/menu-config.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/menu/menu-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item-state.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu/menu.ts","../../../../packages/ng-primitives/menu/src/ng-primitives-menu.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpOffset } from 'ng-primitives/portal';\nimport type { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\n\nexport interface NgpMenuConfig {\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n offset: NgpOffset;\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n placement: NgpMenuPlacement;\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * @default true\n */\n flip: boolean;\n\n /**\n * Define the container element or selector in to which the menu should be attached.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default scroll\n */\n scrollBehavior: 'reposition' | 'block';\n}\n\nexport const defaultMenuConfig: NgpMenuConfig = {\n offset: 4,\n placement: 'bottom-start',\n flip: true,\n container: 'body',\n scrollBehavior: 'block',\n};\n\nexport const NgpMenuConfigToken = new InjectionToken<NgpMenuConfig>('NgpMenuConfigToken');\n\n/**\n * Provide the default Menu configuration\n * @param config The Menu configuration\n * @returns The provider\n */\nexport function provideMenuConfig(config: Partial<NgpMenuConfig>): Provider[] {\n return [\n {\n provide: NgpMenuConfigToken,\n useValue: { ...defaultMenuConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Menu configuration\n * @returns The global Menu configuration\n */\nexport function injectMenuConfig(): NgpMenuConfig {\n return inject(NgpMenuConfigToken, { optional: true }) ?? defaultMenuConfig;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { computed, inject, Injector, signal, Signal, ViewContainerRef } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { NgpMenuPlacement } from './menu-trigger';\n\nexport interface NgpMenuTriggerState {\n /**\n * The computed placement of the menu.\n */\n readonly placement: Signal<NgpMenuPlacement>;\n /**\n * Show the menu.\n */\n show(): void;\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void;\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n}\n\nexport interface NgpMenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<boolean>;\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n /**\n * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block'>;\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T | undefined>;\n}\n\nexport const [\n NgpMenuTriggerStateToken,\n ngpMenuTrigger,\n injectMenuTriggerState,\n provideMenuTriggerState,\n] = createPrimitive(\n 'NgpMenuTrigger',\n <T>({\n disabled,\n menu,\n placement = signal('bottom-start' as NgpMenuPlacement),\n offset = signal(4),\n flip = signal(true),\n container,\n scrollBehavior,\n context,\n }: NgpMenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n dataBinding(element, 'data-placement', placement);\n\n // Event listeners\n listener(element, 'click', onClick);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n toggle(event);\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show();\n }\n }\n\n function show(): void {\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled or the menu is not open, do nothing\n if (!open()) {\n return;\n }\n\n // Hide the overlay\n overlay()?.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n viewContainerRef,\n injector,\n context,\n container: container?.(),\n placement: placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\n scrollBehaviour: scrollBehavior?.() ?? 'block',\n };\n\n overlay.set(createOverlay(config));\n }\n\n return {\n placement,\n show,\n hide,\n toggle,\n };\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectOverlay } from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, styleBinding } from 'ng-primitives/state';\nimport { Subject } from 'rxjs';\nimport { injectMenuTriggerState } from '../menu-trigger/menu-trigger-state';\n\nexport interface NgpMenuState {\n /**\n * Close the menu and any parent menus.\n * @param origin - The focus origin\n */\n closeAllMenus(origin: FocusOrigin): void;\n /**\n * Subject that emits when submenus should be closed.\n * @internal\n */\n readonly closeSubmenus: Subject<HTMLElement>;\n}\n\nexport interface NgpMenuProps {}\n\nexport const [NgpMenuStateToken, ngpMenu, injectMenuState, provideMenuState] = createPrimitive(\n 'NgpMenu',\n ({}: NgpMenuProps) => {\n const element = injectElementRef();\n const overlay = injectOverlay();\n const menuTrigger = injectMenuTriggerState();\n const parentMenu = injectMenuState({ optional: true, skipSelf: true });\n\n // Host bindings\n attrBinding(element, 'role', 'menu');\n attrBinding(element, 'data-placement', overlay.finalPlacement);\n attrBinding(element, 'data-overlay', '');\n styleBinding(element, 'left.px', () => overlay.position().x ?? null);\n styleBinding(element, 'top.px', () => overlay.position().y ?? null);\n styleBinding(element, '--ngp-menu-trigger-width.px', overlay.triggerWidth);\n styleBinding(element, '--ngp-menu-transform-origin', overlay.transformOrigin);\n\n // Subject to notify children to close submenus\n const closeSubmenus = new Subject<HTMLElement>();\n\n // Methods\n function closeAllMenus(origin: FocusOrigin): void {\n menuTrigger().hide(origin);\n parentMenu()?.closeAllMenus(origin);\n }\n\n return {\n closeAllMenus,\n closeSubmenus,\n };\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { computed, inject, Injector, signal, Signal, ViewContainerRef } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { injectMenuState } from '../menu/menu-state';\n\nexport interface NgpSubmenuTriggerState {\n /**\n * The computed placement of the menu.\n */\n readonly placement: Signal<NgpMenuPlacement>;\n /**\n * Show the menu.\n */\n show(): void;\n /**\n * Hide the menu.\n * @param origin - The focus origin\n */\n hide(origin?: FocusOrigin): void;\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n}\n\nexport interface NgpSubmenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<boolean>;\n}\n\nexport const [\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n injectSubmenuTriggerState,\n provideSubmenuTriggerState,\n] = createPrimitive(\n 'NgpSubmenuTrigger',\n <T>({\n disabled = signal(false),\n menu,\n placement = signal('right-start'),\n offset = signal(0),\n flip = signal(true),\n }: NgpSubmenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const parentMenu = injectMenuState({ optional: true });\n\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n\n // Subscribe to parent menu's closeSubmenus\n parentMenu()\n ?.closeSubmenus.pipe(safeTakeUntilDestroyed())\n .subscribe(submenuElement => {\n // if the element is not the trigger, we want to close the menu\n if (submenuElement === element.nativeElement) {\n return;\n }\n\n hide('mouse');\n });\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'pointerenter', showSubmenuOnHover);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n toggle(event);\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show();\n }\n }\n\n function show(): void {\n // If the trigger is disabled, don't show the menu\n if (disabled?.()) {\n return;\n }\n\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled or the menu is not open, do nothing\n if (disabled?.() || !open()) {\n return;\n }\n\n // Hide the overlay\n overlay()?.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n injector,\n placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\n viewContainerRef,\n };\n\n overlay.set(createOverlay(config));\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n\n if ((isRightArrow && !isRtl) || (isLeftArrow && isRtl)) {\n event.preventDefault();\n show();\n }\n }\n\n function showSubmenuOnHover(event: Event): void {\n if (event instanceof PointerEvent === false) {\n return;\n }\n\n // if this was triggered by a touch event, we don't want to show the submenu\n // as it will be shown by the click event - this prevents the submenu from being toggled\n if (event.pointerType === 'touch') {\n return;\n }\n\n show();\n }\n\n return {\n placement,\n show,\n hide,\n toggle,\n };\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { coerceOffset, NgpOffset, NgpOffsetInput, NgpOverlayContent } from 'ng-primitives/portal';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { ngpSubmenuTrigger, provideSubmenuTriggerState } from './submenu-trigger-state';\n\n@Directive({\n selector: '[ngpSubmenuTrigger]',\n exportAs: 'ngpSubmenuTrigger',\n providers: [provideSubmenuTriggerState()],\n})\nexport class NgpSubmenuTrigger<T = unknown> {\n /**\n * Access the submenu template ref.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpSubmenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSubmenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'right-start'\n */\n readonly placement = input<NgpMenuPlacement>('right-start', {\n alias: 'ngpSubmenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 0\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(0, {\n alias: 'ngpSubmenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * @default true\n */\n readonly flip = input<boolean, BooleanInput>(true, {\n alias: 'ngpSubmenuTriggerFlip',\n transform: booleanAttribute,\n });\n\n /**\n * Access the menu trigger state.\n */\n private readonly state = ngpSubmenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n */\n hide(origin: FocusOrigin = 'program'): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { inject, Injector, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, listener } from 'ng-primitives/state';\nimport { injectMenuState } from '../menu/menu-state';\nimport { NgpSubmenuTrigger } from '../submenu-trigger/submenu-trigger';\n\nexport interface NgpMenuItemState {}\n\nexport interface NgpMenuItemProps {\n /**\n * Whether the menu item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [NgpMenuItemStateToken, ngpMenuItem, injectMenuItemState, provideMenuItemState] =\n createPrimitive('NgpMenuItem', ({ disabled = signal(false) }: NgpMenuItemProps) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const parentMenu = injectMenuState({ optional: true });\n\n ngpButton({ disabled });\n\n // Host bindings\n attrBinding(element, 'role', 'menuitem');\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'mouseenter', showSubmenuOnHover);\n\n // Methods\n function onClick(event: MouseEvent): void {\n // we do this here to avoid circular dependency issues\n const trigger = injector.get(NgpSubmenuTrigger, null, { self: true, optional: true });\n\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if this is a submenu trigger, we don't want to close the menu, we want to open the submenu\n if (!trigger) {\n parentMenu()?.closeAllMenus(origin);\n }\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n // if there is no parent menu, we don't want to do anything\n const trigger = injector.get(NgpSubmenuTrigger, null, { optional: true, skipSelf: true });\n\n if (!trigger) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isLeftArrow = event.key === 'ArrowLeft';\n const isRightArrow = event.key === 'ArrowRight';\n\n if ((isLeftArrow && !isRtl) || (isRightArrow && isRtl)) {\n event.preventDefault();\n\n if (trigger) {\n trigger.hide('keyboard');\n }\n }\n }\n\n function showSubmenuOnHover(): void {\n parentMenu()?.closeSubmenus.next(element.nativeElement);\n }\n\n return {};\n });\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItem, provideMenuItemState } from './menu-item-state';\n\n/**\n * The `NgpMenuItem` directive represents a menu item.\n */\n@Directive({\n selector: '[ngpMenuItem]',\n exportAs: 'ngpMenuItem',\n providers: [provideMenuItemState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItem {\n /** Whether the menu item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItem({ disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { coerceOffset, NgpOffset, NgpOffsetInput, NgpOverlayContent } from 'ng-primitives/portal';\nimport { injectMenuConfig } from '../config/menu-config';\nimport { ngpMenuTrigger, provideMenuTriggerState } from './menu-trigger-state';\n\n/**\n * The `NgpMenuTrigger` directive allows you to turn an element into a menu trigger.\n */\n@Directive({\n selector: '[ngpMenuTrigger]',\n exportAs: 'ngpMenuTrigger',\n providers: [provideMenuTriggerState()],\n})\nexport class NgpMenuTrigger<T = unknown> {\n /**\n * Access the global menu configuration.\n */\n private readonly config = injectMenuConfig();\n\n /**\n * Access the menu template ref or ComponentType.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpMenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n readonly placement = input<NgpMenuPlacement>(this.config.placement, {\n alias: 'ngpMenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(this.config.offset, {\n alias: 'ngpMenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * @default true\n */\n readonly flip = input<boolean, BooleanInput>(this.config.flip, {\n alias: 'ngpMenuTriggerFlip',\n transform: booleanAttribute,\n });\n\n /**\n * Define the container in which the menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpMenuTriggerContainer',\n });\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default 'block'\n */\n readonly scrollBehavior = input<'reposition' | 'block'>(this.config.scrollBehavior, {\n alias: 'ngpMenuTriggerScrollBehavior',\n });\n\n /**\n * Provide context to the menu. This can be used to pass data to the menu content.\n */\n readonly context = input<T>(undefined, {\n alias: 'ngpMenuTriggerContext',\n });\n\n /**\n * The menu trigger state.\n */\n private readonly state = ngpMenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n container: this.container,\n scrollBehavior: this.scrollBehavior,\n context: this.context,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n}\n\nexport type NgpMenuPlacement =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'right-start'\n | 'right-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end';\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Directive } from '@angular/core';\nimport { ngpFocusTrap, provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\nimport { ngpMenu, provideMenuState } from './menu-state';\n\n/**\n * The `NgpMenu` is a container for menu items.\n */\n@Directive({\n selector: '[ngpMenu]',\n exportAs: 'ngpMenu',\n providers: [\n // ensure we don't inherit the focus group from the parent menu if there is one\n provideRovingFocusGroupState({ inherit: false }),\n provideMenuState({ inherit: false }),\n provideFocusTrapState(),\n ],\n})\nexport class NgpMenu {\n private readonly state = ngpMenu({});\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false });\n ngpFocusTrap({});\n }\n\n /** @internal Close the menu and any parent menus */\n closeAllMenus(origin: FocusOrigin): void {\n this.state.closeAllMenus(origin);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAqCO,MAAM,iBAAiB,GAAkB;AAC9C,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,cAAc,EAAE,OAAO;CACxB;AAEM,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAgB,oBAAoB,CAAC;AAEzF;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,MAA8B,EAAA;IAC9D,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,kBAAkB;AAC3B,YAAA,QAAQ,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,MAAM,EAAE;AAC9C,SAAA;KACF;AACH;AAEA;;;AAGG;SACa,gBAAgB,GAAA;AAC9B,IAAA,OAAO,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,iBAAiB;AAC5E;;MCGa,CACX,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACxB,GAAG,eAAe,CACjB,gBAAgB,EAChB,CAAI,EACF,QAAQ,EACR,IAAI,EACJ,SAAS,GAAG,MAAM,CAAC,cAAkC,CAAC,EACtD,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAClB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EACnB,SAAS,EACT,cAAc,EACd,OAAO,GACgB,KAAI;AAC3B,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEjD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,mDAAC;AAClD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,gDAAC;;AAGzD,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC;AAC7C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3C,IAAA,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;AACvC,IAAA,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC;;AAGjD,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;;IAGnC,SAAS,OAAO,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;QACA,MAAM,CAAC,KAAK,CAAC;IACf;IAEA,SAAS,MAAM,CAAC,KAAiB,EAAA;;AAE/B,QAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;;QAGrE,IAAI,IAAI,EAAE,EAAE;YACV,IAAI,CAAC,MAAM,CAAC;QACd;aAAO;AACL,YAAA,IAAI,EAAE;QACR;IACF;AAEA,IAAA,SAAS,IAAI,GAAA;;AAEX,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE;AACd,YAAA,qBAAqB,EAAE;QACzB;;AAGA,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE;IACnB;IAEA,SAAS,IAAI,CAAC,MAAA,GAAsB,SAAS,EAAA;;AAE3C,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YACX;QACF;;QAGA,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;AAEA,IAAA,SAAS,qBAAqB,GAAA;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI;QAE5B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;;AAGA,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,gBAAgB;YAChB,QAAQ;YACR,OAAO;YACP,SAAS,EAAE,SAAS,IAAI;AACxB,YAAA,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE;AACZ,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,eAAe,EAAE,cAAc,IAAI,IAAI,OAAO;SAC/C;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC;IAEA,OAAO;QACL,SAAS;QACT,IAAI;QACJ,IAAI;QACJ,MAAM;KACP;AACH,CAAC;;AC1JI,MAAM,CAAC,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,CAAC,GAAG,eAAe,CAC5F,SAAS,EACT,CAAC,EAAgB,KAAI;AACnB,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,OAAO,GAAG,aAAa,EAAE;AAC/B,IAAA,MAAM,WAAW,GAAG,sBAAsB,EAAE;AAC5C,IAAA,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGtE,IAAA,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;IACpC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9D,IAAA,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC;AACxC,IAAA,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AACpE,IAAA,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IACnE,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,CAAC,YAAY,CAAC;IAC1E,YAAY,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,CAAC,eAAe,CAAC;;AAG7E,IAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAe;;IAGhD,SAAS,aAAa,CAAC,MAAmB,EAAA;AACxC,QAAA,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA,UAAU,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC;IACrC;IAEA,OAAO;QACL,aAAa;QACb,aAAa;KACd;AACH,CAAC;;MCOU,CACX,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,0BAA0B,EAC3B,GAAG,eAAe,CACjB,mBAAmB,EACnB,CAAI,EACF,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EACxB,IAAI,EACJ,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,EACjC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAClB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GACO,KAAI;AAC9B,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACjD,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,mDAAC;AAClD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,gDAAC;;AAGzD,IAAA,UAAU;AACR,UAAE,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE;SAC5C,SAAS,CAAC,cAAc,IAAG;;AAE1B,QAAA,IAAI,cAAc,KAAK,OAAO,CAAC,aAAa,EAAE;YAC5C;QACF;QAEA,IAAI,CAAC,OAAO,CAAC;AACf,IAAA,CAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC;AAC7C,IAAA,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3C,IAAA,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;;AAGvC,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC;AAC5C,IAAA,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,kBAAkB,CAAC;;IAGrD,SAAS,OAAO,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;QACA,MAAM,CAAC,KAAK,CAAC;IACf;IAEA,SAAS,MAAM,CAAC,KAAiB,EAAA;;AAE/B,QAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;;QAGrE,IAAI,IAAI,EAAE,EAAE;YACV,IAAI,CAAC,MAAM,CAAC;QACd;aAAO;AACL,YAAA,IAAI,EAAE;QACR;IACF;AAEA,IAAA,SAAS,IAAI,GAAA;;AAEX,QAAA,IAAI,QAAQ,IAAI,EAAE;YAChB;QACF;;AAGA,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE;AACd,YAAA,qBAAqB,EAAE;QACzB;;AAGA,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE;IACnB;IAEA,SAAS,IAAI,CAAC,MAAA,GAAsB,SAAS,EAAA;;QAE3C,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YAC3B;QACF;;QAGA,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;AAEA,IAAA,SAAS,qBAAqB,GAAA;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI;QAE5B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;;AAGA,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,QAAQ;YACR,SAAS;YACT,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE;AACZ,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;YAClB,gBAAgB;SACjB;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC;IAEA,SAAS,cAAc,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,KAAK,YAAY,aAAa,KAAK,KAAK,EAAE;YAC5C;QACF;QAEA,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS;AACnE,QAAA,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK;AAEjC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY;AAC/C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW;AAE7C,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,EAAE;QACR;IACF;IAEA,SAAS,kBAAkB,CAAC,KAAY,EAAA;AACtC,QAAA,IAAI,KAAK,YAAY,YAAY,KAAK,KAAK,EAAE;YAC3C;QACF;;;AAIA,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,EAAE;IACR;IAEA,OAAO;QACL,SAAS;QACT,IAAI;QACJ,IAAI;QACJ,MAAM;KACP;AACH,CAAC;;MCrMU,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;AAME;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAuB,SAAS,wCACnD,KAAK,EAAE,mBAAmB,EAAA,CAAA,GAAA,CAD2B;AACrD,gBAAA,KAAK,EAAE,mBAAmB;AAC3B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,2BAA2B;gBAClC,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,2BAA2B;AAClC,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,aAAa,6CACxD,KAAK,EAAE,4BAA4B,EAAA,CAAA,GAAA,CADuB;AAC1D,gBAAA,KAAK,EAAE,4BAA4B;AACpC,aAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAClD,KAAK,EAAE,yBAAyB;gBAChC,SAAS,EAAE,YAAY,EAAA,CAAA,GAAA,CAF6B;AACpD,gBAAA,KAAK,EAAE,yBAAyB;AAChC,gBAAA,SAAS,EAAE,YAAY;AACxB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAC/C,KAAK,EAAE,uBAAuB;gBAC9B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAFsB;AACjD,gBAAA,KAAK,EAAE,uBAAuB;AAC9B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;QACc,IAAA,CAAA,KAAK,GAAG,iBAAiB,CAAI;YAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC;AAuBH,IAAA;AArBC;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA;;AAEG;IACH,IAAI,CAAC,SAAsB,SAAS,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B;8GA3EW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,0BAA0B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE9B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE,CAAC,0BAA0B,EAAE,CAAC;AAC1C,iBAAA;;;ACMM,MAAM,CAAC,qBAAqB,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,GAC1F,eAAe,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAoB,KAAI;AAChF,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtD,IAAA,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;;AAGvB,IAAA,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;;AAGxC,IAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC;AAC5C,IAAA,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,CAAC;;IAGnD,SAAS,OAAO,CAAC,KAAiB,EAAA;;QAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAErF,QAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;;QAGrE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,UAAU,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC;QACrC;IACF;IAEA,SAAS,cAAc,CAAC,KAAY,EAAA;AAClC,QAAA,IAAI,KAAK,YAAY,aAAa,KAAK,KAAK,EAAE;YAC5C;QACF;;QAGA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAEzF,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QAEA,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS;AACnE,QAAA,MAAM,KAAK,GAAG,SAAS,KAAK,KAAK;AAEjC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW;AAC7C,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,YAAY;AAE/C,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;YAEtB,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC1B;QACF;IACF;AAEA,IAAA,SAAS,kBAAkB,GAAA;QACzB,UAAU,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACzD;AAEA,IAAA,OAAO,EAAE;AACX,CAAC;;ACzEH;;AAEG;MAMU,WAAW,CAAA;AAOtB,IAAA,WAAA,GAAA;;AALS,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;QAGA,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjD;8GAVW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,oNAFX,CAAC,oBAAoB,EAAE,EAAE,2BAA2B,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEvD,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,EAAE,2BAA2B,EAAE,CAAC;AACnE,iBAAA;;;ACLD;;AAEG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;AAME;;AAEG;QACc,IAAA,CAAA,MAAM,GAAG,gBAAgB,EAAE;AAE5C;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAuB,SAAS,wCACnD,KAAK,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAD8B;AACrD,gBAAA,KAAK,EAAE,gBAAgB;AACxB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EACpD,KAAK,EAAE,wBAAwB;gBAC/B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAF2B;AACtD,gBAAA,KAAK,EAAE,wBAAwB;AAC/B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAChE,KAAK,EAAE,yBAAyB,EAAA,CAAA,GAAA,CADkC;AAClE,gBAAA,KAAK,EAAE,yBAAyB;AACjC,aAAA,CAAA,CAAA,CAAC;AAEF;;;;AAIG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EACnE,KAAK,EAAE,sBAAsB;gBAC7B,SAAS,EAAE,YAAY,EAAA,CAAA,GAAA,CAF8C;AACrE,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,SAAS,EAAE,YAAY;AACxB,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;QACM,IAAA,CAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAC3D,KAAK,EAAE,oBAAoB;gBAC3B,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAFkC;AAC7D,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,SAAS,EAAE,gBAAgB;AAC5B,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA8B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAC3E,KAAK,EAAE,yBAAyB,EAAA,CAAA,GAAA,CAD6C;AAC7E,gBAAA,KAAK,EAAE,yBAAyB;AACjC,aAAA,CAAA,CAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAyB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAChF,KAAK,EAAE,8BAA8B,EAAA,CAAA,GAAA,CAD6C;AAClF,gBAAA,KAAK,EAAE,8BAA8B;AACtC,aAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;QACM,IAAA,CAAA,OAAO,GAAG,KAAK,CAAI,SAAS,2CACnC,KAAK,EAAE,uBAAuB,EAAA,CAAA,GAAA,CADO;AACrC,gBAAA,KAAK,EAAE,uBAAuB;AAC/B,aAAA,CAAA,CAAA,CAAC;AAEF;;AAEG;QACc,IAAA,CAAA,KAAK,GAAG,cAAc,CAAI;YACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;AAyBH,IAAA;AAvBC;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B;8GA5GW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFd,CAAC,uBAAuB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAE3B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,SAAS,EAAE,CAAC,uBAAuB,EAAE,CAAC;AACvC,iBAAA;;;ACRD;;AAEG;MAWU,OAAO,CAAA;AAGlB,IAAA,WAAA,GAAA;AAFiB,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;AAGlC,QAAA,mBAAmB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvC,YAAY,CAAC,EAAE,CAAC;IAClB;;AAGA,IAAA,aAAa,CAAC,MAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;IAClC;8GAXW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAPP;;AAET,YAAA,4BAA4B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD,YAAA,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACpC,YAAA,qBAAqB,EAAE;AACxB,SAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,OAAO,EAAA,UAAA,EAAA,CAAA;kBAVnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,SAAS,EAAE;;AAET,wBAAA,4BAA4B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD,wBAAA,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACpC,wBAAA,qBAAqB,EAAE;AACxB,qBAAA;AACF,iBAAA;;;AClBD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-menu.mjs","sources":["../../../../packages/ng-primitives/menu/src/config/menu-config.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/menu/menu-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger-state.ts","../../../../packages/ng-primitives/menu/src/submenu-trigger/submenu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item-state.ts","../../../../packages/ng-primitives/menu/src/menu-item/menu-item.ts","../../../../packages/ng-primitives/menu/src/menu-trigger/menu-trigger.ts","../../../../packages/ng-primitives/menu/src/menu/menu.ts","../../../../packages/ng-primitives/menu/src/ng-primitives-menu.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpOffset, NgpShift } from 'ng-primitives/portal';\nimport type { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\n\nexport interface NgpMenuConfig {\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n offset: NgpOffset;\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n placement: NgpMenuPlacement;\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * @default true\n */\n flip: boolean;\n\n /**\n * Define the container element or selector in to which the menu should be attached.\n * @default 'body'\n */\n container: HTMLElement | string | null;\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default scroll\n */\n scrollBehavior: 'reposition' | 'block';\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n shift: NgpShift;\n}\n\nexport const defaultMenuConfig: NgpMenuConfig = {\n offset: 4,\n placement: 'bottom-start',\n flip: true,\n container: 'body',\n scrollBehavior: 'block',\n shift: undefined,\n};\n\nexport const NgpMenuConfigToken = new InjectionToken<NgpMenuConfig>('NgpMenuConfigToken');\n\n/**\n * Provide the default Menu configuration\n * @param config The Menu configuration\n * @returns The provider\n */\nexport function provideMenuConfig(config: Partial<NgpMenuConfig>): Provider[] {\n return [\n {\n provide: NgpMenuConfigToken,\n useValue: { ...defaultMenuConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Menu configuration\n * @returns The global Menu configuration\n */\nexport function injectMenuConfig(): NgpMenuConfig {\n return inject(NgpMenuConfigToken, { optional: true }) ?? defaultMenuConfig;\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { computed, inject, Injector, signal, Signal, ViewContainerRef } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n NgpShift,\n} from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { NgpMenuPlacement } from './menu-trigger';\n\nexport interface NgpMenuTriggerState {\n /**\n * The computed placement of the menu.\n */\n readonly placement: Signal<NgpMenuPlacement>;\n /**\n * Show the menu.\n */\n show(): void;\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void;\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n}\n\nexport interface NgpMenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<boolean>;\n /**\n * The container in which the menu should be attached.\n */\n readonly container?: Signal<HTMLElement | string | null>;\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n shift: NgpShift;\n\n /**\n * How the menu behaves when the window is scrolled.\n */\n readonly scrollBehavior?: Signal<'reposition' | 'block'>;\n /**\n * Context to provide to the menu.\n */\n readonly context?: Signal<T | undefined>;\n}\n\nexport const [\n NgpMenuTriggerStateToken,\n ngpMenuTrigger,\n injectMenuTriggerState,\n provideMenuTriggerState,\n] = createPrimitive(\n 'NgpMenuTrigger',\n <T>({\n disabled,\n menu,\n placement = signal('bottom-start' as NgpMenuPlacement),\n offset = signal(4),\n flip = signal(true),\n container,\n scrollBehavior,\n context,\n }: NgpMenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n dataBinding(element, 'data-placement', placement);\n\n // Event listeners\n listener(element, 'click', onClick);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n toggle(event);\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show();\n }\n }\n\n function show(): void {\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled or the menu is not open, do nothing\n if (!open()) {\n return;\n }\n\n // Hide the overlay\n overlay()?.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n viewContainerRef,\n injector,\n context,\n container: container?.(),\n placement: placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\n scrollBehaviour: scrollBehavior?.() ?? 'block',\n };\n\n overlay.set(createOverlay(config));\n }\n\n return {\n placement,\n show,\n hide,\n toggle,\n };\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectOverlay } from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, styleBinding } from 'ng-primitives/state';\nimport { Subject } from 'rxjs';\nimport { injectMenuTriggerState } from '../menu-trigger/menu-trigger-state';\n\nexport interface NgpMenuState {\n /**\n * Close the menu and any parent menus.\n * @param origin - The focus origin\n */\n closeAllMenus(origin: FocusOrigin): void;\n /**\n * Subject that emits when submenus should be closed.\n * @internal\n */\n readonly closeSubmenus: Subject<HTMLElement>;\n}\n\nexport interface NgpMenuProps {}\n\nexport const [NgpMenuStateToken, ngpMenu, injectMenuState, provideMenuState] = createPrimitive(\n 'NgpMenu',\n ({}: NgpMenuProps) => {\n const element = injectElementRef();\n const overlay = injectOverlay();\n const menuTrigger = injectMenuTriggerState();\n const parentMenu = injectMenuState({ optional: true, skipSelf: true });\n\n // Host bindings\n attrBinding(element, 'role', 'menu');\n attrBinding(element, 'data-placement', overlay.finalPlacement);\n attrBinding(element, 'data-overlay', '');\n styleBinding(element, 'left.px', () => overlay.position().x ?? null);\n styleBinding(element, 'top.px', () => overlay.position().y ?? null);\n styleBinding(element, '--ngp-menu-trigger-width.px', overlay.triggerWidth);\n styleBinding(element, '--ngp-menu-transform-origin', overlay.transformOrigin);\n\n // Subject to notify children to close submenus\n const closeSubmenus = new Subject<HTMLElement>();\n\n // Methods\n function closeAllMenus(origin: FocusOrigin): void {\n menuTrigger().hide(origin);\n parentMenu()?.closeAllMenus(origin);\n }\n\n return {\n closeAllMenus,\n closeSubmenus,\n };\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { computed, inject, Injector, signal, Signal, ViewContainerRef } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n createOverlay,\n NgpOffset,\n NgpOverlay,\n NgpOverlayConfig,\n NgpOverlayContent,\n} from 'ng-primitives/portal';\nimport { attrBinding, createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { safeTakeUntilDestroyed } from 'ng-primitives/utils';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { injectMenuState } from '../menu/menu-state';\n\nexport interface NgpSubmenuTriggerState {\n /**\n * The computed placement of the menu.\n */\n readonly placement: Signal<NgpMenuPlacement>;\n /**\n * Show the menu.\n */\n show(): void;\n /**\n * Hide the menu.\n * @param origin - The focus origin\n */\n hide(origin?: FocusOrigin): void;\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void;\n}\n\nexport interface NgpSubmenuTriggerProps<T = unknown> {\n /**\n * Whether the trigger is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * The menu template or component.\n */\n readonly menu?: Signal<NgpOverlayContent<T> | undefined>;\n /**\n * The placement of the menu.\n */\n readonly placement?: Signal<NgpMenuPlacement>;\n /**\n * The offset of the menu.\n */\n readonly offset?: Signal<NgpOffset>;\n /**\n * Whether the menu should flip when there is not enough space.\n */\n readonly flip?: Signal<boolean>;\n}\n\nexport const [\n NgpSubmenuTriggerStateToken,\n ngpSubmenuTrigger,\n injectSubmenuTriggerState,\n provideSubmenuTriggerState,\n] = createPrimitive(\n 'NgpSubmenuTrigger',\n <T>({\n disabled = signal(false),\n menu,\n placement = signal('right-start'),\n offset = signal(0),\n flip = signal(true),\n }: NgpSubmenuTriggerProps<T>) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const viewContainerRef = inject(ViewContainerRef);\n const parentMenu = injectMenuState({ optional: true });\n\n const overlay = signal<NgpOverlay<T> | null>(null);\n const open = computed(() => overlay()?.isOpen() ?? false);\n\n // Subscribe to parent menu's closeSubmenus\n parentMenu()\n ?.closeSubmenus.pipe(safeTakeUntilDestroyed())\n .subscribe(submenuElement => {\n // if the element is not the trigger, we want to close the menu\n if (submenuElement === element.nativeElement) {\n return;\n }\n\n hide('mouse');\n });\n\n // Host bindings\n attrBinding(element, 'aria-haspopup', 'true');\n attrBinding(element, 'aria-expanded', open);\n dataBinding(element, 'data-open', open);\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'pointerenter', showSubmenuOnHover);\n\n // Methods\n function onClick(event: MouseEvent): void {\n if (disabled?.()) {\n return;\n }\n toggle(event);\n }\n\n function toggle(event: MouseEvent): void {\n // determine the origin of the event, 0 is keyboard, 1 is mouse\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if the menu is open then hide it\n if (open()) {\n hide(origin);\n } else {\n show();\n }\n }\n\n function show(): void {\n // If the trigger is disabled, don't show the menu\n if (disabled?.()) {\n return;\n }\n\n // Create the overlay if it doesn't exist yet\n if (!overlay()) {\n createOverlayInstance();\n }\n\n // Show the overlay\n overlay()?.show();\n }\n\n function hide(origin: FocusOrigin = 'program'): void {\n // If the trigger is disabled or the menu is not open, do nothing\n if (disabled?.() || !open()) {\n return;\n }\n\n // Hide the overlay\n overlay()?.hide({ origin });\n }\n\n function createOverlayInstance(): void {\n const menuContent = menu?.();\n\n if (!menuContent) {\n throw new Error('Menu must be either a TemplateRef or a ComponentType');\n }\n\n // Create config for the overlay\n const config: NgpOverlayConfig<T> = {\n content: menuContent,\n triggerElement: element.nativeElement,\n injector,\n placement,\n offset: offset(),\n flip: flip(),\n closeOnOutsideClick: true,\n closeOnEscape: true,\n restoreFocus: true,\n viewContainerRef,\n };\n\n overlay.set(createOverlay(config));\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isRightArrow = event.key === 'ArrowRight';\n const isLeftArrow = event.key === 'ArrowLeft';\n\n if ((isRightArrow && !isRtl) || (isLeftArrow && isRtl)) {\n event.preventDefault();\n show();\n }\n }\n\n function showSubmenuOnHover(event: Event): void {\n if (event instanceof PointerEvent === false) {\n return;\n }\n\n // if this was triggered by a touch event, we don't want to show the submenu\n // as it will be shown by the click event - this prevents the submenu from being toggled\n if (event.pointerType === 'touch') {\n return;\n }\n\n show();\n }\n\n return {\n placement,\n show,\n hide,\n toggle,\n };\n },\n);\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { coerceOffset, NgpOffset, NgpOffsetInput, NgpOverlayContent } from 'ng-primitives/portal';\nimport { NgpMenuPlacement } from '../menu-trigger/menu-trigger';\nimport { ngpSubmenuTrigger, provideSubmenuTriggerState } from './submenu-trigger-state';\n\n@Directive({\n selector: '[ngpSubmenuTrigger]',\n exportAs: 'ngpSubmenuTrigger',\n providers: [provideSubmenuTriggerState()],\n})\nexport class NgpSubmenuTrigger<T = unknown> {\n /**\n * Access the submenu template ref.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpSubmenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSubmenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'right-start'\n */\n readonly placement = input<NgpMenuPlacement>('right-start', {\n alias: 'ngpSubmenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 0\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(0, {\n alias: 'ngpSubmenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * @default true\n */\n readonly flip = input<boolean, BooleanInput>(true, {\n alias: 'ngpSubmenuTriggerFlip',\n transform: booleanAttribute,\n });\n\n /**\n * Access the menu trigger state.\n */\n private readonly state = ngpSubmenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n */\n hide(origin: FocusOrigin = 'program'): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { inject, Injector, signal, Signal } from '@angular/core';\nimport { ngpButton } from 'ng-primitives/button';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { attrBinding, createPrimitive, listener } from 'ng-primitives/state';\nimport { injectMenuState } from '../menu/menu-state';\nimport { NgpSubmenuTrigger } from '../submenu-trigger/submenu-trigger';\n\nexport interface NgpMenuItemState {}\n\nexport interface NgpMenuItemProps {\n /**\n * Whether the menu item is disabled.\n */\n readonly disabled?: Signal<boolean>;\n}\n\nexport const [NgpMenuItemStateToken, ngpMenuItem, injectMenuItemState, provideMenuItemState] =\n createPrimitive('NgpMenuItem', ({ disabled = signal(false) }: NgpMenuItemProps) => {\n const element = injectElementRef();\n const injector = inject(Injector);\n const parentMenu = injectMenuState({ optional: true });\n\n ngpButton({ disabled });\n\n // Host bindings\n attrBinding(element, 'role', 'menuitem');\n\n // Event listeners\n listener(element, 'click', onClick);\n listener(element, 'keydown', handleArrowKey);\n listener(element, 'mouseenter', showSubmenuOnHover);\n\n // Methods\n function onClick(event: MouseEvent): void {\n // we do this here to avoid circular dependency issues\n const trigger = injector.get(NgpSubmenuTrigger, null, { self: true, optional: true });\n\n const origin: FocusOrigin = event.detail === 0 ? 'keyboard' : 'mouse';\n\n // if this is a submenu trigger, we don't want to close the menu, we want to open the submenu\n if (!trigger) {\n parentMenu()?.closeAllMenus(origin);\n }\n }\n\n function handleArrowKey(event: Event): void {\n if (event instanceof KeyboardEvent === false) {\n return;\n }\n\n // if there is no parent menu, we don't want to do anything\n const trigger = injector.get(NgpSubmenuTrigger, null, { optional: true, skipSelf: true });\n\n if (!trigger) {\n return;\n }\n\n const direction = getComputedStyle(element.nativeElement).direction;\n const isRtl = direction === 'rtl';\n\n const isLeftArrow = event.key === 'ArrowLeft';\n const isRightArrow = event.key === 'ArrowRight';\n\n if ((isLeftArrow && !isRtl) || (isRightArrow && isRtl)) {\n event.preventDefault();\n\n if (trigger) {\n trigger.hide('keyboard');\n }\n }\n }\n\n function showSubmenuOnHover(): void {\n parentMenu()?.closeSubmenus.next(element.nativeElement);\n }\n\n return {};\n });\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { ngpRovingFocusItem, provideRovingFocusItemState } from 'ng-primitives/roving-focus';\nimport { ngpMenuItem, provideMenuItemState } from './menu-item-state';\n\n/**\n * The `NgpMenuItem` directive represents a menu item.\n */\n@Directive({\n selector: '[ngpMenuItem]',\n exportAs: 'ngpMenuItem',\n providers: [provideMenuItemState(), provideRovingFocusItemState()],\n})\nexport class NgpMenuItem {\n /** Whether the menu item is disabled */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuItemDisabled',\n transform: booleanAttribute,\n });\n\n constructor() {\n ngpMenuItem({ disabled: this.disabled });\n ngpRovingFocusItem({ disabled: this.disabled });\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport {\n coerceOffset,\n coerceShift,\n NgpOffset,\n NgpOffsetInput,\n NgpOverlayContent,\n NgpShift,\n NgpShiftInput,\n} from 'ng-primitives/portal';\nimport { injectMenuConfig } from '../config/menu-config';\nimport { ngpMenuTrigger, provideMenuTriggerState } from './menu-trigger-state';\n\n/**\n * The `NgpMenuTrigger` directive allows you to turn an element into a menu trigger.\n */\n@Directive({\n selector: '[ngpMenuTrigger]',\n exportAs: 'ngpMenuTrigger',\n providers: [provideMenuTriggerState()],\n})\nexport class NgpMenuTrigger<T = unknown> {\n /**\n * Access the global menu configuration.\n */\n private readonly config = injectMenuConfig();\n\n /**\n * Access the menu template ref or ComponentType.\n */\n readonly menu = input<NgpOverlayContent<T>>(undefined, {\n alias: 'ngpMenuTrigger',\n });\n\n /**\n * Define if the trigger should be disabled.\n * @default false\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpMenuTriggerDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Define the placement of the menu relative to the trigger.\n * @default 'bottom-start'\n */\n readonly placement = input<NgpMenuPlacement>(this.config.placement, {\n alias: 'ngpMenuTriggerPlacement',\n });\n\n /**\n * Define the offset of the menu relative to the trigger.\n * Can be a number (applies to mainAxis) or an object with mainAxis, crossAxis, and alignmentAxis.\n * @default 4\n */\n readonly offset = input<NgpOffset, NgpOffsetInput>(this.config.offset, {\n alias: 'ngpMenuTriggerOffset',\n transform: coerceOffset,\n });\n\n /**\n * Define whether the menu should flip when there is not enough space for the menu.\n * @default true\n */\n readonly flip = input<boolean, BooleanInput>(this.config.flip, {\n alias: 'ngpMenuTriggerFlip',\n transform: booleanAttribute,\n });\n\n /**\n * Configure shift behavior to keep the menu in view.\n * Can be a boolean to enable/disable, or an object with padding and limiter options.\n * @default undefined (enabled by default in overlay)\n */\n readonly shift = input<NgpShift, NgpShiftInput>(this.config.shift, {\n alias: 'ngpMenuTriggerShift',\n transform: coerceShift,\n });\n\n /**\n * Define the container in which the menu should be attached.\n * @default document.body\n */\n readonly container = input<HTMLElement | string | null>(this.config.container, {\n alias: 'ngpMenuTriggerContainer',\n });\n\n /**\n * Defines how the menu behaves when the window is scrolled.\n * @default 'block'\n */\n readonly scrollBehavior = input<'reposition' | 'block'>(this.config.scrollBehavior, {\n alias: 'ngpMenuTriggerScrollBehavior',\n });\n\n /**\n * Provide context to the menu. This can be used to pass data to the menu content.\n */\n readonly context = input<T>(undefined, {\n alias: 'ngpMenuTriggerContext',\n });\n\n /**\n * The menu trigger state.\n */\n private readonly state = ngpMenuTrigger<T>({\n disabled: this.disabled,\n menu: this.menu,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n shift: this.shift(),\n container: this.container,\n scrollBehavior: this.scrollBehavior,\n context: this.context,\n });\n\n /**\n * Show the menu.\n */\n show(): void {\n this.state.show();\n }\n\n /**\n * Hide the menu.\n * @param origin - The focus origin\n * @internal\n */\n hide(origin?: FocusOrigin): void {\n this.state.hide(origin);\n }\n\n /**\n * Toggle the menu.\n * @param event - The mouse event\n */\n toggle(event: MouseEvent): void {\n this.state.toggle(event);\n }\n}\n\nexport type NgpMenuPlacement =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'right-start'\n | 'right-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end';\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Directive } from '@angular/core';\nimport { ngpFocusTrap, provideFocusTrapState } from 'ng-primitives/focus-trap';\nimport { ngpRovingFocusGroup, provideRovingFocusGroupState } from 'ng-primitives/roving-focus';\nimport { ngpMenu, provideMenuState } from './menu-state';\n\n/**\n * The `NgpMenu` is a container for menu items.\n */\n@Directive({\n selector: '[ngpMenu]',\n exportAs: 'ngpMenu',\n providers: [\n // ensure we don't inherit the focus group from the parent menu if there is one\n provideRovingFocusGroupState({ inherit: false }),\n provideMenuState({ inherit: false }),\n provideFocusTrapState(),\n ],\n})\nexport class NgpMenu {\n private readonly state = ngpMenu({});\n\n constructor() {\n ngpRovingFocusGroup({ inherit: false });\n ngpFocusTrap({});\n }\n\n /** @internal Close the menu and any parent menus */\n closeAllMenus(origin: FocusOrigin): void {\n this.state.closeAllMenus(origin);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { setupOverlayArrow, coerceOffset, createOverlay, injectOverlay } from 'ng-primitives/portal';
|
|
1
|
+
import { setupOverlayArrow, coerceOffset, coerceShift, createOverlay, injectOverlay } from 'ng-primitives/portal';
|
|
2
2
|
export { injectOverlayContext as injectPopoverContext } from 'ng-primitives/portal';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, inject, Directive, Injector, ViewContainerRef, input, booleanAttribute, numberAttribute, signal, computed, output } from '@angular/core';
|
|
@@ -17,6 +17,7 @@ const defaultPopoverConfig = {
|
|
|
17
17
|
closeOnOutsideClick: true,
|
|
18
18
|
closeOnEscape: true,
|
|
19
19
|
scrollBehavior: 'reposition',
|
|
20
|
+
shift: undefined,
|
|
20
21
|
};
|
|
21
22
|
const NgpPopoverConfigToken = new InjectionToken('NgpPopoverConfigToken');
|
|
22
23
|
/**
|
|
@@ -152,6 +153,16 @@ class NgpPopoverTrigger {
|
|
|
152
153
|
alias: 'ngpPopoverTriggerFlip',
|
|
153
154
|
transform: booleanAttribute,
|
|
154
155
|
}]));
|
|
156
|
+
/**
|
|
157
|
+
* Configure shift behavior to keep the popover in view.
|
|
158
|
+
* Can be a boolean to enable/disable, or an object with padding and limiter options.
|
|
159
|
+
* @default undefined (enabled by default in overlay)
|
|
160
|
+
*/
|
|
161
|
+
this.shift = input(this.config.shift, ...(ngDevMode ? [{ debugName: "shift", alias: 'ngpPopoverTriggerShift',
|
|
162
|
+
transform: coerceShift }] : [{
|
|
163
|
+
alias: 'ngpPopoverTriggerShift',
|
|
164
|
+
transform: coerceShift,
|
|
165
|
+
}]));
|
|
155
166
|
/**
|
|
156
167
|
* Define the container in which the popover should be attached.
|
|
157
168
|
* @default document.body
|
|
@@ -288,6 +299,7 @@ class NgpPopoverTrigger {
|
|
|
288
299
|
placement: this.state.placement,
|
|
289
300
|
offset: this.state.offset(),
|
|
290
301
|
flip: this.state.flip(),
|
|
302
|
+
shift: this.state.shift(),
|
|
291
303
|
showDelay: this.state.showDelay(),
|
|
292
304
|
hideDelay: this.state.hideDelay(),
|
|
293
305
|
closeOnOutsideClick: this.state.closeOnOutsideClick(),
|
|
@@ -299,7 +311,7 @@ class NgpPopoverTrigger {
|
|
|
299
311
|
this.overlay.set(createOverlay(config));
|
|
300
312
|
}
|
|
301
313
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPopoverTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
302
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpPopoverTrigger, isStandalone: true, selector: "[ngpPopoverTrigger]", inputs: { popover: { classPropertyName: "popover", publicName: "ngpPopoverTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpPopoverTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpPopoverTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpPopoverTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "ngpPopoverTriggerShowDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "ngpPopoverTriggerHideDelay", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpPopoverTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpPopoverTriggerContainer", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsideClick: { classPropertyName: "closeOnOutsideClick", publicName: "ngpPopoverTriggerCloseOnOutsideClick", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "ngpPopoverTriggerCloseOnEscape", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "ngpPopoverTriggerScrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "ngpPopoverTriggerContext", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "ngpPopoverTriggerAnchor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openChange: "ngpPopoverTriggerOpenChange" }, host: { listeners: { "click": "toggle($event)" }, properties: { "attr.aria-expanded": "open() ? \"true\" : \"false\"", "attr.data-open": "open() ? \"\" : null", "attr.data-placement": "state.placement()", "attr.data-disabled": "state.disabled() ? \"\" : null", "attr.aria-describedby": "overlay()?.ariaDescribedBy()" } }, providers: [providePopoverTriggerState({ inherit: false })], exportAs: ["ngpPopoverTrigger"], ngImport: i0 }); }
|
|
314
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpPopoverTrigger, isStandalone: true, selector: "[ngpPopoverTrigger]", inputs: { popover: { classPropertyName: "popover", publicName: "ngpPopoverTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpPopoverTriggerDisabled", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngpPopoverTriggerPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngpPopoverTriggerOffset", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "ngpPopoverTriggerShowDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "ngpPopoverTriggerHideDelay", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "ngpPopoverTriggerFlip", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "ngpPopoverTriggerShift", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "ngpPopoverTriggerContainer", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsideClick: { classPropertyName: "closeOnOutsideClick", publicName: "ngpPopoverTriggerCloseOnOutsideClick", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "ngpPopoverTriggerCloseOnEscape", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "ngpPopoverTriggerScrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "ngpPopoverTriggerContext", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "ngpPopoverTriggerAnchor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openChange: "ngpPopoverTriggerOpenChange" }, host: { listeners: { "click": "toggle($event)" }, properties: { "attr.aria-expanded": "open() ? \"true\" : \"false\"", "attr.data-open": "open() ? \"\" : null", "attr.data-placement": "state.placement()", "attr.data-disabled": "state.disabled() ? \"\" : null", "attr.aria-describedby": "overlay()?.ariaDescribedBy()" } }, providers: [providePopoverTriggerState({ inherit: false })], exportAs: ["ngpPopoverTrigger"], ngImport: i0 }); }
|
|
303
315
|
}
|
|
304
316
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpPopoverTrigger, decorators: [{
|
|
305
317
|
type: Directive,
|
|
@@ -316,7 +328,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
316
328
|
'(click)': 'toggle($event)',
|
|
317
329
|
},
|
|
318
330
|
}]
|
|
319
|
-
}], propDecorators: { popover: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerDisabled", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerOffset", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerShowDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerHideDelay", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerFlip", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerContainer", required: false }] }], closeOnOutsideClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerCloseOnOutsideClick", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerCloseOnEscape", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerScrollBehavior", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerContext", required: false }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerAnchor", required: false }] }], openChange: [{ type: i0.Output, args: ["ngpPopoverTriggerOpenChange"] }] } });
|
|
331
|
+
}], propDecorators: { popover: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerDisabled", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerOffset", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerShowDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerHideDelay", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerFlip", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerShift", required: false }] }], container: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerContainer", required: false }] }], closeOnOutsideClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerCloseOnOutsideClick", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerCloseOnEscape", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerScrollBehavior", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerContext", required: false }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpPopoverTriggerAnchor", required: false }] }], openChange: [{ type: i0.Output, args: ["ngpPopoverTriggerOpenChange"] }] } });
|
|
320
332
|
|
|
321
333
|
/**
|
|
322
334
|
* Apply the `ngpPopover` directive to an element that represents the popover. This typically would be a `div` inside an `ng-template`.
|