@bootkit/ng0 0.0.0-alpha.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/README.md +2 -0
- package/accordion/accordion-item.component.d.ts +13 -0
- package/accordion/accordion.component.d.ts +13 -0
- package/accordion/accordion.module.d.ts +8 -0
- package/accordion/index.d.ts +5 -0
- package/accordion/public-api.d.ts +3 -0
- package/collapse/collapse.component.d.ts +18 -0
- package/collapse/collapse.directive.d.ts +32 -0
- package/collapse/collapse.module.d.ts +8 -0
- package/collapse/index.d.ts +5 -0
- package/collapse/public-api.d.ts +3 -0
- package/common/index.d.ts +5 -0
- package/common/public-api.d.ts +2 -0
- package/common/types.d.ts +4 -0
- package/common/utils.d.ts +3 -0
- package/esm2022/accordion/accordion-item.component.mjs +34 -0
- package/esm2022/accordion/accordion.component.mjs +25 -0
- package/esm2022/accordion/accordion.module.mjs +25 -0
- package/esm2022/accordion/bootkit-ng0-accordion.mjs +5 -0
- package/esm2022/accordion/public-api.mjs +4 -0
- package/esm2022/bootkit-ng0.mjs +5 -0
- package/esm2022/collapse/bootkit-ng0-collapse.mjs +5 -0
- package/esm2022/collapse/collapse.component.mjs +46 -0
- package/esm2022/collapse/collapse.directive.mjs +94 -0
- package/esm2022/collapse/collapse.module.mjs +23 -0
- package/esm2022/collapse/public-api.mjs +4 -0
- package/esm2022/common/bootkit-ng0-common.mjs +5 -0
- package/esm2022/common/public-api.mjs +3 -0
- package/esm2022/common/types.mjs +3 -0
- package/esm2022/common/utils.mjs +16 -0
- package/esm2022/lib/index.mjs +3 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/modal/bootkit-ng0-modal.mjs +5 -0
- package/esm2022/modal/modal.component.mjs +44 -0
- package/esm2022/modal/modal.module.mjs +20 -0
- package/esm2022/modal/public-api.mjs +3 -0
- package/esm2022/modal/types.mjs +3 -0
- package/esm2022/nav/bootkit-ng0-nav.mjs +5 -0
- package/esm2022/nav/nav-item.directive.mjs +26 -0
- package/esm2022/nav/nav-link.directive.mjs +45 -0
- package/esm2022/nav/nav.directive.mjs +23 -0
- package/esm2022/nav/nav.module.mjs +35 -0
- package/esm2022/nav/public-api.mjs +7 -0
- package/esm2022/nav/tab-content.component.mjs +29 -0
- package/esm2022/nav/tab-pane.directive.mjs +20 -0
- package/esm2022/offcanvas/bootkit-ng0-offcanvas.mjs +5 -0
- package/esm2022/offcanvas/offcanvas.directive.mjs +118 -0
- package/esm2022/offcanvas/offcanvas.module.mjs +19 -0
- package/esm2022/offcanvas/public-api.mjs +3 -0
- package/esm2022/overlay/bootkit-ng0-overlay.mjs +5 -0
- package/esm2022/overlay/overlay.directive.mjs +111 -0
- package/esm2022/overlay/overlay.module.mjs +22 -0
- package/esm2022/overlay/private/utils.mjs +58 -0
- package/esm2022/overlay/public-api.mjs +3 -0
- package/esm2022/popover/bootkit-ng0-popover.mjs +5 -0
- package/esm2022/popover/popover-wrapper/popover-wrapper.component.mjs +29 -0
- package/esm2022/popover/popover.directive.mjs +140 -0
- package/esm2022/popover/public-api.mjs +2 -0
- package/esm2022/popover/types.mjs +2 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/toast/bootkit-ng0-toast.mjs +5 -0
- package/esm2022/toast/public-api.mjs +4 -0
- package/esm2022/toast/toast-ref.mjs +27 -0
- package/esm2022/toast/toast.component.mjs +68 -0
- package/esm2022/toast/toast.service.mjs +93 -0
- package/esm2022/toast/types.mjs +2 -0
- package/esm2022/tooltip/bootkit-ng0-tooltip.mjs +5 -0
- package/esm2022/tooltip/public-api.mjs +3 -0
- package/esm2022/tooltip/tooltip-wrapper/tooltip-wrapper.component.mjs +44 -0
- package/esm2022/tooltip/tooltip.directive.mjs +93 -0
- package/esm2022/tooltip/types.mjs +2 -0
- package/fesm2022/bootkit-ng0-accordion.mjs +83 -0
- package/fesm2022/bootkit-ng0-accordion.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-collapse.mjs +163 -0
- package/fesm2022/bootkit-ng0-collapse.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-common.mjs +26 -0
- package/fesm2022/bootkit-ng0-common.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-modal.mjs +68 -0
- package/fesm2022/bootkit-ng0-modal.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-nav.mjs +166 -0
- package/fesm2022/bootkit-ng0-nav.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-offcanvas.mjs +141 -0
- package/fesm2022/bootkit-ng0-offcanvas.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-overlay.mjs +194 -0
- package/fesm2022/bootkit-ng0-overlay.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-popover.mjs +173 -0
- package/fesm2022/bootkit-ng0-popover.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-toast.mjs +191 -0
- package/fesm2022/bootkit-ng0-toast.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-tooltip.mjs +141 -0
- package/fesm2022/bootkit-ng0-tooltip.mjs.map +1 -0
- package/fesm2022/bootkit-ng0.mjs +12 -0
- package/fesm2022/bootkit-ng0.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/index.d.ts +2 -0
- package/lib/types.d.ts +1 -0
- package/modal/index.d.ts +5 -0
- package/modal/modal.component.d.ts +18 -0
- package/modal/modal.module.d.ts +7 -0
- package/modal/public-api.d.ts +2 -0
- package/modal/types.d.ts +2 -0
- package/nav/index.d.ts +5 -0
- package/nav/nav-item.directive.d.ts +13 -0
- package/nav/nav-link.directive.d.ts +16 -0
- package/nav/nav.directive.d.ts +11 -0
- package/nav/nav.module.d.ts +11 -0
- package/nav/public-api.d.ts +6 -0
- package/nav/tab-content.component.d.ts +15 -0
- package/nav/tab-pane.directive.d.ts +9 -0
- package/offcanvas/index.d.ts +5 -0
- package/offcanvas/offcanvas.directive.d.ts +24 -0
- package/offcanvas/offcanvas.module.d.ts +7 -0
- package/offcanvas/public-api.d.ts +2 -0
- package/overlay/index.d.ts +5 -0
- package/overlay/overlay.directive.d.ts +50 -0
- package/overlay/overlay.module.d.ts +10 -0
- package/overlay/private/utils.d.ts +10 -0
- package/overlay/public-api.d.ts +2 -0
- package/package.json +101 -0
- package/popover/index.d.ts +5 -0
- package/popover/popover-wrapper/popover-wrapper.component.d.ts +15 -0
- package/popover/popover.directive.d.ts +30 -0
- package/popover/public-api.d.ts +1 -0
- package/popover/types.d.ts +4 -0
- package/public-api.d.ts +1 -0
- package/toast/index.d.ts +5 -0
- package/toast/public-api.d.ts +3 -0
- package/toast/toast-ref.d.ts +12 -0
- package/toast/toast.component.d.ts +19 -0
- package/toast/toast.service.d.ts +43 -0
- package/toast/types.d.ts +44 -0
- package/tooltip/index.d.ts +5 -0
- package/tooltip/public-api.d.ts +2 -0
- package/tooltip/tooltip-wrapper/tooltip-wrapper.component.d.ts +19 -0
- package/tooltip/tooltip.directive.d.ts +24 -0
- package/tooltip/types.d.ts +3 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { TemplateRef, Component, ChangeDetectionStrategy, input, Directive, HostListener } from '@angular/core';
|
|
3
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
+
import * as i1 from '@angular/common';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import * as i1$1 from '@angular/cdk/overlay';
|
|
7
|
+
|
|
8
|
+
class PopoverWrapperComponent {
|
|
9
|
+
_elementRef;
|
|
10
|
+
_renderer;
|
|
11
|
+
placement;
|
|
12
|
+
header;
|
|
13
|
+
content;
|
|
14
|
+
_hasTemplate;
|
|
15
|
+
constructor(_elementRef, _renderer) {
|
|
16
|
+
this._elementRef = _elementRef;
|
|
17
|
+
this._renderer = _renderer;
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this._hasTemplate = this.content instanceof TemplateRef;
|
|
21
|
+
const e = this._elementRef.nativeElement;
|
|
22
|
+
this._renderer.setAttribute(e, 'role', 'tooltip');
|
|
23
|
+
['popover', 'fade', 'show', 'bs-popover-' + this.placement].forEach(c => this._renderer.addClass(e, c));
|
|
24
|
+
}
|
|
25
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PopoverWrapperComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: PopoverWrapperComponent, isStandalone: true, selector: "jss-popover-wrapper", exportAs: ["jssPopoverWrapper"], ngImport: i0, template: "<div class=\"popover-arrow\"></div>\r\n<h3 class=\"popover-header\" *ngIf=\"header\">{{header}}</h3>\r\n<div class=\"popover-body\">\r\n @if(_hasTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(content)\"></ng-container>\r\n }@else{\r\n {{content}}\r\n }\r\n</div>", styles: [":host{position:relative;margin:var(--bs-popover-arrow-height)}:host .popover-arrow{position:absolute}:host.bs-popover-top .popover-arrow{bottom:calc(-1 * var(--bs-popover-arrow-height));left:calc(50% - var(--bs-popover-arrow-width) / 2)}:host.bs-popover-bottom .popover-arrow{top:calc(-1 * var(--bs-popover-arrow-height));left:calc(50% - var(--bs-popover-arrow-width) / 2)}:host.bs-popover-start .popover-arrow{right:calc(-1 * var(--bs-popover-arrow-height));top:calc(50% - var(--bs-popover-arrow-width) / 2)}:host.bs-popover-end .popover-arrow{left:calc(-1 * var(--bs-popover-arrow-height));top:calc(50% - var(--bs-popover-arrow-width) / 2)}[dir=rtl] :host.bs-popover-start .popover-arrow{right:unset!important;left:calc(-1 * var(--bs-popover-arrow-height));transform:rotate(180deg)}[dir=rtl] :host.bs-popover-end .popover-arrow{left:unset!important;right:calc(-1 * var(--bs-popover-arrow-height));transform:rotate(180deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PopoverWrapperComponent, decorators: [{
|
|
29
|
+
type: Component,
|
|
30
|
+
args: [{ selector: 'jss-popover-wrapper', exportAs: 'jssPopoverWrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div class=\"popover-arrow\"></div>\r\n<h3 class=\"popover-header\" *ngIf=\"header\">{{header}}</h3>\r\n<div class=\"popover-body\">\r\n @if(_hasTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(content)\"></ng-container>\r\n }@else{\r\n {{content}}\r\n }\r\n</div>", styles: [":host{position:relative;margin:var(--bs-popover-arrow-height)}:host .popover-arrow{position:absolute}:host.bs-popover-top .popover-arrow{bottom:calc(-1 * var(--bs-popover-arrow-height));left:calc(50% - var(--bs-popover-arrow-width) / 2)}:host.bs-popover-bottom .popover-arrow{top:calc(-1 * var(--bs-popover-arrow-height));left:calc(50% - var(--bs-popover-arrow-width) / 2)}:host.bs-popover-start .popover-arrow{right:calc(-1 * var(--bs-popover-arrow-height));top:calc(50% - var(--bs-popover-arrow-width) / 2)}:host.bs-popover-end .popover-arrow{left:calc(-1 * var(--bs-popover-arrow-height));top:calc(50% - var(--bs-popover-arrow-width) / 2)}[dir=rtl] :host.bs-popover-start .popover-arrow{right:unset!important;left:calc(-1 * var(--bs-popover-arrow-height));transform:rotate(180deg)}[dir=rtl] :host.bs-popover-end .popover-arrow{left:unset!important;right:calc(-1 * var(--bs-popover-arrow-height));transform:rotate(180deg)}\n"] }]
|
|
31
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }] });
|
|
32
|
+
|
|
33
|
+
class PopoverDirective {
|
|
34
|
+
_overlayService;
|
|
35
|
+
_elementRef;
|
|
36
|
+
_viewRef;
|
|
37
|
+
header = input();
|
|
38
|
+
content = input(undefined, { alias: 'ng0Popover' });
|
|
39
|
+
placement = input('bottom');
|
|
40
|
+
triggerBy = input('click');
|
|
41
|
+
_portal;
|
|
42
|
+
_overlayRef;
|
|
43
|
+
constructor(_overlayService, _elementRef, _viewRef) {
|
|
44
|
+
this._overlayService = _overlayService;
|
|
45
|
+
this._elementRef = _elementRef;
|
|
46
|
+
this._viewRef = _viewRef;
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
this._portal = new ComponentPortal(PopoverWrapperComponent, this._viewRef);
|
|
50
|
+
}
|
|
51
|
+
_createOverlay() {
|
|
52
|
+
let wrapperInstance;
|
|
53
|
+
const scrollStrategy = this._overlayService.scrollStrategies.reposition();
|
|
54
|
+
const positionStrategy = this._overlayService.position()
|
|
55
|
+
.flexibleConnectedTo(this._elementRef)
|
|
56
|
+
.withPositions(this._getPositions());
|
|
57
|
+
positionStrategy.positionChanges.subscribe(p => {
|
|
58
|
+
// wrapperInstance.placement = (p.connectionPair as any).key;
|
|
59
|
+
});
|
|
60
|
+
this._overlayRef = this._overlayService.create({ scrollStrategy, positionStrategy });
|
|
61
|
+
wrapperInstance = this._overlayRef.attach(this._portal).instance;
|
|
62
|
+
wrapperInstance.header = this.header();
|
|
63
|
+
wrapperInstance.content = this.content();
|
|
64
|
+
wrapperInstance.placement = this.placement();
|
|
65
|
+
}
|
|
66
|
+
_disposeOverlay() {
|
|
67
|
+
if (this._overlayRef) {
|
|
68
|
+
this._overlayRef.dispose();
|
|
69
|
+
this._overlayRef = undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_toggleOverlay() {
|
|
73
|
+
if (this._overlayRef) {
|
|
74
|
+
this._disposeOverlay();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this._createOverlay();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
_getPositions() {
|
|
81
|
+
const c = 'center', t = 'top', b = 'bottom', s = 'start', e = 'end';
|
|
82
|
+
const top = { key: t, originX: c, originY: t, overlayX: c, overlayY: b, };
|
|
83
|
+
const bottom = { key: b, originX: c, originY: b, overlayX: c, overlayY: t, };
|
|
84
|
+
const start = { key: s, originX: s, originY: c, overlayX: e, overlayY: c, };
|
|
85
|
+
const end = { key: e, originX: e, originY: c, overlayX: s, overlayY: c, };
|
|
86
|
+
let positions;
|
|
87
|
+
switch (this.placement()) {
|
|
88
|
+
case 'bottom':
|
|
89
|
+
positions = [bottom, top];
|
|
90
|
+
break;
|
|
91
|
+
case 'start':
|
|
92
|
+
positions = [start, start];
|
|
93
|
+
break;
|
|
94
|
+
case 'end':
|
|
95
|
+
positions = [end, start];
|
|
96
|
+
break;
|
|
97
|
+
case 'top':
|
|
98
|
+
positions = [top, bottom];
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
positions = [bottom, top];
|
|
102
|
+
}
|
|
103
|
+
return positions;
|
|
104
|
+
}
|
|
105
|
+
_onClick() {
|
|
106
|
+
if (this.triggerBy() === 'click') {
|
|
107
|
+
this._toggleOverlay();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
_onDblclick() {
|
|
111
|
+
if (this.triggerBy() === 'dblclick') {
|
|
112
|
+
this._toggleOverlay();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
_onMouseEnter() {
|
|
116
|
+
if (this.triggerBy() === 'hover') {
|
|
117
|
+
this._toggleOverlay();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
_onMouseLeave() {
|
|
121
|
+
if (this.triggerBy() === 'hover') {
|
|
122
|
+
this._toggleOverlay();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
_onFocus() {
|
|
126
|
+
if (this.triggerBy() === 'focus') {
|
|
127
|
+
this._toggleOverlay();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
_onFocusout() {
|
|
131
|
+
if (this.triggerBy() === 'focus') {
|
|
132
|
+
this._toggleOverlay();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
ngOnDestroy() {
|
|
136
|
+
this._disposeOverlay();
|
|
137
|
+
}
|
|
138
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PopoverDirective, deps: [{ token: i1$1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
139
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: PopoverDirective, isStandalone: true, selector: "[ng0Popover]", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "ng0Popover", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, triggerBy: { classPropertyName: "triggerBy", publicName: "triggerBy", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "_onClick()", "dblclick": "_onDblclick()", "mouseenter": "_onMouseEnter()", "mouseleave": "_onMouseLeave()", "focus": "_onFocus()", "focusout": "_onFocusout()" } }, exportAs: ["ng0Popover"], ngImport: i0 });
|
|
140
|
+
}
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: PopoverDirective, decorators: [{
|
|
142
|
+
type: Directive,
|
|
143
|
+
args: [{
|
|
144
|
+
selector: '[ng0Popover]',
|
|
145
|
+
exportAs: 'ng0Popover',
|
|
146
|
+
standalone: true
|
|
147
|
+
}]
|
|
148
|
+
}], ctorParameters: () => [{ type: i1$1.Overlay }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }], propDecorators: { _onClick: [{
|
|
149
|
+
type: HostListener,
|
|
150
|
+
args: ['click']
|
|
151
|
+
}], _onDblclick: [{
|
|
152
|
+
type: HostListener,
|
|
153
|
+
args: ['dblclick']
|
|
154
|
+
}], _onMouseEnter: [{
|
|
155
|
+
type: HostListener,
|
|
156
|
+
args: ['mouseenter']
|
|
157
|
+
}], _onMouseLeave: [{
|
|
158
|
+
type: HostListener,
|
|
159
|
+
args: ['mouseleave']
|
|
160
|
+
}], _onFocus: [{
|
|
161
|
+
type: HostListener,
|
|
162
|
+
args: ['focus']
|
|
163
|
+
}], _onFocusout: [{
|
|
164
|
+
type: HostListener,
|
|
165
|
+
args: ['focusout']
|
|
166
|
+
}] } });
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Generated bundle index. Do not edit.
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
export { PopoverDirective };
|
|
173
|
+
//# sourceMappingURL=bootkit-ng0-popover.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-popover.mjs","sources":["../../../projects/ng0/popover/popover-wrapper/popover-wrapper.component.ts","../../../projects/ng0/popover/popover-wrapper/popover-wrapper.component.html","../../../projects/ng0/popover/popover.directive.ts","../../../projects/ng0/popover/bootkit-ng0-popover.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, OnInit, TemplateRef } from '@angular/core';\r\nimport { PopoverContent, PopoverPlacement } from '../types';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'jss-popover-wrapper',\r\n exportAs: 'jssPopoverWrapper',\r\n styleUrls: ['./popover-wrapper.component.scss'],\r\n templateUrl: './popover-wrapper.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\nexport class PopoverWrapperComponent implements OnInit {\r\n placement!: PopoverPlacement;\r\n header?: string;\r\n content: PopoverContent;\r\n protected _hasTemplate!: boolean;\r\n\r\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2,) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this._hasTemplate = this.content instanceof TemplateRef;\r\n const e = this._elementRef.nativeElement;\r\n this._renderer.setAttribute(e, 'role', 'tooltip');\r\n ['popover', 'fade', 'show', 'bs-popover-' + this.placement].forEach(c => this._renderer.addClass(e, c));\r\n }\r\n}\r\n","<div class=\"popover-arrow\"></div>\r\n<h3 class=\"popover-header\" *ngIf=\"header\">{{header}}</h3>\r\n<div class=\"popover-body\">\r\n @if(_hasTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(content)\"></ng-container>\r\n }@else{\r\n {{content}}\r\n }\r\n</div>","import {\r\n Directive, TemplateRef, ViewContainerRef, OnDestroy, ElementRef, HostListener, OnInit,\r\n input\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { PopoverWrapperComponent } from './popover-wrapper/popover-wrapper.component';\r\nimport { PopoverContent, PopoverPlacement, PopoverTrigger } from './types';\r\n\r\n@Directive({\r\n selector: '[ng0Popover]',\r\n exportAs: 'ng0Popover',\r\n standalone: true\r\n})\r\nexport class PopoverDirective implements OnInit, OnDestroy {\r\n public header = input<string>();\r\n public content = input<PopoverContent>(undefined, { alias: 'ng0Popover' });\r\n public placement = input<PopoverPlacement>('bottom');\r\n public triggerBy = input<PopoverTrigger>('click');\r\n\r\n private _portal!: ComponentPortal<PopoverWrapperComponent>;\r\n private _overlayRef?: OverlayRef;\r\n\r\n constructor(\r\n private _overlayService: Overlay,\r\n private _elementRef: ElementRef,\r\n private _viewRef: ViewContainerRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this._portal = new ComponentPortal(PopoverWrapperComponent, this._viewRef);\r\n }\r\n\r\n private _createOverlay(): void {\r\n let wrapperInstance: PopoverWrapperComponent;\r\n\r\n const scrollStrategy = this._overlayService.scrollStrategies.reposition();\r\n const positionStrategy = this._overlayService.position()\r\n .flexibleConnectedTo(this._elementRef)\r\n .withPositions(this._getPositions());\r\n\r\n positionStrategy.positionChanges.subscribe(p => {\r\n // wrapperInstance.placement = (p.connectionPair as any).key;\r\n });\r\n\r\n this._overlayRef = this._overlayService.create({ scrollStrategy, positionStrategy });\r\n\r\n wrapperInstance = this._overlayRef.attach(this._portal).instance;\r\n wrapperInstance.header = this.header();\r\n wrapperInstance.content = this.content();\r\n wrapperInstance.placement = this.placement();\r\n }\r\n\r\n private _disposeOverlay(): void {\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._overlayRef = undefined;\r\n }\r\n }\r\n\r\n private _toggleOverlay() {\r\n if (this._overlayRef) {\r\n this._disposeOverlay();\r\n } else {\r\n this._createOverlay();\r\n }\r\n }\r\n\r\n private _getPositions(): any[] {\r\n const c = 'center', t = 'top', b = 'bottom', s = 'start', e = 'end';\r\n const top = { key: t, originX: c, originY: t, overlayX: c, overlayY: b, };\r\n const bottom = { key: b, originX: c, originY: b, overlayX: c, overlayY: t, };\r\n const start = { key: s, originX: s, originY: c, overlayX: e, overlayY: c, };\r\n const end = { key: e, originX: e, originY: c, overlayX: s, overlayY: c, };\r\n\r\n let positions: Array<any>;\r\n\r\n switch (this.placement()) {\r\n case 'bottom':\r\n positions = [bottom, top];\r\n break;\r\n case 'start':\r\n positions = [start, start];\r\n break;\r\n case 'end':\r\n positions = [end, start];\r\n break;\r\n case 'top':\r\n positions = [top, bottom];\r\n break;\r\n default:\r\n positions = [bottom, top];\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n @HostListener('click') private _onClick(): void {\r\n if (this.triggerBy() === 'click') {\r\n this._toggleOverlay()\r\n }\r\n }\r\n\r\n @HostListener('dblclick') private _onDblclick(): void {\r\n if (this.triggerBy() === 'dblclick') {\r\n this._toggleOverlay()\r\n }\r\n }\r\n\r\n @HostListener('mouseenter') private _onMouseEnter(): void {\r\n if (this.triggerBy() === 'hover') {\r\n this._toggleOverlay()\r\n }\r\n }\r\n\r\n @HostListener('mouseleave') private _onMouseLeave(): void {\r\n if (this.triggerBy() === 'hover') {\r\n this._toggleOverlay()\r\n }\r\n }\r\n\r\n @HostListener('focus') private _onFocus(): void {\r\n if (this.triggerBy() === 'focus') {\r\n this._toggleOverlay()\r\n }\r\n }\r\n\r\n @HostListener('focusout') private _onFocusout(): void {\r\n if (this.triggerBy() === 'focus') {\r\n this._toggleOverlay()\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._disposeOverlay();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { Subject, timer } from 'rxjs';
|
|
2
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { TemplateRef, Component, ChangeDetectionStrategy, HostBinding, Injectable } from '@angular/core';
|
|
5
|
+
import { trigger, transition, style, animate, state } from '@angular/animations';
|
|
6
|
+
import * as i1 from '@angular/common';
|
|
7
|
+
import { CommonModule } from '@angular/common';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
+
import * as i1$1 from '@angular/cdk/overlay';
|
|
10
|
+
|
|
11
|
+
class ToastRef {
|
|
12
|
+
config;
|
|
13
|
+
overlayRef;
|
|
14
|
+
_isOpen = true;
|
|
15
|
+
_closedSubject = new Subject();
|
|
16
|
+
closed = this._closedSubject.asObservable();
|
|
17
|
+
constructor(config, overlayRef) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.overlayRef = overlayRef;
|
|
20
|
+
}
|
|
21
|
+
get isOpen() {
|
|
22
|
+
return this._isOpen;
|
|
23
|
+
}
|
|
24
|
+
close() {
|
|
25
|
+
if (this._isOpen) {
|
|
26
|
+
this._closedSubject.next(0);
|
|
27
|
+
this._isOpen = false;
|
|
28
|
+
// Wait to ':leave' animation is done and then dispose the overlay
|
|
29
|
+
timer(100).subscribe(x => {
|
|
30
|
+
this.overlayRef.detach();
|
|
31
|
+
this.overlayRef.dispose();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
class ToastComponent {
|
|
38
|
+
_changeDetectorRef;
|
|
39
|
+
_renderer;
|
|
40
|
+
_elementRef;
|
|
41
|
+
_destroyRef;
|
|
42
|
+
toastRef;
|
|
43
|
+
_config;
|
|
44
|
+
_show = true;
|
|
45
|
+
_hasBodyTemplate;
|
|
46
|
+
_hasHeaderTemplate;
|
|
47
|
+
constructor(_changeDetectorRef, _renderer, _elementRef, _destroyRef) {
|
|
48
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
49
|
+
this._renderer = _renderer;
|
|
50
|
+
this._elementRef = _elementRef;
|
|
51
|
+
this._destroyRef = _destroyRef;
|
|
52
|
+
}
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
this._config = this.toastRef.config;
|
|
55
|
+
this._hasHeaderTemplate = this._config.header instanceof TemplateRef;
|
|
56
|
+
this._hasBodyTemplate = this._config.body instanceof TemplateRef;
|
|
57
|
+
let style = this._config.style ?? 'success';
|
|
58
|
+
['toast', 'show', `text-bg-${style}`].forEach(x => this._renderer.addClass(this._elementRef.nativeElement, x));
|
|
59
|
+
this.toastRef.closed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(x => {
|
|
60
|
+
this._show = false;
|
|
61
|
+
this._changeDetectorRef.markForCheck();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
65
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: ToastComponent, isStandalone: true, selector: "ng0-toast", host: { properties: { "@host": "this._show" } }, exportAs: ["ng0Toast"], ngImport: i0, template: "<div class=\"toast-header\" *ngIf=\"this._config.header\">\r\n @if(_hasHeaderTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(_config.header)\"></ng-container>\r\n }@else {\r\n <span *ngIf=\"_config.icon\" class=\"me-2\" [ngClass]=\"_config.icon\"></span>\r\n <strong class=\"me-auto\">{{this._config.header}}</strong>\r\n <small *ngIf=\"_config.hint\">{{_config.hint}}</small>\r\n <button *ngIf=\"_config?.closeButton == undefined || _config?.closeButton\"\r\n type=\"button\"\r\n class=\"btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"toastRef.close()\">\r\n </button>\r\n }\r\n</div>\r\n\r\n<div class=\"toast-body\" *ngIf=\"this._config.body\">\r\n @if(_hasBodyTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(_config.body)\"></ng-container>\r\n }@else {\r\n {{this._config.body}}\r\n }\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
66
|
+
trigger('host', [
|
|
67
|
+
transition(':enter', [
|
|
68
|
+
style({ opacity: 0, transform: 'scale(.85)' }),
|
|
69
|
+
animate('.1s', style({ opacity: '1', transform: 'scale(1)' })),
|
|
70
|
+
]),
|
|
71
|
+
state('false', style({ opacity: 0, transform: 'scale(.85)' })),
|
|
72
|
+
transition('true => false', [
|
|
73
|
+
animate('.1s'),
|
|
74
|
+
]),
|
|
75
|
+
]),
|
|
76
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
77
|
+
}
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastComponent, decorators: [{
|
|
79
|
+
type: Component,
|
|
80
|
+
args: [{ selector: 'ng0-toast', exportAs: 'ng0Toast', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
81
|
+
CommonModule,
|
|
82
|
+
], animations: [
|
|
83
|
+
trigger('host', [
|
|
84
|
+
transition(':enter', [
|
|
85
|
+
style({ opacity: 0, transform: 'scale(.85)' }),
|
|
86
|
+
animate('.1s', style({ opacity: '1', transform: 'scale(1)' })),
|
|
87
|
+
]),
|
|
88
|
+
state('false', style({ opacity: 0, transform: 'scale(.85)' })),
|
|
89
|
+
transition('true => false', [
|
|
90
|
+
animate('.1s'),
|
|
91
|
+
]),
|
|
92
|
+
]),
|
|
93
|
+
], template: "<div class=\"toast-header\" *ngIf=\"this._config.header\">\r\n @if(_hasHeaderTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(_config.header)\"></ng-container>\r\n }@else {\r\n <span *ngIf=\"_config.icon\" class=\"me-2\" [ngClass]=\"_config.icon\"></span>\r\n <strong class=\"me-auto\">{{this._config.header}}</strong>\r\n <small *ngIf=\"_config.hint\">{{_config.hint}}</small>\r\n <button *ngIf=\"_config?.closeButton == undefined || _config?.closeButton\"\r\n type=\"button\"\r\n class=\"btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"toastRef.close()\">\r\n </button>\r\n }\r\n</div>\r\n\r\n<div class=\"toast-body\" *ngIf=\"this._config.body\">\r\n @if(_hasBodyTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(_config.body)\"></ng-container>\r\n }@else {\r\n {{this._config.body}}\r\n }\r\n</div>" }]
|
|
94
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.DestroyRef }], propDecorators: { _show: [{
|
|
95
|
+
type: HostBinding,
|
|
96
|
+
args: ['@host']
|
|
97
|
+
}] } });
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Service for displaying toast notifications in the application.
|
|
101
|
+
*
|
|
102
|
+
* The `ToastService` provides methods to open toast messages with customizable content,
|
|
103
|
+
* header, style, position, and duration. It manages the lifecycle of toast notifications,
|
|
104
|
+
* ensuring only one toast is visible at a time.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* // Open a simple toast
|
|
108
|
+
* toastService.open('Message body', 'Header', 'success');
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* // Open a toast with configuration
|
|
112
|
+
* toastService.open({
|
|
113
|
+
* body: 'Message body',
|
|
114
|
+
* header: 'Header',
|
|
115
|
+
* style: 'success',
|
|
116
|
+
* verticalPosition: 'bottom',
|
|
117
|
+
* horizontalPosition: 'end',
|
|
118
|
+
* duration: 5000
|
|
119
|
+
* });
|
|
120
|
+
*
|
|
121
|
+
* @remarks
|
|
122
|
+
* - Only one toast can be displayed at a time; opening a new toast closes the previous one.
|
|
123
|
+
* - The toast will automatically close after the specified duration (default: 3000ms).
|
|
124
|
+
*
|
|
125
|
+
* @publicApi
|
|
126
|
+
*/
|
|
127
|
+
class ToastService {
|
|
128
|
+
_overlayService;
|
|
129
|
+
_injector;
|
|
130
|
+
_toastRef;
|
|
131
|
+
constructor(_overlayService, _injector) {
|
|
132
|
+
this._overlayService = _overlayService;
|
|
133
|
+
this._injector = _injector;
|
|
134
|
+
}
|
|
135
|
+
open(p) {
|
|
136
|
+
if (this._toastRef) {
|
|
137
|
+
this._toastRef.close();
|
|
138
|
+
}
|
|
139
|
+
const config = typeof p === 'object' ? p :
|
|
140
|
+
{ body: arguments[0], header: arguments[1], style: arguments[2] };
|
|
141
|
+
var portal = new ComponentPortal(ToastComponent, null, this._injector);
|
|
142
|
+
// Position
|
|
143
|
+
var vertical = config.verticalPosition ?? 'top';
|
|
144
|
+
var horizontal = config.horizontalPosition ?? 'center';
|
|
145
|
+
var posStrategy = this._overlayService.position().global();
|
|
146
|
+
const padding = '1rem';
|
|
147
|
+
switch (vertical) {
|
|
148
|
+
case 'top':
|
|
149
|
+
posStrategy = posStrategy.top(padding);
|
|
150
|
+
break;
|
|
151
|
+
case 'bottom':
|
|
152
|
+
posStrategy = posStrategy.bottom(padding);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
switch (horizontal) {
|
|
156
|
+
case 'center':
|
|
157
|
+
posStrategy = posStrategy.centerHorizontally();
|
|
158
|
+
break;
|
|
159
|
+
case 'end':
|
|
160
|
+
posStrategy = posStrategy.end(padding);
|
|
161
|
+
break;
|
|
162
|
+
case 'start':
|
|
163
|
+
posStrategy = posStrategy.start(padding);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
var overlayRef = this._overlayService.create({
|
|
167
|
+
positionStrategy: posStrategy,
|
|
168
|
+
});
|
|
169
|
+
var componentRef = overlayRef.attach(portal);
|
|
170
|
+
componentRef.instance.toastRef = this._toastRef = new ToastRef(config, overlayRef);
|
|
171
|
+
setTimeout(() => {
|
|
172
|
+
this._toastRef.close();
|
|
173
|
+
}, config?.duration ?? 3000);
|
|
174
|
+
return this._toastRef;
|
|
175
|
+
}
|
|
176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastService, deps: [{ token: i1$1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
177
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastService, providedIn: 'root' });
|
|
178
|
+
}
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ToastService, decorators: [{
|
|
180
|
+
type: Injectable,
|
|
181
|
+
args: [{
|
|
182
|
+
providedIn: 'root'
|
|
183
|
+
}]
|
|
184
|
+
}], ctorParameters: () => [{ type: i1$1.Overlay }, { type: i0.Injector }] });
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Generated bundle index. Do not edit.
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
export { ToastRef, ToastService };
|
|
191
|
+
//# sourceMappingURL=bootkit-ng0-toast.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-toast.mjs","sources":["../../../projects/ng0/toast/toast-ref.ts","../../../projects/ng0/toast/toast.component.ts","../../../projects/ng0/toast/toast.component.html","../../../projects/ng0/toast/toast.service.ts","../../../projects/ng0/toast/bootkit-ng0-toast.ts"],"sourcesContent":["import { OverlayRef } from \"@angular/cdk/overlay\";\r\nimport { Subject, timer } from \"rxjs\";\r\nimport { ToastConfig } from \"./types\";\r\n\r\nexport class ToastRef {\r\n private _isOpen = true;\r\n private _closedSubject = new Subject<any>();\r\n public closed = this._closedSubject.asObservable();\r\n\r\n constructor(public readonly config: ToastConfig, private overlayRef: OverlayRef) {\r\n }\r\n\r\n public get isOpen() {\r\n return this._isOpen;\r\n }\r\n\r\n public close() {\r\n if (this._isOpen) {\r\n this._closedSubject.next(0);\r\n this._isOpen = false;\r\n\r\n // Wait to ':leave' animation is done and then dispose the overlay\r\n timer(100).subscribe(x => {\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n });\r\n }\r\n }\r\n}\r\n","import { trigger, style, transition, animate, state } from '@angular/animations';\r\nimport { Component, OnInit, ChangeDetectionStrategy, DestroyRef, ChangeDetectorRef, HostBinding, Renderer2, ElementRef, TemplateRef } from '@angular/core';\r\nimport { ToastConfig } from './types';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToastRef } from './toast-ref';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: 'ng0-toast',\r\n exportAs: 'ng0Toast',\r\n templateUrl: 'toast.component.html',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ],\r\n animations: [\r\n trigger('host', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'scale(.85)' }),\r\n animate('.1s', style({ opacity: '1', transform: 'scale(1)' })),\r\n ]),\r\n state('false', style({ opacity: 0, transform: 'scale(.85)' })),\r\n transition('true => false', [\r\n animate('.1s'),\r\n ]),\r\n ]),\r\n ],\r\n})\r\nexport class ToastComponent implements OnInit {\r\n public toastRef!: ToastRef;\r\n protected _config!: ToastConfig;\r\n @HostBinding('@host') protected _show = true;\r\n protected _hasBodyTemplate!: boolean;\r\n protected _hasHeaderTemplate!: boolean;\r\n\r\n constructor(\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef,\r\n private _destroyRef: DestroyRef) {\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n this._config = this.toastRef.config;\r\n this._hasHeaderTemplate = this._config.header instanceof TemplateRef;\r\n this._hasBodyTemplate = this._config.body instanceof TemplateRef;\r\n \r\n let style = this._config.style ?? 'success';\r\n ['toast', 'show', `text-bg-${style}`].forEach(x => this._renderer.addClass(this._elementRef.nativeElement, x));\r\n this.toastRef.closed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(x => {\r\n this._show = false;\r\n this._changeDetectorRef.markForCheck();\r\n })\r\n }\r\n}\r\n","<div class=\"toast-header\" *ngIf=\"this._config.header\">\r\n @if(_hasHeaderTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(_config.header)\"></ng-container>\r\n }@else {\r\n <span *ngIf=\"_config.icon\" class=\"me-2\" [ngClass]=\"_config.icon\"></span>\r\n <strong class=\"me-auto\">{{this._config.header}}</strong>\r\n <small *ngIf=\"_config.hint\">{{_config.hint}}</small>\r\n <button *ngIf=\"_config?.closeButton == undefined || _config?.closeButton\"\r\n type=\"button\"\r\n class=\"btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"toastRef.close()\">\r\n </button>\r\n }\r\n</div>\r\n\r\n<div class=\"toast-body\" *ngIf=\"this._config.body\">\r\n @if(_hasBodyTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(_config.body)\"></ng-container>\r\n }@else {\r\n {{this._config.body}}\r\n }\r\n</div>","import { Overlay } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { ToastComponent } from './toast.component';\r\nimport { ToastConfig } from './types';\r\nimport { ToastRef } from './toast-ref';\r\n\r\n\r\n/**\r\n * Service for displaying toast notifications in the application.\r\n *\r\n * The `ToastService` provides methods to open toast messages with customizable content,\r\n * header, style, position, and duration. It manages the lifecycle of toast notifications,\r\n * ensuring only one toast is visible at a time.\r\n *\r\n * @example\r\n * // Open a simple toast\r\n * toastService.open('Message body', 'Header', 'success');\r\n *\r\n * @example\r\n * // Open a toast with configuration\r\n * toastService.open({\r\n * body: 'Message body',\r\n * header: 'Header',\r\n * style: 'success',\r\n * verticalPosition: 'bottom',\r\n * horizontalPosition: 'end',\r\n * duration: 5000\r\n * });\r\n *\r\n * @remarks\r\n * - Only one toast can be displayed at a time; opening a new toast closes the previous one.\r\n * - The toast will automatically close after the specified duration (default: 3000ms).\r\n *\r\n * @publicApi\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToastService {\r\n private _toastRef: ToastRef;\r\n\r\n constructor(private _overlayService: Overlay, private _injector: Injector) { }\r\n\r\n open(body: string, header?: string, style?: string): ToastRef;\r\n open(config: ToastConfig): ToastRef;\r\n open(p: any): ToastRef {\r\n if (this._toastRef) {\r\n this._toastRef.close();\r\n }\r\n\r\n const config: ToastConfig =\r\n typeof p === 'object' ? p :\r\n { body: arguments[0], header: arguments[1], style: arguments[2] } as ToastConfig;\r\n\r\n var portal = new ComponentPortal(ToastComponent, null, this._injector);\r\n\r\n // Position\r\n var vertical = config.verticalPosition ?? 'top';\r\n var horizontal = config.horizontalPosition ?? 'center';\r\n var posStrategy = this._overlayService.position().global();\r\n const padding = '1rem';\r\n\r\n switch (vertical) {\r\n case 'top':\r\n posStrategy = posStrategy.top(padding)\r\n break;\r\n case 'bottom':\r\n posStrategy = posStrategy.bottom(padding)\r\n break;\r\n }\r\n\r\n switch (horizontal) {\r\n case 'center':\r\n posStrategy = posStrategy.centerHorizontally();\r\n break;\r\n case 'end':\r\n posStrategy = posStrategy.end(padding);\r\n break;\r\n case 'start':\r\n posStrategy = posStrategy.start(padding);\r\n break;\r\n }\r\n\r\n var overlayRef = this._overlayService.create({\r\n positionStrategy: posStrategy,\r\n });\r\n\r\n var componentRef = overlayRef.attach(portal);\r\n componentRef.instance.toastRef = this._toastRef = new ToastRef(config, overlayRef);\r\n\r\n setTimeout(() => {\r\n this._toastRef.close();\r\n }, config?.duration ?? 3000);\r\n\r\n return this._toastRef;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { TemplateRef, Component, ChangeDetectionStrategy, input, Directive, HostListener } from '@angular/core';
|
|
3
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
+
import * as i1 from '@angular/common';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
|
+
import * as i1$1 from '@angular/cdk/overlay';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @private
|
|
11
|
+
*/
|
|
12
|
+
class TooltipWrapperComponent {
|
|
13
|
+
elementRef;
|
|
14
|
+
renderer;
|
|
15
|
+
changeDetectorRef;
|
|
16
|
+
placement;
|
|
17
|
+
content;
|
|
18
|
+
hasTemplate;
|
|
19
|
+
constructor(elementRef, renderer, changeDetectorRef) {
|
|
20
|
+
this.elementRef = elementRef;
|
|
21
|
+
this.renderer = renderer;
|
|
22
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.hasTemplate = this.content instanceof TemplateRef;
|
|
26
|
+
const elm = this.elementRef.nativeElement;
|
|
27
|
+
this.renderer.setAttribute(elm, 'role', 'tooltip');
|
|
28
|
+
['tooltip', 'fade', 'show'].forEach(c => this.renderer.addClass(elm, c));
|
|
29
|
+
}
|
|
30
|
+
set(content, placement) {
|
|
31
|
+
this.content = content;
|
|
32
|
+
this.placement = placement;
|
|
33
|
+
this.hasTemplate = content instanceof TemplateRef;
|
|
34
|
+
this.changeDetectorRef.markForCheck();
|
|
35
|
+
}
|
|
36
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TooltipWrapperComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: TooltipWrapperComponent, isStandalone: true, selector: "ng0-tooltip-wrapper", host: { properties: { "class.bs-tooltip-top": "placement == \"top\"", "class.bs-tooltip-bottom": "placement == \"bottom\"", "class.bs-tooltip-start": "placement == \"start\"", "class.bs-tooltip-end": "placement == \"end\"" } }, exportAs: ["ng0TooltipWrapper"], ngImport: i0, template: "<div class=\"tooltip-arrow\"></div>\r\n<div class=\"tooltip-inner\">\r\n @if(hasTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(content)\"></ng-container>\r\n }@else{\r\n {{content}}\r\n }\r\n</div>", styles: [":host{position:relative;padding:var(--bs-tooltip-arrow-height)}:host .tooltip-arrow{position:absolute}:host.bs-tooltip-top .tooltip-arrow{bottom:0;left:calc(50% - var(--bs-tooltip-arrow-width) / 2)}:host.bs-tooltip-bottom .tooltip-arrow{top:0;left:calc(50% - var(--bs-tooltip-arrow-width) / 2)}:host.bs-tooltip-start .tooltip-arrow{right:0;top:calc(50% - var(--bs-tooltip-arrow-width) / 2)}[dir=rtl] :host.bs-tooltip-start .tooltip-arrow{right:unset!important;left:0;transform:rotate(180deg)}:host.bs-tooltip-end .tooltip-arrow{left:0;top:calc(50% - var(--bs-tooltip-arrow-width) / 2)}[dir=rtl] :host.bs-tooltip-end .tooltip-arrow{left:unset!important;right:0;transform:rotate(180deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TooltipWrapperComponent, decorators: [{
|
|
40
|
+
type: Component,
|
|
41
|
+
args: [{ selector: 'ng0-tooltip-wrapper', exportAs: 'ng0TooltipWrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], host: {
|
|
42
|
+
'[class.bs-tooltip-top]': 'placement == "top"',
|
|
43
|
+
'[class.bs-tooltip-bottom]': 'placement == "bottom"',
|
|
44
|
+
'[class.bs-tooltip-start]': 'placement == "start"',
|
|
45
|
+
'[class.bs-tooltip-end]': 'placement == "end"',
|
|
46
|
+
}, template: "<div class=\"tooltip-arrow\"></div>\r\n<div class=\"tooltip-inner\">\r\n @if(hasTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(content)\"></ng-container>\r\n }@else{\r\n {{content}}\r\n }\r\n</div>", styles: [":host{position:relative;padding:var(--bs-tooltip-arrow-height)}:host .tooltip-arrow{position:absolute}:host.bs-tooltip-top .tooltip-arrow{bottom:0;left:calc(50% - var(--bs-tooltip-arrow-width) / 2)}:host.bs-tooltip-bottom .tooltip-arrow{top:0;left:calc(50% - var(--bs-tooltip-arrow-width) / 2)}:host.bs-tooltip-start .tooltip-arrow{right:0;top:calc(50% - var(--bs-tooltip-arrow-width) / 2)}[dir=rtl] :host.bs-tooltip-start .tooltip-arrow{right:unset!important;left:0;transform:rotate(180deg)}:host.bs-tooltip-end .tooltip-arrow{left:0;top:calc(50% - var(--bs-tooltip-arrow-width) / 2)}[dir=rtl] :host.bs-tooltip-end .tooltip-arrow{left:unset!important;right:0;transform:rotate(180deg)}\n"] }]
|
|
47
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }] });
|
|
48
|
+
|
|
49
|
+
class TooltipDirective {
|
|
50
|
+
overlayService;
|
|
51
|
+
elementRef;
|
|
52
|
+
destroyRef;
|
|
53
|
+
viewRef;
|
|
54
|
+
content = input(undefined, { alias: 'ng0Tooltip' });
|
|
55
|
+
placement = input('bottom');
|
|
56
|
+
portal;
|
|
57
|
+
overlayRef;
|
|
58
|
+
constructor(overlayService, elementRef, destroyRef, viewRef) {
|
|
59
|
+
this.overlayService = overlayService;
|
|
60
|
+
this.elementRef = elementRef;
|
|
61
|
+
this.destroyRef = destroyRef;
|
|
62
|
+
this.viewRef = viewRef;
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
this.portal = new ComponentPortal(TooltipWrapperComponent, this.viewRef);
|
|
66
|
+
}
|
|
67
|
+
onMouseEnter() {
|
|
68
|
+
this.createOverlay();
|
|
69
|
+
}
|
|
70
|
+
onMouseLeave() {
|
|
71
|
+
this.disposeOverlay();
|
|
72
|
+
}
|
|
73
|
+
createOverlay() {
|
|
74
|
+
let wrapperInstance;
|
|
75
|
+
const scrollStrategy = this.overlayService.scrollStrategies.reposition();
|
|
76
|
+
const positionStrategy = this.overlayService.position().flexibleConnectedTo(this.elementRef).withPositions(this.getPositions());
|
|
77
|
+
positionStrategy.positionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(p => {
|
|
78
|
+
wrapperRef.instance.set(this.content(), p.connectionPair.key);
|
|
79
|
+
});
|
|
80
|
+
this.overlayRef = this.overlayService.create({ scrollStrategy, positionStrategy });
|
|
81
|
+
let wrapperRef = this.overlayRef.attach(this.portal);
|
|
82
|
+
wrapperRef.instance.set(this.content(), this.placement());
|
|
83
|
+
}
|
|
84
|
+
disposeOverlay() {
|
|
85
|
+
if (this.overlayRef) {
|
|
86
|
+
this.overlayRef.dispose();
|
|
87
|
+
this.overlayRef = undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
getPositions() {
|
|
91
|
+
const c = 'center', t = 'top', b = 'bottom', s = 'start', e = 'end';
|
|
92
|
+
const top = { key: t, originX: c, originY: t, overlayX: c, overlayY: b, };
|
|
93
|
+
const bottom = { key: b, originX: c, originY: b, overlayX: c, overlayY: t, };
|
|
94
|
+
const start = { key: s, originX: s, originY: c, overlayX: e, overlayY: c, };
|
|
95
|
+
const end = { key: e, originX: e, originY: c, overlayX: s, overlayY: c, };
|
|
96
|
+
let positions;
|
|
97
|
+
switch (this.placement()) {
|
|
98
|
+
case 'bottom':
|
|
99
|
+
positions = [bottom, top];
|
|
100
|
+
break;
|
|
101
|
+
case 'start':
|
|
102
|
+
positions = [start, start];
|
|
103
|
+
break;
|
|
104
|
+
case 'end':
|
|
105
|
+
positions = [end, start];
|
|
106
|
+
break;
|
|
107
|
+
case 'top':
|
|
108
|
+
positions = [top, bottom];
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
positions = [bottom, top];
|
|
112
|
+
}
|
|
113
|
+
return positions;
|
|
114
|
+
}
|
|
115
|
+
ngOnDestroy() {
|
|
116
|
+
this.disposeOverlay();
|
|
117
|
+
}
|
|
118
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TooltipDirective, deps: [{ token: i1$1.Overlay }, { token: i0.ElementRef }, { token: i0.DestroyRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
119
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: TooltipDirective, isStandalone: true, selector: "[ng0Tooltip]", inputs: { content: { classPropertyName: "content", publicName: "ng0Tooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, exportAs: ["ng0Tooltip"], ngImport: i0 });
|
|
120
|
+
}
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TooltipDirective, decorators: [{
|
|
122
|
+
type: Directive,
|
|
123
|
+
args: [{
|
|
124
|
+
selector: '[ng0Tooltip]',
|
|
125
|
+
exportAs: 'ng0Tooltip',
|
|
126
|
+
standalone: true
|
|
127
|
+
}]
|
|
128
|
+
}], ctorParameters: () => [{ type: i1$1.Overlay }, { type: i0.ElementRef }, { type: i0.DestroyRef }, { type: i0.ViewContainerRef }], propDecorators: { onMouseEnter: [{
|
|
129
|
+
type: HostListener,
|
|
130
|
+
args: ['mouseenter']
|
|
131
|
+
}], onMouseLeave: [{
|
|
132
|
+
type: HostListener,
|
|
133
|
+
args: ['mouseleave']
|
|
134
|
+
}] } });
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Generated bundle index. Do not edit.
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
export { TooltipDirective };
|
|
141
|
+
//# sourceMappingURL=bootkit-ng0-tooltip.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-tooltip.mjs","sources":["../../../projects/ng0/tooltip/tooltip-wrapper/tooltip-wrapper.component.ts","../../../projects/ng0/tooltip/tooltip-wrapper/tooltip-wrapper.component.html","../../../projects/ng0/tooltip/tooltip.directive.ts","../../../projects/ng0/tooltip/bootkit-ng0-tooltip.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, OnInit, TemplateRef, ChangeDetectorRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TooltipContent, TooltipPlacement } from '../types';\r\n\r\n/**\r\n * @private\r\n */\r\n@Component({\r\n selector: 'ng0-tooltip-wrapper',\r\n exportAs: 'ng0TooltipWrapper',\r\n styleUrls: ['./tooltip-wrapper.component.scss'],\r\n templateUrl: './tooltip-wrapper.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule],\r\n host: {\r\n '[class.bs-tooltip-top]': 'placement == \"top\"',\r\n '[class.bs-tooltip-bottom]': 'placement == \"bottom\"',\r\n '[class.bs-tooltip-start]': 'placement == \"start\"',\r\n '[class.bs-tooltip-end]': 'placement == \"end\"',\r\n }\r\n})\r\nexport class TooltipWrapperComponent implements OnInit {\r\n protected placement!: TooltipPlacement;\r\n protected content!: TooltipContent;\r\n protected hasTemplate!: boolean;\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n private changeDetectorRef: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.hasTemplate = this.content instanceof TemplateRef;\r\n const elm = this.elementRef.nativeElement;\r\n this.renderer.setAttribute(elm, 'role', 'tooltip');\r\n ['tooltip', 'fade', 'show'].forEach(c => this.renderer.addClass(elm, c));\r\n }\r\n\r\n public set(content: any, placement: TooltipPlacement) {\r\n this.content = content;\r\n this.placement = placement;\r\n this.hasTemplate = content instanceof TemplateRef;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n}\r\n","<div class=\"tooltip-arrow\"></div>\r\n<div class=\"tooltip-inner\">\r\n @if(hasTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"$any(content)\"></ng-container>\r\n }@else{\r\n {{content}}\r\n }\r\n</div>","import {\r\n Directive, TemplateRef, ViewContainerRef, OnDestroy, ElementRef, HostListener, OnInit,\r\n input,\r\n DestroyRef\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { TooltipWrapperComponent } from './tooltip-wrapper/tooltip-wrapper.component';\r\nimport { TooltipPlacement } from './types';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Directive({\r\n selector: '[ng0Tooltip]',\r\n exportAs: 'ng0Tooltip',\r\n standalone: true\r\n})\r\nexport class TooltipDirective implements OnInit, OnDestroy {\r\n public content = input<string | TemplateRef<any> | undefined | null>(undefined, { alias: 'ng0Tooltip' });\r\n public placement = input<TooltipPlacement>('bottom');\r\n private portal!: ComponentPortal<TooltipWrapperComponent>;\r\n private overlayRef?: OverlayRef;\r\n\r\n constructor(\r\n private overlayService: Overlay,\r\n private elementRef: ElementRef,\r\n private destroyRef: DestroyRef,\r\n private viewRef: ViewContainerRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.portal = new ComponentPortal(TooltipWrapperComponent, this.viewRef);\r\n }\r\n\r\n @HostListener('mouseenter') \r\n private onMouseEnter(): void {\r\n this.createOverlay();\r\n }\r\n\r\n @HostListener('mouseleave') \r\n private onMouseLeave(): void {\r\n this.disposeOverlay();\r\n }\r\n\r\n private createOverlay(): void {\r\n let wrapperInstance: TooltipWrapperComponent;\r\n\r\n const scrollStrategy = this.overlayService.scrollStrategies.reposition();\r\n const positionStrategy = this.overlayService.position().flexibleConnectedTo(this.elementRef).withPositions(this.getPositions());\r\n\r\n positionStrategy.positionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(p => {\r\n wrapperRef.instance.set(this.content(), (p.connectionPair as any).key);\r\n });\r\n\r\n this.overlayRef = this.overlayService.create({ scrollStrategy, positionStrategy });\r\n let wrapperRef = this.overlayRef.attach(this.portal);\r\n wrapperRef.instance.set(this.content(), this.placement());\r\n }\r\n\r\n private disposeOverlay(): void {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n }\r\n\r\n private getPositions(): any[] {\r\n const c = 'center', t = 'top', b = 'bottom', s = 'start', e = 'end';\r\n const top = { key: t, originX: c, originY: t, overlayX: c, overlayY: b, };\r\n const bottom = { key: b, originX: c, originY: b, overlayX: c, overlayY: t, };\r\n const start = { key: s, originX: s, originY: c, overlayX: e, overlayY: c, };\r\n const end = { key: e, originX: e, originY: c, overlayX: s, overlayY: c, };\r\n\r\n let positions: Array<any>;\r\n\r\n switch (this.placement()) {\r\n case 'bottom':\r\n positions = [bottom, top];\r\n break;\r\n case 'start':\r\n positions = [start, start];\r\n break;\r\n case 'end':\r\n positions = [end, start];\r\n break;\r\n case 'top':\r\n positions = [top, bottom];\r\n break;\r\n default:\r\n positions = [bottom, top];\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.disposeOverlay();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0.mjs","sources":["../../../projects/ng0/src/lib/index.ts","../../../projects/ng0/src/public-api.ts","../../../projects/ng0/src/bootkit-ng0.ts"],"sourcesContent":["export * from './types';\r\n \r\nexport const LibName = 'bootkit/angular-pro';","/*\r\n * Public API Surface of bootkit\r\n */\r\n\r\nexport * from './lib';\r\n \r\n \r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAEO,MAAM,OAAO,GAAG;;ACFvB;;AAEG;;ACFH;;AAEG;;;;"}
|
package/index.d.ts
ADDED
package/lib/index.d.ts
ADDED