tailjng 0.0.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 +63 -0
- package/fesm2022/tailjng.mjs +251 -0
- package/fesm2022/tailjng.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/tailjng.component.d.ts +5 -0
- package/lib/tailjng.service.d.ts +6 -0
- package/lib/tooltip/tooltip.directive.d.ts +20 -0
- package/lib/tooltip/tooltip.service.d.ts +16 -0
- package/package.json +23 -0
- package/public-api.d.ts +3 -0
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Tailjng
|
|
2
|
+
|
|
3
|
+
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 19.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ng generate component component-name
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
ng generate --help
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Building
|
|
20
|
+
|
|
21
|
+
To build the library, run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
ng build tailjng
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
28
|
+
|
|
29
|
+
### Publishing the Library
|
|
30
|
+
|
|
31
|
+
Once the project is built, you can publish your library by following these steps:
|
|
32
|
+
|
|
33
|
+
1. Navigate to the `dist` directory:
|
|
34
|
+
```bash
|
|
35
|
+
cd dist/tailjng
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
39
|
+
```bash
|
|
40
|
+
npm publish
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Running unit tests
|
|
44
|
+
|
|
45
|
+
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ng test
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Running end-to-end tests
|
|
52
|
+
|
|
53
|
+
For end-to-end (e2e) testing, run:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
ng e2e
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
60
|
+
|
|
61
|
+
## Additional Resources
|
|
62
|
+
|
|
63
|
+
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, Component, TemplateRef, HostListener, Input, Directive } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
class TailjngService {
|
|
5
|
+
constructor() { }
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TailjngService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TailjngService, providedIn: 'root' });
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TailjngService, decorators: [{
|
|
10
|
+
type: Injectable,
|
|
11
|
+
args: [{
|
|
12
|
+
providedIn: 'root'
|
|
13
|
+
}]
|
|
14
|
+
}], ctorParameters: () => [] });
|
|
15
|
+
|
|
16
|
+
class TailjngComponent {
|
|
17
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TailjngComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.7", type: TailjngComponent, isStandalone: true, selector: "lib-tailjng", ngImport: i0, template: `
|
|
19
|
+
<p>
|
|
20
|
+
tailjng works!
|
|
21
|
+
</p>
|
|
22
|
+
`, isInline: true, styles: [""] });
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TailjngComponent, decorators: [{
|
|
25
|
+
type: Component,
|
|
26
|
+
args: [{ selector: 'lib-tailjng', imports: [], template: `
|
|
27
|
+
<p>
|
|
28
|
+
tailjng works!
|
|
29
|
+
</p>
|
|
30
|
+
` }]
|
|
31
|
+
}] });
|
|
32
|
+
|
|
33
|
+
class TooltipService {
|
|
34
|
+
tooltipElement = null;
|
|
35
|
+
arrowElement = null;
|
|
36
|
+
renderer;
|
|
37
|
+
showArrow = true;
|
|
38
|
+
offsetX = 0;
|
|
39
|
+
offsetY = 0;
|
|
40
|
+
constructor(rendererFactory) {
|
|
41
|
+
this.renderer = rendererFactory.createRenderer(null, null);
|
|
42
|
+
}
|
|
43
|
+
show(content, target, position = 'top', showArrow = true, offsetX = 0, offsetY = 0) {
|
|
44
|
+
if (!content || !target)
|
|
45
|
+
return;
|
|
46
|
+
this.hide();
|
|
47
|
+
this.showArrow = showArrow;
|
|
48
|
+
this.offsetX = offsetX;
|
|
49
|
+
this.offsetY = offsetY;
|
|
50
|
+
if (!this.tooltipElement) {
|
|
51
|
+
this.tooltipElement = this.renderer.createElement('div');
|
|
52
|
+
this.renderer.addClass(this.tooltipElement, 'j-tooltip');
|
|
53
|
+
this.renderer.setStyle(this.tooltipElement, 'position', 'absolute');
|
|
54
|
+
this.renderer.setStyle(this.tooltipElement, 'z-index', '9999');
|
|
55
|
+
this.renderer.setStyle(this.tooltipElement, 'background-color', '#333');
|
|
56
|
+
this.renderer.setStyle(this.tooltipElement, 'color', 'white');
|
|
57
|
+
this.renderer.setStyle(this.tooltipElement, 'padding', '0.5rem');
|
|
58
|
+
this.renderer.setStyle(this.tooltipElement, 'border-radius', '0.25rem');
|
|
59
|
+
this.renderer.setStyle(this.tooltipElement, 'font-size', '0.875rem');
|
|
60
|
+
this.renderer.setStyle(this.tooltipElement, 'pointer-events', 'none');
|
|
61
|
+
this.renderer.setStyle(this.tooltipElement, 'box-shadow', '0 2px 4px rgba(0,0,0,0.2)');
|
|
62
|
+
this.renderer.setStyle(this.tooltipElement, 'max-width', '230px');
|
|
63
|
+
this.renderer.setStyle(this.tooltipElement, 'word-wrap', 'break-word');
|
|
64
|
+
this.renderer.setStyle(this.tooltipElement, 'transition', 'opacity 0.2s ease, transform 0.2s ease');
|
|
65
|
+
this.arrowElement = this.renderer.createElement('div');
|
|
66
|
+
this.renderer.setStyle(this.arrowElement, 'position', 'absolute');
|
|
67
|
+
this.renderer.setStyle(this.arrowElement, 'width', '0');
|
|
68
|
+
this.renderer.setStyle(this.arrowElement, 'height', '0');
|
|
69
|
+
this.renderer.setStyle(this.arrowElement, 'border-style', 'solid');
|
|
70
|
+
}
|
|
71
|
+
if (this.tooltipElement) {
|
|
72
|
+
while (this.tooltipElement.firstChild) {
|
|
73
|
+
this.tooltipElement.removeChild(this.tooltipElement.firstChild);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (typeof content === 'string') {
|
|
77
|
+
this.tooltipElement.textContent = content;
|
|
78
|
+
}
|
|
79
|
+
else if (content instanceof HTMLElement) {
|
|
80
|
+
this.renderer.appendChild(this.tooltipElement, content.cloneNode(true));
|
|
81
|
+
}
|
|
82
|
+
if (this.showArrow) {
|
|
83
|
+
this.renderer.appendChild(this.tooltipElement, this.arrowElement);
|
|
84
|
+
}
|
|
85
|
+
this.renderer.appendChild(document.body, this.tooltipElement);
|
|
86
|
+
this.renderer.setStyle(this.tooltipElement, 'opacity', '0');
|
|
87
|
+
this.renderer.setStyle(this.tooltipElement, 'transform', 'scale(1)');
|
|
88
|
+
this.renderer.setStyle(this.tooltipElement, 'display', 'block');
|
|
89
|
+
this.positionAbsolute(target, position);
|
|
90
|
+
requestAnimationFrame(() => {
|
|
91
|
+
this.renderer.setStyle(this.tooltipElement, 'opacity', '1');
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
positionAbsolute(target, position) {
|
|
95
|
+
if (!this.tooltipElement)
|
|
96
|
+
return;
|
|
97
|
+
const tooltipRect = this.tooltipElement.getBoundingClientRect();
|
|
98
|
+
const targetRect = target.getBoundingClientRect();
|
|
99
|
+
let left = 0;
|
|
100
|
+
let top = 0;
|
|
101
|
+
const arrowSize = 6;
|
|
102
|
+
if (this.showArrow && this.arrowElement) {
|
|
103
|
+
this.renderer.setStyle(this.arrowElement, 'border-width', `${arrowSize}px`);
|
|
104
|
+
this.renderer.setStyle(this.arrowElement, 'border-color', 'transparent');
|
|
105
|
+
this.renderer.setStyle(this.arrowElement, 'top', '');
|
|
106
|
+
this.renderer.setStyle(this.arrowElement, 'bottom', '');
|
|
107
|
+
this.renderer.setStyle(this.arrowElement, 'left', '');
|
|
108
|
+
this.renderer.setStyle(this.arrowElement, 'right', '');
|
|
109
|
+
}
|
|
110
|
+
switch (position) {
|
|
111
|
+
case 'top':
|
|
112
|
+
left = targetRect.left + targetRect.width / 2 - tooltipRect.width / 2 + this.offsetX;
|
|
113
|
+
top = targetRect.top - tooltipRect.height - arrowSize + this.offsetY;
|
|
114
|
+
if (this.showArrow && this.arrowElement) {
|
|
115
|
+
this.renderer.setStyle(this.arrowElement, 'bottom', `-5px`);
|
|
116
|
+
this.renderer.setStyle(this.arrowElement, 'left', `calc(50% - ${arrowSize}px)`);
|
|
117
|
+
this.renderer.setStyle(this.arrowElement, 'border-top-color', '#333');
|
|
118
|
+
this.renderer.setStyle(this.arrowElement, 'border-bottom-width', '0');
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
case 'bottom':
|
|
122
|
+
left = targetRect.left + targetRect.width / 2 - tooltipRect.width / 2 + this.offsetX;
|
|
123
|
+
top = targetRect.bottom + arrowSize + this.offsetY;
|
|
124
|
+
if (this.showArrow && this.arrowElement) {
|
|
125
|
+
this.renderer.setStyle(this.arrowElement, 'top', `-5px`);
|
|
126
|
+
this.renderer.setStyle(this.arrowElement, 'left', `calc(50% - ${arrowSize}px)`);
|
|
127
|
+
this.renderer.setStyle(this.arrowElement, 'border-bottom-color', '#333');
|
|
128
|
+
this.renderer.setStyle(this.arrowElement, 'border-top-width', '0');
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
case 'left':
|
|
132
|
+
left = targetRect.left - tooltipRect.width - arrowSize + this.offsetX;
|
|
133
|
+
top = targetRect.top + targetRect.height / 2 - tooltipRect.height / 2 + this.offsetY;
|
|
134
|
+
if (this.showArrow && this.arrowElement) {
|
|
135
|
+
this.renderer.setStyle(this.arrowElement, 'right', `-5px`);
|
|
136
|
+
this.renderer.setStyle(this.arrowElement, 'top', `calc(50% - ${arrowSize}px)`);
|
|
137
|
+
this.renderer.setStyle(this.arrowElement, 'border-left-color', '#333');
|
|
138
|
+
this.renderer.setStyle(this.arrowElement, 'border-right-width', '0');
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
case 'right':
|
|
142
|
+
left = targetRect.right + arrowSize + this.offsetX;
|
|
143
|
+
top = targetRect.top + targetRect.height / 2 - tooltipRect.height / 2 + this.offsetY;
|
|
144
|
+
if (this.showArrow && this.arrowElement) {
|
|
145
|
+
this.renderer.setStyle(this.arrowElement, 'left', `-5px`);
|
|
146
|
+
this.renderer.setStyle(this.arrowElement, 'top', `calc(50% - ${arrowSize}px)`);
|
|
147
|
+
this.renderer.setStyle(this.arrowElement, 'border-right-color', '#333');
|
|
148
|
+
this.renderer.setStyle(this.arrowElement, 'border-left-width', '0');
|
|
149
|
+
}
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
this.renderer.setStyle(this.tooltipElement, 'left', `${left + window.scrollX}px`);
|
|
153
|
+
this.renderer.setStyle(this.tooltipElement, 'top', `${top + window.scrollY}px`);
|
|
154
|
+
}
|
|
155
|
+
hide() {
|
|
156
|
+
if (this.tooltipElement) {
|
|
157
|
+
this.renderer.setStyle(this.tooltipElement, 'opacity', '0');
|
|
158
|
+
this.renderer.setStyle(this.tooltipElement, 'transform', 'scale(0.95)');
|
|
159
|
+
this.renderer.setStyle(this.tooltipElement, 'display', 'none');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TooltipService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
163
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TooltipService, providedIn: 'root' });
|
|
164
|
+
}
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: TooltipService, decorators: [{
|
|
166
|
+
type: Injectable,
|
|
167
|
+
args: [{ providedIn: 'root' }]
|
|
168
|
+
}], ctorParameters: () => [{ type: i0.RendererFactory2 }] });
|
|
169
|
+
|
|
170
|
+
class JTooltipModule {
|
|
171
|
+
el;
|
|
172
|
+
tooltipService;
|
|
173
|
+
zone;
|
|
174
|
+
viewContainerRef;
|
|
175
|
+
content;
|
|
176
|
+
jTooltipPosition = 'top';
|
|
177
|
+
jTooltipShowArrow = true;
|
|
178
|
+
jTooltipOffsetX = 0;
|
|
179
|
+
jTooltipOffsetY = 0;
|
|
180
|
+
constructor(el, tooltipService, zone, viewContainerRef) {
|
|
181
|
+
this.el = el;
|
|
182
|
+
this.tooltipService = tooltipService;
|
|
183
|
+
this.zone = zone;
|
|
184
|
+
this.viewContainerRef = viewContainerRef;
|
|
185
|
+
}
|
|
186
|
+
show() {
|
|
187
|
+
if (!this.content)
|
|
188
|
+
return;
|
|
189
|
+
this.zone.runOutsideAngular(() => {
|
|
190
|
+
let finalContent = '';
|
|
191
|
+
if (this.content instanceof TemplateRef) {
|
|
192
|
+
const view = this.content.createEmbeddedView({});
|
|
193
|
+
this.viewContainerRef.insert(view);
|
|
194
|
+
view.detectChanges();
|
|
195
|
+
const fragment = document.createElement('div');
|
|
196
|
+
view.rootNodes.forEach((node) => fragment.appendChild(node.cloneNode(true)));
|
|
197
|
+
finalContent = fragment;
|
|
198
|
+
view.destroy(); // limpieza inmediata
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
finalContent = this.content;
|
|
202
|
+
}
|
|
203
|
+
this.tooltipService.show(finalContent, this.el.nativeElement, this.jTooltipPosition, this.jTooltipShowArrow, this.jTooltipOffsetX, this.jTooltipOffsetY);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
hide() {
|
|
207
|
+
this.zone.runOutsideAngular(() => {
|
|
208
|
+
this.tooltipService.hide();
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
ngOnDestroy() {
|
|
212
|
+
this.tooltipService.hide();
|
|
213
|
+
}
|
|
214
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: JTooltipModule, deps: [{ token: i0.ElementRef }, { token: TooltipService }, { token: i0.NgZone }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
215
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.7", type: JTooltipModule, isStandalone: true, selector: "[jTooltip]", inputs: { content: ["jTooltip", "content"], jTooltipPosition: "jTooltipPosition", jTooltipShowArrow: "jTooltipShowArrow", jTooltipOffsetX: "jTooltipOffsetX", jTooltipOffsetY: "jTooltipOffsetY" }, host: { listeners: { "mouseenter": "show()", "mouseleave": "hide()" } }, ngImport: i0 });
|
|
216
|
+
}
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: JTooltipModule, decorators: [{
|
|
218
|
+
type: Directive,
|
|
219
|
+
args: [{
|
|
220
|
+
selector: '[jTooltip]',
|
|
221
|
+
standalone: true,
|
|
222
|
+
}]
|
|
223
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: TooltipService }, { type: i0.NgZone }, { type: i0.ViewContainerRef }], propDecorators: { content: [{
|
|
224
|
+
type: Input,
|
|
225
|
+
args: ['jTooltip']
|
|
226
|
+
}], jTooltipPosition: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], jTooltipShowArrow: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], jTooltipOffsetX: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], jTooltipOffsetY: [{
|
|
233
|
+
type: Input
|
|
234
|
+
}], show: [{
|
|
235
|
+
type: HostListener,
|
|
236
|
+
args: ['mouseenter']
|
|
237
|
+
}], hide: [{
|
|
238
|
+
type: HostListener,
|
|
239
|
+
args: ['mouseleave']
|
|
240
|
+
}] } });
|
|
241
|
+
|
|
242
|
+
/*
|
|
243
|
+
* Public API Surface of tailjng
|
|
244
|
+
*/
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Generated bundle index. Do not edit.
|
|
248
|
+
*/
|
|
249
|
+
|
|
250
|
+
export { JTooltipModule, TailjngComponent, TailjngService };
|
|
251
|
+
//# sourceMappingURL=tailjng.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailjng.mjs","sources":["../../../projects/tailjng/src/lib/tailjng.service.ts","../../../projects/tailjng/src/lib/tailjng.component.ts","../../../projects/tailjng/src/lib/tooltip/tooltip.service.ts","../../../projects/tailjng/src/lib/tooltip/tooltip.directive.ts","../../../projects/tailjng/src/public-api.ts","../../../projects/tailjng/src/tailjng.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TailjngService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-tailjng',\r\n imports: [],\r\n template: `\r\n <p>\r\n tailjng works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class TailjngComponent {\r\n\r\n}\r\n","import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TooltipService {\r\n private tooltipElement: HTMLElement | null = null;\r\n private arrowElement: HTMLElement | null = null;\r\n private readonly renderer: Renderer2;\r\n private showArrow: boolean = true;\r\n private offsetX = 0;\r\n private offsetY = 0;\r\n\r\n constructor(rendererFactory: RendererFactory2) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n show(\r\n content: string | HTMLElement,\r\n target: HTMLElement,\r\n position: string = 'top',\r\n showArrow: boolean = true,\r\n offsetX: number = 0,\r\n offsetY: number = 0\r\n ) {\r\n if (!content || !target) return;\r\n\r\n this.hide();\r\n this.showArrow = showArrow;\r\n this.offsetX = offsetX;\r\n this.offsetY = offsetY;\r\n\r\n if (!this.tooltipElement) {\r\n this.tooltipElement = this.renderer.createElement('div');\r\n this.renderer.addClass(this.tooltipElement, 'j-tooltip');\r\n this.renderer.setStyle(this.tooltipElement, 'position', 'absolute');\r\n this.renderer.setStyle(this.tooltipElement, 'z-index', '9999');\r\n this.renderer.setStyle(this.tooltipElement, 'background-color', '#333');\r\n this.renderer.setStyle(this.tooltipElement, 'color', 'white');\r\n this.renderer.setStyle(this.tooltipElement, 'padding', '0.5rem');\r\n this.renderer.setStyle(this.tooltipElement, 'border-radius', '0.25rem');\r\n this.renderer.setStyle(this.tooltipElement, 'font-size', '0.875rem');\r\n this.renderer.setStyle(this.tooltipElement, 'pointer-events', 'none');\r\n this.renderer.setStyle(this.tooltipElement, 'box-shadow', '0 2px 4px rgba(0,0,0,0.2)');\r\n this.renderer.setStyle(this.tooltipElement, 'max-width', '230px');\r\n this.renderer.setStyle(this.tooltipElement, 'word-wrap', 'break-word');\r\n this.renderer.setStyle(this.tooltipElement, 'transition', 'opacity 0.2s ease, transform 0.2s ease');\r\n\r\n this.arrowElement = this.renderer.createElement('div');\r\n this.renderer.setStyle(this.arrowElement, 'position', 'absolute');\r\n this.renderer.setStyle(this.arrowElement, 'width', '0');\r\n this.renderer.setStyle(this.arrowElement, 'height', '0');\r\n this.renderer.setStyle(this.arrowElement, 'border-style', 'solid');\r\n }\r\n\r\n if (this.tooltipElement) {\r\n while (this.tooltipElement.firstChild) {\r\n this.tooltipElement.removeChild(this.tooltipElement.firstChild);\r\n }\r\n }\r\n\r\n if (typeof content === 'string') {\r\n this.tooltipElement!.textContent = content;\r\n } else if (content instanceof HTMLElement) {\r\n this.renderer.appendChild(this.tooltipElement!, content.cloneNode(true));\r\n }\r\n\r\n if (this.showArrow) {\r\n this.renderer.appendChild(this.tooltipElement!, this.arrowElement!);\r\n }\r\n\r\n this.renderer.appendChild(document.body, this.tooltipElement);\r\n this.renderer.setStyle(this.tooltipElement, 'opacity', '0');\r\n this.renderer.setStyle(this.tooltipElement, 'transform', 'scale(1)');\r\n this.renderer.setStyle(this.tooltipElement, 'display', 'block');\r\n\r\n this.positionAbsolute(target, position);\r\n\r\n requestAnimationFrame(() => {\r\n this.renderer.setStyle(this.tooltipElement!, 'opacity', '1');\r\n });\r\n }\r\n\r\n positionAbsolute(target: HTMLElement, position: string) {\r\n if (!this.tooltipElement) return;\r\n\r\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\r\n const targetRect = target.getBoundingClientRect();\r\n\r\n let left = 0;\r\n let top = 0;\r\n const arrowSize = 6;\r\n\r\n if (this.showArrow && this.arrowElement) {\r\n this.renderer.setStyle(this.arrowElement, 'border-width', `${arrowSize}px`);\r\n this.renderer.setStyle(this.arrowElement, 'border-color', 'transparent');\r\n this.renderer.setStyle(this.arrowElement, 'top', '');\r\n this.renderer.setStyle(this.arrowElement, 'bottom', '');\r\n this.renderer.setStyle(this.arrowElement, 'left', '');\r\n this.renderer.setStyle(this.arrowElement, 'right', '');\r\n }\r\n\r\n switch (position) {\r\n case 'top':\r\n left = targetRect.left + targetRect.width / 2 - tooltipRect.width / 2 + this.offsetX;\r\n top = targetRect.top - tooltipRect.height - arrowSize + this.offsetY;\r\n if (this.showArrow && this.arrowElement) {\r\n this.renderer.setStyle(this.arrowElement, 'bottom', `-5px`);\r\n this.renderer.setStyle(this.arrowElement, 'left', `calc(50% - ${arrowSize}px)`);\r\n this.renderer.setStyle(this.arrowElement, 'border-top-color', '#333');\r\n this.renderer.setStyle(this.arrowElement, 'border-bottom-width', '0');\r\n }\r\n break;\r\n\r\n case 'bottom':\r\n left = targetRect.left + targetRect.width / 2 - tooltipRect.width / 2 + this.offsetX;\r\n top = targetRect.bottom + arrowSize + this.offsetY;\r\n if (this.showArrow && this.arrowElement) {\r\n this.renderer.setStyle(this.arrowElement, 'top', `-5px`);\r\n this.renderer.setStyle(this.arrowElement, 'left', `calc(50% - ${arrowSize}px)`);\r\n this.renderer.setStyle(this.arrowElement, 'border-bottom-color', '#333');\r\n this.renderer.setStyle(this.arrowElement, 'border-top-width', '0');\r\n }\r\n break;\r\n\r\n case 'left':\r\n left = targetRect.left - tooltipRect.width - arrowSize + this.offsetX;\r\n top = targetRect.top + targetRect.height / 2 - tooltipRect.height / 2 + this.offsetY;\r\n if (this.showArrow && this.arrowElement) {\r\n this.renderer.setStyle(this.arrowElement, 'right', `-5px`);\r\n this.renderer.setStyle(this.arrowElement, 'top', `calc(50% - ${arrowSize}px)`);\r\n this.renderer.setStyle(this.arrowElement, 'border-left-color', '#333');\r\n this.renderer.setStyle(this.arrowElement, 'border-right-width', '0');\r\n }\r\n break;\r\n\r\n case 'right':\r\n left = targetRect.right + arrowSize + this.offsetX;\r\n top = targetRect.top + targetRect.height / 2 - tooltipRect.height / 2 + this.offsetY;\r\n if (this.showArrow && this.arrowElement) {\r\n this.renderer.setStyle(this.arrowElement, 'left', `-5px`);\r\n this.renderer.setStyle(this.arrowElement, 'top', `calc(50% - ${arrowSize}px)`);\r\n this.renderer.setStyle(this.arrowElement, 'border-right-color', '#333');\r\n this.renderer.setStyle(this.arrowElement, 'border-left-width', '0');\r\n }\r\n break;\r\n }\r\n\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${left + window.scrollX}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${top + window.scrollY}px`);\r\n }\r\n\r\n hide() {\r\n if (this.tooltipElement) {\r\n this.renderer.setStyle(this.tooltipElement, 'opacity', '0');\r\n this.renderer.setStyle(this.tooltipElement, 'transform', 'scale(0.95)');\r\n this.renderer.setStyle(this.tooltipElement, 'display', 'none');\r\n }\r\n }\r\n}","import { Directive, ElementRef, Input, OnDestroy, HostListener, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { TooltipService } from './tooltip.service';\r\n\r\n@Directive({\r\n selector: '[jTooltip]',\r\n standalone: true,\r\n})\r\nexport class JTooltipModule implements OnDestroy {\r\n @Input('jTooltip') content!: string | TemplateRef<any>;\r\n @Input() jTooltipPosition: 'top' | 'right' | 'bottom' | 'left' = 'top';\r\n @Input() jTooltipShowArrow: boolean = true;\r\n @Input() jTooltipOffsetX: number = 0;\r\n @Input() jTooltipOffsetY: number = 0;\r\n\r\n constructor(\r\n private readonly el: ElementRef,\r\n private readonly tooltipService: TooltipService,\r\n private readonly zone: NgZone,\r\n private readonly viewContainerRef: ViewContainerRef\r\n ) { }\r\n\r\n @HostListener('mouseenter')\r\n show() {\r\n if (!this.content) return;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n let finalContent: string | HTMLElement = '';\r\n\r\n if (this.content instanceof TemplateRef) {\r\n const view = this.content.createEmbeddedView({});\r\n this.viewContainerRef.insert(view);\r\n view.detectChanges();\r\n\r\n const fragment = document.createElement('div');\r\n view.rootNodes.forEach((node) => fragment.appendChild(node.cloneNode(true)));\r\n finalContent = fragment;\r\n view.destroy(); // limpieza inmediata\r\n } else {\r\n finalContent = this.content;\r\n }\r\n\r\n this.tooltipService.show(\r\n finalContent,\r\n this.el.nativeElement,\r\n this.jTooltipPosition,\r\n this.jTooltipShowArrow,\r\n this.jTooltipOffsetX,\r\n this.jTooltipOffsetY\r\n );\r\n });\r\n }\r\n\r\n @HostListener('mouseleave')\r\n hide() {\r\n this.zone.runOutsideAngular(() => {\r\n this.tooltipService.hide();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.tooltipService.hide();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of tailjng\r\n */\r\n\r\nexport * from './lib/tailjng.service';\r\nexport * from './lib/tailjng.component';\r\n\r\n// Tooltip\r\nexport * from './lib/tooltip/tooltip.directive';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TooltipService"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy, NgZone, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { TooltipService } from './tooltip.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class JTooltipModule implements OnDestroy {
|
|
5
|
+
private readonly el;
|
|
6
|
+
private readonly tooltipService;
|
|
7
|
+
private readonly zone;
|
|
8
|
+
private readonly viewContainerRef;
|
|
9
|
+
content: string | TemplateRef<any>;
|
|
10
|
+
jTooltipPosition: 'top' | 'right' | 'bottom' | 'left';
|
|
11
|
+
jTooltipShowArrow: boolean;
|
|
12
|
+
jTooltipOffsetX: number;
|
|
13
|
+
jTooltipOffsetY: number;
|
|
14
|
+
constructor(el: ElementRef, tooltipService: TooltipService, zone: NgZone, viewContainerRef: ViewContainerRef);
|
|
15
|
+
show(): void;
|
|
16
|
+
hide(): void;
|
|
17
|
+
ngOnDestroy(): void;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JTooltipModule, never>;
|
|
19
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<JTooltipModule, "[jTooltip]", never, { "content": { "alias": "jTooltip"; "required": false; }; "jTooltipPosition": { "alias": "jTooltipPosition"; "required": false; }; "jTooltipShowArrow": { "alias": "jTooltipShowArrow"; "required": false; }; "jTooltipOffsetX": { "alias": "jTooltipOffsetX"; "required": false; }; "jTooltipOffsetY": { "alias": "jTooltipOffsetY"; "required": false; }; }, {}, never, never, true, never>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RendererFactory2 } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class TooltipService {
|
|
4
|
+
private tooltipElement;
|
|
5
|
+
private arrowElement;
|
|
6
|
+
private readonly renderer;
|
|
7
|
+
private showArrow;
|
|
8
|
+
private offsetX;
|
|
9
|
+
private offsetY;
|
|
10
|
+
constructor(rendererFactory: RendererFactory2);
|
|
11
|
+
show(content: string | HTMLElement, target: HTMLElement, position?: string, showArrow?: boolean, offsetX?: number, offsetY?: number): void;
|
|
12
|
+
positionAbsolute(target: HTMLElement, position: string): void;
|
|
13
|
+
hide(): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TooltipService, never>;
|
|
15
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TooltipService>;
|
|
16
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tailjng",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^19.2.0",
|
|
6
|
+
"@angular/core": "^19.2.0"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"module": "fesm2022/tailjng.mjs",
|
|
13
|
+
"typings": "index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./index.d.ts",
|
|
20
|
+
"default": "./fesm2022/tailjng.mjs"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
package/public-api.d.ts
ADDED