11import Component from '@glimmer/component' ;
2+ import { getOwner } from '@ember/application' ;
23import { action } from '@ember/object' ;
34import { guidFor } from '@ember/object/internals' ;
45import { inject as service } from '@ember/service' ;
56import { typeOf } from '@ember/utils' ;
67
7- import { getOwnConfig } from '@embroider/macros' ;
88import { Keys } from 'ember-headlessui/utils/keyboard' ;
99import { modifier } from 'ember-modifier' ;
1010
1111import type DialogStackProvider from 'ember-headlessui/services/dialog-stack-provider' ;
1212
13- /**
14- * Expose the element that the `Dialog` should be "slotted" into
15- *
16- * This is exported _only_ for testing purposes; do not consider this API to be public
17- *
18- * @private
19- */
20- export function getPortalRoot ( ) {
21- const { rootElement } = getOwnConfig ( ) ;
22-
23- // If we looked up a `rootElement` config at build-time, use that; otherwise use the body
24- return rootElement ? document . querySelector ( rootElement ) : document . body ;
25- }
26-
2713interface Args {
2814 isOpen : boolean ;
2915 onClose : ( ) => void ;
@@ -36,7 +22,7 @@ export default class DialogComponent extends Component<Args> {
3622 DEFAULT_TAG_NAME = 'div' ;
3723
3824 guid = `${ guidFor ( this ) } -headlessui-dialog` ;
39- $portalRoot = getPortalRoot ( ) ;
25+ $portalRoot : HTMLElement ;
4026 outsideClickedElement : HTMLElement | null = null ;
4127
4228 handleEscapeKey = modifier (
@@ -85,6 +71,14 @@ export default class DialogComponent extends Component<Args> {
8571 constructor ( owner : unknown , args : Args ) {
8672 super ( owner , args ) ;
8773
74+ const {
75+ APP : { rootElement } ,
76+ } = getOwner ( this ) . resolveRegistration ( 'config:environment' ) ;
77+
78+ this . $portalRoot = rootElement
79+ ? document . querySelector ( rootElement )
80+ : document . body ;
81+
8882 let { isOpen, onClose } = this . args ;
8983
9084 if ( isOpen === undefined && onClose === undefined ) {
0 commit comments