carbon-components-angular
Version:
Next generation components
2,326 lines • 89.3 kB
HTML
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>carbon-components-angular documentation</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="../images/favicon.ico">
<link rel="stylesheet" href="../styles/style.css">
<link rel="stylesheet" href="../styles/dark.css">
<style>
footer.carbon {
position: absolute;
bottom: 0;
width: 100%;
z-index: 9999;
}
#root > div {
/*
* Subtracting the height of the footer to prevent
* overlaying the footer ontop of content
*/
height: calc(100vh - 48px);
}
</style>
</head>
<body>
<script>
// Blocking script to avoid flickering dark mode
// Dark mode toggle button
var useDark = window.matchMedia('(prefers-color-scheme: dark)');
var darkModeState = useDark.matches;
var $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input');
var $darkModeToggles = document.querySelectorAll('.dark-mode-switch');
var darkModeStateLocal = localStorage.getItem('compodoc_darkmode-state');
function checkToggle(check) {
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
$darkModeToggleSwitchers[i].checked = check;
}
}
function toggleDarkMode(state) {
if (window.localStorage) {
localStorage.setItem('compodoc_darkmode-state', state);
}
checkToggle(state);
const hasClass = document.body.classList.contains('dark');
if (state) {
for (var i = 0; i < $darkModeToggles.length; i++) {
$darkModeToggles[i].classList.add('dark');
}
if (!hasClass) {
document.body.classList.add('dark');
}
} else {
for (var i = 0; i < $darkModeToggles.length; i++) {
$darkModeToggles[i].classList.remove('dark');
}
if (hasClass) {
document.body.classList.remove('dark');
}
}
}
useDark.addEventListener('change', function (evt) {
toggleDarkMode(evt.matches);
});
if (darkModeStateLocal) {
darkModeState = darkModeStateLocal === 'true';
}
toggleDarkMode(darkModeState);
</script>
<div class="navbar navbar-default navbar-fixed-top d-md-none p-0">
<div class="d-flex">
<a href="../" class="navbar-brand">carbon-components-angular documentation</a>
<button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button>
</div>
</div>
<div class="xs-menu menu" id="mobile-menu">
<div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu>
</div>
<div class="container-fluid main">
<div class="row main">
<div class="d-none d-md-block menu">
<compodoc-menu mode="normal"></compodoc-menu>
</div>
<!-- START CONTENT -->
<div class="content directive">
<div class="content-data">
<ol class="breadcrumb">
<li class="breadcrumb-item">Directives</li>
<li class="breadcrumb-item" >DialogDirective</li>
</ol>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a href="#info"
class="nav-link"
class="nav-link active"
role="tab" id="info-tab" data-bs-toggle="tab" data-link="info">Info</a>
</li>
<li class="nav-item">
<a href="#source"
class="nav-link"
role="tab" id="source-tab" data-bs-toggle="tab" data-link="source">Source</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="info">
<p class="comment">
<h3>File</h3>
</p>
<p class="comment">
<code>src/dialog/dialog.directive.ts</code>
</p>
<p class="comment">
<h3>Description</h3>
</p>
<p class="comment">
<p>A generic directive that can be inherited from to create dialogs (for example, a tooltip or popover)</p>
<p>This class contains the relevant initialization code, specific templates, options, and additional inputs
should be specified in the derived class.</p>
<p>NOTE: All child classes should add <code>DialogService</code> as a provider, otherwise they will lose context that
the service relies on.</p>
</p>
<p class="comment">
<h3>Implements</h3>
</p>
<p class="comment">
<code>OnInit</code>
<code>OnDestroy</code>
<code>OnChanges</code>
</p>
<section data-compodoc="block-metadata">
<h3>Metadata</h3>
<table class="table table-sm table-hover metadata">
<tbody>
<tr>
<td class="col-md-3">Providers</td>
<td class="col-md-9">
<code>
DialogService
</code>
</td>
</tr>
<tr>
<td class="col-md-3">Selector</td>
<td class="col-md-9"><code>[cdsDialog], [ibmDialog]</code></td>
</tr>
<tr>
<td class="col-md-3">exportAs</td>
<td class="col-md-9"><code>dialog</code></td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-index">
<h3 id="index">Index</h3>
<table class="table table-sm table-bordered index-table">
<tbody>
<tr>
<td class="col-md-4">
<h6><b>Properties</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#dialogConfig" >dialogConfig</a>
</li>
<li>
<span class="modifier">Static</span>
<a href="#dialogCounter" >dialogCounter</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#dialogRef" >dialogRef</a>
</li>
<li>
<span class="modifier"></span>
<a href="#hasPopup" >hasPopup</a>
</li>
<li>
<span class="modifier"></span>
<a href="#role" >role</a>
</li>
<li>
<span class="modifier">Private</span>
<a href="#subscriptions" >subscriptions</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Methods</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#close" >close</a>
</li>
<li>
<a href="#ngOnChanges" >ngOnChanges</a>
</li>
<li>
<a href="#ngOnDestroy" >ngOnDestroy</a>
</li>
<li>
<a href="#ngOnInit" >ngOnInit</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#onDialogChanges" >onDialogChanges</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#onDialogInit" >onDialogInit</a>
</li>
<li>
<a href="#open" >open</a>
</li>
<li>
<a href="#toggle" >toggle</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#updateConfig" >updateConfig</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Inputs</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#appendInline" >appendInline</a>
</li>
<li>
<a href="#cdsDialog" >cdsDialog</a>
</li>
<li>
<a href="#closeTrigger" >closeTrigger</a>
</li>
<li>
<a href="#data" >data</a>
</li>
<li>
<a href="#disabled" >disabled</a>
</li>
<li>
<a href="#gap" >gap</a>
</li>
<li>
<a href="#ibmDialog" class="deprecated-name">ibmDialog</a>
</li>
<li>
<a href="#isOpen" >isOpen</a>
</li>
<li>
<a href="#offset" >offset</a>
</li>
<li>
<a href="#placement" >placement</a>
</li>
<li>
<a href="#shouldClose" >shouldClose</a>
</li>
<li>
<a href="#title" >title</a>
</li>
<li>
<a href="#trigger" >trigger</a>
</li>
<li>
<a href="#wrapperClass" >wrapperClass</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Outputs</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#isOpenChange" >isOpenChange</a>
</li>
<li>
<a href="#onClose" >onClose</a>
</li>
<li>
<a href="#onOpen" >onOpen</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>HostBindings</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#attr.aria-haspopup" >attr.aria-haspopup</a>
</li>
<li>
<a href="#attr.aria-owns" >attr.aria-owns</a>
</li>
<li>
<a href="#attr.role" >attr.role</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Accessors</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#ibmDialog" >ibmDialog</a>
</li>
<li>
<a href="#ariaOwns" >ariaOwns</a>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-constructor">
<h3 id="constructor">Constructor</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<code>constructor(elementRef: ElementRef, viewContainerRef: ViewContainerRef, dialogService: <a href="../injectables/DialogService.html" target="_self">DialogService</a>, eventService: <a href="../injectables/EventService.html" target="_self">EventService</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="129" class="link-to-prism">src/dialog/dialog.directive.ts:129</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Creates an instance of DialogDirective.</p>
</div>
<div>
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>elementRef</td>
<td>
<code>ElementRef</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>viewContainerRef</td>
<td>
<code>ViewContainerRef</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>dialogService</td>
<td>
<code><a href="../injectables/DialogService.html" target="_self" >DialogService</a></code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>eventService</td>
<td>
<code><a href="../injectables/EventService.html" target="_self" >EventService</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-inputs">
<h3 id="inputs">Inputs</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="appendInline"></a>
<b>appendInline</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>false</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="86" class="link-to-prism">src/dialog/dialog.directive.ts:86</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Set to <code>true</code> to open the dialog next to the triggering component</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="cdsDialog"></a>
<b>cdsDialog</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>string | TemplateRef<any></code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="52" class="link-to-prism">src/dialog/dialog.directive.ts:52</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="closeTrigger"></a>
<b>closeTrigger</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>"mouseout" | "mouseleave"</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>"mouseleave"</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="66" class="link-to-prism">src/dialog/dialog.directive.ts:66</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Defines how the Dialog close event is triggered.</p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseleave_event">See here</a>
for more on the difference between <code>mouseleave</code> and <code>mouseout</code>.</p>
<p>Defaults to <code>click</code> when <code>trigger</code> is set to <code>click</code>.</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="data"></a>
<b>data</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>{}</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>{}</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="90" class="link-to-prism">src/dialog/dialog.directive.ts:90</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Optional data for templates</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="disabled"></a>
<b>disabled</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>false</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="96" class="link-to-prism">src/dialog/dialog.directive.ts:96</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>This prevents the dialog from being toggled</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="gap"></a>
<b>gap</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/number" target="_blank" >number</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>0</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="82" class="link-to-prism">src/dialog/dialog.directive.ts:82</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Spacing between the dialog and it's triggering element</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ibmDialog"></a>
<b>ibmDialog</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>string | TemplateRef</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="48" class="link-to-prism">src/dialog/dialog.directive.ts:48</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="isOpen"></a>
<b>isOpen</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>false</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="92" class="link-to-prism">src/dialog/dialog.directive.ts:92</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="offset"></a>
<b>offset</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>literal type</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="74" class="link-to-prism">src/dialog/dialog.directive.ts:74</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>This specifies any vertical and horizontal offset for the position of the dialog</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="placement"></a>
<b>placement</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>"left"</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="70" class="link-to-prism">src/dialog/dialog.directive.ts:70</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Placement of the dialog, usually relative to the element the directive is on.</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="shouldClose"></a>
<b>shouldClose</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="100" class="link-to-prism">src/dialog/dialog.directive.ts:100</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>This input allows explicit control over how the dialog should close</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="title"></a>
<b>title</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>""</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="43" class="link-to-prism">src/dialog/dialog.directive.ts:43</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Title for the dialog</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="trigger"></a>
<b>trigger</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>"click" | "hover" | "mouseenter"</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>"click"</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="57" class="link-to-prism">src/dialog/dialog.directive.ts:57</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Defines how the Dialog is triggered.(Hover and click behave the same on mobile - both respond to a single tap).
Do not add focusable elements if trigger is <code>hover</code> or <code>mouseenter</code>.</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="wrapperClass"></a>
<b>wrapperClass</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="78" class="link-to-prism">src/dialog/dialog.directive.ts:78</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Classes to add to the dialog container</p>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-outputs">
<h3 id="outputs">Outputs</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="isOpenChange"></a>
<b>isOpenChange</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>EventEmitter</code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="116" class="link-to-prism">src/dialog/dialog.directive.ts:116</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Emits an event when the state of <code>isOpen</code> changes. Allows <code>isOpen</code> to be double bound</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="onClose"></a>
<b>onClose</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>EventEmitter<any></code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="108" class="link-to-prism">src/dialog/dialog.directive.ts:108</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Emits an event when the dialog is closed</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="onOpen"></a>
<b>onOpen</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>EventEmitter<any></code>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="112" class="link-to-prism">src/dialog/dialog.directive.ts:112</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Emits an event when the dialog is opened</p>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-properties">
<h3>HostBindings</h3> <table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="attr.aria-haspopup"></a>
<span class="name">
<span ><b>attr.aria-haspopup</b></span>
<a href="#attr.aria-haspopup"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>true</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="119" class="link-to-prism">src/dialog/dialog.directive.ts:119</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="attr.aria-owns"></a>
<span class="name">
<span ><b>attr.aria-owns</b></span>
<a href="#attr.aria-owns"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="120" class="link-to-prism">src/dialog/dialog.directive.ts:120</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="attr.role"></a>
<span class="name">
<span ><b>attr.role</b></span>
<a href="#attr.role"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>"button"</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="118" class="link-to-prism">src/dialog/dialog.directive.ts:118</a></div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-methods">
<h3 id="methods">
Methods
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="close"></a>
<span class="name">
<span ><b>close</b></span>
<a href="#close"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>close(meta: <a href="../interfaces/CloseMeta.html" target="_self">CloseMeta</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="305"
class="link-to-prism">src/dialog/dialog.directive.ts:305</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Helper method to close the dialogRef.</p>
</div>
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
<td>Default value</td>
</tr>
</thead>
<tbody>
<tr>
<td>meta</td>
<td>
<code><a href="../interfaces/CloseMeta.html" target="_self" >CloseMeta</a></code>
</td>
<td>
No
</td>
<td>
<code>{ reason: CloseReasons.interaction }</code>
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ngOnChanges"></a>
<span class="name">
<span ><b>ngOnChanges</b></span>
<a href="#ngOnChanges"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>ngOnChanges(changes: SimpleChanges)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="148"
class="link-to-prism">src/dialog/dialog.directive.ts:148</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>changes</td>
<td>
<code>SimpleChanges</code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ngOnDestroy"></a>
<span class="name">
<span ><b>ngOnDestroy</b></span>
<a href="#ngOnDestroy"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>ngOnDestroy()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="252"
class="link-to-prism">src/dialog/dialog.directive.ts:252</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>When the host dies, kill the popover.</p>
<ul>
<li>Useful for use in a modal or similar.</li>
</ul>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ngOnInit"></a>
<span class="name">
<span ><b>ngOnInit</b></span>
<a href="#ngOnInit"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>ngOnInit()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="185"
class="link-to-prism">src/dialog/dialog.directive.ts:185</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Sets the config object and binds events for hovering or clicking before
running code from child class.</p>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="onDialogChanges"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>onDialogChanges</b></span>
<a href="#onDialogChanges"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>onDialogChanges(_changes: SimpleChanges)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="321"
class="link-to-prism">src/dialog/dialog.directive.ts:321</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Empty method for child to override and specify additional on changes steps.
run after DialogDirective completes it's ngOnChanges.</p>
</div>
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>_changes</td>
<td>
<code>SimpleChanges</code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="onDialogInit"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>onDialogInit</b></span>
<a href="#onDialogInit"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>onDialogInit()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="315"
class="link-to-prism">src/dialog/dialog.directive.ts:315</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Empty method for child classes to override and specify additional init steps.
Run after DialogDirective completes it's ngOnInit.</p>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="open"></a>
<span class="name">
<span ><b>open</b></span>
<a href="#open"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>open(component?)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="263"
class="link-to-prism">src/dialog/dialog.directive.ts:263</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Helper method to call dialogService 'open'.</p>
<ul>
<li>Enforce accessibility by updating an aria attr for nativeElement.</li>
</ul>
</div>
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>component</td>
<td>
Yes
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="../components/Dialog.html" target="_self" >ComponentRef<Dialog></a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="toggle"></a>
<span class="name">
<span ><b>toggle</b></span>
<a href="#toggle"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>toggle(meta: <a href="../interfaces/CloseMeta.html" target="_self">CloseMeta</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="294"
class="link-to-prism">src/dialog/dialog.directive.ts:294</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Helper method to toggle the open state of the dialog</p>
</div>
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
<td>Default value</td>
</tr>
</thead>
<tbody>
<tr>
<td>meta</td>
<td>
<code><a href="../interfaces/CloseMeta.html" target="_self" >CloseMeta</a></code>
</td>
<td>
No
</td>
<td>
<code>{ reason: CloseReasons.interaction }</code>
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="updateConfig"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>updateConfig</b></span>
<a href="#updateConfig"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>updateConfig()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="323"
class="link-to-prism">src/dialog/dialog.directive.ts:323</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-properties">
<h3 id="inputs">
Properties
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="dialogConfig"></a>
<span class="name">
<span ><b>dialogConfig</b></span>
<a href="#dialogConfig"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="../interfaces/DialogConfig.html" target="_self" >DialogConfig</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="104" class="link-to-prism">src/dialog/dialog.directive.ts:104</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Config object passed to the rendered component</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="dialogCounter"></a>
<span class="name">
<span class="modifier">Static</span>
<span ><b>dialogCounter</b></span>
<a href="#dialogCounter"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/number" target="_blank" >number</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>0</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="39" class="link-to-prism">src/dialog/dialog.directive.ts:39</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="dialogRef"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>dialogRef</b></span>
<a href="#dialogRef"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="../components/Dialog.html" target="_self" >ComponentRef<Dialog></a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="127" class="link-to-prism">src/dialog/dialog.directive.ts:127</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Keeps a reference to the currently opened dialog</p>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="hasPopup"></a>
<span class="name">
<span class="modifier"></span>
<span ><b>hasPopup</b></span>
<a href="#hasPopup"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>true</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<b>Decorators : </b>
<br />
<code>
@HostBinding('attr.aria-haspopup')<br />
</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="119" class="link-to-prism">src/dialog/dialog.directive.ts:119</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="role"></a>
<span class="name">
<span class="modifier"></span>
<span ><b>role</b></span>
<a href="#role"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>"button"</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<b>Decorators : </b>
<br />
<code>
@HostBinding('attr.role')<br />
</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="118" class="link-to-prism">src/dialog/dialog.directive.ts:118</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="subscriptions"></a>
<span class="name">
<span class="modifier">Private</span>
<span ><b>subscriptions</b></span>
<a href="#subscriptions"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>Subscription[]</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>[]</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="129" class="link-to-prism">src/dialog/dialog.directive.ts:129</a></div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-accessors">
<h3 id="accessors">
Accessors
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ibmDialog"></a>
<span class="name"><b>ibmDialog</b><a href="#ibmDialog"><span class="icon ion-ios-link"></span></a></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="accessor"><b>set</b><code>ibmDialog(body: string | TemplateRef<any>)</code></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="48" class="link-to-prism">src/dialog/dialog.directive.ts:48</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Dialog body content.</p>
</div>
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>body</td>
<td>
<code>string | TemplateRef<any></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ariaOwns"></a>
<span class="name"><b>ariaOwns</b><a href="#ariaOwns"><span class="icon ion-ios-link"></span></a></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="accessor"><b>get</b><code>ariaOwns()</code></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="120" class="link-to-prism">src/dialog/dialog.directive.ts:120</a></div>
</td>
</tr>
</tbody>
</table>
</section>
</div>
<div class="tab-pane fade tab-source-code" id="source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {
Directive,
Input,
Output,
EventEmitter,
OnInit,
OnDestroy,
ElementRef,
TemplateRef,
ViewContainerRef,
OnChanges,
HostBinding,
SimpleChanges,
ComponentRef
} from "@angular/core";
import { DialogService } from "./dialog.service";
import { CloseMeta, CloseReasons, DialogConfig } from "./dialog-config.interface";
import { EventService } from "carbon-components-angular/utils";
import { Dialog } from "./dialog.component";
import { fromEvent, Subscription } from "rxjs";
/**
* A generic directive that can be inherited from to create dialogs (for example, a tooltip or popover)
*
* This class contains the relevant initialization code, specific templates, options, and additional inputs
* should be specified in the derived class.
*
* NOTE: All child classes should add `DialogService` as a provider, otherwise they will lose context that
* the service relies on.
*/
@Directive({
selector: "[cdsDialog], [ibmDialog]",
exportAs: "dialog",
providers: [
DialogService
]
})
export class DialogDirective implements OnInit, OnDestroy, OnChanges {
static dialogCounter = 0;
/**
* Title for the dialog
*/
@Input() title = "";
/**
* @deprecated as of v5, use `cdsDialog` instead
* Dialog body content.
*/
@Input() set ibmDialog(body: string | TemplateRef<any>) {
this.cdsDialog = body;
}
@Input() cdsDialog: string | TemplateRef<any>;
/**
* Defines how the Dialog is triggered.(Hover and click behave the same on mobile - both respond to a single tap).
* Do not add focusable elements if trigger is `hover` or `mouseenter`.
*/
@Input() trigger: "click" | "hover" | "mouseenter" = "click";
/**
* Defines how the Dialog close event is triggered.
*
* [See here](https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseleave_event)
* for more on the difference between `mouseleave` and `mouseout`.
*
* Defaults to `click` when `trigger` is set to `click`.
*/
@Input() closeTrigger: "mouseout" | "mouseleave" = "mouseleave";
/**
* Placement of the dialog, usually relative to the element the directive is on.
*/
@Input() placement = "left";
/**
* This specifies any vertical and horizontal offset for the position of the dialog
*/
@Input() offset: { x: number, y: number };
/**
* Classes to add to the dialog container
*/
@Input() wrapperClass: string;
/**
* Spacing between the dialog and it's triggering element
*/
@Input() gap = 0;
/**
* Set to `true` to open the dialog next to the triggering component
*/
@Input() appendInline = false;
/**
* Optional data for templates
*/
@Input() data = {};
@Input() @HostBinding("attr.aria-expanded") isOpen = false;
/**
* This prevents the dialog from being toggled
*/
@Input() disabled = false;
/**
* This input allows explicit control over how the dialog should close
*/
@Input() shouldClose: (meta: CloseMeta) => boolean;
/**
* Config object passed to the rendered component
*/
dialogConfig: DialogConfig;
/**
* Emits an event when the dialog is closed
*/
@Output() onClose: EventEmitter<any> = new EventEmitter();
/**
* Emits an event when the dialog is opened
*/
@Output() onOpen: EventEmitter<any> = new EventEmitter();
/**
* Emits an event when the state of `isOpen` changes. Allows `isOpen` to be double bound
*/
@Output() isOpenChange = new EventEmitter<boolean>();
@HostBinding("attr.role") role = "button";
@HostBinding("attr.aria-haspopup") hasPopup = true;
@HostBinding("attr.aria-owns") get ariaOwns(): string {
return this.isOpen ? this.dialogConfig.compID : null;
}
/**
* Keeps a reference to the currently opened dialog
*/
protected dialogRef: ComponentRef<Dialog>;
private subscriptions: Subscription[] = [];
/**
* Creates an instance of DialogDirective.
* @param elementRef
* @param viewContainerRef
* @param dialogService
* @param eventService
*/
constructor(
protected elementRef: ElementRef,
protected viewContainerRef: ViewContainerRef,
protected dialogService: DialogService,
/**
* Deprecated as of v5
*/
protected eventService: EventService
) {}
ngOnChanges(changes: SimpleChanges) {
// set the config object (this can [and should!] be added to in child classes depending on what they need)
this.dialogConfig = {
title: this.title,
content: this.cdsDialog,
placement: this.placement,
parentRef: this.elementRef,
gap: this.gap,
trigger: this.trigger,
closeTrigger: this.closeTrigger,
shouldClose: this.shouldClose || (() => true),
appendInline: this.appendInline,
wrapperClass: this.wrapperClass,
data: this.data,
offset: this.offset,
disabled: this.disabled
};
if (changes.isOpen) {
if (changes.isOpen.currentValue) {
this.open();
} else if (!changes.isOpen.firstChange) {
this.close({
reason: CloseReasons.programmatic
});
}
}
// Run any code a child class may need.
this.onDialogChanges(changes);
this.updateConfig();
}
/**
* Sets the config object and binds events for hovering or clicking before
* running code from child class.
*/
ngOnInit() {
// fix for safari hijacking clicks
this.dialogService.singletonClickListen();
const element: HTMLElement = this.elementRef.nativeElement;
this.subscriptions.push(
fromEvent(element, "keydown").subscribe((event: KeyboardEvent) => {
if (event.target === this.dialogConfig.parentRef.nativeElement &&
(event.key === "Tab" || event.key === "Tab" && event.shiftKey) ||
event.key === "Escape") {
this.close({
reason: CloseReasons.interaction,
target: event.target
});
}
})
);
// bind events for hovering or clicking the host
if (this.trigger === "hover" || this.trigger === "mouseenter") {
this.subscriptions.push(
fromEvent(element, "mouseenter").subscribe(() => this.open()),
fromEvent(element, this.closeTrigger).subscribe((event) => {
this.close({
reason: CloseReasons.interaction,
target: event.target
});
}),
fromEvent(element, "focus").subscribe(() => this.open()),
fromEvent(element, "blur").subscribe((event) => {
this.close({
reason: CloseReasons.interaction,
target: event.target
});
})
);
} else {
this.subscriptions.push(
fromEvent(element, "click").subscribe((event) => {
this.toggle({
reason: CloseReasons.interaction,
target: event.target
});
}),
fromEvent(element, "keydown").subscribe((event: KeyboardEvent) => {
if (event.key === "Enter" || event.key === " ") {
setTimeout(() => {
this.open();
});
}
})
);
}
DialogDirective.dialogCounter++;
this.dialogConfig.compID = "dialog-" + DialogDirective.dialogCounter;
// run any code a child class may need
this.onDialogInit();
this.updateConfig();
}
/**
* When the host dies, kill the popover.
* - Useful for use in a modal or similar.
*/
ngOnDestroy() {
this.close({
reason: CloseReasons.destroyed
});
this.subscriptions.forEach((subscription) => subscription.unsubscribe());
}
/**
* Helper method to call dialogService 'open'.
* - Enforce accessibility by updating an aria attr for nativeElement.
*/
open(component?) {
// don't allow dialogs to be opened if they're already open
if (this.dialogRef || this.disabled) { return; }
// actually open the dialog, emit events, and set the open state
this.dialogRef = this.dialogService.open(this.viewContainerRef, this.dialogConfig, component);
this.isOpen = true;
this.onOpen.emit();
this.isOpenChange.emit(true);
// Handles emitting all the close events to clean everything up
// Also enforce accessibility on close by updating an aria attr on the nativeElement.
const subscription = this.dialogRef.instance.close.subscribe((meta: CloseMeta) => {
if (!this.dialogRef) { return; }
if (this.dialogConfig.shouldClose && this.dialogConfig.shouldClose(meta)) {
// close the dialog, emit events, and clear out the open states
this.dialogService.close(this.dialogRef);
this.dialogRef = null;
this.isOpen = false;
this.onClose.emit();
this.isOpenChange.emit(false);
subscription.unsubscribe();
}
});
return this.dialogRef;
}
/**
* Helper method to toggle the open state of the dialog
*/
toggle(meta: CloseMeta = { reason: CloseReasons.interaction }) {
if (!this.isOpen) {
this.open();
} else {
this.close(meta);
}
}
/**
* Helper method to close the dialogRef.
*/
close(meta: CloseMeta = { reason: CloseReasons.interaction }) {
if (this.dialogRef) {
this.dialogRef.instance.doClose(meta);
}
}
/**
* Empty method for child classes to override and specify additional init steps.
* Run after DialogDirective completes it's ngOnInit.
*/
protected onDialogInit() {}
/**
* Empty method for child to override and specify additional on changes steps.
* run after DialogDirective completes it's ngOnChanges.
*/
protected onDialogChanges(_changes: SimpleChanges) {}
protected updateConfig() {}
}
</code></pre>
</div>
</div>
</div><div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
<!-- END CONTENT -->
</div>
</div>
<label class="dark-mode-switch">
<input type="checkbox">
<span class="slider">
<svg class="slider-icon" viewBox="0 0 24 24" fill="none" height="20" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" width="20" xmlns="http://www.w3.org/2000/svg">
<path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path>
</svg>
</span>
</label>
<script>
var COMPODOC_CURRENT_PAGE_DEPTH = 1;
var COMPODOC_CURRENT_PAGE_CONTEXT = 'directive';
var COMPODOC_CURRENT_PAGE_URL = 'DialogDirective.html';
var MAX_SEARCH_RESULTS = 15;
</script>
<script>
$darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input');
checkToggle(darkModeState);
if ($darkModeToggleSwitchers.length > 0) {
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
$darkModeToggleSwitchers[i].addEventListener('change', function (event) {
darkModeState = !darkModeState;
toggleDarkMode(darkModeState);
});
}
}
</script>
<script src="../js/libs/custom-elements.min.js"></script>
<script src="../js/libs/lit-html.js"></script>
<script src="../js/menu-wc.js" defer></script>
<script nomodule src="../js/menu-wc_es5.js" defer></script>
<script src="../js/libs/bootstrap-native.js"></script>
<script src="../js/libs/es6-shim.min.js"></script>
<script src="../js/libs/EventDispatcher.js"></script>
<script src="../js/libs/promise.min.js"></script>
<script src="../js/libs/zepto.min.js"></script>
<script src="../js/compodoc.js"></script>
<script src="../js/tabs.js"></script>
<script src="../js/menu.js"></script>
<script src="../js/libs/clipboard.min.js"></script>
<script src="../js/libs/prism.js"></script>
<script src="../js/sourceCode.js"></script>
<script src="../js/search/search.js"></script>
<script src="../js/search/lunr.min.js"></script>
<script src="../js/search/search-lunr.js"></script>
<script src="../js/search/search_index.js"></script>
<script src="../js/lazy-load-graphs.js"></script>
<footer class="carbon">
<dds-footer-container key="footer" disable-locale-button="true" size="micro" />
</footer>
<script
key="8"
type="module"
src="https://1.www.s81c.com/common/carbon-for-ibm-dotcom/tag/v1/latest/footer.min.js">
</script>
<!-- Storybook override -->
<script>
document.title = "Carbon Components Angular";
</script>
<script
src="//1.www.s81c.com/common/stats/ibm-common.js"
type="text/javascript"
async="async">
</script>
</body>
</html>