@radix-ng/primitives 0.51.0 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/radix-ng-primitives-accordion.mjs +105 -38
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs +221 -129
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-arrow.mjs +20 -4
- package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-avatar.mjs +54 -61
- package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-button.mjs +123 -0
- package/fesm2022/radix-ng-primitives-button.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-calendar.mjs +95 -83
- package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +378 -54
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +182 -81
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collection.mjs +40 -57
- package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-context-menu.mjs +140 -424
- package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +845 -744
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs +288 -308
- package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +104 -58
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs +655 -327
- package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +70 -46
- package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-drawer.mjs +960 -0
- package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-editable.mjs +304 -23
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +363 -0
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
- package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +23 -8
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-input.mjs +172 -0
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-label.mjs +6 -6
- package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +1907 -363
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
- package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
- package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1052 -1553
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -367
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +978 -989
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +111 -44
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-portal.mjs +34 -10
- package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
- package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
- package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-progress.mjs +223 -84
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +191 -51
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +96 -50
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-select.mjs +791 -509
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-separator.mjs +12 -35
- package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +969 -717
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-stepper.mjs +15 -19
- package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +125 -113
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +390 -108
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +55 -46
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
- package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +121 -247
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +98 -61
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +303 -92
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tooltip.mjs +699 -1072
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-visually-hidden.mjs +25 -66
- package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
- package/meter/README.md +3 -0
- package/navigation-menu/README.md +2 -1
- package/package.json +39 -18
- package/portal/README.md +2 -0
- package/preview-card/README.md +3 -0
- package/schematics/collection.json +1 -0
- package/schematics/ng-add/index.d.ts +3 -2
- package/schematics/ng-add/index.js +62 -31
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/package-config.d.ts +4 -2
- package/schematics/ng-add/package-config.js +10 -2
- package/schematics/ng-add/package-config.js.map +1 -1
- package/schematics/ng-add/schema.d.ts +3 -0
- package/schematics/ng-add/schema.js +3 -0
- package/schematics/ng-add/schema.js.map +1 -0
- package/schematics/ng-add/schema.json +14 -0
- package/select/README.md +2 -0
- package/types/radix-ng-primitives-accordion.d.ts +51 -16
- package/types/radix-ng-primitives-alert-dialog.d.ts +95 -38
- package/types/radix-ng-primitives-arrow.d.ts +1 -1
- package/types/radix-ng-primitives-aspect-ratio.d.ts +1 -1
- package/types/radix-ng-primitives-avatar.d.ts +7 -11
- package/types/radix-ng-primitives-button.d.ts +73 -0
- package/types/radix-ng-primitives-calendar.d.ts +39 -20
- package/types/radix-ng-primitives-checkbox.d.ts +204 -35
- package/types/radix-ng-primitives-collapsible.d.ts +114 -40
- package/types/radix-ng-primitives-collection.d.ts +38 -34
- package/types/radix-ng-primitives-config.d.ts +1 -1
- package/types/radix-ng-primitives-context-menu.d.ts +61 -116
- package/types/radix-ng-primitives-core.d.ts +345 -235
- package/types/radix-ng-primitives-cropper.d.ts +89 -56
- package/types/radix-ng-primitives-date-field.d.ts +49 -28
- package/types/radix-ng-primitives-dialog.d.ts +283 -165
- package/types/radix-ng-primitives-dismissable-layer.d.ts +15 -7
- package/types/radix-ng-primitives-drawer.d.ts +426 -0
- package/types/radix-ng-primitives-editable.d.ts +91 -14
- package/types/radix-ng-primitives-field.d.ts +374 -0
- package/types/radix-ng-primitives-fieldset.d.ts +49 -0
- package/types/radix-ng-primitives-focus-scope.d.ts +15 -6
- package/types/radix-ng-primitives-input.d.ts +87 -0
- package/types/radix-ng-primitives-label.d.ts +0 -1
- package/types/radix-ng-primitives-menu.d.ts +584 -99
- package/types/radix-ng-primitives-menubar.d.ts +61 -50
- package/types/radix-ng-primitives-meter.d.ts +194 -0
- package/types/radix-ng-primitives-navigation-menu.d.ts +422 -340
- package/types/radix-ng-primitives-number-field.d.ts +405 -145
- package/types/radix-ng-primitives-pagination.d.ts +2 -2
- package/types/radix-ng-primitives-popover.d.ts +366 -351
- package/types/radix-ng-primitives-popper.d.ts +68 -11
- package/types/radix-ng-primitives-portal.d.ts +14 -6
- package/types/radix-ng-primitives-presence.d.ts +28 -76
- package/types/radix-ng-primitives-preview-card.d.ts +359 -0
- package/types/radix-ng-primitives-progress.d.ts +175 -48
- package/types/radix-ng-primitives-radio.d.ts +55 -25
- package/types/radix-ng-primitives-roving-focus.d.ts +33 -23
- package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
- package/types/radix-ng-primitives-select.d.ts +475 -177
- package/types/radix-ng-primitives-separator.d.ts +7 -32
- package/types/radix-ng-primitives-slider.d.ts +315 -201
- package/types/radix-ng-primitives-stepper.d.ts +5 -7
- package/types/radix-ng-primitives-switch.d.ts +86 -71
- package/types/radix-ng-primitives-tabs.d.ts +213 -79
- package/types/radix-ng-primitives-time-field.d.ts +42 -27
- package/types/radix-ng-primitives-toast.d.ts +378 -0
- package/types/radix-ng-primitives-toggle-group.d.ts +86 -164
- package/types/radix-ng-primitives-toggle.d.ts +43 -53
- package/types/radix-ng-primitives-toolbar.d.ts +164 -38
- package/types/radix-ng-primitives-tooltip.d.ts +348 -384
- package/types/radix-ng-primitives-visually-hidden.d.ts +19 -19
- package/dropdown-menu/README.md +0 -1
- package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -581
- package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
- package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1238
- package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
- package/fesm2022/radix-ng-primitives-select2.mjs +0 -897
- package/fesm2022/radix-ng-primitives-select2.mjs.map +0 -1
- package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -735
- package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
- package/hover-card/README.md +0 -3
- package/select2/README.md +0 -3
- package/tooltip2/README.md +0 -3
- package/types/radix-ng-primitives-dropdown-menu.d.ts +0 -171
- package/types/radix-ng-primitives-hover-card.d.ts +0 -471
- package/types/radix-ng-primitives-select2.d.ts +0 -511
- package/types/radix-ng-primitives-tooltip2.d.ts +0 -325
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-dialog.mjs","sources":["../../../packages/primitives/dialog/src/dialog-ref.ts","../../../packages/primitives/dialog/src/dialog-close.directive.ts","../../../packages/primitives/dialog/src/dialog.config.ts","../../../packages/primitives/dialog/src/dialog-content.directive.ts","../../../packages/primitives/dialog/src/dialog-description.directive.ts","../../../packages/primitives/dialog/src/dialog-dismiss.directive.ts","../../../packages/primitives/dialog/src/dialog-title.directive.ts","../../../packages/primitives/dialog/src/dialog.service.ts","../../../packages/primitives/dialog/src/dialog.providers.ts","../../../packages/primitives/dialog/src/dialog-trigger.directive.ts","../../../packages/primitives/dialog/src/dialog.injectors.ts","../../../packages/primitives/dialog/index.ts","../../../packages/primitives/dialog/radix-ng-primitives-dialog.ts"],"sourcesContent":["import { DialogRef } from '@angular/cdk/dialog';\nimport { computed, signal } from '@angular/core';\nimport { filter, isObservable, map, Observable, of, take } from 'rxjs';\nimport { RdxDialogConfig, RdxDialogResult } from './dialog.config';\n\nexport const DISMISSED_VALUE = {} as const;\n\nfunction isDismissed(v: unknown): v is typeof DISMISSED_VALUE {\n return v === DISMISSED_VALUE;\n}\n\n/**\n * Represents a reference to an open dialog.\n * Provides methods and observables to interact with and monitor the dialog's state.\n * @template C - The type of the dialog's content component\n */\nexport class RdxDialogRef<C = unknown> {\n private _previousTimeout: ReturnType<typeof setTimeout> | undefined;\n\n // state tracking\n private readonly _openSignal = signal(true);\n public readonly state = computed(() => (this._openSignal() ? 'open' : 'closed'));\n\n closed$: Observable<RdxDialogResult<C> | undefined> = this.cdkRef.closed.pipe(\n map((res): RdxDialogResult<C> | undefined => (isDismissed(res) ? undefined : res))\n );\n\n dismissed$: Observable<void> = this.cdkRef.closed.pipe(\n filter((res) => res === DISMISSED_VALUE),\n map((): void => undefined)\n );\n\n result$: Observable<RdxDialogResult<C>> = this.cdkRef.closed.pipe(\n filter((res): res is RdxDialogResult<C> => !isDismissed(res))\n );\n\n /**\n * @param cdkRef - Reference to the underlying CDK dialog\n * @param config - Configuration options for the dialog\n */\n constructor(\n public readonly cdkRef: DialogRef<RdxDialogResult<C> | typeof DISMISSED_VALUE, C>,\n public readonly config: RdxDialogConfig<C>\n ) {}\n\n get instance(): C | null {\n return this.cdkRef.componentInstance;\n }\n\n /**\n * Attempts to dismiss the dialog\n * Checks the canClose condition before dismissing\n */\n dismiss(): void {\n if (!this.instance || this.config.isAlert) {\n return;\n }\n\n const canClose = this.config.canClose?.(this.instance) ?? true;\n const canClose$ = isObservable(canClose) ? canClose : of(canClose);\n canClose$.pipe(take(1)).subscribe((close) => {\n if (close) {\n this.cdkRef.close(DISMISSED_VALUE);\n }\n });\n }\n\n close(result: RdxDialogResult<C>): void {\n // check if dialog is already in closing state to prevent double-closing\n if (this.state() === 'closed') {\n return;\n }\n\n this._openSignal.set(false);\n\n if (this._previousTimeout) {\n clearTimeout(this._previousTimeout);\n }\n\n const closeDelay = this.config.closeDelay ?? 100; // Default to 100ms if not specified\n\n // Actual closing happens after delay\n this._previousTimeout = setTimeout(() => {\n this.cdkRef.close(result ?? DISMISSED_VALUE);\n }, closeDelay);\n }\n}\n\n/**\n * Represents a simplified interface for dialog interaction\n * Typically used by dialog content components\n * @template R - The type of the result when closing the dialog\n */\nexport type RdxDialogSelfRef<R> = { dismiss(): void; close(res: R): void };\n","import { Directive, inject } from '@angular/core';\nimport { RdxDialogRef } from './dialog-ref';\n\n@Directive({\n selector: '[rdxDialogClose]',\n standalone: true,\n host: {\n '(click)': 'onClick()'\n }\n})\nexport class RdxDialogCloseDirective {\n private readonly ref = inject<RdxDialogRef>(RdxDialogRef);\n\n protected onClick(): void {\n this.ref.close();\n }\n}\n","import { AutoFocusTarget, DialogConfig } from '@angular/cdk/dialog';\nimport { ComponentType } from '@angular/cdk/overlay';\nimport { TemplateRef } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nconst ɵdialogData = Symbol.for('rdxDialogData');\nconst ɵdialogResult = Symbol.for('rdxDialogResult');\n\nexport type ɵDialogDataFlag = { [ɵdialogData]: unknown };\nexport type ɵDialogResultFlag<R> = { [ɵdialogResult]: R };\n\nexport type RdxDialogData<T> = {\n [K in keyof T]: T[K] extends ɵDialogDataFlag ? Omit<T[K], typeof ɵdialogData> : never;\n}[keyof T];\n\ntype DialogRefProps<C> = { [K in keyof C]: C[K] extends ɵDialogResultFlag<unknown> ? K : never }[keyof C] & keyof C;\nexport type RdxDialogResult<C> =\n DialogRefProps<C> extends never ? void : C[DialogRefProps<C>] extends ɵDialogResultFlag<infer T> ? T : void;\n\ntype RdxDialogMode = 'default' | 'sheet' | 'sheet-bottom' | 'sheet-top' | 'sheet-left' | 'sheet-right';\n\ntype RdxBaseDialogConfig<C> = {\n content: ComponentType<C> | TemplateRef<C>;\n\n data: RdxDialogData<C>;\n\n modal?: boolean;\n\n ariaLabel?: string;\n\n autoFocus?: AutoFocusTarget | 'first-input' | string;\n\n canClose?: (comp: C) => boolean | Observable<boolean>;\n\n canCloseWithBackdrop?: boolean;\n\n closeDelay?: number;\n\n cdkConfigOverride?: Partial<DialogConfig<C>>;\n\n mode?: RdxDialogMode;\n\n backdropClass?: string | string[];\n\n panelClasses?: string[];\n\n isAlert?: boolean;\n};\n\nexport type RdxDialogConfig<T> =\n RdxDialogData<T> extends never\n ? Omit<RdxBaseDialogConfig<T>, 'data'>\n : RdxBaseDialogConfig<T> & { data: Required<RdxDialogData<T>> };\n\nexport type RdxDialogState = 'open' | 'closed';\n\nexport function getState(open: boolean): RdxDialogState {\n return open ? 'open' : 'closed';\n}\n","import { computed, DestroyRef, Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RdxDialogRef } from './dialog-ref';\nimport { getState, RdxDialogResult } from './dialog.config';\n\n@Directive({\n selector: '[rdxDialogContent]',\n standalone: true,\n host: {\n role: 'dialog',\n '[attr.aria-describedby]': '\"true\"',\n '[attr.aria-labelledby]': '\"true\"',\n '[attr.data-state]': 'state()'\n }\n})\nexport class RdxDialogContentDirective<C = unknown> {\n private readonly dialogRef = inject<RdxDialogRef<C>>(RdxDialogRef);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly isOpen = signal(true);\n\n readonly state = computed(() => getState(this.isOpen()));\n\n constructor() {\n this.dialogRef.closed$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.isOpen.set(false);\n });\n }\n\n /**\n * Closes the dialog with a specified result.\n *\n * @param result The result to be passed back when closing the dialog\n */\n close(result: RdxDialogResult<C>): void {\n this.dialogRef.close(result);\n }\n\n /**\n * Dismisses the dialog without a result.\n */\n dismiss(): void {\n this.dialogRef.dismiss();\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxDialogDescription]',\n standalone: true\n})\nexport class RdxDialogDescriptionDirective {}\n","import { Directive, inject } from '@angular/core';\nimport { RdxDialogRef } from './dialog-ref';\n\n@Directive({\n selector: 'button[rdxDialogDismiss]',\n standalone: true,\n host: {\n type: 'button',\n '(click)': 'onClick()'\n }\n})\nexport class RdxDialogDismissDirective {\n private readonly ref = inject<RdxDialogRef>(RdxDialogRef);\n\n protected onClick(): void {\n this.ref.dismiss();\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rdxDialogTitle]',\n standalone: true\n})\nexport class RdxDialogTitleDirective {}\n","import { Dialog } from '@angular/cdk/dialog';\nimport {\n effect,\n inject,\n Injectable,\n Injector,\n Renderer2,\n RendererFactory2,\n runInInjectionContext\n} from '@angular/core';\nimport { filter, isObservable, merge, of, switchMap, take, takeUntil } from 'rxjs';\nimport { DISMISSED_VALUE, RdxDialogRef } from './dialog-ref';\nimport type { RdxDialogConfig, RdxDialogResult } from './dialog.config';\n\n/**\n * Modality control: When `isModal` is set to `true`, the dialog will:\n *\n * - Have a backdrop that blocks interaction with the rest of the page\n * - Disable closing by clicking outside or pressing Escape\n * - Set `aria-modal=\"true\"` for screen readers\n * - Automatically focus the first tabbable element in the dialog\n * - Restore focus to the element that opened the dialog when it's closed\n *\n *\n * When `isModal` is `false`, the dialog will:\n *\n * - Not have a backdrop, allowing interaction with the rest of the page\n * - Allow closing by clicking outside or pressing Escape\n * - Not set `aria-modal` attribute\n * - Not automatically manage focus\n */\n@Injectable()\nexport class RdxDialogService {\n #cdkDialog = inject(Dialog);\n #injector = inject(Injector);\n #rendererFactory = inject(RendererFactory2);\n #renderer = this.#rendererFactory.createRenderer(null, null);\n\n open<C>(config: RdxDialogConfig<C>): RdxDialogRef<C> {\n let dialogRef: RdxDialogRef<C>;\n let modeClasses: string[] = [];\n\n switch (config.mode) {\n case 'sheet':\n modeClasses = ['mod-sheet', 'mod-right'];\n break;\n case 'sheet-right':\n modeClasses = ['mod-sheet', 'mod-right'];\n break;\n case 'sheet-bottom':\n modeClasses = ['mod-sheet', 'mod-bottom'];\n break;\n case 'sheet-left':\n modeClasses = ['mod-sheet', 'mod-left'];\n break;\n case 'sheet-top':\n modeClasses = ['mod-sheet', 'mod-top'];\n break;\n }\n\n // Create a new configuration with default closeDelay if not provided\n const extendedConfig: RdxDialogConfig<C> = {\n ...config,\n closeDelay: config.closeDelay ?? 0\n };\n\n const cdkRef = this.#cdkDialog.open<RdxDialogResult<C> | typeof DISMISSED_VALUE, unknown, C>(config.content, {\n ariaModal: config.modal ?? true,\n hasBackdrop: config.modal ?? true,\n data: 'data' in config ? config.data : null,\n restoreFocus: true,\n role: config.isAlert ? 'alertdialog' : 'dialog',\n disableClose: true,\n closeOnDestroy: true,\n injector: this.#injector,\n backdropClass: config.backdropClass ? config.backdropClass : 'cdk-overlay-dark-backdrop',\n panelClass: ['dialog', ...modeClasses, ...(config.panelClasses || [])],\n autoFocus: config.autoFocus === 'first-input' ? 'dialog' : (config.autoFocus ?? 'first-tabbable'),\n ariaLabel: config.ariaLabel,\n templateContext: () => ({ dialogRef: dialogRef }),\n providers: (ref) => {\n // Create dialog ref with state tracking\n dialogRef = new RdxDialogRef(ref, extendedConfig);\n\n // Get overlay and backdrop references\n const overlay = ref.overlayRef.overlayElement;\n const backdrop = ref.overlayRef.backdropElement;\n\n // Set up effect to track and update state attributes\n runInInjectionContext(this.#injector, () => {\n effect(() => {\n const currentState = dialogRef.state();\n\n if (overlay) {\n this.#renderer.setAttribute(overlay, 'data-state', currentState);\n }\n\n if (backdrop) {\n this.#renderer.setAttribute(backdrop, 'data-state', currentState);\n }\n\n // For sheet dialogs, add data-side attribute\n if (config.mode?.startsWith('sheet-')) {\n const side = config.mode.substring(6);\n if (overlay) {\n this.#renderer.setAttribute(overlay, 'data-side', side);\n }\n if (backdrop) {\n this.#renderer.setAttribute(backdrop, 'data-side', side);\n }\n }\n });\n });\n\n return [\n {\n provide: RdxDialogRef,\n useValue: dialogRef\n }\n ];\n },\n // @FIXME\n ...(config.cdkConfigOverride || ({} as any))\n });\n\n if (cdkRef.componentRef) {\n cdkRef.componentRef.injector\n .get(Renderer2)\n .setStyle(cdkRef.componentRef.location.nativeElement, 'display', 'contents');\n }\n\n if (!config.isAlert) {\n merge(\n cdkRef.backdropClick,\n cdkRef.keydownEvents.pipe(filter((e) => e.key === 'Escape' && !e.defaultPrevented))\n )\n .pipe(\n filter(() => config.canCloseWithBackdrop ?? true),\n switchMap(() => {\n const canClose =\n (cdkRef.componentInstance && config.canClose?.(cdkRef.componentInstance)) ?? true;\n const canClose$ = isObservable(canClose) ? canClose : of(canClose);\n return canClose$.pipe(take(1));\n }),\n\n takeUntil(dialogRef!.closed$)\n )\n .subscribe((canClose) => {\n if (canClose) {\n // rather than `cdkRef.close()`, closing the `dialogRef` directly\n // ensures that the `state` is represented correctly\n dialogRef!.close(undefined as unknown as RdxDialogResult<C>);\n }\n });\n }\n\n return dialogRef!;\n }\n}\n","import { DialogModule } from '@angular/cdk/dialog';\nimport { EnvironmentProviders, importProvidersFrom, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { RdxDialogService } from './dialog.service';\n\n/**\n * Configures the RdxDialog module by providing necessary dependencies.\n *\n * This function sets up the environment providers required for the RdxDialog to function,\n * specifically importing the Angular CDK's DialogModule.\n *\n * @returns {EnvironmentProviders} An EnvironmentProviders instance containing the DialogModule.\n */\nexport function provideRdxDialogConfig(): EnvironmentProviders {\n return makeEnvironmentProviders([importProvidersFrom(DialogModule)]);\n}\n\n/**\n * Provides the RdxDialogService for dependency injection.\n *\n * This function is used to make the RdxDialogService available for injection\n * in components, directives, or other services that require dialog functionality.\n *\n * @returns {Provider} A provider for the RdxDialogService.\n */\nexport function provideRdxDialog(): Provider {\n return RdxDialogService;\n}\n","import { computed, Directive, inject, Input, input, signal, TemplateRef } from '@angular/core';\nimport { RdxDialogRef } from './dialog-ref';\nimport { getState, type RdxDialogConfig, RdxDialogState } from './dialog.config';\nimport { provideRdxDialog } from './dialog.providers';\nimport { RdxDialogService } from './dialog.service';\n\nlet nextId = 0;\n\n/**\n * @group Components\n */\n@Directive({\n selector: '[rdxDialogTrigger]',\n standalone: true,\n providers: [provideRdxDialog()],\n host: {\n type: 'button',\n '[attr.id]': 'id()',\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-controls]': 'dialogId()',\n '[attr.data-state]': 'state()',\n '(click)': 'onClick()'\n }\n})\nexport class RdxDialogTriggerDirective {\n private readonly dialogService = inject(RdxDialogService);\n\n /**\n * @group Props\n */\n readonly id = input(`rdx-dialog-trigger-${nextId++}`);\n readonly dialogId = computed(() => `rdx-dialog-${this.id()}`);\n\n /**\n * @group Props\n */\n @Input({ required: true, alias: 'rdxDialogTrigger' }) dialog: TemplateRef<void>;\n\n /**\n * @group Props\n */\n @Input({ alias: 'rdxDialogConfig' }) dialogConfig: RdxDialogConfig<unknown>;\n\n readonly isOpen = signal(false);\n readonly state = computed<RdxDialogState>(() => getState(this.isOpen()));\n\n private currentDialogRef: RdxDialogRef | null = null;\n\n protected onClick() {\n this.currentDialogRef = this.dialogService.open({\n ...this.dialogConfig,\n content: this.dialog\n });\n\n this.isOpen.set(true);\n\n this.currentDialogRef.closed$.subscribe(() => {\n this.isOpen.set(false);\n this.currentDialogRef = null;\n });\n }\n}\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { inject } from '@angular/core';\nimport { RdxDialogRef, RdxDialogSelfRef } from './dialog-ref';\nimport { ɵDialogDataFlag, ɵDialogResultFlag } from './dialog.config';\n\nexport function injectDialogData<TData>(): TData & ɵDialogDataFlag {\n return inject<TData & ɵDialogDataFlag>(DIALOG_DATA);\n}\n\nexport function injectDialogRef<R = void>(): RdxDialogSelfRef<R> & ɵDialogResultFlag<R> {\n return inject<RdxDialogSelfRef<R>>(RdxDialogRef) as RdxDialogSelfRef<R> & ɵDialogResultFlag<R>;\n}\n","import { NgModule } from '@angular/core';\nimport { RdxDialogCloseDirective } from './src/dialog-close.directive';\nimport { RdxDialogContentDirective } from './src/dialog-content.directive';\nimport { RdxDialogDescriptionDirective } from './src/dialog-description.directive';\nimport { RdxDialogDismissDirective } from './src/dialog-dismiss.directive';\nimport { RdxDialogTitleDirective } from './src/dialog-title.directive';\nimport { RdxDialogTriggerDirective } from './src/dialog-trigger.directive';\n\nexport * from './src/dialog-close.directive';\nexport * from './src/dialog-content.directive';\nexport * from './src/dialog-description.directive';\nexport * from './src/dialog-dismiss.directive';\nexport * from './src/dialog-ref';\nexport * from './src/dialog-title.directive';\nexport * from './src/dialog-trigger.directive';\nexport * from './src/dialog.config';\nexport * from './src/dialog.injectors';\nexport * from './src/dialog.providers';\nexport * from './src/dialog.service';\n\nconst _imports = [\n RdxDialogTriggerDirective,\n RdxDialogContentDirective,\n RdxDialogTitleDirective,\n RdxDialogCloseDirective,\n RdxDialogDescriptionDirective,\n RdxDialogDismissDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-dialog.mjs","sources":["../../../packages/primitives/dialog/src/dialog-variant.ts","../../../packages/primitives/dialog/src/dialog-root.ts","../../../packages/primitives/dialog/src/dialog-backdrop.ts","../../../packages/primitives/dialog/src/dialog-close.ts","../../../packages/primitives/dialog/src/dialog-description.ts","../../../packages/primitives/dialog/src/dialog-popup.ts","../../../packages/primitives/dialog/src/dialog-portal.ts","../../../packages/primitives/dialog/src/dialog-portal-presence.ts","../../../packages/primitives/dialog/src/dialog-title.ts","../../../packages/primitives/dialog/src/dialog-trigger.ts","../../../packages/primitives/dialog/src/dialog-viewport.ts","../../../packages/primitives/dialog/src/dialog-handle.ts","../../../packages/primitives/dialog/index.ts","../../../packages/primitives/dialog/radix-ng-primitives-dialog.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\n\nexport type RdxDialogRole = 'dialog' | 'alertdialog';\n\n/**\n * Behavioral profile for a dialog, supplied by a composing root (e.g. alert-dialog, drawer) to\n * specialize the shared Dialog without new public dialog inputs.\n *\n * These are *force-only* overrides: a variant uses them to pin behavior regardless of the public\n * inputs (as alert-dialog does). A variant that wants a configurable default instead simply leaves\n * the flags off and lets the composing root proxy the `modal` / `disablePointerDismissal` inputs —\n * that is how Drawer stays modal-by-default while remaining user-overridable.\n *\n * The three concerns are kept independent on purpose so future variants can mix them freely\n * (e.g. a modal, non-dismissable drawer that is still `role=\"dialog\"`):\n * - `role` — ARIA role rendered on the popup.\n * - `forceModal` — pin modality to `true` regardless of the `modal` input.\n * - `forcePointerDismissalDisabled` — disable outside-press / focus-out dismissal (Escape still closes).\n */\nexport interface RdxDialogVariant {\n role: RdxDialogRole;\n forceModal: boolean;\n forcePointerDismissalDisabled: boolean;\n}\n\nconst DEFAULT_VARIANT: RdxDialogVariant = {\n role: 'dialog',\n forceModal: false,\n forcePointerDismissalDisabled: false\n};\n\nexport const RDX_DIALOG_VARIANT = new InjectionToken<RdxDialogVariant>('RdxDialogVariant', {\n factory: () => DEFAULT_VARIANT\n});\n\nexport function provideRdxDialogVariant(variant: Partial<RdxDialogVariant>): Provider {\n return { provide: RDX_DIALOG_VARIANT, useValue: { ...DEFAULT_VARIANT, ...variant } };\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n output,\n Signal,\n signal,\n untracked\n} from '@angular/core';\nimport {\n BooleanInput,\n createContext,\n injectId,\n RdxTransitionStatus,\n useTransitionStatus\n} from '@radix-ng/primitives/core';\nimport { RdxDialogHandle } from './dialog-handle';\nimport { RDX_DIALOG_VARIANT, RdxDialogRole } from './dialog-variant';\n\nexport type RdxDialogModal = boolean | 'trap-focus';\n\nexport type RdxDialogOpenChangeReason =\n | 'trigger-press'\n | 'close-press'\n | 'outside-press'\n | 'focus-out'\n | 'escape-key'\n | 'swipe'\n | 'imperative-action'\n | 'none';\n\nexport interface RdxDialogOpenChange {\n open: boolean;\n triggerId: string | null;\n trigger: HTMLElement | undefined;\n reason: RdxDialogOpenChangeReason;\n event: Event;\n}\n\ninterface RdxDialogRegisteredTrigger {\n element: HTMLElement;\n payload: () => unknown;\n}\n\nconst transformModal = (value: BooleanInput | 'trap-focus'): RdxDialogModal =>\n value === 'trap-focus' ? value : booleanAttribute(value);\n\nconst context = () => contextFor(inject(RdxDialogRoot));\n\nexport interface RdxDialogRootContext {\n contentId: string;\n titleId: Signal<string | undefined>;\n descriptionId: Signal<string | undefined>;\n isOpen: Signal<boolean>;\n /** Effective modality (the variant can pin this to `true`). */\n modal: Signal<RdxDialogModal>;\n /** Effective outside-press / focus-out dismissal flag (the variant can force it on). */\n disablePointerDismissal: Signal<boolean>;\n /** ARIA role for the popup; constant, fixed by the variant at construction. */\n role: RdxDialogRole;\n transitionStatus: Signal<RdxTransitionStatus>;\n trigger: Signal<HTMLElement | undefined>;\n triggers: Signal<HTMLElement[]>;\n payload: Signal<unknown>;\n /** Whether this dialog is nested in another; constant, fixed at construction. */\n nested: boolean;\n nestedDialogOpen: Signal<boolean>;\n setTitleId: (id: string | undefined) => void;\n setDescriptionId: (id: string | undefined) => void;\n registerTransitionElement: (element: HTMLElement) => () => void;\n registerTrigger: (id: string, trigger: HTMLElement, payload: () => unknown) => () => void;\n open: (\n trigger?: HTMLElement,\n payload?: unknown,\n triggerId?: string,\n reason?: RdxDialogOpenChangeReason,\n event?: Event\n ) => void;\n close: (reason?: RdxDialogOpenChangeReason, event?: Event) => void;\n toggle: (triggerId: string, trigger: HTMLElement, payload?: unknown, event?: Event) => void;\n}\n\nexport const [injectRdxDialogRootContext, provideRdxDialogRootContext] =\n createContext<RdxDialogRootContext>('RdxDialogRootContext');\n\n/**\n * Groups all parts of the dialog.\n */\n@Directive({\n selector: '[rdxDialogRoot]',\n exportAs: 'rdxDialogRoot',\n providers: [provideRdxDialogRootContext(context)]\n})\nexport class RdxDialogRoot {\n private readonly destroyRef = inject(DestroyRef);\n private readonly parentRoot = inject(RdxDialogRoot, { optional: true, skipSelf: true });\n private readonly variant = inject(RDX_DIALOG_VARIANT);\n private hasAppliedDefaultOpen = false;\n private hasAppliedDefaultTriggerId = false;\n private readonly registeredTriggers = new Map<string, RdxDialogRegisteredTrigger>();\n\n private readonly transition = useTransitionStatus((open) => this.emitOpenChangeComplete(open));\n readonly transitionStatus = this.transition.status;\n readonly registerTransitionElement = this.transition.registerElement;\n\n /**\n * Whether the dialog is currently open.\n */\n readonly open = model(false);\n\n /**\n * Whether the dialog is initially open.\n */\n readonly defaultOpen = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * ID of the trigger associated with a controlled dialog.\n */\n readonly triggerId = model<string | null>(null);\n\n /**\n * ID of the trigger associated with an initially open uncontrolled dialog.\n */\n readonly defaultTriggerId = input<string | null>(null);\n\n /**\n * Determines if the dialog enters a modal state when open.\n * - `true`: focus is trapped, page scroll is locked, outside pointer events are disabled.\n * - `false`: interaction with the rest of the document is allowed.\n * - `'trap-focus'`: focus is trapped, but scroll is not locked and outside pointer events remain enabled.\n */\n readonly modal = input<RdxDialogModal, BooleanInput | 'trap-focus'>(true, { transform: transformModal });\n\n /**\n * Determines whether the dialog should close on outside clicks.\n */\n readonly disablePointerDismissal = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * Associates this root with detached trigger elements rendered outside of it.\n */\n readonly handle = input<RdxDialogHandle<any>>();\n\n /**\n * Event handler called when the dialog is opened or closed.\n */\n readonly onOpenChange = output<RdxDialogOpenChange>();\n\n /**\n * Event handler called after any animations complete when the dialog is opened or closed.\n */\n readonly onOpenChangeComplete = output<boolean>();\n\n readonly contentId = injectId('rdx-dialog-content-');\n readonly titleId = signal<string | undefined>(undefined);\n readonly descriptionId = signal<string | undefined>(undefined);\n readonly trigger = signal<HTMLElement | undefined>(undefined);\n readonly triggers = signal<HTMLElement[]>([]);\n readonly payload = signal<unknown>(undefined);\n readonly nestedOpenCount = signal(0);\n\n /** Whether this dialog is rendered inside another dialog. Fixed at construction. */\n readonly nested = !!this.parentRoot;\n readonly nestedDialogOpen = computed(() => this.nestedOpenCount() > 0);\n\n /** ARIA role, fixed at construction by the dialog variant (`alertdialog` for alert dialogs). */\n readonly role = this.variant.role;\n\n /** Effective modality: the variant can pin it to `true` regardless of the `modal` input. */\n readonly effectiveModal = computed<RdxDialogModal>(() => (this.variant.forceModal ? true : this.modal()));\n /** Effective dismissal flag: disabled when the input asks, or when the variant forces it (alerts). */\n readonly effectiveDisablePointerDismissal = computed(\n () => this.disablePointerDismissal() || this.variant.forcePointerDismissalDisabled\n );\n\n constructor() {\n let previousOpen = this.open();\n\n effect(() => {\n const defaultOpen = this.defaultOpen();\n\n if (!this.hasAppliedDefaultOpen && defaultOpen) {\n this.hasAppliedDefaultOpen = true;\n this.open.set(defaultOpen);\n }\n });\n\n effect(() => {\n const defaultTriggerId = this.defaultTriggerId();\n\n if (!this.hasAppliedDefaultTriggerId && defaultTriggerId !== null) {\n this.hasAppliedDefaultTriggerId = true;\n this.triggerId.set(defaultTriggerId);\n }\n });\n\n effect(() => {\n const triggerId = this.triggerId();\n untracked(() => this.syncTriggerId(triggerId));\n });\n\n effect(() => {\n const open = this.open();\n\n if (open !== previousOpen) {\n previousOpen = open;\n untracked(() => this.transition.start(open));\n }\n });\n\n // Report nested open state to the parent dialog so it can apply data-nested-dialog-open.\n effect((onCleanup) => {\n const open = this.open();\n\n if (open && this.parentRoot) {\n onCleanup(untracked(() => this.parentRoot!.openNestedChild()));\n }\n });\n\n effect((onCleanup) => {\n const handle = this.handle();\n\n if (handle) {\n onCleanup(untracked(() => handle.registerRoot(contextFor(this))));\n }\n });\n }\n\n show(\n trigger = this.trigger(),\n payload?: unknown,\n triggerId?: string,\n reason: RdxDialogOpenChangeReason = 'none',\n event = new Event('dialog.open-change')\n ) {\n if (trigger) {\n this.trigger.set(trigger);\n }\n\n if (triggerId !== undefined) {\n this.triggerId.set(triggerId);\n }\n\n // Only adopt the payload when a trigger context is actually provided, so a bare\n // imperative re-show on an already-open dialog doesn't clobber the live payload.\n if (trigger !== undefined || payload !== undefined) {\n this.payload.set(payload);\n }\n\n if (this.open()) {\n return;\n }\n\n this.open.set(true);\n this.emitOpenChange(true, reason, event);\n }\n\n close(reason: RdxDialogOpenChangeReason = 'none', event = new Event('dialog.open-change')) {\n if (!this.open()) {\n return;\n }\n\n this.open.set(false);\n this.emitOpenChange(false, reason, event);\n }\n\n toggle(triggerId: string, trigger: HTMLElement, payload?: unknown, event = new Event('dialog.open-change')) {\n if (this.open() && this.trigger() === trigger) {\n this.close('trigger-press', event);\n return;\n }\n\n this.show(trigger, payload, triggerId, 'trigger-press', event);\n }\n\n registerTrigger(id: string, trigger: HTMLElement, payload: () => unknown) {\n this.registeredTriggers.set(id, { element: trigger, payload });\n this.triggers.update((triggers) => (triggers.includes(trigger) ? triggers : [...triggers, trigger]));\n\n if (this.triggerId() === id || (!this.trigger() && this.triggerId() === null)) {\n this.trigger.set(trigger);\n this.payload.set(payload());\n }\n\n return () => {\n if (this.registeredTriggers.get(id)?.element === trigger) {\n this.registeredTriggers.delete(id);\n }\n\n this.triggers.update((triggers) => triggers.filter((candidate) => candidate !== trigger));\n\n if (!this.destroyRef.destroyed && this.trigger() === trigger) {\n const next = this.registeredTriggers.entries().next().value;\n\n if (this.triggerId() !== null) {\n this.triggerId.set(next?.[0] ?? null);\n }\n\n this.trigger.set(next?.[1].element);\n this.payload.set(next?.[1].payload());\n\n // Intentionally do NOT close when the last trigger unregisters (unlike popover):\n // a controlled / imperatively-opened dialog must survive its trigger unmounting.\n }\n };\n }\n\n /** Increments the nested-open counter and returns a release callback that decrements it. */\n openNestedChild() {\n this.nestedOpenCount.update((count) => count + 1);\n return () => this.nestedOpenCount.update((count) => count - 1);\n }\n\n private syncTriggerId(triggerId: string | null) {\n if (triggerId === null) {\n // Controlled triggerId cleared: drop the active trigger so stale state doesn't linger.\n this.trigger.set(undefined);\n this.payload.set(undefined);\n return;\n }\n\n const trigger = this.registeredTriggers.get(triggerId);\n\n if (trigger && trigger.element !== this.trigger()) {\n this.trigger.set(trigger.element);\n this.payload.set(trigger.payload());\n }\n }\n\n private emitOpenChange(open: boolean, reason: RdxDialogOpenChangeReason, event: Event) {\n this.onOpenChange.emit({\n open,\n triggerId: this.triggerId(),\n trigger: this.trigger(),\n reason,\n event\n });\n }\n\n private emitOpenChangeComplete(open: boolean) {\n if (!this.destroyRef.destroyed) {\n this.onOpenChangeComplete.emit(open);\n }\n }\n}\n\nfunction contextFor(root: RdxDialogRoot): RdxDialogRootContext {\n return {\n contentId: root.contentId,\n titleId: root.titleId.asReadonly(),\n descriptionId: root.descriptionId.asReadonly(),\n isOpen: root.open,\n modal: root.effectiveModal,\n disablePointerDismissal: root.effectiveDisablePointerDismissal,\n role: root.role,\n transitionStatus: root.transitionStatus,\n trigger: root.trigger.asReadonly(),\n triggers: root.triggers.asReadonly(),\n payload: root.payload.asReadonly(),\n nested: root.nested,\n nestedDialogOpen: root.nestedDialogOpen,\n setTitleId: (id: string | undefined) => root.titleId.set(id),\n setDescriptionId: (id: string | undefined) => root.descriptionId.set(id),\n registerTransitionElement: (element) => root.registerTransitionElement(element),\n registerTrigger: (id, trigger, payload) => root.registerTrigger(id, trigger, payload),\n open: (trigger, payload, triggerId, reason, event) => root.show(trigger, payload, triggerId, reason, event),\n close: (reason, event) => root.close(reason, event),\n toggle: (triggerId, trigger, payload, event) => root.toggle(triggerId, trigger, payload, event)\n };\n}\n","import { Directive } from '@angular/core';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * An overlay displayed beneath the dialog popup.\n */\n@Directive({\n selector: '[rdxDialogBackdrop]',\n exportAs: 'rdxDialogBackdrop',\n host: {\n '[attr.data-closed]': 'rootContext.isOpen() ? undefined : \"\"',\n '[attr.data-ending-style]': 'rootContext.transitionStatus() === \"ending\" ? \"\" : undefined',\n '[attr.data-open]': 'rootContext.isOpen() ? \"\" : undefined',\n '[attr.data-starting-style]': 'rootContext.transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-state]': 'rootContext.isOpen() ? \"open\" : \"closed\"',\n '[attr.data-nested]': 'rootContext.nested ? \"\" : undefined',\n '[attr.data-nested-dialog-open]': 'rootContext.nestedDialogOpen() ? \"\" : undefined'\n }\n})\nexport class RdxDialogBackdrop {\n protected readonly rootContext = injectRdxDialogRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * A button that closes the dialog.\n */\n@Directive({\n selector: 'button[rdxDialogClose]',\n exportAs: 'rdxDialogClose',\n host: {\n type: 'button',\n '(click)': 'rootContext.close(\"close-press\", $event)'\n }\n})\nexport class RdxDialogClose {\n protected readonly rootContext = injectRdxDialogRootContext();\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { injectId } from '@radix-ng/primitives/core';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * An accessible description for the dialog.\n */\n@Directive({\n selector: '[rdxDialogDescription]',\n exportAs: 'rdxDialogDescription',\n host: {\n '[id]': 'id'\n }\n})\nexport class RdxDialogDescription {\n private readonly rootContext = injectRdxDialogRootContext();\n readonly id = injectId('rdx-dialog-description-');\n\n constructor() {\n this.rootContext.setDescriptionId(this.id);\n inject(DestroyRef).onDestroy(() => this.rootContext.setDescriptionId(undefined));\n }\n}\n","import { computed, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { outputFromObservable, outputToObservable } from '@angular/core/rxjs-interop';\nimport { useScrollLock } from '@radix-ng/primitives/core';\nimport { provideRdxDismissableLayerConfig, RdxDismissableLayer } from '@radix-ng/primitives/dismissable-layer';\nimport { provideRdxFocusScopeConfig, RdxFocusScope } from '@radix-ng/primitives/focus-scope';\nimport { injectRdxDialogRootContext, RdxDialogOpenChangeReason } from './dialog-root';\n\n/**\n * A container for the dialog contents.\n */\n@Directive({\n selector: '[rdxDialogPopup]',\n exportAs: 'rdxDialogPopup',\n hostDirectives: [RdxDismissableLayer, RdxFocusScope],\n providers: [\n provideRdxDismissableLayerConfig(() => {\n const rootContext = injectRdxDialogRootContext();\n\n return {\n disableOutsidePointerEvents: computed(() => rootContext.modal() === true)\n };\n }),\n provideRdxFocusScopeConfig(() => {\n const rootContext = injectRdxDialogRootContext();\n\n return {\n trapped: computed(() => rootContext.modal() === 'trap-focus' || rootContext.modal() === true)\n };\n })\n ],\n host: {\n '[attr.role]': 'rootContext.role',\n '[attr.aria-modal]': 'rootContext.modal() === true ? \"true\" : undefined',\n '[attr.aria-describedby]': 'rootContext.descriptionId()',\n '[attr.aria-labelledby]': 'rootContext.titleId()',\n '[attr.data-closed]': 'rootContext.isOpen() ? undefined : \"\"',\n '[attr.data-ending-style]': 'rootContext.transitionStatus() === \"ending\" ? \"\" : undefined',\n '[attr.data-open]': 'rootContext.isOpen() ? \"\" : undefined',\n '[attr.data-starting-style]': 'rootContext.transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-state]': 'rootContext.isOpen() ? \"open\" : \"closed\"',\n '[attr.data-nested]': 'rootContext.nested ? \"\" : undefined',\n '[attr.data-nested-dialog-open]': 'rootContext.nestedDialogOpen() ? \"\" : undefined',\n '[id]': 'rootContext.contentId'\n }\n})\nexport class RdxDialogPopup {\n protected readonly rootContext = injectRdxDialogRootContext();\n private readonly dismissableLayer = inject(RdxDismissableLayer);\n private readonly focusScope = inject(RdxFocusScope);\n private dismissDetails: { reason: RdxDialogOpenChangeReason; event: Event } = {\n reason: 'none',\n event: new Event('dialog.dismiss')\n };\n\n /**\n * Event handler called when the escape key is down. Can be prevented.\n */\n readonly escapeKeyDown = outputFromObservable(outputToObservable(this.dismissableLayer.escapeKeyDown));\n\n /**\n * Event handler called when a pointerdown event happens outside of the popup. Can be prevented.\n */\n readonly pointerDownOutside = outputFromObservable(outputToObservable(this.dismissableLayer.pointerDownOutside));\n\n /**\n * Event handler called when focus moves outside of the popup. Can be prevented.\n */\n readonly focusOutside = outputFromObservable(outputToObservable(this.dismissableLayer.focusOutside));\n\n /**\n * Event handler called when an interaction happens outside of the popup. Can be prevented.\n */\n readonly interactOutside = outputFromObservable(outputToObservable(this.dismissableLayer.interactOutside));\n\n /**\n * Event handler called before focus moves into the popup. Can be prevented.\n */\n readonly openAutoFocus = outputFromObservable(outputToObservable(this.focusScope.mountAutoFocus));\n\n /**\n * Event handler called before focus returns after the popup is removed. Can be prevented.\n */\n readonly closeAutoFocus = outputFromObservable(outputToObservable(this.focusScope.unmountAutoFocus));\n\n constructor() {\n useScrollLock(computed(() => this.rootContext.modal() === true && this.rootContext.isOpen()));\n\n const unregisterTransitionElement = this.rootContext.registerTransitionElement(\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement\n );\n\n inject(DestroyRef).onDestroy(unregisterTransitionElement);\n\n this.dismissableLayer.pointerDownOutside.subscribe((event) => {\n this.dismissDetails = { reason: 'outside-press', event };\n\n // A pointerdown on the trigger is an \"outside\" press relative to the portaled popup.\n // Let the trigger's own click toggle the dialog instead of dismissing here (which would\n // close and then immediately reopen).\n if (this.isEventOnTrigger(event)) {\n event.preventDefault();\n }\n });\n\n this.dismissableLayer.focusOutside.subscribe((event) => {\n this.dismissDetails = { reason: 'focus-out', event };\n\n if (this.isEventOnTrigger(event)) {\n event.preventDefault();\n }\n });\n\n this.dismissableLayer.escapeKeyDown.subscribe((event) => {\n this.dismissDetails = { reason: 'escape-key', event };\n });\n\n this.dismissableLayer.dismiss.subscribe(() => {\n const { reason, event } = this.dismissDetails;\n this.dismissDetails = { reason: 'none', event: new Event('dialog.dismiss') };\n\n // When pointer dismissal is disabled, keep the dialog open on outside interactions.\n // Escape always closes (standard a11y behavior).\n if ((reason === 'outside-press' || reason === 'focus-out') && this.rootContext.disablePointerDismissal()) {\n return;\n }\n\n this.rootContext.close(reason, event);\n });\n }\n\n private isEventOnTrigger(event: Event): boolean {\n const target = event.target as Node | null;\n return !!target && this.rootContext.triggers().some((trigger) => trigger.contains(target));\n }\n}\n","import { Directive, input } from '@angular/core';\nimport { RdxPortal, RdxPortalContainer } from '@radix-ng/primitives/portal';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * Moves the dialog to a different part of the DOM.\n */\n@Directive({\n selector: '[rdxDialogPortal]',\n exportAs: 'rdxDialogPortal',\n hostDirectives: [\n {\n directive: RdxPortal,\n inputs: ['container']\n }\n ],\n host: {\n '[attr.data-closed]': 'rootContext.isOpen() ? undefined : \"\"',\n '[attr.data-open]': 'rootContext.isOpen() ? \"\" : undefined',\n '[attr.data-state]': 'rootContext.isOpen() ? \"open\" : \"closed\"'\n }\n})\nexport class RdxDialogPortal {\n protected readonly rootContext = injectRdxDialogRootContext();\n\n /**\n * Optional container to portal the content into. Defaults to `document.body`.\n */\n readonly container = input<RdxPortalContainer>();\n}\n","import { Directive } from '@angular/core';\nimport { provideRdxPresenceContext, RdxPresenceDirective } from '@radix-ng/primitives/presence';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * Mounts the portal while the dialog is open and waits for CSS exit keyframes before unmounting.\n */\n@Directive({\n selector: 'ng-template[rdxDialogPortalPresence]',\n hostDirectives: [RdxPresenceDirective],\n providers: [\n provideRdxPresenceContext(() => {\n const context = injectRdxDialogRootContext();\n\n return { present: context.isOpen };\n })\n ]\n})\nexport class RdxDialogPortalPresence {}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { injectId } from '@radix-ng/primitives/core';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * An accessible title for the dialog.\n */\n@Directive({\n selector: '[rdxDialogTitle]',\n exportAs: 'rdxDialogTitle',\n host: {\n '[id]': 'id'\n }\n})\nexport class RdxDialogTitle {\n private readonly rootContext = injectRdxDialogRootContext();\n readonly id = injectId('rdx-dialog-title-');\n\n constructor() {\n this.rootContext.setTitleId(this.id);\n inject(DestroyRef).onDestroy(() => this.rootContext.setTitleId(undefined));\n }\n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, untracked } from '@angular/core';\nimport { injectId } from '@radix-ng/primitives/core';\nimport { RdxDialogHandle } from './dialog-handle';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * A button that opens the dialog.\n */\n@Directive({\n selector: 'button[rdxDialogTrigger]',\n exportAs: 'rdxDialogTrigger',\n host: {\n type: 'button',\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-controls]': 'rootContext()?.contentId',\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\n '[attr.data-popup-open]': 'isOpen() ? \"\" : undefined',\n '[attr.disabled]': 'disabled() ? \"\" : undefined',\n '[id]': 'triggerId()',\n '(click)': 'handleClick($event)'\n }\n})\nexport class RdxDialogTrigger {\n private readonly parentRootContext = injectRdxDialogRootContext(true);\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Associates this trigger with a detached dialog root.\n */\n readonly handle = input<RdxDialogHandle<any>>();\n\n /**\n * Data associated with this trigger while it is active.\n */\n readonly payload = input<unknown>();\n\n /**\n * ID used to identify this trigger when opening a detached or controlled dialog.\n */\n readonly id = input<string>();\n\n /**\n * Whether the trigger should ignore user interaction.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly generatedId = injectId('rdx-dialog-trigger-');\n protected readonly triggerId = computed(() => this.id() ?? this.generatedId);\n protected readonly rootContext = computed(() => this.handle()?.context() ?? this.parentRootContext);\n protected readonly isOpen = computed(\n () => this.rootContext()?.isOpen() === true && this.rootContext()?.trigger() === this.elementRef.nativeElement\n );\n\n constructor() {\n effect((onCleanup) => {\n const handle = this.handle();\n\n if (handle) {\n onCleanup(\n untracked(() =>\n handle.registerTrigger(this.triggerId(), this.elementRef.nativeElement, () => this.payload())\n )\n );\n } else if (this.parentRootContext) {\n onCleanup(\n untracked(() =>\n this.parentRootContext!.registerTrigger(this.triggerId(), this.elementRef.nativeElement, () =>\n this.payload()\n )\n )\n );\n }\n });\n }\n\n protected handleClick(event: MouseEvent) {\n if (this.disabled()) {\n return;\n }\n\n if (this.handle()) {\n this.handle()!.toggle(this.triggerId(), event);\n } else {\n this.parentRootContext?.toggle(this.triggerId(), this.elementRef.nativeElement, this.payload(), event);\n }\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectRdxDialogRootContext } from './dialog-root';\n\n/**\n * A positioning container for the dialog popup that can be made scrollable.\n *\n * Place it inside the portal, around the popup, to scroll the popup when it is taller than the\n * viewport (outside scroll). Pointer events pass through while the dialog is closed.\n */\n@Directive({\n selector: '[rdxDialogViewport]',\n exportAs: 'rdxDialogViewport',\n host: {\n role: 'presentation',\n '[style.pointer-events]': 'rootContext.isOpen() ? null : \"none\"',\n '[attr.data-closed]': 'rootContext.isOpen() ? undefined : \"\"',\n '[attr.data-ending-style]': 'rootContext.transitionStatus() === \"ending\" ? \"\" : undefined',\n '[attr.data-open]': 'rootContext.isOpen() ? \"\" : undefined',\n '[attr.data-starting-style]': 'rootContext.transitionStatus() === \"starting\" ? \"\" : undefined',\n '[attr.data-state]': 'rootContext.isOpen() ? \"open\" : \"closed\"',\n '[attr.data-nested]': 'rootContext.nested ? \"\" : undefined',\n '[attr.data-nested-dialog-open]': 'rootContext.nestedDialogOpen() ? \"\" : undefined'\n }\n})\nexport class RdxDialogViewport {\n protected readonly rootContext = injectRdxDialogRootContext();\n}\n","import { computed, signal } from '@angular/core';\nimport type { RdxDialogRootContext } from './dialog-root';\n\ninterface RdxDialogHandleTrigger<Payload> {\n element: HTMLElement;\n payload: () => Payload | undefined;\n}\n\n/**\n * Connects a dialog root with trigger elements rendered elsewhere in the DOM, and exposes\n * imperative `open`/`close`/`toggle` methods.\n */\nexport class RdxDialogHandle<Payload = unknown> {\n private readonly rootContext = signal<RdxDialogRootContext | undefined>(undefined);\n private readonly triggers = new Map<string, RdxDialogHandleTrigger<Payload>>();\n private readonly rootTriggerCleanups = new Map<string, () => void>();\n\n readonly isOpen = computed(() => this.rootContext()?.isOpen() ?? false);\n\n open(triggerId: string) {\n const trigger = this.triggers.get(triggerId);\n\n if (!trigger) {\n throw new Error(`No dialog trigger registered with id \"${triggerId}\".`);\n }\n\n this.rootContext()?.open(\n trigger.element,\n trigger.payload(),\n triggerId,\n 'imperative-action',\n new Event('dialog.open')\n );\n }\n\n close() {\n this.rootContext()?.close('imperative-action', new Event('dialog.close'));\n }\n\n toggle(triggerId: string, event = new Event('dialog.toggle')) {\n const trigger = this.triggers.get(triggerId);\n\n if (!trigger) {\n throw new Error(`No dialog trigger registered with id \"${triggerId}\".`);\n }\n\n this.rootContext()?.toggle(triggerId, trigger.element, trigger.payload(), event);\n }\n\n registerRoot(rootContext: RdxDialogRootContext) {\n this.rootContext.set(rootContext);\n this.triggers.forEach((trigger, id) => {\n this.rootTriggerCleanups.set(id, rootContext.registerTrigger(id, trigger.element, trigger.payload));\n });\n\n return () => {\n if (this.rootContext() === rootContext) {\n this.rootTriggerCleanups.forEach((cleanup) => cleanup());\n this.rootTriggerCleanups.clear();\n this.rootContext.set(undefined);\n }\n };\n }\n\n registerTrigger(id: string, trigger: HTMLElement, payload: () => Payload | undefined) {\n this.rootTriggerCleanups.get(id)?.();\n this.triggers.set(id, { element: trigger, payload });\n const unregisterFromRoot = this.rootContext()?.registerTrigger(id, trigger, payload);\n\n if (unregisterFromRoot) {\n this.rootTriggerCleanups.set(id, unregisterFromRoot);\n }\n\n return () => {\n this.rootTriggerCleanups.get(id)?.();\n this.rootTriggerCleanups.delete(id);\n\n if (this.triggers.get(id)?.element === trigger) {\n this.triggers.delete(id);\n }\n };\n }\n\n context() {\n return this.rootContext();\n }\n}\n\nexport function createRdxDialogHandle<Payload = unknown>() {\n return new RdxDialogHandle<Payload>();\n}\n","import { NgModule } from '@angular/core';\nimport { RdxDialogBackdrop } from './src/dialog-backdrop';\nimport { RdxDialogClose } from './src/dialog-close';\nimport { RdxDialogDescription } from './src/dialog-description';\nimport { RdxDialogPopup } from './src/dialog-popup';\nimport { RdxDialogPortal } from './src/dialog-portal';\nimport { RdxDialogPortalPresence } from './src/dialog-portal-presence';\nimport { RdxDialogRoot } from './src/dialog-root';\nimport { RdxDialogTitle } from './src/dialog-title';\nimport { RdxDialogTrigger } from './src/dialog-trigger';\nimport { RdxDialogViewport } from './src/dialog-viewport';\n\nexport * from './src/dialog-backdrop';\nexport * from './src/dialog-close';\nexport * from './src/dialog-description';\nexport * from './src/dialog-handle';\nexport * from './src/dialog-popup';\nexport * from './src/dialog-portal';\nexport * from './src/dialog-portal-presence';\nexport * from './src/dialog-root';\nexport * from './src/dialog-title';\nexport * from './src/dialog-trigger';\nexport * from './src/dialog-variant';\nexport * from './src/dialog-viewport';\n\nexport const dialogImports = [\n RdxDialogRoot,\n RdxDialogTrigger,\n RdxDialogPortalPresence,\n RdxDialogPortal,\n RdxDialogBackdrop,\n RdxDialogViewport,\n RdxDialogPopup,\n RdxDialogTitle,\n RdxDialogDescription,\n RdxDialogClose\n];\n\n@NgModule({\n imports: [...dialogImports],\n exports: [...dialogImports]\n})\nexport class RdxDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const RdxDismissableLayersContextToken = new InjectionToken('RdxDismissableLayer
|
|
|
6
6
|
const layersRoot = signal([], ...(ngDevMode ? [{ debugName: "layersRoot" }] : /* istanbul ignore next */ []));
|
|
7
7
|
return {
|
|
8
8
|
layersRoot,
|
|
9
|
-
layersWithOutsidePointerEventsDisabled: computed(() => layersRoot().filter((i) => i.
|
|
9
|
+
layersWithOutsidePointerEventsDisabled: computed(() => layersRoot().filter((i) => i.isOutsidePointerEventsDisabled())),
|
|
10
10
|
branches: signal([])
|
|
11
11
|
};
|
|
12
12
|
}
|
|
@@ -83,6 +83,9 @@ class RdxFocusOutside {
|
|
|
83
83
|
if (!elementRef?.nativeElement) {
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
|
+
// Defer past the focus settling: the first microtask lets the matching capture
|
|
87
|
+
// `focus`/`blur` handler update `isFocusInsideDOMTree`, the second lets the browser
|
|
88
|
+
// finish moving focus, so the check below reflects the final focus target.
|
|
86
89
|
await Promise.resolve();
|
|
87
90
|
await Promise.resolve();
|
|
88
91
|
const target = event.target;
|
|
@@ -148,6 +151,15 @@ class RdxPointerDownOutside {
|
|
|
148
151
|
return;
|
|
149
152
|
}
|
|
150
153
|
const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;
|
|
154
|
+
// Avoid the global `window` so this stays safe under SSR; `globalThis` provides
|
|
155
|
+
// `setTimeout`/`clearTimeout` in both the browser and Node.
|
|
156
|
+
const ownerWindow = ownerDocument.defaultView ?? globalThis;
|
|
157
|
+
const removeClickListener = () => {
|
|
158
|
+
if (this.handleClick) {
|
|
159
|
+
ownerDocument.removeEventListener('click', this.handleClick);
|
|
160
|
+
this.handleClick = undefined;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
151
163
|
const handlePointerDown = async (event) => {
|
|
152
164
|
if (event.target && !this.isPointerInsideDOMTree()) {
|
|
153
165
|
/**
|
|
@@ -163,7 +175,7 @@ class RdxPointerDownOutside {
|
|
|
163
175
|
* certain that it was raised, and therefore cleaned-up.
|
|
164
176
|
*/
|
|
165
177
|
if (event.pointerType === 'touch') {
|
|
166
|
-
|
|
178
|
+
removeClickListener();
|
|
167
179
|
this.handleClick = this.handleAndDispatchPointerDownOutsideEvent(event);
|
|
168
180
|
ownerDocument.addEventListener('click', this.handleClick, {
|
|
169
181
|
once: true
|
|
@@ -176,7 +188,7 @@ class RdxPointerDownOutside {
|
|
|
176
188
|
else {
|
|
177
189
|
// We need to remove the event listener in case the outside click has been canceled.
|
|
178
190
|
// See: https://github.com/radix-ui/primitives/issues/2171
|
|
179
|
-
|
|
191
|
+
removeClickListener();
|
|
180
192
|
}
|
|
181
193
|
this.isPointerInsideDOMTree.set(false);
|
|
182
194
|
};
|
|
@@ -193,7 +205,7 @@ class RdxPointerDownOutside {
|
|
|
193
205
|
* })
|
|
194
206
|
* });
|
|
195
207
|
*/
|
|
196
|
-
const timerId =
|
|
208
|
+
const timerId = ownerWindow.setTimeout(() => {
|
|
197
209
|
ownerDocument.addEventListener('pointerdown', handlePointerDown);
|
|
198
210
|
}, 0);
|
|
199
211
|
const onPointerDownCapture = () => {
|
|
@@ -204,9 +216,9 @@ class RdxPointerDownOutside {
|
|
|
204
216
|
};
|
|
205
217
|
this.elementRef.nativeElement.addEventListener('pointerdown', onPointerDownCapture, { capture: true });
|
|
206
218
|
onCleanup(() => {
|
|
207
|
-
|
|
219
|
+
ownerWindow.clearTimeout(timerId);
|
|
208
220
|
ownerDocument.removeEventListener('pointerdown', handlePointerDown);
|
|
209
|
-
|
|
221
|
+
removeClickListener();
|
|
210
222
|
this.elementRef.nativeElement.removeEventListener('pointerdown', onPointerDownCapture, {
|
|
211
223
|
capture: true
|
|
212
224
|
});
|
|
@@ -228,7 +240,7 @@ class RdxEscapeKeyDown {
|
|
|
228
240
|
this.elementRef = inject(ElementRef);
|
|
229
241
|
this.destroyRef = inject(DestroyRef);
|
|
230
242
|
this.escapeKeyDown = output();
|
|
231
|
-
|
|
243
|
+
afterNextRender(() => {
|
|
232
244
|
const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;
|
|
233
245
|
const handleKeyDown = (event) => {
|
|
234
246
|
if (event.key === 'Escape') {
|
|
@@ -252,9 +264,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
252
264
|
selector: '[rdxEscapeKeyDown]',
|
|
253
265
|
exportAs: 'rdxEscapeKeyDown'
|
|
254
266
|
}]
|
|
255
|
-
}], propDecorators: { escapeKeyDown: [{ type: i0.Output, args: ["escapeKeyDown"] }] } });
|
|
267
|
+
}], ctorParameters: () => [], propDecorators: { escapeKeyDown: [{ type: i0.Output, args: ["escapeKeyDown"] }] } });
|
|
256
268
|
|
|
257
|
-
|
|
269
|
+
/**
|
|
270
|
+
* Shared across all layers. Holds the body's original `pointer-events` value while at least one
|
|
271
|
+
* layer disables outside pointer events. `null` means the body is not currently overridden — it
|
|
272
|
+
* doubles as the "ownership" flag so stacked layers don't overwrite the saved original with
|
|
273
|
+
* `none`.
|
|
274
|
+
*/
|
|
275
|
+
let originalBodyPointerEvents = null;
|
|
258
276
|
class RdxDismissableLayer {
|
|
259
277
|
constructor() {
|
|
260
278
|
this.elementRef = inject(ElementRef);
|
|
@@ -295,46 +313,26 @@ class RdxDismissableLayer {
|
|
|
295
313
|
* the `DismissableLayer`. Users will need to click twice on outside elements to
|
|
296
314
|
* interact with them: once to close the `DismissableLayer`, and again to trigger the element.
|
|
297
315
|
*/
|
|
298
|
-
this.disableOutsidePointerEvents = input(
|
|
299
|
-
this.
|
|
316
|
+
this.disableOutsidePointerEvents = input(undefined, { ...(ngDevMode ? { debugName: "disableOutsidePointerEvents" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
|
|
317
|
+
this.isOutsidePointerEventsDisabled = computed(() => this.disableOutsidePointerEvents() ?? this.config.disableOutsidePointerEvents(), ...(ngDevMode ? [{ debugName: "isOutsidePointerEventsDisabled" }] : /* istanbul ignore next */ []));
|
|
300
318
|
this.isBodyPointerEventsDisabled = computed(() => this.context.layersWithOutsidePointerEventsDisabled().length > 0, ...(ngDevMode ? [{ debugName: "isBodyPointerEventsDisabled" }] : /* istanbul ignore next */ []));
|
|
301
319
|
this.isPointerEventsEnabled = computed(() => {
|
|
302
|
-
const
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
const highestLayerWithOutsidePointerEventsDisabledIndex = localLayers().indexOf(highestLayerWithOutsidePointerEventsDisabled);
|
|
307
|
-
return this.index() >= highestLayerWithOutsidePointerEventsDisabledIndex;
|
|
320
|
+
const layers = this.context.layersRoot();
|
|
321
|
+
const disabledLayers = this.context.layersWithOutsidePointerEventsDisabled();
|
|
322
|
+
const highestDisabledLayer = disabledLayers[disabledLayers.length - 1];
|
|
323
|
+
return this.index() >= layers.indexOf(highestDisabledLayer);
|
|
308
324
|
}, ...(ngDevMode ? [{ debugName: "isPointerEventsEnabled" }] : /* istanbul ignore next */ []));
|
|
309
325
|
this.index = computed(() => this.context.layersRoot().indexOf(this), ...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
});
|
|
316
|
-
this.destroyRef.onDestroy(() => {
|
|
317
|
-
untracked(() => {
|
|
318
|
-
this.context.layersRoot.update((v) => v.filter((x) => x !== this));
|
|
319
|
-
});
|
|
320
|
-
});
|
|
321
|
-
effect((onCleanup) => {
|
|
322
|
-
const disabledCount = this.context.layersWithOutsidePointerEventsDisabled().length;
|
|
323
|
-
if (lastDisabledCount === 0 && disabledCount > 0) {
|
|
324
|
-
originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;
|
|
325
|
-
ownerDocument.body.style.pointerEvents = 'none';
|
|
326
|
-
}
|
|
327
|
-
onCleanup(() => {
|
|
328
|
-
const next = untracked(() => this.context.layersWithOutsidePointerEventsDisabled().length);
|
|
329
|
-
if (lastDisabledCount > 0 && next === 0) {
|
|
330
|
-
ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;
|
|
331
|
-
}
|
|
332
|
-
lastDisabledCount = next;
|
|
333
|
-
});
|
|
334
|
-
lastDisabledCount = disabledCount;
|
|
335
|
-
}, { injector: this.injector });
|
|
336
|
-
});
|
|
326
|
+
/** The topmost layer in the stack — the only one that should react to the Escape key. */
|
|
327
|
+
this.isHighestLayer = computed(() => {
|
|
328
|
+
const layers = this.context.layersRoot();
|
|
329
|
+
return layers.indexOf(this) === layers.length - 1;
|
|
330
|
+
}, ...(ngDevMode ? [{ debugName: "isHighestLayer" }] : /* istanbul ignore next */ []));
|
|
337
331
|
this.context.layersRoot.update((v) => [...v, this]);
|
|
332
|
+
this.destroyRef.onDestroy(() => {
|
|
333
|
+
this.context.layersRoot.update((v) => v.filter((i) => i !== this));
|
|
334
|
+
});
|
|
335
|
+
this.setupBodyPointerEvents();
|
|
338
336
|
this.rdxPointerDownOutside.pointerDownOutside.subscribe((event) => {
|
|
339
337
|
const isPointerDownOnBranch = this.context
|
|
340
338
|
.branches()
|
|
@@ -362,14 +360,40 @@ class RdxDismissableLayer {
|
|
|
362
360
|
}
|
|
363
361
|
});
|
|
364
362
|
this.rdxEscapeKeyDown.escapeKeyDown.subscribe((event) => {
|
|
363
|
+
// Only the topmost layer is dismissed by Escape; stacked layers close one at a time.
|
|
364
|
+
if (!this.isHighestLayer()) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
365
367
|
this.escapeKeyDown.emit(event);
|
|
366
368
|
if (!event.defaultPrevented) {
|
|
367
369
|
event.preventDefault();
|
|
368
370
|
this.dismiss.emit();
|
|
369
371
|
}
|
|
370
372
|
});
|
|
371
|
-
|
|
372
|
-
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Toggles `pointer-events: none` on the document body while any layer has
|
|
376
|
+
* `disableOutsidePointerEvents`. Ownership is shared across all layers via
|
|
377
|
+
* {@link originalBodyPointerEvents}: the original value is saved only on the global
|
|
378
|
+
* `0 -> >0` transition and restored only when the count returns to `0`.
|
|
379
|
+
*/
|
|
380
|
+
setupBodyPointerEvents() {
|
|
381
|
+
afterNextRender(() => {
|
|
382
|
+
const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;
|
|
383
|
+
effect((onCleanup) => {
|
|
384
|
+
const disabledCount = this.context.layersWithOutsidePointerEventsDisabled().length;
|
|
385
|
+
if (disabledCount > 0 && originalBodyPointerEvents === null) {
|
|
386
|
+
originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;
|
|
387
|
+
ownerDocument.body.style.pointerEvents = 'none';
|
|
388
|
+
}
|
|
389
|
+
onCleanup(() => {
|
|
390
|
+
const remaining = untracked(() => this.context.layersWithOutsidePointerEventsDisabled().length);
|
|
391
|
+
if (remaining === 0 && originalBodyPointerEvents !== null) {
|
|
392
|
+
ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;
|
|
393
|
+
originalBodyPointerEvents = null;
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}, { injector: this.injector });
|
|
373
397
|
});
|
|
374
398
|
}
|
|
375
399
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxDismissableLayer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-dismissable-layer.mjs","sources":["../../../packages/primitives/dismissable-layer/src/dismissable-layer.config.ts","../../../packages/primitives/dismissable-layer/src/utils.ts","../../../packages/primitives/dismissable-layer/src/dismissable-layer.ts","../../../packages/primitives/dismissable-layer/src/dismissable-layer-branch.ts","../../../packages/primitives/dismissable-layer/radix-ng-primitives-dismissable-layer.ts"],"sourcesContent":["import { computed, InjectionToken, Provider, Signal, signal } from '@angular/core';\nimport { RdxDismissableLayer } from './dismissable-layer';\n\nexport const RdxDismissableLayersContextToken = new InjectionToken('RdxDismissableLayersContextToken', {\n factory() {\n const layersRoot = signal<RdxDismissableLayer[]>([]);\n\n return {\n layersRoot,\n layersWithOutsidePointerEventsDisabled: computed(() =>\n layersRoot().filter((i) => i.disableOutsidePointerEvents())\n ),\n branches: signal<HTMLElement[]>([])\n };\n }\n});\n\nexport type RdxDismissableLayerConfig = {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents: Signal<boolean>;\n};\n\nexport const RdxDismissableLayerConfigToken = new InjectionToken<RdxDismissableLayerConfig>(\n 'RdxDismissableLayerConfig',\n {\n factory: () => {\n return {\n disableOutsidePointerEvents: signal(false)\n };\n }\n }\n);\n\nexport function provideRdxDismissableLayerConfig(factory: () => RdxDismissableLayerConfig): Provider {\n return { provide: RdxDismissableLayerConfigToken, useFactory: factory };\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n afterNextRender,\n booleanAttribute,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal\n} from '@angular/core';\n\nfunction isLayerExist(layerElement: HTMLElement, targetElement: HTMLElement) {\n const targetLayer = targetElement.closest('[data-dismissable-layer]');\n\n const mainLayer =\n layerElement.dataset['dismissableLayer'] === ''\n ? layerElement\n : (layerElement.querySelector('[data-dismissable-layer]') as HTMLElement);\n\n const nodeList = Array.from(layerElement.ownerDocument.querySelectorAll('[data-dismissable-layer]'));\n\n if (targetLayer && (mainLayer === targetLayer || nodeList.indexOf(mainLayer) < nodeList.indexOf(targetLayer))) {\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Listens for when focus happens outside a DOM subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\n@Directive({\n selector: '[rdxFocusOutside]',\n exportAs: 'rdxFocusOutside'\n})\nexport class RdxFocusOutside {\n readonly enabledInput = input<boolean, BooleanInput>(true, { transform: booleanAttribute, alias: 'enabled' });\n\n readonly #enabled = linkedSignal(() => this.enabledInput());\n\n set enabled(value: boolean) {\n if (this.#enabled() !== value) {\n this.#enabled.set(value);\n }\n }\n\n get enabled() {\n return this.#enabled();\n }\n\n readonly focusOutside = output<FocusEvent>();\n\n /*\n * Flag to indicate if the focus is currently within the DOM subtree\n */\n private readonly isFocusInsideDOMTree = signal(false);\n\n /*\n * Handles capturing the focus event to mark focus as inside the DOM subtree\n */\n private readonly focusCaptureHandler = () => {\n if (!this.enabled) return;\n this.isFocusInsideDOMTree.set(true);\n };\n\n /*\n * Handles capturing the blur event to mark focus as outside the DOM subtree\n */\n private readonly blurCaptureHandler = () => {\n if (!this.enabled) return;\n this.isFocusInsideDOMTree.set(false);\n };\n\n constructor() {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n effect((onCleanup) => {\n if (!this.#enabled()) {\n return;\n }\n\n const ownerDocument = elementRef.nativeElement.ownerDocument ?? globalThis.document;\n\n const focusHandler = async (event: FocusEvent) => {\n if (!elementRef?.nativeElement) {\n return;\n }\n\n await Promise.resolve();\n await Promise.resolve();\n\n const target = event.target as HTMLElement | undefined;\n if (!elementRef.nativeElement || !target || isLayerExist(elementRef.nativeElement, target)) {\n return;\n }\n\n if (target && !this.isFocusInsideDOMTree()) {\n this.focusOutside.emit(event);\n }\n };\n\n elementRef.nativeElement.addEventListener('focus', this.focusCaptureHandler, {\n capture: true\n });\n elementRef.nativeElement.addEventListener('blur', this.blurCaptureHandler, {\n capture: true\n });\n\n ownerDocument.addEventListener('focusin', focusHandler);\n\n onCleanup(() => {\n elementRef.nativeElement.removeEventListener('focus', this.focusCaptureHandler, {\n capture: true\n });\n\n elementRef.nativeElement.removeEventListener('blur', this.blurCaptureHandler, {\n capture: true\n });\n\n ownerDocument.removeEventListener('focusin', focusHandler);\n });\n });\n }\n}\n\n/**\n * Listens for `pointerdown` outside a DOM subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behavior present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\n@Directive({\n selector: '[rdxPointerDownOutside]',\n exportAs: 'rdxPointerDownOutside'\n})\nexport class RdxPointerDownOutside {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly enabledInput = input<boolean, BooleanInput>(true, { transform: booleanAttribute, alias: 'enabled' });\n\n readonly #enabled = linkedSignal(() => this.enabledInput());\n\n set enabled(value: boolean) {\n if (this.#enabled() !== value) {\n this.#enabled.set(value);\n }\n }\n\n get enabled() {\n return this.#enabled();\n }\n\n readonly pointerDownOutside = output<PointerEvent>();\n\n private readonly isPointerInsideDOMTree = signal(false);\n\n private readonly handleAndDispatchPointerDownOutsideEvent = (e: PointerEvent) => () =>\n this.pointerDownOutside.emit(e);\n\n private handleClick: () => void | undefined;\n\n constructor() {\n effect((onCleanup) => {\n if (!this.#enabled()) {\n return;\n }\n\n const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;\n\n const handlePointerDown = async (event: PointerEvent) => {\n if (event.target && !this.isPointerInsideDOMTree()) {\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', this.handleClick);\n this.handleClick = this.handleAndDispatchPointerDownOutsideEvent(event);\n ownerDocument.addEventListener('click', this.handleClick, {\n once: true\n });\n } else {\n this.pointerDownOutside.emit(event);\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', this.handleClick);\n }\n this.isPointerInsideDOMTree.set(false);\n };\n /**\n * if this directive executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not Angular specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n\n const onPointerDownCapture = () => {\n if (!this.enabled) {\n return;\n }\n this.isPointerInsideDOMTree.set(true);\n };\n\n this.elementRef.nativeElement.addEventListener('pointerdown', onPointerDownCapture, { capture: true });\n\n onCleanup(() => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', this.handleClick);\n this.elementRef.nativeElement.removeEventListener('pointerdown', onPointerDownCapture, {\n capture: true\n });\n });\n });\n }\n}\n\n@Directive({\n selector: '[rdxEscapeKeyDown]',\n exportAs: 'rdxEscapeKeyDown'\n})\nexport class RdxEscapeKeyDown {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly escapeKeyDown = output<KeyboardEvent>();\n\n private readonly afterNextRender = afterNextRender(() => {\n const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.escapeKeyDown.emit(event);\n }\n };\n\n ownerDocument.addEventListener('keydown', handleKeyDown, {\n capture: true\n });\n\n this.destroyRef.onDestroy(() =>\n ownerDocument.removeEventListener('keydown', handleKeyDown, {\n capture: true\n })\n );\n });\n}\n","import {\n afterNextRender,\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n output,\n untracked\n} from '@angular/core';\nimport { RdxDismissableLayerConfigToken, RdxDismissableLayersContextToken } from './dismissable-layer.config';\nimport { RdxEscapeKeyDown, RdxFocusOutside, RdxPointerDownOutside } from './utils';\n\nlet originalBodyPointerEvents: string;\n\n@Directive({\n selector: '[rdxDismissableLayer]',\n exportAs: 'rdxDismissableLayer',\n hostDirectives: [RdxPointerDownOutside, RdxFocusOutside, RdxEscapeKeyDown],\n host: {\n 'data-dismissable-layer': '',\n '[style]': `{\n pointerEvents: isBodyPointerEventsDisabled() ? (isPointerEventsEnabled() ? 'auto' : 'none') : undefined\n }`\n }\n})\nexport class RdxDismissableLayer {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly context = inject(RdxDismissableLayersContextToken);\n private readonly config = inject(RdxDismissableLayerConfigToken);\n\n private readonly rdxPointerDownOutside = inject(RdxPointerDownOutside);\n private readonly rdxFocusOutside = inject(RdxFocusOutside);\n private readonly rdxEscapeKeyDown = inject(RdxEscapeKeyDown);\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n readonly escapeKeyDown = output<KeyboardEvent>();\n\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n readonly pointerDownOutside = output<PointerEvent>();\n\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n readonly focusOutside = output<FocusEvent>();\n\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n readonly interactOutside = output<PointerEvent | FocusEvent>();\n\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n readonly dismiss = output<void>();\n\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n readonly disableOutsidePointerEvents = input(this.config.disableOutsidePointerEvents(), {\n transform: booleanAttribute\n });\n\n readonly layers = computed(() => this.context.layersRoot);\n\n protected readonly isBodyPointerEventsDisabled = computed(\n () => this.context.layersWithOutsidePointerEventsDisabled().length > 0\n );\n\n protected readonly isPointerEventsEnabled = computed(() => {\n const localLayers = this.layers();\n\n const [highestLayerWithOutsidePointerEventsDisabled] = [\n ...this.context.layersWithOutsidePointerEventsDisabled()\n ].slice(-1);\n\n const highestLayerWithOutsidePointerEventsDisabledIndex = localLayers().indexOf(\n highestLayerWithOutsidePointerEventsDisabled\n );\n\n return this.index() >= highestLayerWithOutsidePointerEventsDisabledIndex;\n });\n\n private readonly index = computed(() => this.context.layersRoot().indexOf(this));\n\n private readonly afterNextRender = afterNextRender(() => {\n const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;\n\n let lastDisabledCount = 0;\n\n untracked(() => {\n this.context.layersRoot.update((v) => (v.includes(this) ? v : [...v, this]));\n });\n this.destroyRef.onDestroy(() => {\n untracked(() => {\n this.context.layersRoot.update((v) => v.filter((x) => x !== this));\n });\n });\n\n effect(\n (onCleanup) => {\n const disabledCount = this.context.layersWithOutsidePointerEventsDisabled().length;\n\n if (lastDisabledCount === 0 && disabledCount > 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n\n onCleanup(() => {\n const next = untracked(() => this.context.layersWithOutsidePointerEventsDisabled().length);\n if (lastDisabledCount > 0 && next === 0) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n lastDisabledCount = next;\n });\n\n lastDisabledCount = disabledCount;\n },\n { injector: this.injector }\n );\n });\n\n constructor() {\n this.context.layersRoot.update((v) => [...v, this]);\n\n this.rdxPointerDownOutside.pointerDownOutside.subscribe((event: PointerEvent) => {\n const isPointerDownOnBranch = this.context\n .branches()\n .some((branch) => branch.contains(event.target as HTMLElement));\n\n if (!this.isPointerEventsEnabled() || isPointerDownOnBranch) {\n return;\n }\n\n this.pointerDownOutside.emit(event);\n this.interactOutside.emit(event);\n\n if (!event.defaultPrevented) {\n this.dismiss.emit();\n }\n });\n\n this.rdxFocusOutside.focusOutside.subscribe((event: FocusEvent) => {\n const isFocusInBranch = this.context\n .branches()\n .some((branch) => branch.contains(event.target as HTMLElement));\n\n if (isFocusInBranch) {\n return;\n }\n\n this.focusOutside.emit(event);\n this.interactOutside.emit(event);\n\n if (!event.defaultPrevented) {\n this.dismiss.emit();\n }\n });\n\n this.rdxEscapeKeyDown.escapeKeyDown.subscribe((event: KeyboardEvent) => {\n this.escapeKeyDown.emit(event);\n\n if (!event.defaultPrevented) {\n event.preventDefault();\n this.dismiss.emit();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.context.layersRoot.update((v) => v.filter((i) => i !== this));\n });\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { RdxDismissableLayersContextToken } from './dismissable-layer.config';\n\n@Directive({\n selector: '[rdxDismissableLayerBranch]'\n})\nexport class RdxDismissableLayerBranch {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly dismissableLayersContext = inject(RdxDismissableLayersContextToken);\n\n constructor() {\n this.dismissableLayersContext.branches.update((elements) => [...elements, this.elementRef.nativeElement]);\n\n this.destroyRef.onDestroy(() =>\n this.dismissableLayersContext.branches.update((elements) =>\n elements.filter((el) => el !== this.elementRef.nativeElement)\n )\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RdxPointerDownOutside","i1.RdxFocusOutside","i1.RdxEscapeKeyDown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-dismissable-layer.mjs","sources":["../../../packages/primitives/dismissable-layer/src/dismissable-layer.config.ts","../../../packages/primitives/dismissable-layer/src/utils.ts","../../../packages/primitives/dismissable-layer/src/dismissable-layer.ts","../../../packages/primitives/dismissable-layer/src/dismissable-layer-branch.ts","../../../packages/primitives/dismissable-layer/radix-ng-primitives-dismissable-layer.ts"],"sourcesContent":["import { computed, InjectionToken, Provider, Signal, signal } from '@angular/core';\nimport { RdxDismissableLayer } from './dismissable-layer';\n\nexport const RdxDismissableLayersContextToken = new InjectionToken('RdxDismissableLayersContextToken', {\n factory() {\n const layersRoot = signal<RdxDismissableLayer[]>([]);\n\n return {\n layersRoot,\n layersWithOutsidePointerEventsDisabled: computed(() =>\n layersRoot().filter((i) => i.isOutsidePointerEventsDisabled())\n ),\n branches: signal<HTMLElement[]>([])\n };\n }\n});\n\nexport type RdxDismissableLayerConfig = {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents: Signal<boolean>;\n};\n\nexport const RdxDismissableLayerConfigToken = new InjectionToken<RdxDismissableLayerConfig>(\n 'RdxDismissableLayerConfig',\n {\n factory: () => {\n return {\n disableOutsidePointerEvents: signal(false)\n };\n }\n }\n);\n\nexport function provideRdxDismissableLayerConfig(factory: () => RdxDismissableLayerConfig): Provider {\n return { provide: RdxDismissableLayerConfigToken, useFactory: factory };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal\n} from '@angular/core';\nimport { BooleanInput } from '@radix-ng/primitives/core';\n\nfunction isLayerExist(layerElement: HTMLElement, targetElement: HTMLElement) {\n const targetLayer = targetElement.closest('[data-dismissable-layer]');\n\n const mainLayer =\n layerElement.dataset['dismissableLayer'] === ''\n ? layerElement\n : (layerElement.querySelector('[data-dismissable-layer]') as HTMLElement);\n\n const nodeList = Array.from(layerElement.ownerDocument.querySelectorAll('[data-dismissable-layer]'));\n\n if (targetLayer && (mainLayer === targetLayer || nodeList.indexOf(mainLayer) < nodeList.indexOf(targetLayer))) {\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Listens for when focus happens outside a DOM subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\n@Directive({\n selector: '[rdxFocusOutside]',\n exportAs: 'rdxFocusOutside'\n})\nexport class RdxFocusOutside {\n readonly enabledInput = input<boolean, BooleanInput>(true, { transform: booleanAttribute, alias: 'enabled' });\n\n readonly #enabled = linkedSignal(() => this.enabledInput());\n\n set enabled(value: boolean) {\n if (this.#enabled() !== value) {\n this.#enabled.set(value);\n }\n }\n\n get enabled() {\n return this.#enabled();\n }\n\n readonly focusOutside = output<FocusEvent>();\n\n /*\n * Flag to indicate if the focus is currently within the DOM subtree\n */\n private readonly isFocusInsideDOMTree = signal(false);\n\n /*\n * Handles capturing the focus event to mark focus as inside the DOM subtree\n */\n private readonly focusCaptureHandler = () => {\n if (!this.enabled) return;\n this.isFocusInsideDOMTree.set(true);\n };\n\n /*\n * Handles capturing the blur event to mark focus as outside the DOM subtree\n */\n private readonly blurCaptureHandler = () => {\n if (!this.enabled) return;\n this.isFocusInsideDOMTree.set(false);\n };\n\n constructor() {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n effect((onCleanup) => {\n if (!this.#enabled()) {\n return;\n }\n\n const ownerDocument = elementRef.nativeElement.ownerDocument ?? globalThis.document;\n\n const focusHandler = async (event: FocusEvent) => {\n if (!elementRef?.nativeElement) {\n return;\n }\n\n // Defer past the focus settling: the first microtask lets the matching capture\n // `focus`/`blur` handler update `isFocusInsideDOMTree`, the second lets the browser\n // finish moving focus, so the check below reflects the final focus target.\n await Promise.resolve();\n await Promise.resolve();\n\n const target = event.target as HTMLElement | undefined;\n if (!elementRef.nativeElement || !target || isLayerExist(elementRef.nativeElement, target)) {\n return;\n }\n\n if (target && !this.isFocusInsideDOMTree()) {\n this.focusOutside.emit(event);\n }\n };\n\n elementRef.nativeElement.addEventListener('focus', this.focusCaptureHandler, {\n capture: true\n });\n elementRef.nativeElement.addEventListener('blur', this.blurCaptureHandler, {\n capture: true\n });\n\n ownerDocument.addEventListener('focusin', focusHandler);\n\n onCleanup(() => {\n elementRef.nativeElement.removeEventListener('focus', this.focusCaptureHandler, {\n capture: true\n });\n\n elementRef.nativeElement.removeEventListener('blur', this.blurCaptureHandler, {\n capture: true\n });\n\n ownerDocument.removeEventListener('focusin', focusHandler);\n });\n });\n }\n}\n\n/**\n * Listens for `pointerdown` outside a DOM subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behavior present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\n@Directive({\n selector: '[rdxPointerDownOutside]',\n exportAs: 'rdxPointerDownOutside'\n})\nexport class RdxPointerDownOutside {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly enabledInput = input<boolean, BooleanInput>(true, { transform: booleanAttribute, alias: 'enabled' });\n\n readonly #enabled = linkedSignal(() => this.enabledInput());\n\n set enabled(value: boolean) {\n if (this.#enabled() !== value) {\n this.#enabled.set(value);\n }\n }\n\n get enabled() {\n return this.#enabled();\n }\n\n readonly pointerDownOutside = output<PointerEvent>();\n\n private readonly isPointerInsideDOMTree = signal(false);\n\n private readonly handleAndDispatchPointerDownOutsideEvent = (e: PointerEvent) => () =>\n this.pointerDownOutside.emit(e);\n\n private handleClick?: () => void;\n\n constructor() {\n effect((onCleanup) => {\n if (!this.#enabled()) {\n return;\n }\n\n const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;\n // Avoid the global `window` so this stays safe under SSR; `globalThis` provides\n // `setTimeout`/`clearTimeout` in both the browser and Node.\n const ownerWindow = ownerDocument.defaultView ?? globalThis;\n\n const removeClickListener = () => {\n if (this.handleClick) {\n ownerDocument.removeEventListener('click', this.handleClick);\n this.handleClick = undefined;\n }\n };\n\n const handlePointerDown = async (event: PointerEvent) => {\n if (event.target && !this.isPointerInsideDOMTree()) {\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n removeClickListener();\n this.handleClick = this.handleAndDispatchPointerDownOutsideEvent(event);\n ownerDocument.addEventListener('click', this.handleClick, {\n once: true\n });\n } else {\n this.pointerDownOutside.emit(event);\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n removeClickListener();\n }\n this.isPointerInsideDOMTree.set(false);\n };\n /**\n * if this directive executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not Angular specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = ownerWindow.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n\n const onPointerDownCapture = () => {\n if (!this.enabled) {\n return;\n }\n this.isPointerInsideDOMTree.set(true);\n };\n\n this.elementRef.nativeElement.addEventListener('pointerdown', onPointerDownCapture, { capture: true });\n\n onCleanup(() => {\n ownerWindow.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n removeClickListener();\n this.elementRef.nativeElement.removeEventListener('pointerdown', onPointerDownCapture, {\n capture: true\n });\n });\n });\n }\n}\n\n@Directive({\n selector: '[rdxEscapeKeyDown]',\n exportAs: 'rdxEscapeKeyDown'\n})\nexport class RdxEscapeKeyDown {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly escapeKeyDown = output<KeyboardEvent>();\n\n constructor() {\n afterNextRender(() => {\n const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.escapeKeyDown.emit(event);\n }\n };\n\n ownerDocument.addEventListener('keydown', handleKeyDown, {\n capture: true\n });\n\n this.destroyRef.onDestroy(() =>\n ownerDocument.removeEventListener('keydown', handleKeyDown, {\n capture: true\n })\n );\n });\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n output,\n untracked\n} from '@angular/core';\nimport { BooleanInput } from '@radix-ng/primitives/core';\nimport { RdxDismissableLayerConfigToken, RdxDismissableLayersContextToken } from './dismissable-layer.config';\nimport { RdxEscapeKeyDown, RdxFocusOutside, RdxPointerDownOutside } from './utils';\n\n/**\n * Shared across all layers. Holds the body's original `pointer-events` value while at least one\n * layer disables outside pointer events. `null` means the body is not currently overridden — it\n * doubles as the \"ownership\" flag so stacked layers don't overwrite the saved original with\n * `none`.\n */\nlet originalBodyPointerEvents: string | null = null;\n\n@Directive({\n selector: '[rdxDismissableLayer]',\n exportAs: 'rdxDismissableLayer',\n hostDirectives: [RdxPointerDownOutside, RdxFocusOutside, RdxEscapeKeyDown],\n host: {\n 'data-dismissable-layer': '',\n '[style]': `{\n pointerEvents: isBodyPointerEventsDisabled() ? (isPointerEventsEnabled() ? 'auto' : 'none') : undefined\n }`\n }\n})\nexport class RdxDismissableLayer {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly context = inject(RdxDismissableLayersContextToken);\n private readonly config = inject(RdxDismissableLayerConfigToken);\n\n private readonly rdxPointerDownOutside = inject(RdxPointerDownOutside);\n private readonly rdxFocusOutside = inject(RdxFocusOutside);\n private readonly rdxEscapeKeyDown = inject(RdxEscapeKeyDown);\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n readonly escapeKeyDown = output<KeyboardEvent>();\n\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n readonly pointerDownOutside = output<PointerEvent>();\n\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n readonly focusOutside = output<FocusEvent>();\n\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n readonly interactOutside = output<PointerEvent | FocusEvent>();\n\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n readonly dismiss = output<void>();\n\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n readonly disableOutsidePointerEvents = input<boolean | undefined, BooleanInput | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value))\n });\n\n readonly isOutsidePointerEventsDisabled = computed(\n () => this.disableOutsidePointerEvents() ?? this.config.disableOutsidePointerEvents()\n );\n\n protected readonly isBodyPointerEventsDisabled = computed(\n () => this.context.layersWithOutsidePointerEventsDisabled().length > 0\n );\n\n protected readonly isPointerEventsEnabled = computed(() => {\n const layers = this.context.layersRoot();\n const disabledLayers = this.context.layersWithOutsidePointerEventsDisabled();\n const highestDisabledLayer = disabledLayers[disabledLayers.length - 1];\n\n return this.index() >= layers.indexOf(highestDisabledLayer);\n });\n\n private readonly index = computed(() => this.context.layersRoot().indexOf(this));\n\n /** The topmost layer in the stack — the only one that should react to the Escape key. */\n private readonly isHighestLayer = computed(() => {\n const layers = this.context.layersRoot();\n return layers.indexOf(this) === layers.length - 1;\n });\n\n constructor() {\n this.context.layersRoot.update((v) => [...v, this]);\n this.destroyRef.onDestroy(() => {\n this.context.layersRoot.update((v) => v.filter((i) => i !== this));\n });\n\n this.setupBodyPointerEvents();\n\n this.rdxPointerDownOutside.pointerDownOutside.subscribe((event: PointerEvent) => {\n const isPointerDownOnBranch = this.context\n .branches()\n .some((branch) => branch.contains(event.target as HTMLElement));\n\n if (!this.isPointerEventsEnabled() || isPointerDownOnBranch) {\n return;\n }\n\n this.pointerDownOutside.emit(event);\n this.interactOutside.emit(event);\n\n if (!event.defaultPrevented) {\n this.dismiss.emit();\n }\n });\n\n this.rdxFocusOutside.focusOutside.subscribe((event: FocusEvent) => {\n const isFocusInBranch = this.context\n .branches()\n .some((branch) => branch.contains(event.target as HTMLElement));\n\n if (isFocusInBranch) {\n return;\n }\n\n this.focusOutside.emit(event);\n this.interactOutside.emit(event);\n\n if (!event.defaultPrevented) {\n this.dismiss.emit();\n }\n });\n\n this.rdxEscapeKeyDown.escapeKeyDown.subscribe((event: KeyboardEvent) => {\n // Only the topmost layer is dismissed by Escape; stacked layers close one at a time.\n if (!this.isHighestLayer()) {\n return;\n }\n\n this.escapeKeyDown.emit(event);\n\n if (!event.defaultPrevented) {\n event.preventDefault();\n this.dismiss.emit();\n }\n });\n }\n\n /**\n * Toggles `pointer-events: none` on the document body while any layer has\n * `disableOutsidePointerEvents`. Ownership is shared across all layers via\n * {@link originalBodyPointerEvents}: the original value is saved only on the global\n * `0 -> >0` transition and restored only when the count returns to `0`.\n */\n private setupBodyPointerEvents(): void {\n afterNextRender(() => {\n const ownerDocument = this.elementRef.nativeElement.ownerDocument ?? globalThis.document;\n\n effect(\n (onCleanup) => {\n const disabledCount = this.context.layersWithOutsidePointerEventsDisabled().length;\n\n if (disabledCount > 0 && originalBodyPointerEvents === null) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n\n onCleanup(() => {\n const remaining = untracked(() => this.context.layersWithOutsidePointerEventsDisabled().length);\n if (remaining === 0 && originalBodyPointerEvents !== null) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n originalBodyPointerEvents = null;\n }\n });\n },\n { injector: this.injector }\n );\n });\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { RdxDismissableLayersContextToken } from './dismissable-layer.config';\n\n@Directive({\n selector: '[rdxDismissableLayerBranch]'\n})\nexport class RdxDismissableLayerBranch {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly dismissableLayersContext = inject(RdxDismissableLayersContextToken);\n\n constructor() {\n this.dismissableLayersContext.branches.update((elements) => [...elements, this.elementRef.nativeElement]);\n\n this.destroyRef.onDestroy(() =>\n this.dismissableLayersContext.branches.update((elements) =>\n elements.filter((el) => el !== this.elementRef.nativeElement)\n )\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RdxPointerDownOutside","i1.RdxFocusOutside","i1.RdxEscapeKeyDown"],"mappings":"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"}
|