@rossigee/clarity-angular 18.2.1-fixed.1 → 18.2.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/clr-angular-accordion.mjs +355 -0
- package/fesm2022/clr-angular-accordion.mjs.map +1 -0
- package/fesm2022/clr-angular-button.mjs +713 -0
- package/fesm2022/clr-angular-button.mjs.map +1 -0
- package/fesm2022/clr-angular-collapsible-panel.mjs +201 -0
- package/fesm2022/clr-angular-collapsible-panel.mjs.map +1 -0
- package/fesm2022/clr-angular-data-datagrid.mjs +7635 -0
- package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -0
- package/fesm2022/clr-angular-data-stack-view.mjs +442 -0
- package/fesm2022/clr-angular-data-stack-view.mjs.map +1 -0
- package/fesm2022/clr-angular-data-tree-view.mjs +1106 -0
- package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -0
- package/fesm2022/clr-angular-data.mjs +40 -0
- package/fesm2022/clr-angular-data.mjs.map +1 -0
- package/fesm2022/clr-angular-emphasis-alert.mjs +624 -0
- package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -0
- package/fesm2022/clr-angular-emphasis-badge.mjs +69 -0
- package/fesm2022/clr-angular-emphasis-badge.mjs.map +1 -0
- package/fesm2022/clr-angular-emphasis-common.mjs +25 -0
- package/fesm2022/clr-angular-emphasis-common.mjs.map +1 -0
- package/fesm2022/clr-angular-emphasis-label.mjs +105 -0
- package/fesm2022/clr-angular-emphasis-label.mjs.map +1 -0
- package/fesm2022/clr-angular-emphasis.mjs +41 -0
- package/fesm2022/clr-angular-emphasis.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-checkbox.mjs +270 -0
- package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-combobox.mjs +1775 -0
- package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-common.mjs +1251 -0
- package/fesm2022/clr-angular-forms-common.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-datalist.mjs +263 -0
- package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-datepicker.mjs +3274 -0
- package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-file-input.mjs +826 -0
- package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-input.mjs +153 -0
- package/fesm2022/clr-angular-forms-input.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-number-input.mjs +236 -0
- package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-password.mjs +233 -0
- package/fesm2022/clr-angular-forms-password.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-radio.mjs +231 -0
- package/fesm2022/clr-angular-forms-radio.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-range.mjs +186 -0
- package/fesm2022/clr-angular-forms-range.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-select.mjs +153 -0
- package/fesm2022/clr-angular-forms-select.mjs.map +1 -0
- package/fesm2022/clr-angular-forms-textarea.mjs +136 -0
- package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -0
- package/fesm2022/clr-angular-forms.mjs +100 -0
- package/fesm2022/clr-angular-forms.mjs.map +1 -0
- package/fesm2022/clr-angular-icon.mjs +7397 -0
- package/fesm2022/clr-angular-icon.mjs.map +1 -0
- package/fesm2022/clr-angular-layout-breadcrumbs.mjs +120 -0
- package/fesm2022/clr-angular-layout-breadcrumbs.mjs.map +1 -0
- package/fesm2022/clr-angular-layout-main-container.mjs +100 -0
- package/fesm2022/clr-angular-layout-main-container.mjs.map +1 -0
- package/fesm2022/clr-angular-layout-nav.mjs +582 -0
- package/fesm2022/clr-angular-layout-nav.mjs.map +1 -0
- package/fesm2022/clr-angular-layout-tabs.mjs +807 -0
- package/fesm2022/clr-angular-layout-tabs.mjs.map +1 -0
- package/fesm2022/clr-angular-layout-vertical-nav.mjs +507 -0
- package/fesm2022/clr-angular-layout-vertical-nav.mjs.map +1 -0
- package/fesm2022/clr-angular-layout.mjs +44 -0
- package/fesm2022/clr-angular-layout.mjs.map +1 -0
- package/fesm2022/clr-angular-modal.mjs +617 -0
- package/fesm2022/clr-angular-modal.mjs.map +1 -0
- package/fesm2022/clr-angular-popover-common.mjs +1082 -0
- package/fesm2022/clr-angular-popover-common.mjs.map +1 -0
- package/fesm2022/clr-angular-popover-dropdown.mjs +492 -0
- package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -0
- package/fesm2022/clr-angular-popover-signpost.mjs +494 -0
- package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -0
- package/fesm2022/clr-angular-popover-tooltip.mjs +293 -0
- package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -0
- package/fesm2022/clr-angular-popover.mjs +41 -0
- package/fesm2022/clr-angular-popover.mjs.map +1 -0
- package/fesm2022/clr-angular-progress-progress-bars.mjs +217 -0
- package/fesm2022/clr-angular-progress-progress-bars.mjs.map +1 -0
- package/fesm2022/clr-angular-progress-spinner.mjs +132 -0
- package/fesm2022/clr-angular-progress-spinner.mjs.map +1 -0
- package/fesm2022/clr-angular-stepper.mjs +694 -0
- package/fesm2022/clr-angular-stepper.mjs.map +1 -0
- package/fesm2022/clr-angular-timeline.mjs +316 -0
- package/fesm2022/clr-angular-timeline.mjs.map +1 -0
- package/fesm2022/clr-angular-utils-conditional.mjs +351 -0
- package/fesm2022/clr-angular-utils-conditional.mjs.map +1 -0
- package/fesm2022/clr-angular-utils-loading.mjs +107 -0
- package/fesm2022/clr-angular-utils-loading.mjs.map +1 -0
- package/fesm2022/clr-angular-utils.mjs +2079 -0
- package/fesm2022/clr-angular-utils.mjs.map +1 -0
- package/fesm2022/clr-angular-wizard.mjs +3074 -0
- package/fesm2022/clr-angular-wizard.mjs.map +1 -0
- package/fesm2022/clr-angular.mjs +2 -2
- package/fesm2022/clr-angular.mjs.map +1 -1
- package/package.json +7 -5
- package/schematics/ng-update/index.d.ts +2 -0
- package/schematics/ng-update/index.js +69 -0
- package/schematics/ng-update/index.js.map +1 -0
- package/schematics/ng-update/migrations/css-migration.d.ts +6 -0
- package/schematics/ng-update/migrations/css-migration.js +177 -0
- package/schematics/ng-update/migrations/css-migration.js.map +1 -0
- package/schematics/ng-update/migrations/import-migration.d.ts +4 -0
- package/schematics/ng-update/migrations/import-migration.js +187 -0
- package/schematics/ng-update/migrations/import-migration.js.map +1 -0
- package/schematics/ng-update/migrations/template-migration.d.ts +6 -0
- package/schematics/ng-update/migrations/template-migration.js +261 -0
- package/schematics/ng-update/migrations/template-migration.js.map +1 -0
- package/schematics/ng-update/replacements/css-replacements.d.ts +17 -0
- package/schematics/ng-update/replacements/css-replacements.js +74 -0
- package/schematics/ng-update/replacements/css-replacements.js.map +1 -0
- package/schematics/ng-update/replacements/import-replacements.d.ts +13 -0
- package/schematics/ng-update/replacements/import-replacements.js +108 -0
- package/schematics/ng-update/replacements/import-replacements.js.map +1 -0
- package/schematics/ng-update/replacements/symbol-replacements.d.ts +12 -0
- package/schematics/ng-update/replacements/symbol-replacements.js +67 -0
- package/schematics/ng-update/replacements/symbol-replacements.js.map +1 -0
- package/schematics/ng-update/replacements/template-replacements.d.ts +19 -0
- package/schematics/ng-update/replacements/template-replacements.js +57 -0
- package/schematics/ng-update/replacements/template-replacements.js.map +1 -0
- package/schematics/ng-update/tests/test-helpers.d.ts +6 -0
- package/schematics/ng-update/tests/test-helpers.js +34 -0
- package/schematics/ng-update/tests/test-helpers.js.map +1 -0
- package/schematics/ng-update/utils/file-visitor.d.ts +8 -0
- package/schematics/ng-update/utils/file-visitor.js +44 -0
- package/schematics/ng-update/utils/file-visitor.js.map +1 -0
- package/schematics/ng-update/utils/regexp-utils.d.ts +16 -0
- package/schematics/ng-update/utils/regexp-utils.js +34 -0
- package/schematics/ng-update/utils/regexp-utils.js.map +1 -0
- package/schematics/vitest.config.d.ts +2 -0
- package/schematics/vitest.config.js +17 -0
- package/schematics/vitest.config.js.map +1 -0
- package/types/clr-angular-accordion.d.ts +100 -0
- package/types/clr-angular-button.d.ts +169 -0
- package/types/clr-angular-collapsible-panel.d.ts +73 -0
- package/types/clr-angular-data-datagrid.d.ts +1843 -0
- package/types/clr-angular-data-stack-view.d.ts +87 -0
- package/types/clr-angular-data-tree-view.d.ts +229 -0
- package/types/clr-angular-data.d.ts +15 -0
- package/types/clr-angular-emphasis-alert.d.ts +175 -0
- package/types/clr-angular-emphasis-badge.d.ts +25 -0
- package/types/clr-angular-emphasis-common.d.ts +6 -0
- package/types/clr-angular-emphasis-label.d.ts +29 -0
- package/types/clr-angular-emphasis.d.ts +15 -0
- package/types/clr-angular-forms-checkbox.d.ts +69 -0
- package/types/clr-angular-forms-combobox.d.ts +353 -0
- package/types/clr-angular-forms-common.d.ts +339 -0
- package/types/clr-angular-forms-datalist.d.ts +59 -0
- package/types/clr-angular-forms-datepicker.d.ts +986 -0
- package/types/clr-angular-forms-file-input.d.ts +193 -0
- package/types/clr-angular-forms-input.d.ts +29 -0
- package/types/clr-angular-forms-number-input.d.ts +43 -0
- package/types/clr-angular-forms-password.d.ts +52 -0
- package/types/clr-angular-forms-radio.d.ts +50 -0
- package/types/clr-angular-forms-range.d.ts +37 -0
- package/types/clr-angular-forms-select.d.ts +36 -0
- package/types/clr-angular-forms-textarea.d.ts +29 -0
- package/types/clr-angular-forms.d.ts +36 -0
- package/types/clr-angular-icon.d.ts +1498 -0
- package/types/clr-angular-layout-breadcrumbs.d.ts +45 -0
- package/types/clr-angular-layout-main-container.d.ts +28 -0
- package/types/clr-angular-layout-nav.d.ts +142 -0
- package/types/clr-angular-layout-tabs.d.ts +158 -0
- package/types/clr-angular-layout-vertical-nav.d.ts +128 -0
- package/types/clr-angular-layout.d.ts +19 -0
- package/types/clr-angular-modal.d.ts +160 -0
- package/types/clr-angular-popover-common.d.ts +254 -0
- package/types/clr-angular-popover-dropdown.d.ts +123 -0
- package/types/clr-angular-popover-signpost.d.ts +157 -0
- package/types/clr-angular-popover-tooltip.d.ts +83 -0
- package/types/clr-angular-popover.d.ts +16 -0
- package/types/clr-angular-progress-progress-bars.d.ts +57 -0
- package/types/clr-angular-progress-spinner.d.ts +44 -0
- package/types/clr-angular-stepper.d.ts +179 -0
- package/types/clr-angular-timeline.d.ts +86 -0
- package/types/clr-angular-utils-conditional.d.ts +132 -0
- package/types/clr-angular-utils-loading.d.ts +38 -0
- package/types/clr-angular-utils.d.ts +913 -0
- package/types/clr-angular-wizard.d.ts +1508 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, DOCUMENT, PLATFORM_ID, HostListener, Inject, Directive, ContentChild, Input, Component, ElementRef, HostBinding, ViewChild, Optional, NgModule } from '@angular/core';
|
|
3
|
+
import * as i4 from '@clr/angular/popover/common';
|
|
4
|
+
import { ClrPopoverHostDirective, ClrPopoverPosition, ClrPopoverType, SIGNPOST_POSITIONS, POPOVER_HOST_ORIGIN, ClrPopoverContent, ClrIfOpen, ClrPopoverModuleNext } from '@clr/angular/popover/common';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { isPlatformBrowser, CommonModule } from '@angular/common';
|
|
7
|
+
import * as i1 from '@clr/angular/utils';
|
|
8
|
+
import { uniqueIdFactory, ClrFocusOnViewInitModule } from '@clr/angular/utils';
|
|
9
|
+
import * as i3 from '@clr/angular/icon';
|
|
10
|
+
import { ClarityIcons, windowCloseIcon, infoCircleIcon, ClrIcon } from '@clr/angular/icon';
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
14
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
15
|
+
* This software is released under MIT license.
|
|
16
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
17
|
+
*/
|
|
18
|
+
class SignpostFocusManager {
|
|
19
|
+
set triggerEl(value) {
|
|
20
|
+
this._triggerEl = value;
|
|
21
|
+
}
|
|
22
|
+
focusTrigger() {
|
|
23
|
+
if (this._triggerEl) {
|
|
24
|
+
this._triggerEl.focus();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SignpostFocusManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SignpostFocusManager }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SignpostFocusManager, decorators: [{
|
|
31
|
+
type: Injectable
|
|
32
|
+
}] });
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
36
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
37
|
+
* This software is released under MIT license.
|
|
38
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
39
|
+
*/
|
|
40
|
+
class SignpostIdService {
|
|
41
|
+
constructor() {
|
|
42
|
+
this._id = new Subject();
|
|
43
|
+
}
|
|
44
|
+
get id() {
|
|
45
|
+
return this._id.asObservable();
|
|
46
|
+
}
|
|
47
|
+
setId(id) {
|
|
48
|
+
this._id.next(id);
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SignpostIdService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SignpostIdService }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SignpostIdService, decorators: [{
|
|
54
|
+
type: Injectable
|
|
55
|
+
}] });
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
59
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
60
|
+
* This software is released under MIT license.
|
|
61
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
62
|
+
*/
|
|
63
|
+
/*********
|
|
64
|
+
*
|
|
65
|
+
* @description
|
|
66
|
+
* A Directive added to the ClrSignpost Trigger button that will call the ClrSignpost.toggle() function to hide/show the
|
|
67
|
+
* ClrSignpostContent.
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
70
|
+
class ClrSignpostTrigger {
|
|
71
|
+
constructor(popoverService, el, signpostIdService, signpostFocusManager, document, platformId) {
|
|
72
|
+
this.popoverService = popoverService;
|
|
73
|
+
this.el = el;
|
|
74
|
+
this.signpostIdService = signpostIdService;
|
|
75
|
+
this.signpostFocusManager = signpostFocusManager;
|
|
76
|
+
this.platformId = platformId;
|
|
77
|
+
this.ariaExpanded = false;
|
|
78
|
+
this.subscriptions = [];
|
|
79
|
+
this.document = document;
|
|
80
|
+
}
|
|
81
|
+
ngOnInit() {
|
|
82
|
+
this.popoverService.origin = this.el;
|
|
83
|
+
this.signpostFocusManager.triggerEl = this.el.nativeElement;
|
|
84
|
+
this.subscriptions.push(this.popoverService.openChange.subscribe((isOpen) => {
|
|
85
|
+
this.ariaExpanded = isOpen;
|
|
86
|
+
const prevIsOpen = this.isOpen;
|
|
87
|
+
this.isOpen = isOpen;
|
|
88
|
+
// openChange fires false on initialization because signpost starts as closed by default
|
|
89
|
+
// but we shouldn't focus on that initial false value
|
|
90
|
+
// we should focus back only if it's closed after being opened
|
|
91
|
+
if (!this.isOpen && prevIsOpen) {
|
|
92
|
+
this.focusOnClose();
|
|
93
|
+
}
|
|
94
|
+
}), this.signpostIdService.id.subscribe(idChange => (this.ariaControl = idChange)));
|
|
95
|
+
}
|
|
96
|
+
ngOnDestroy() {
|
|
97
|
+
this.subscriptions.forEach((sub) => sub.unsubscribe());
|
|
98
|
+
}
|
|
99
|
+
/**********
|
|
100
|
+
*
|
|
101
|
+
* @description
|
|
102
|
+
* click handler for the ClrSignpost trigger button used to hide/show ClrSignpostContent.
|
|
103
|
+
*/
|
|
104
|
+
onSignpostTriggerClick(event) {
|
|
105
|
+
this.popoverService.toggleWithEvent(event);
|
|
106
|
+
}
|
|
107
|
+
focusOnClose() {
|
|
108
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// we have to set the focus back on the trigger only if the focus is reset back to the body element
|
|
112
|
+
// if the focus is on another element, we are not allowed to move that focus back to this trigger again.
|
|
113
|
+
if (!this.isOpen && this.document.activeElement === this.document.body) {
|
|
114
|
+
this.signpostFocusManager.focusTrigger();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostTrigger, deps: [{ token: i4.ClrPopoverService }, { token: i0.ElementRef }, { token: SignpostIdService }, { token: SignpostFocusManager }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
118
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: ClrSignpostTrigger, isStandalone: false, selector: "[clrSignpostTrigger]", host: { listeners: { "click": "onSignpostTriggerClick($event)" }, properties: { "attr.aria-expanded": "ariaExpanded", "attr.aria-controls": "ariaControl", "class.active": "isOpen" }, classAttribute: "signpost-trigger" }, ngImport: i0 }); }
|
|
119
|
+
}
|
|
120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostTrigger, decorators: [{
|
|
121
|
+
type: Directive,
|
|
122
|
+
args: [{
|
|
123
|
+
selector: '[clrSignpostTrigger]',
|
|
124
|
+
host: {
|
|
125
|
+
class: 'signpost-trigger',
|
|
126
|
+
'[attr.aria-expanded]': 'ariaExpanded',
|
|
127
|
+
'[attr.aria-controls]': 'ariaControl',
|
|
128
|
+
'[class.active]': 'isOpen',
|
|
129
|
+
},
|
|
130
|
+
standalone: false,
|
|
131
|
+
}]
|
|
132
|
+
}], ctorParameters: () => [{ type: i4.ClrPopoverService }, { type: i0.ElementRef }, { type: SignpostIdService }, { type: SignpostFocusManager }, { type: undefined, decorators: [{
|
|
133
|
+
type: Inject,
|
|
134
|
+
args: [DOCUMENT]
|
|
135
|
+
}] }, { type: undefined, decorators: [{
|
|
136
|
+
type: Inject,
|
|
137
|
+
args: [PLATFORM_ID]
|
|
138
|
+
}] }], propDecorators: { onSignpostTriggerClick: [{
|
|
139
|
+
type: HostListener,
|
|
140
|
+
args: ['click', ['$event']]
|
|
141
|
+
}] } });
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
145
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
146
|
+
* This software is released under MIT license.
|
|
147
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
148
|
+
*/
|
|
149
|
+
/*********
|
|
150
|
+
*
|
|
151
|
+
* @class ClrSignpost
|
|
152
|
+
*
|
|
153
|
+
* @description
|
|
154
|
+
* Class used to configure and control the state of a ClrSignpost and its associated ClrSignpostContent.
|
|
155
|
+
* It supports the clrPosition with a 'right-middle' default.
|
|
156
|
+
*
|
|
157
|
+
*/
|
|
158
|
+
class ClrSignpost {
|
|
159
|
+
constructor(commonStrings, popoverService) {
|
|
160
|
+
this.commonStrings = commonStrings;
|
|
161
|
+
this.popoverService = popoverService;
|
|
162
|
+
/**********
|
|
163
|
+
* @property useCustomTrigger
|
|
164
|
+
*
|
|
165
|
+
* @description
|
|
166
|
+
* Flag used to determine if we need to use the default trigger or a user supplied trigger element.
|
|
167
|
+
*
|
|
168
|
+
*/
|
|
169
|
+
this.useCustomTrigger = false;
|
|
170
|
+
/**
|
|
171
|
+
* Hides the default trigger button. Use when the signpost is opened
|
|
172
|
+
* programmatically via `openAtPoint()` and no trigger icon is needed.
|
|
173
|
+
*/
|
|
174
|
+
this.hideTrigger = false;
|
|
175
|
+
}
|
|
176
|
+
/**********
|
|
177
|
+
* @property signPostTrigger
|
|
178
|
+
*
|
|
179
|
+
* @description
|
|
180
|
+
* Uses ContentChild to check for a user supplied element with the ClrSignpostTrigger on it.
|
|
181
|
+
*
|
|
182
|
+
*/
|
|
183
|
+
set customTrigger(trigger) {
|
|
184
|
+
this.useCustomTrigger = !!trigger;
|
|
185
|
+
}
|
|
186
|
+
get showDefaultTrigger() {
|
|
187
|
+
return !this.useCustomTrigger && !this.hideTrigger;
|
|
188
|
+
}
|
|
189
|
+
openAtPoint(point, targetElement) {
|
|
190
|
+
this.popoverService.openAtPoint(point, targetElement);
|
|
191
|
+
}
|
|
192
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpost, deps: [{ token: i1.ClrCommonStringsService }, { token: i4.ClrPopoverService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrSignpost, isStandalone: false, selector: "clr-signpost", inputs: { signpostTriggerAriaLabel: ["clrSignpostTriggerAriaLabel", "signpostTriggerAriaLabel"], hideTrigger: ["clrSignpostHideTrigger", "hideTrigger"] }, host: { properties: { "class.signpost": "true" } }, providers: [SignpostFocusManager, SignpostIdService], queries: [{ propertyName: "customTrigger", first: true, predicate: ClrSignpostTrigger, descendants: true }], hostDirectives: [{ directive: i4.ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
194
|
+
@if (showDefaultTrigger) {
|
|
195
|
+
<button
|
|
196
|
+
type="button"
|
|
197
|
+
class="signpost-action btn btn-sm btn-icon btn-link"
|
|
198
|
+
clrSignpostTrigger
|
|
199
|
+
[attr.aria-label]="signpostTriggerAriaLabel || commonStrings.keys.signpostToggle"
|
|
200
|
+
>
|
|
201
|
+
<cds-icon shape="info-circle" [attr.title]="commonStrings.keys.info"></cds-icon>
|
|
202
|
+
</button>
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
<ng-content></ng-content>
|
|
206
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i3.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }] }); }
|
|
207
|
+
}
|
|
208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpost, decorators: [{
|
|
209
|
+
type: Component,
|
|
210
|
+
args: [{
|
|
211
|
+
selector: 'clr-signpost',
|
|
212
|
+
template: `
|
|
213
|
+
@if (showDefaultTrigger) {
|
|
214
|
+
<button
|
|
215
|
+
type="button"
|
|
216
|
+
class="signpost-action btn btn-sm btn-icon btn-link"
|
|
217
|
+
clrSignpostTrigger
|
|
218
|
+
[attr.aria-label]="signpostTriggerAriaLabel || commonStrings.keys.signpostToggle"
|
|
219
|
+
>
|
|
220
|
+
<cds-icon shape="info-circle" [attr.title]="commonStrings.keys.info"></cds-icon>
|
|
221
|
+
</button>
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
<ng-content></ng-content>
|
|
225
|
+
`,
|
|
226
|
+
host: { '[class.signpost]': 'true' },
|
|
227
|
+
providers: [SignpostFocusManager, SignpostIdService],
|
|
228
|
+
hostDirectives: [ClrPopoverHostDirective],
|
|
229
|
+
standalone: false,
|
|
230
|
+
}]
|
|
231
|
+
}], ctorParameters: () => [{ type: i1.ClrCommonStringsService }, { type: i4.ClrPopoverService }], propDecorators: { signpostTriggerAriaLabel: [{
|
|
232
|
+
type: Input,
|
|
233
|
+
args: ['clrSignpostTriggerAriaLabel']
|
|
234
|
+
}], hideTrigger: [{
|
|
235
|
+
type: Input,
|
|
236
|
+
args: ['clrSignpostHideTrigger']
|
|
237
|
+
}], customTrigger: [{
|
|
238
|
+
type: ContentChild,
|
|
239
|
+
args: [ClrSignpostTrigger]
|
|
240
|
+
}] } });
|
|
241
|
+
|
|
242
|
+
/*
|
|
243
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
244
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
245
|
+
* This software is released under MIT license.
|
|
246
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
247
|
+
*/
|
|
248
|
+
class ClrSignpostContent {
|
|
249
|
+
constructor(parentHost, element, commonStrings, signpostIdService, signpostFocusManager, platformId, document, popoverService, popoverContent) {
|
|
250
|
+
this.element = element;
|
|
251
|
+
this.commonStrings = commonStrings;
|
|
252
|
+
this.signpostFocusManager = signpostFocusManager;
|
|
253
|
+
this.platformId = platformId;
|
|
254
|
+
this.document = document;
|
|
255
|
+
this.popoverService = popoverService;
|
|
256
|
+
this.popoverContent = popoverContent;
|
|
257
|
+
this.signpostContentId = uniqueIdFactory();
|
|
258
|
+
this._position = ClrPopoverPosition.RIGHT_MIDDLE;
|
|
259
|
+
if (!parentHost) {
|
|
260
|
+
throw new Error('clr-signpost-content should only be used inside of a clr-signpost');
|
|
261
|
+
}
|
|
262
|
+
// Defaults
|
|
263
|
+
signpostIdService.setId(this.signpostContentId);
|
|
264
|
+
popoverService.panelClass.push('clr-signpost-container');
|
|
265
|
+
popoverContent.contentType = ClrPopoverType.SIGNPOST;
|
|
266
|
+
popoverContent.contentAt = this._position;
|
|
267
|
+
}
|
|
268
|
+
/*********
|
|
269
|
+
*
|
|
270
|
+
* @description
|
|
271
|
+
* A setter for the position of the ClrSignpostContent popover. This is a combination of the following:
|
|
272
|
+
* - originPoint - where on the trigger to position the content
|
|
273
|
+
* - popoverPoint - where on the content container to align with the origin
|
|
274
|
+
* - offsetY - where on the Y axis to align the ClrSignpostContent so it meets specs
|
|
275
|
+
* - offsetX - where on the X axis to align the ClrSignpostContent so it meets specs
|
|
276
|
+
* There are 12 possible positions to place a ClrSignpostContent container:
|
|
277
|
+
* - top-left
|
|
278
|
+
* - top-middle
|
|
279
|
+
* - top-right
|
|
280
|
+
* - right-top
|
|
281
|
+
* - right-middle
|
|
282
|
+
* - right-bottom
|
|
283
|
+
* - bottom-right
|
|
284
|
+
* - bottom-middle
|
|
285
|
+
* - bottom-left
|
|
286
|
+
* - left-bottom
|
|
287
|
+
* - left-middle
|
|
288
|
+
* - left-top
|
|
289
|
+
*
|
|
290
|
+
* I think of it as follows for 'top-left' -> CONTAINER_SIDE-SIDE_POSITION. In this case CONTAINER_SIDE is 'top'
|
|
291
|
+
* meaning the top of the trigger icon (above the icon that hides/shows) the ClrSignpostContent. And, SIDE_POSITION
|
|
292
|
+
* is 'left' meaning two things: 1) the ClrSignpostContent container extends to the left and 2) the 'arrow/pointer'
|
|
293
|
+
* linking the SignpostContent to the trigger points down at the horizontal center of the trigger icon.
|
|
294
|
+
*
|
|
295
|
+
* @param newPosition
|
|
296
|
+
*/
|
|
297
|
+
get position() {
|
|
298
|
+
return this._position;
|
|
299
|
+
}
|
|
300
|
+
set position(position) {
|
|
301
|
+
const posIndex = SIGNPOST_POSITIONS.indexOf(position);
|
|
302
|
+
this._position = position && posIndex > -1 ? SIGNPOST_POSITIONS[posIndex] : ClrPopoverPosition.RIGHT_MIDDLE;
|
|
303
|
+
this.popoverContent.contentAt = this._position;
|
|
304
|
+
}
|
|
305
|
+
/*
|
|
306
|
+
* Fallback to hide when *clrIfOpen is not being used
|
|
307
|
+
*/
|
|
308
|
+
get isOffScreen() {
|
|
309
|
+
return !this.popoverService.open;
|
|
310
|
+
}
|
|
311
|
+
/**********
|
|
312
|
+
*
|
|
313
|
+
* @description
|
|
314
|
+
* Close function that uses the signpost instance to toggle the state of the content popover.
|
|
315
|
+
*
|
|
316
|
+
*/
|
|
317
|
+
close() {
|
|
318
|
+
this.popoverService.open = false;
|
|
319
|
+
}
|
|
320
|
+
ngAfterViewInit() {
|
|
321
|
+
this.popoverService.closeButtonRef = this.closeButton;
|
|
322
|
+
this.closeButton.nativeElement.focus();
|
|
323
|
+
}
|
|
324
|
+
onKeyDown(event) {
|
|
325
|
+
if (event.key === 'Tab') {
|
|
326
|
+
const focusableElements = this.getFocusableElements(this.element.nativeElement);
|
|
327
|
+
// take the first element when SHIFT+TAB or last when only TAB
|
|
328
|
+
const focusableElementIndex = event.shiftKey ? 0 : focusableElements.length - 1;
|
|
329
|
+
if (document.activeElement === focusableElements[focusableElementIndex]) {
|
|
330
|
+
event.preventDefault();
|
|
331
|
+
this.popoverService.open = false;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
ngOnDestroy() {
|
|
336
|
+
if (isPlatformBrowser(this.platformId) && this.element.nativeElement.contains(this.document.activeElement)) {
|
|
337
|
+
this.signpostFocusManager.focusTrigger();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
getFocusableElements(element) {
|
|
341
|
+
return Array.from(element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));
|
|
342
|
+
}
|
|
343
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostContent, deps: [{ token: POPOVER_HOST_ORIGIN, optional: true }, { token: i0.ElementRef }, { token: i1.ClrCommonStringsService }, { token: SignpostIdService }, { token: SignpostFocusManager }, { token: PLATFORM_ID }, { token: DOCUMENT }, { token: i4.ClrPopoverService }, { token: i4.ClrPopoverContent }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
344
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ClrSignpostContent, isStandalone: false, selector: "clr-signpost-content", inputs: { signpostCloseAriaLabel: ["clrSignpostCloseAriaLabel", "signpostCloseAriaLabel"], position: ["clrPosition", "position"] }, host: { attributes: { "role": "dialog" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.signpost-content": "true", "id": "signpostContentId", "class.is-off-screen": "this.isOffScreen" } }, viewQueries: [{ propertyName: "closeButton", first: true, predicate: ["closeButton"], descendants: true, read: ElementRef }], hostDirectives: [{ directive: i4.ClrPopoverContent }], ngImport: i0, template: `
|
|
345
|
+
<div class="signpost-wrap">
|
|
346
|
+
<div class="popover-pointer"></div>
|
|
347
|
+
<div class="signpost-content-header">
|
|
348
|
+
<ng-content select="clr-signpost-title"></ng-content>
|
|
349
|
+
<button
|
|
350
|
+
#closeButton
|
|
351
|
+
type="button"
|
|
352
|
+
[attr.aria-label]="signpostCloseAriaLabel || commonStrings.keys.signpostClose"
|
|
353
|
+
class="signpost-action close"
|
|
354
|
+
(click)="close()"
|
|
355
|
+
[attr.aria-controls]="signpostContentId"
|
|
356
|
+
>
|
|
357
|
+
<cds-icon shape="window-close" [attr.title]="commonStrings.keys.close"></cds-icon>
|
|
358
|
+
</button>
|
|
359
|
+
</div>
|
|
360
|
+
<div class="signpost-content-body" tabindex="0">
|
|
361
|
+
<ng-content></ng-content>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i3.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }] }); }
|
|
365
|
+
}
|
|
366
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostContent, decorators: [{
|
|
367
|
+
type: Component,
|
|
368
|
+
args: [{
|
|
369
|
+
selector: 'clr-signpost-content',
|
|
370
|
+
template: `
|
|
371
|
+
<div class="signpost-wrap">
|
|
372
|
+
<div class="popover-pointer"></div>
|
|
373
|
+
<div class="signpost-content-header">
|
|
374
|
+
<ng-content select="clr-signpost-title"></ng-content>
|
|
375
|
+
<button
|
|
376
|
+
#closeButton
|
|
377
|
+
type="button"
|
|
378
|
+
[attr.aria-label]="signpostCloseAriaLabel || commonStrings.keys.signpostClose"
|
|
379
|
+
class="signpost-action close"
|
|
380
|
+
(click)="close()"
|
|
381
|
+
[attr.aria-controls]="signpostContentId"
|
|
382
|
+
>
|
|
383
|
+
<cds-icon shape="window-close" [attr.title]="commonStrings.keys.close"></cds-icon>
|
|
384
|
+
</button>
|
|
385
|
+
</div>
|
|
386
|
+
<div class="signpost-content-body" tabindex="0">
|
|
387
|
+
<ng-content></ng-content>
|
|
388
|
+
</div>
|
|
389
|
+
</div>
|
|
390
|
+
`,
|
|
391
|
+
host: {
|
|
392
|
+
'[class.signpost-content]': 'true',
|
|
393
|
+
'[id]': 'signpostContentId',
|
|
394
|
+
role: 'dialog',
|
|
395
|
+
},
|
|
396
|
+
standalone: false,
|
|
397
|
+
hostDirectives: [ClrPopoverContent],
|
|
398
|
+
}]
|
|
399
|
+
}], ctorParameters: () => [{ type: i0.ElementRef, decorators: [{
|
|
400
|
+
type: Optional
|
|
401
|
+
}, {
|
|
402
|
+
type: Inject,
|
|
403
|
+
args: [POPOVER_HOST_ORIGIN]
|
|
404
|
+
}] }, { type: i0.ElementRef }, { type: i1.ClrCommonStringsService }, { type: SignpostIdService }, { type: SignpostFocusManager }, { type: undefined, decorators: [{
|
|
405
|
+
type: Inject,
|
|
406
|
+
args: [PLATFORM_ID]
|
|
407
|
+
}] }, { type: Document, decorators: [{
|
|
408
|
+
type: Inject,
|
|
409
|
+
args: [DOCUMENT]
|
|
410
|
+
}] }, { type: i4.ClrPopoverService }, { type: i4.ClrPopoverContent }], propDecorators: { signpostCloseAriaLabel: [{
|
|
411
|
+
type: Input,
|
|
412
|
+
args: ['clrSignpostCloseAriaLabel']
|
|
413
|
+
}], closeButton: [{
|
|
414
|
+
type: ViewChild,
|
|
415
|
+
args: ['closeButton', { read: ElementRef }]
|
|
416
|
+
}], position: [{
|
|
417
|
+
type: Input,
|
|
418
|
+
args: ['clrPosition']
|
|
419
|
+
}], isOffScreen: [{
|
|
420
|
+
type: HostBinding,
|
|
421
|
+
args: ['class.is-off-screen']
|
|
422
|
+
}], onKeyDown: [{
|
|
423
|
+
type: HostListener,
|
|
424
|
+
args: ['keydown', ['$event']]
|
|
425
|
+
}] } });
|
|
426
|
+
|
|
427
|
+
/*
|
|
428
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
429
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
430
|
+
* This software is released under MIT license.
|
|
431
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
432
|
+
*/
|
|
433
|
+
class ClrSignpostTitle {
|
|
434
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostTitle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
435
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ClrSignpostTitle, isStandalone: false, selector: "clr-signpost-title", host: { properties: { "class.signpost-title": "true" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); }
|
|
436
|
+
}
|
|
437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostTitle, decorators: [{
|
|
438
|
+
type: Component,
|
|
439
|
+
args: [{
|
|
440
|
+
selector: 'clr-signpost-title',
|
|
441
|
+
template: `<ng-content></ng-content>`,
|
|
442
|
+
host: { '[class.signpost-title]': 'true' },
|
|
443
|
+
standalone: false,
|
|
444
|
+
}]
|
|
445
|
+
}] });
|
|
446
|
+
|
|
447
|
+
/*
|
|
448
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
449
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
450
|
+
* This software is released under MIT license.
|
|
451
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
452
|
+
*/
|
|
453
|
+
const CLR_SIGNPOST_DIRECTIVES = [
|
|
454
|
+
ClrSignpost,
|
|
455
|
+
ClrSignpostContent,
|
|
456
|
+
ClrSignpostTrigger,
|
|
457
|
+
ClrSignpostTitle,
|
|
458
|
+
];
|
|
459
|
+
class ClrSignpostModule {
|
|
460
|
+
constructor() {
|
|
461
|
+
ClarityIcons.addIcons(windowCloseIcon, infoCircleIcon);
|
|
462
|
+
}
|
|
463
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
464
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostModule, declarations: [ClrSignpost,
|
|
465
|
+
ClrSignpostContent,
|
|
466
|
+
ClrSignpostTrigger,
|
|
467
|
+
ClrSignpostTitle], imports: [CommonModule, ClrIcon, ClrFocusOnViewInitModule, ClrPopoverModuleNext, ClrIfOpen], exports: [ClrSignpost,
|
|
468
|
+
ClrSignpostContent,
|
|
469
|
+
ClrSignpostTrigger,
|
|
470
|
+
ClrSignpostTitle, ClrIfOpen] }); }
|
|
471
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostModule, imports: [CommonModule, ClrIcon, ClrFocusOnViewInitModule, ClrPopoverModuleNext] }); }
|
|
472
|
+
}
|
|
473
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrSignpostModule, decorators: [{
|
|
474
|
+
type: NgModule,
|
|
475
|
+
args: [{
|
|
476
|
+
imports: [CommonModule, ClrIcon, ClrFocusOnViewInitModule, ClrPopoverModuleNext, ClrIfOpen],
|
|
477
|
+
declarations: [CLR_SIGNPOST_DIRECTIVES],
|
|
478
|
+
exports: [CLR_SIGNPOST_DIRECTIVES, ClrIfOpen],
|
|
479
|
+
}]
|
|
480
|
+
}], ctorParameters: () => [] });
|
|
481
|
+
|
|
482
|
+
/*
|
|
483
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
484
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
485
|
+
* This software is released under MIT license.
|
|
486
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
487
|
+
*/
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Generated bundle index. Do not edit.
|
|
491
|
+
*/
|
|
492
|
+
|
|
493
|
+
export { CLR_SIGNPOST_DIRECTIVES, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTitle, ClrSignpostTrigger };
|
|
494
|
+
//# sourceMappingURL=clr-angular-popover-signpost.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clr-angular-popover-signpost.mjs","sources":["../../../projects/angular/popover/signpost/providers/signpost-focus-manager.service.ts","../../../projects/angular/popover/signpost/providers/signpost-id.service.ts","../../../projects/angular/popover/signpost/signpost-trigger.ts","../../../projects/angular/popover/signpost/signpost.ts","../../../projects/angular/popover/signpost/signpost-content.ts","../../../projects/angular/popover/signpost/signpost-title.ts","../../../projects/angular/popover/signpost/signpost.module.ts","../../../projects/angular/popover/signpost/index.ts","../../../projects/angular/popover/signpost/clr-angular-popover-signpost.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class SignpostFocusManager {\n private _triggerEl: HTMLElement;\n\n set triggerEl(value: HTMLElement) {\n this._triggerEl = value;\n }\n\n focusTrigger() {\n if (this._triggerEl) {\n this._triggerEl.focus();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable()\nexport class SignpostIdService {\n private _id = new Subject<string>();\n\n get id(): Observable<string> {\n return this._id.asObservable();\n }\n\n setId(id: string) {\n this._id.next(id);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport { Directive, DOCUMENT, ElementRef, HostListener, Inject, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport { ClrPopoverService } from '@clr/angular/popover/common';\nimport { Subscription } from 'rxjs';\n\nimport { SignpostFocusManager } from './providers/signpost-focus-manager.service';\nimport { SignpostIdService } from './providers/signpost-id.service';\n\n@Directive({\n selector: '[clrSignpostTrigger]',\n host: {\n class: 'signpost-trigger',\n '[attr.aria-expanded]': 'ariaExpanded',\n '[attr.aria-controls]': 'ariaControl',\n '[class.active]': 'isOpen',\n },\n standalone: false,\n})\n\n/*********\n *\n * @description\n * A Directive added to the ClrSignpost Trigger button that will call the ClrSignpost.toggle() function to hide/show the\n * ClrSignpostContent.\n *\n */\nexport class ClrSignpostTrigger implements OnDestroy {\n ariaExpanded = false;\n ariaControl: string;\n isOpen: boolean;\n\n private document: Document;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private popoverService: ClrPopoverService,\n private el: ElementRef<HTMLElement>,\n private signpostIdService: SignpostIdService,\n private signpostFocusManager: SignpostFocusManager,\n @Inject(DOCUMENT) document: any,\n @Inject(PLATFORM_ID) private platformId: any\n ) {\n this.document = document;\n }\n\n ngOnInit() {\n this.popoverService.origin = this.el;\n this.signpostFocusManager.triggerEl = this.el.nativeElement;\n this.subscriptions.push(\n this.popoverService.openChange.subscribe((isOpen: boolean) => {\n this.ariaExpanded = isOpen;\n\n const prevIsOpen = this.isOpen;\n this.isOpen = isOpen;\n\n // openChange fires false on initialization because signpost starts as closed by default\n // but we shouldn't focus on that initial false value\n // we should focus back only if it's closed after being opened\n if (!this.isOpen && prevIsOpen) {\n this.focusOnClose();\n }\n }),\n this.signpostIdService.id.subscribe(idChange => (this.ariaControl = idChange))\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n }\n\n /**********\n *\n * @description\n * click handler for the ClrSignpost trigger button used to hide/show ClrSignpostContent.\n */\n @HostListener('click', ['$event'])\n onSignpostTriggerClick(event: Event): void {\n this.popoverService.toggleWithEvent(event);\n }\n\n private focusOnClose() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n // we have to set the focus back on the trigger only if the focus is reset back to the body element\n // if the focus is on another element, we are not allowed to move that focus back to this trigger again.\n if (!this.isOpen && this.document.activeElement === this.document.body) {\n this.signpostFocusManager.focusTrigger();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, Input } from '@angular/core';\nimport { ClrPopoverHostDirective, ClrPopoverPoint, ClrPopoverService } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { SignpostFocusManager } from './providers/signpost-focus-manager.service';\nimport { SignpostIdService } from './providers/signpost-id.service';\nimport { ClrSignpostTrigger } from './signpost-trigger';\n\n@Component({\n selector: 'clr-signpost',\n template: `\n @if (showDefaultTrigger) {\n <button\n type=\"button\"\n class=\"signpost-action btn btn-sm btn-icon btn-link\"\n clrSignpostTrigger\n [attr.aria-label]=\"signpostTriggerAriaLabel || commonStrings.keys.signpostToggle\"\n >\n <cds-icon shape=\"info-circle\" [attr.title]=\"commonStrings.keys.info\"></cds-icon>\n </button>\n }\n\n <ng-content></ng-content>\n `,\n host: { '[class.signpost]': 'true' },\n providers: [SignpostFocusManager, SignpostIdService],\n hostDirectives: [ClrPopoverHostDirective],\n standalone: false,\n})\n\n/*********\n *\n * @class ClrSignpost\n *\n * @description\n * Class used to configure and control the state of a ClrSignpost and its associated ClrSignpostContent.\n * It supports the clrPosition with a 'right-middle' default.\n *\n */\nexport class ClrSignpost {\n /**********\n * @property useCustomTrigger\n *\n * @description\n * Flag used to determine if we need to use the default trigger or a user supplied trigger element.\n *\n */\n useCustomTrigger = false;\n\n @Input('clrSignpostTriggerAriaLabel') signpostTriggerAriaLabel: string;\n /**\n * Hides the default trigger button. Use when the signpost is opened\n * programmatically via `openAtPoint()` and no trigger icon is needed.\n */\n @Input('clrSignpostHideTrigger') hideTrigger = false;\n\n constructor(\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService\n ) {}\n /**********\n * @property signPostTrigger\n *\n * @description\n * Uses ContentChild to check for a user supplied element with the ClrSignpostTrigger on it.\n *\n */\n @ContentChild(ClrSignpostTrigger)\n set customTrigger(trigger: ClrSignpostTrigger) {\n this.useCustomTrigger = !!trigger;\n }\n\n get showDefaultTrigger(): boolean {\n return !this.useCustomTrigger && !this.hideTrigger;\n }\n\n openAtPoint(point: ClrPopoverPoint, targetElement?: HTMLElement) {\n this.popoverService.openAtPoint(point, targetElement);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n PLATFORM_ID,\n ViewChild,\n} from '@angular/core';\nimport {\n ClrPopoverContent,\n ClrPopoverPosition,\n ClrPopoverService,\n ClrPopoverType,\n POPOVER_HOST_ORIGIN,\n SIGNPOST_POSITIONS,\n} from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\n\nimport { SignpostFocusManager } from './providers/signpost-focus-manager.service';\nimport { SignpostIdService } from './providers/signpost-id.service';\n\n@Component({\n selector: 'clr-signpost-content',\n template: `\n <div class=\"signpost-wrap\">\n <div class=\"popover-pointer\"></div>\n <div class=\"signpost-content-header\">\n <ng-content select=\"clr-signpost-title\"></ng-content>\n <button\n #closeButton\n type=\"button\"\n [attr.aria-label]=\"signpostCloseAriaLabel || commonStrings.keys.signpostClose\"\n class=\"signpost-action close\"\n (click)=\"close()\"\n [attr.aria-controls]=\"signpostContentId\"\n >\n <cds-icon shape=\"window-close\" [attr.title]=\"commonStrings.keys.close\"></cds-icon>\n </button>\n </div>\n <div class=\"signpost-content-body\" tabindex=\"0\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n host: {\n '[class.signpost-content]': 'true',\n '[id]': 'signpostContentId',\n role: 'dialog',\n },\n standalone: false,\n hostDirectives: [ClrPopoverContent],\n})\nexport class ClrSignpostContent implements OnDestroy, AfterViewInit {\n @Input('clrSignpostCloseAriaLabel') signpostCloseAriaLabel: string;\n @ViewChild('closeButton', { read: ElementRef }) closeButton: ElementRef<HTMLButtonElement>;\n\n signpostContentId = uniqueIdFactory();\n\n private _position = ClrPopoverPosition.RIGHT_MIDDLE;\n\n constructor(\n @Optional()\n @Inject(POPOVER_HOST_ORIGIN)\n parentHost: ElementRef<HTMLElement>,\n private element: ElementRef,\n public commonStrings: ClrCommonStringsService,\n signpostIdService: SignpostIdService,\n private signpostFocusManager: SignpostFocusManager,\n @Inject(PLATFORM_ID) private platformId: any,\n @Inject(DOCUMENT) private document: Document,\n private popoverService: ClrPopoverService,\n private popoverContent: ClrPopoverContent\n ) {\n if (!parentHost) {\n throw new Error('clr-signpost-content should only be used inside of a clr-signpost');\n }\n // Defaults\n signpostIdService.setId(this.signpostContentId);\n\n popoverService.panelClass.push('clr-signpost-container');\n popoverContent.contentType = ClrPopoverType.SIGNPOST;\n popoverContent.contentAt = this._position;\n }\n\n /*********\n *\n * @description\n * A setter for the position of the ClrSignpostContent popover. This is a combination of the following:\n * - originPoint - where on the trigger to position the content\n * - popoverPoint - where on the content container to align with the origin\n * - offsetY - where on the Y axis to align the ClrSignpostContent so it meets specs\n * - offsetX - where on the X axis to align the ClrSignpostContent so it meets specs\n * There are 12 possible positions to place a ClrSignpostContent container:\n * - top-left\n * - top-middle\n * - top-right\n * - right-top\n * - right-middle\n * - right-bottom\n * - bottom-right\n * - bottom-middle\n * - bottom-left\n * - left-bottom\n * - left-middle\n * - left-top\n *\n * I think of it as follows for 'top-left' -> CONTAINER_SIDE-SIDE_POSITION. In this case CONTAINER_SIDE is 'top'\n * meaning the top of the trigger icon (above the icon that hides/shows) the ClrSignpostContent. And, SIDE_POSITION\n * is 'left' meaning two things: 1) the ClrSignpostContent container extends to the left and 2) the 'arrow/pointer'\n * linking the SignpostContent to the trigger points down at the horizontal center of the trigger icon.\n *\n * @param newPosition\n */\n @Input('clrPosition')\n get position() {\n return this._position;\n }\n set position(position: string | ClrPopoverPosition) {\n const posIndex = SIGNPOST_POSITIONS.indexOf(position as ClrPopoverPosition);\n this._position = position && posIndex > -1 ? SIGNPOST_POSITIONS[posIndex] : ClrPopoverPosition.RIGHT_MIDDLE;\n\n this.popoverContent.contentAt = this._position;\n }\n\n /*\n * Fallback to hide when *clrIfOpen is not being used\n */\n @HostBinding('class.is-off-screen')\n get isOffScreen() {\n return !this.popoverService.open;\n }\n\n /**********\n *\n * @description\n * Close function that uses the signpost instance to toggle the state of the content popover.\n *\n */\n close() {\n this.popoverService.open = false;\n }\n\n ngAfterViewInit(): void {\n this.popoverService.closeButtonRef = this.closeButton;\n this.closeButton.nativeElement.focus();\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n const focusableElements = this.getFocusableElements(this.element.nativeElement);\n\n // take the first element when SHIFT+TAB or last when only TAB\n const focusableElementIndex = event.shiftKey ? 0 : focusableElements.length - 1;\n\n if (document.activeElement === focusableElements[focusableElementIndex]) {\n event.preventDefault();\n this.popoverService.open = false;\n }\n }\n }\n\n ngOnDestroy() {\n if (isPlatformBrowser(this.platformId) && this.element.nativeElement.contains(this.document.activeElement)) {\n this.signpostFocusManager.focusTrigger();\n }\n }\n\n private getFocusableElements(element: HTMLElement): HTMLElement[] {\n return Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')\n ) as HTMLElement[];\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'clr-signpost-title',\n template: `<ng-content></ng-content>`,\n host: { '[class.signpost-title]': 'true' },\n standalone: false,\n})\nexport class ClrSignpostTitle {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { ClarityIcons, ClrIcon, infoCircleIcon, windowCloseIcon } from '@clr/angular/icon';\nimport { ClrIfOpen, ClrPopoverModuleNext } from '@clr/angular/popover/common';\nimport { ClrFocusOnViewInitModule } from '@clr/angular/utils';\n\nimport { ClrSignpost } from './signpost';\nimport { ClrSignpostContent } from './signpost-content';\nimport { ClrSignpostTitle } from './signpost-title';\nimport { ClrSignpostTrigger } from './signpost-trigger';\n\nexport const CLR_SIGNPOST_DIRECTIVES: Type<any>[] = [\n ClrSignpost,\n ClrSignpostContent,\n ClrSignpostTrigger,\n ClrSignpostTitle,\n];\n\n@NgModule({\n imports: [CommonModule, ClrIcon, ClrFocusOnViewInitModule, ClrPopoverModuleNext, ClrIfOpen],\n declarations: [CLR_SIGNPOST_DIRECTIVES],\n exports: [CLR_SIGNPOST_DIRECTIVES, ClrIfOpen],\n})\nexport class ClrSignpostModule {\n constructor() {\n ClarityIcons.addIcons(windowCloseIcon, infoCircleIcon);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './signpost';\nexport * from './signpost-content';\nexport * from './signpost-title';\nexport * from './signpost-trigger';\nexport * from './signpost.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.SignpostIdService","i3.SignpostFocusManager","i2","i4.ClrSignpostTrigger","i5"],"mappings":"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"}
|