ngx-kit 8.0.2 → 8.2.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-kit",
3
- "version": "8.0.2",
3
+ "version": "8.2.0",
4
4
  "description": "Angular input components",
5
5
  "author": "Mohammadreza Samani <mr.samani1368@gmail.com>",
6
6
  "license": "MIT",
@@ -117,6 +117,10 @@
117
117
  "types": "./types/ngx-kit-time-picker.d.ts",
118
118
  "default": "./fesm2022/ngx-kit-time-picker.mjs"
119
119
  },
120
+ "./tooltip": {
121
+ "types": "./types/ngx-kit-tooltip.d.ts",
122
+ "default": "./fesm2022/ngx-kit-tooltip.mjs"
123
+ },
120
124
  "./virtual-scroll": {
121
125
  "types": "./types/ngx-kit-virtual-scroll.d.ts",
122
126
  "default": "./fesm2022/ngx-kit-virtual-scroll.mjs"
package/styles/all.css CHANGED
@@ -12,41 +12,6 @@
12
12
  color-scheme: only dark;
13
13
  }
14
14
 
15
- dialog.ngx-ui-overlay::backdrop {
16
- background: transparent;
17
- }
18
-
19
- @keyframes menu-enter {
20
- from {
21
- opacity: 0;
22
- transform: scale(0.8);
23
- }
24
- to {
25
- opacity: 1;
26
- transform: none;
27
- }
28
- }
29
- @keyframes menu-exit {
30
- from {
31
- opacity: 1;
32
- }
33
- to {
34
- opacity: 0;
35
- }
36
- }
37
- dialog.ngx-image-viewer-dialog {
38
- border: none;
39
- padding: 1rem;
40
- max-inline-size: 96vw;
41
- max-block-size: 96vh;
42
- inline-size: min(900px, 96vw);
43
- background: light-dark(#ffffff, #1c1c20);
44
- border-radius: 12px;
45
- }
46
- dialog.ngx-image-viewer-dialog::backdrop {
47
- background: rgba(0, 0, 0, 0.75);
48
- }
49
-
50
15
  /* ---------- confetti (success only) ---------- */
51
16
  .confetti {
52
17
  position: absolute;
@@ -75,3 +40,128 @@ dialog.ngx-image-viewer-dialog::backdrop {
75
40
  transform: translateY(340px) rotate(340deg);
76
41
  }
77
42
  }
43
+ .ngx-tooltip {
44
+ --ngx-tooltip-bg: light-dark(#f4f4f5, #18181b);
45
+ --ngx-tooltip-fg: light-dark(#18181b, #f4f4f5);
46
+ --ngx-tooltip-border: light-dark(#63636336, #ffffff1a);
47
+ --ngx-tooltip-shadow: 0 10px 30px rgb(0 0 0 / 0.25), 0 2px 8px rgb(0 0 0 / 0.18);
48
+ --ngx-tooltip-font-size: 12px;
49
+ --ngx-tooltip-radius: 7px;
50
+ --ngx-tooltip-arrow-size: 6px;
51
+ --ngx-tooltip-max-height: 200px;
52
+ position: fixed;
53
+ inset: auto;
54
+ margin: 0;
55
+ z-index: 2147483000;
56
+ display: block;
57
+ max-width: min(360px, 100vw - 16px);
58
+ padding: 8px 10px;
59
+ box-sizing: border-box;
60
+ background: var(--ngx-tooltip-bg);
61
+ color: var(--ngx-tooltip-fg);
62
+ border: 1px solid var(--ngx-tooltip-border);
63
+ border-radius: var(--ngx-tooltip-radius);
64
+ box-shadow: var(--ngx-tooltip-shadow);
65
+ font-size: var(--ngx-tooltip-font-size);
66
+ font-weight: 450;
67
+ line-height: 1.45;
68
+ text-align: start;
69
+ user-select: none;
70
+ opacity: 0;
71
+ visibility: hidden;
72
+ transform: scale(0.96);
73
+ transition: opacity 120ms ease, transform 120ms cubic-bezier(0.2, 0.8, 0.2, 1), visibility 120ms linear;
74
+ overflow-wrap: anywhere;
75
+ overflow: visible;
76
+ }
77
+ .ngx-tooltip[data-placement^=top] {
78
+ transform-origin: bottom center;
79
+ }
80
+ .ngx-tooltip[data-placement^=bottom] {
81
+ transform-origin: top center;
82
+ }
83
+ .ngx-tooltip[data-placement^=left] {
84
+ transform-origin: right center;
85
+ }
86
+ .ngx-tooltip[data-placement^=right] {
87
+ transform-origin: left center;
88
+ }
89
+ .ngx-tooltip.ngx-tooltip-visible {
90
+ opacity: 1;
91
+ visibility: visible;
92
+ transform: scale(1);
93
+ }
94
+ .ngx-tooltip .ngx-tooltip-content {
95
+ position: relative;
96
+ white-space: pre;
97
+ max-height: var(--ngx-tooltip-max-height);
98
+ overflow: auto;
99
+ padding: 1px;
100
+ }
101
+ .ngx-tooltip .ngx-tooltip-content p {
102
+ margin: 0 0 6px;
103
+ }
104
+ .ngx-tooltip .ngx-tooltip-content p:last-child {
105
+ margin-bottom: 0;
106
+ }
107
+ .ngx-tooltip .ngx-tooltip-content code {
108
+ padding: 1px 4px;
109
+ border-radius: 4px;
110
+ background: rgba(255, 255, 255, 0.08);
111
+ font-family: "Cascadia Code", "SFMono-Regular", Consolas, monospace;
112
+ font-size: 0.9em;
113
+ }
114
+ .ngx-tooltip .ngx-tooltip-content strong {
115
+ font-weight: 650;
116
+ }
117
+ .ngx-tooltip .ngx-tooltip-content a {
118
+ color: inherit;
119
+ text-decoration: underline;
120
+ text-underline-offset: 2px;
121
+ }
122
+ .ngx-tooltip::before {
123
+ content: " ";
124
+ position: absolute;
125
+ width: calc(var(--ngx-tooltip-arrow-size) * 2);
126
+ height: calc(var(--ngx-tooltip-arrow-size) * 2);
127
+ background: var(--ngx-tooltip-bg);
128
+ border: 1px solid var(--ngx-tooltip-border);
129
+ transform: rotate(45deg);
130
+ pointer-events: none;
131
+ }
132
+ .ngx-tooltip[data-placement^=top]:before {
133
+ left: var(--ngx-tooltip-arrow-offset, 50%);
134
+ bottom: calc(var(--ngx-tooltip-arrow-size) * -1);
135
+ transform: translateX(-50%) rotate(45deg);
136
+ border-left: 0;
137
+ border-top: 0;
138
+ }
139
+ .ngx-tooltip[data-placement^=bottom]:before {
140
+ left: var(--ngx-tooltip-arrow-offset, 50%);
141
+ top: calc(var(--ngx-tooltip-arrow-size) * -1);
142
+ transform: translateX(-50%) rotate(45deg);
143
+ border-right: 0;
144
+ border-bottom: 0;
145
+ }
146
+ .ngx-tooltip[data-placement^=left]:before {
147
+ right: calc(var(--ngx-tooltip-arrow-size) * -1);
148
+ top: var(--ngx-tooltip-arrow-offset, 50%);
149
+ transform: translateY(-50%) rotate(45deg);
150
+ border-left: 0;
151
+ border-bottom: 0;
152
+ }
153
+ .ngx-tooltip[data-placement^=right]:before {
154
+ left: calc(var(--ngx-tooltip-arrow-size) * -1);
155
+ top: var(--ngx-tooltip-arrow-offset, 50%);
156
+ transform: translateY(-50%) rotate(45deg);
157
+ border-right: 0;
158
+ border-top: 0;
159
+ }
160
+ @media (prefers-reduced-motion: reduce) {
161
+ .ngx-tooltip {
162
+ transition: none;
163
+ }
164
+ .ngx-tooltip.ngx-tooltip-visible {
165
+ transform: none;
166
+ }
167
+ }
@@ -0,0 +1,120 @@
1
+ .ngx-tooltip {
2
+ --ngx-tooltip-bg: light-dark(#f4f4f5, #18181b);
3
+ --ngx-tooltip-fg: light-dark(#18181b, #f4f4f5);
4
+ --ngx-tooltip-border: #ffffff1a;
5
+ --ngx-tooltip-shadow: 0 10px 30px rgb(0 0 0 / 0.25), 0 2px 8px rgb(0 0 0 / 0.18);
6
+ --ngx-tooltip-radius: 7px;
7
+ --ngx-tooltip-arrow-size: 6px;
8
+ position: fixed;
9
+ inset: auto;
10
+ margin: 0;
11
+ z-index: 2147483000;
12
+ display: block;
13
+ max-width: min(360px, 100vw - 16px);
14
+ padding: 8px 10px;
15
+ box-sizing: border-box;
16
+ background: var(--ngx-tooltip-bg);
17
+ color: var(--ngx-tooltip-fg);
18
+ border: 1px solid var(--ngx-tooltip-border);
19
+ border-radius: var(--ngx-tooltip-radius);
20
+ box-shadow: var(--ngx-tooltip-shadow);
21
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
22
+ font-size: 12px;
23
+ font-weight: 450;
24
+ line-height: 1.45;
25
+ text-align: start;
26
+ pointer-events: none;
27
+ user-select: none;
28
+ opacity: 0;
29
+ visibility: hidden;
30
+ transform: scale(0.96);
31
+ transition: opacity 120ms ease, transform 120ms cubic-bezier(0.2, 0.8, 0.2, 1), visibility 120ms linear;
32
+ overflow-wrap: anywhere;
33
+ }
34
+ .ngx-tooltip[data-placement^=top] {
35
+ transform-origin: bottom center;
36
+ }
37
+ .ngx-tooltip[data-placement^=bottom] {
38
+ transform-origin: top center;
39
+ }
40
+ .ngx-tooltip[data-placement^=left] {
41
+ transform-origin: right center;
42
+ }
43
+ .ngx-tooltip[data-placement^=right] {
44
+ transform-origin: left center;
45
+ }
46
+ .ngx-tooltip.ngx-tooltip-visible {
47
+ opacity: 1;
48
+ visibility: visible;
49
+ transform: scale(1);
50
+ }
51
+ .ngx-tooltip .ngx-tooltip-content {
52
+ position: relative;
53
+ max-width: inherit;
54
+ }
55
+ .ngx-tooltip .ngx-tooltip-content p {
56
+ margin: 0 0 6px;
57
+ }
58
+ .ngx-tooltip .ngx-tooltip-content p:last-child {
59
+ margin-bottom: 0;
60
+ }
61
+ .ngx-tooltip .ngx-tooltip-content code {
62
+ padding: 1px 4px;
63
+ border-radius: 4px;
64
+ background: rgba(255, 255, 255, 0.08);
65
+ font-family: "Cascadia Code", "SFMono-Regular", Consolas, monospace;
66
+ font-size: 0.9em;
67
+ }
68
+ .ngx-tooltip .ngx-tooltip-content strong {
69
+ font-weight: 650;
70
+ }
71
+ .ngx-tooltip .ngx-tooltip-content a {
72
+ color: inherit;
73
+ text-decoration: underline;
74
+ text-underline-offset: 2px;
75
+ }
76
+ .ngx-tooltip .ngx-tooltip-arrow {
77
+ position: absolute;
78
+ width: calc(var(--ngx-tooltip-arrow-size) * 2);
79
+ height: calc(var(--ngx-tooltip-arrow-size) * 2);
80
+ background: var(--ngx-tooltip-bg);
81
+ border: 1px solid var(--ngx-tooltip-border);
82
+ transform: rotate(45deg);
83
+ pointer-events: none;
84
+ }
85
+ .ngx-tooltip[data-placement^=top] .ngx-tooltip-arrow {
86
+ left: var(--ngx-tooltip-arrow-offset, 50%);
87
+ bottom: calc(var(--ngx-tooltip-arrow-size) * -1);
88
+ transform: translateX(-50%) rotate(45deg);
89
+ border-left: 0;
90
+ border-top: 0;
91
+ }
92
+ .ngx-tooltip[data-placement^=bottom] .ngx-tooltip-arrow {
93
+ left: var(--ngx-tooltip-arrow-offset, 50%);
94
+ top: calc(var(--ngx-tooltip-arrow-size) * -1);
95
+ transform: translateX(-50%) rotate(45deg);
96
+ border-right: 0;
97
+ border-bottom: 0;
98
+ }
99
+ .ngx-tooltip[data-placement^=left] .ngx-tooltip-arrow {
100
+ right: calc(var(--ngx-tooltip-arrow-size) * -1);
101
+ top: var(--ngx-tooltip-arrow-offset, 50%);
102
+ transform: translateY(-50%) rotate(45deg);
103
+ border-left: 0;
104
+ border-bottom: 0;
105
+ }
106
+ .ngx-tooltip[data-placement^=right] .ngx-tooltip-arrow {
107
+ left: calc(var(--ngx-tooltip-arrow-size) * -1);
108
+ top: var(--ngx-tooltip-arrow-offset, 50%);
109
+ transform: translateY(-50%) rotate(45deg);
110
+ border-right: 0;
111
+ border-top: 0;
112
+ }
113
+ @media (prefers-reduced-motion: reduce) {
114
+ .ngx-tooltip {
115
+ transition: none;
116
+ }
117
+ .ngx-tooltip.ngx-tooltip-visible {
118
+ transform: none;
119
+ }
120
+ }
@@ -0,0 +1 @@
1
+ # @ngx-kit/tooltip
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, ApplicationRef, EventEmitter, InjectionToken, OnInit, OnDestroy, Renderer2, ElementRef, AfterContentInit } from '@angular/core';
2
+ import { TemplateRef, ApplicationRef, EventEmitter, InjectionToken, OnInit, OnDestroy, AfterContentInit, Renderer2, ElementRef } from '@angular/core';
3
3
 
4
4
  interface IPosition {
5
5
  x: number;
@@ -19,17 +19,6 @@ declare class DropListGroupRef {
19
19
  }
20
20
 
21
21
  declare class PlaceHolderRef {
22
- /**
23
- * Custom placeholder content, from `*ngxPlaceholder` inside the `ngxDropList`. When unset,
24
- * `attach()` falls back to a shallow clone of the dragged element (previous behaviour).
25
- *
26
- * Example:
27
- *
28
- * <div ngxDropList>
29
- * <span class="my-placeholder" *ngxPlaceholder></span>
30
- * ...
31
- * </div>
32
- */
33
22
  tpl?: TemplateRef<unknown>;
34
23
  /** Set by `NgxPlaceholder` so the embedded view can join Angular's change-detection tree. */
35
24
  appRef?: ApplicationRef;
@@ -200,19 +189,6 @@ declare class DragDropService {
200
189
  readonly drags: _angular_core.WritableSignal<readonly DragRef<unknown>[]>;
201
190
  readonly dropLists: _angular_core.WritableSignal<readonly DropListRef<any>[]>;
202
191
  readonly activeDrag: _angular_core.WritableSignal<DragRef<unknown> | null>;
203
- /**
204
- * DOM-position registries, used to find the nearest enclosing list/group by walking real
205
- * ancestor elements instead of Angular's element-injector tree.
206
- *
207
- * This matters for `ngTemplateOutlet`-based recursive trees (a list of items whose own
208
- * children are rendered by re-invoking the SAME `<ng-template>`, as in a tree/outliner UI):
209
- * each invocation gets a FRESH embedded view whose injector context is wherever the outlet
210
- * was written in the template, not wherever its content ends up in the DOM. So `inject(TOKEN,
211
- * {skipSelf})` from one recursion level can never see a provider from another level — the
212
- * only fix within Angular's own DI is to manually thread `ngTemplateOutletInjector` through
213
- * every recursive call, which isn't reasonable to require of every consumer of this library.
214
- * A plain DOM walk has no such limitation: it only cares where elements actually ended up.
215
- */
216
192
  private readonly listsByEl;
217
193
  private readonly groupsByEl;
218
194
  registerDragItem(ref: DragRef<any>): void;
@@ -224,7 +200,7 @@ declare class DragDropService {
224
200
  /** Nearest registered drop list starting at (and including) `start`, walking up the DOM. */
225
201
  findAncestorDropList(start: HTMLElement | ParentNode | null): DropListRef | null;
226
202
  /** Nearest registered drop-list group starting at (and including) `start`, walking up the DOM. */
227
- findAncestorGroup(start: HTMLElement | ParentNode | null): DropListGroupRef | null;
203
+ findAncestorGroup(start: Node | null): DropListGroupRef | null;
228
204
  begin(ref: DragRef<any>): void;
229
205
  end(ref: DragRef<any>): void;
230
206
  cancelActive(): void;
@@ -247,6 +223,17 @@ declare class DragDropService {
247
223
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DragDropService>;
248
224
  }
249
225
 
226
+ declare class DragPreviewRef {
227
+ tpl?: TemplateRef<unknown>;
228
+ /** Set by `ngxDragPreview` so the embedded view can join Angular's change-detection tree. */
229
+ appRef?: ApplicationRef;
230
+ element?: HTMLElement;
231
+ isCustom: boolean;
232
+ private _view?;
233
+ attach(dragEl: HTMLElement, rect: DOMRect): HTMLElement;
234
+ detach(): void;
235
+ }
236
+
250
237
  type DragAxis = 'x' | 'y' | undefined;
251
238
  declare class DragRef<T = unknown> {
252
239
  data?: T;
@@ -266,6 +253,7 @@ declare class DragRef<T = unknown> {
266
253
  placeholder?: PlaceHolderRef;
267
254
  originDropList: DropListRef<T> | null;
268
255
  originIndex: number;
256
+ preview?: DragPreviewRef;
269
257
  readonly isDragging: _angular_core.WritableSignal<boolean>;
270
258
  readonly position: _angular_core.WritableSignal<IPosition>;
271
259
  private startPointer;
@@ -276,9 +264,6 @@ declare class DragRef<T = unknown> {
276
264
  private moveDx;
277
265
  private moveDy;
278
266
  private scrollCompensation;
279
- private preview?;
280
- private previewOffsetX;
281
- private previewOffsetY;
282
267
  private sourceVisibility;
283
268
  private sourceDisplay;
284
269
  private sourcePointerEvents;
@@ -391,7 +376,7 @@ interface IResizableOutput {
391
376
  }
392
377
 
393
378
  declare const NGX_DRAGGABLE: InjectionToken<NgxDraggable<unknown>>;
394
- declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy {
379
+ declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy, AfterContentInit {
395
380
  private readonly host;
396
381
  readonly disabled: _angular_core.ModelSignal<boolean>;
397
382
  /** Element whose rect constrains the drag. Now actually enforced. */
@@ -408,6 +393,7 @@ declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy {
408
393
  /** Auto-scroll the nearest scrollable ancestor while dragging near its edge. */
409
394
  readonly autoScroll: _angular_core.InputSignal<boolean>;
410
395
  set data(v: T);
396
+ private readonly customPreview?;
411
397
  readonly dragStart: _angular_core.OutputEmitterRef<IPosition>;
412
398
  readonly dragMove: _angular_core.OutputEmitterRef<IPosition>;
413
399
  readonly dragEnd: _angular_core.OutputEmitterRef<IPosition>;
@@ -435,6 +421,7 @@ declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy {
435
421
  protected readonly renderer: Renderer2;
436
422
  constructor(host: ElementRef<HTMLElement>);
437
423
  ngOnInit(): void;
424
+ ngAfterContentInit(): void;
438
425
  ngOnDestroy(): void;
439
426
  private pointerDown;
440
427
  private applyDragUpdate;
@@ -454,7 +441,7 @@ declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy {
454
441
  private isOnHandle;
455
442
  private isInteractive;
456
443
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDraggable<any>, never>;
457
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxDraggable<any>, "[NgxDraggable],[ngxDraggable]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "boundary": { "alias": "boundary"; "required": false; "isSignal": true; }; "dragRootElement": { "alias": "dragRootElement"; "required": false; "isSignal": true; }; "dragHandle": { "alias": "dragHandle"; "required": false; "isSignal": true; }; "lockAxis": { "alias": "lockAxis"; "required": false; "isSignal": true; }; "dragThreshold": { "alias": "dragThreshold"; "required": false; "isSignal": true; }; "keyboardStep": { "alias": "keyboardStep"; "required": false; "isSignal": true; }; "autoScroll": { "alias": "autoScroll"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; }; }, { "disabled": "disabledChange"; "dragRootElement": "dragRootElementChange"; "dragHandle": "dragHandleChange"; "dragStart": "dragStart"; "dragMove": "dragMove"; "dragEnd": "dragEnd"; }, never, never, true, never>;
444
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxDraggable<any>, "[NgxDraggable],[ngxDraggable]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "boundary": { "alias": "boundary"; "required": false; "isSignal": true; }; "dragRootElement": { "alias": "dragRootElement"; "required": false; "isSignal": true; }; "dragHandle": { "alias": "dragHandle"; "required": false; "isSignal": true; }; "lockAxis": { "alias": "lockAxis"; "required": false; "isSignal": true; }; "dragThreshold": { "alias": "dragThreshold"; "required": false; "isSignal": true; }; "keyboardStep": { "alias": "keyboardStep"; "required": false; "isSignal": true; }; "autoScroll": { "alias": "autoScroll"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; }; }, { "disabled": "disabledChange"; "dragRootElement": "dragRootElementChange"; "dragHandle": "dragHandleChange"; "dragStart": "dragStart"; "dragMove": "dragMove"; "dragEnd": "dragEnd"; }, ["customPreview"], never, true, never>;
458
445
  }
459
446
 
460
447
  declare class NgxResizable {
@@ -533,6 +520,17 @@ declare class NgxDropListGroup implements OnInit, OnDestroy {
533
520
  }
534
521
 
535
522
  declare const NGX_PLACEHOLDER: InjectionToken<PlaceHolderRef>;
523
+ /**
524
+ * Custom placeholder content, from `*ngxPlaceholder` inside the `ngxDropList`.
525
+ *
526
+ * @example
527
+ * ```html
528
+ * <div ngxDropList>
529
+ * <span class="my-placeholder" *ngxPlaceholder></span>
530
+ * ...
531
+ * </div>
532
+ * ```
533
+ */
536
534
  declare class NgxPlaceholder {
537
535
  readonly tpl: TemplateRef<unknown>;
538
536
  readonly _ref: PlaceHolderRef;
@@ -542,6 +540,28 @@ declare class NgxPlaceholder {
542
540
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxPlaceholder, "[NgxPlaceholder],[ngxPlaceholder]", never, {}, {}, never, never, true, never>;
543
541
  }
544
542
 
543
+ declare const NGX_DRAG_PREVIEW: InjectionToken<DragPreviewRef>;
544
+ /**
545
+ * Custom preview content, from `*ngxDragPreview` inside the `ngxDraggable`.
546
+ *
547
+ * @example
548
+ * ```html
549
+ * <div ngxDropList>
550
+ * <div ngxDraggable>
551
+ * <span class="my-preview" *ngxDragPreview></span>
552
+ * ...
553
+ * </div>
554
+ * </div>
555
+ * ```
556
+ */
557
+ declare class NgxDragPreview {
558
+ readonly tpl: TemplateRef<unknown>;
559
+ readonly _ref: DragPreviewRef;
560
+ constructor(tpl: TemplateRef<unknown>);
561
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDragPreview, never>;
562
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxDragPreview, "[ngxDragPreview]", never, {}, {}, never, never, true, never>;
563
+ }
564
+
545
565
  /**
546
566
  * True when `element` sits inside a right-to-left context.
547
567
  *
@@ -621,5 +641,5 @@ declare function transferArrayItem<T>(src: T[], dst: T[], from: number, to: numb
621
641
  */
622
642
  declare function copyArrayItem<T = any>(currentArray: T[], targetArray: T[], currentIndex: number, targetIndex: number): void;
623
643
 
624
- export { AutoScroller, DragDropService, DragRef, DropListGroupRef, DropListRef, NGX_DRAGGABLE, NGX_DROPLIST, NGX_DROPLIST_GROUP, NGX_PLACEHOLDER, NgxDraggable, NgxDropList, NgxDropListGroup, NgxPlaceholder, NgxResizable, PlaceHolderRef, adjustForZoom, checkBoundX, checkBoundY, clampResizeWithinBoundary, copyArrayItem, findScrollableAncestor, getPageZoom, getScrollPosition, isRtl, moveItemInArray, resolveLogicalDirection, transferArrayItem };
644
+ export { AutoScroller, DragDropService, DragRef, DropListGroupRef, DropListRef, NGX_DRAGGABLE, NGX_DRAG_PREVIEW, NGX_DROPLIST, NGX_DROPLIST_GROUP, NGX_PLACEHOLDER, NgxDragPreview, NgxDraggable, NgxDropList, NgxDropListGroup, NgxPlaceholder, NgxResizable, PlaceHolderRef, adjustForZoom, checkBoundX, checkBoundY, clampResizeWithinBoundary, copyArrayItem, findScrollableAncestor, getPageZoom, getScrollPosition, isRtl, moveItemInArray, resolveLogicalDirection, transferArrayItem };
625
645
  export type { DragAxis, IDropEvent, IPosition, IResizableOutput, LogicalResizeDirection, ResizeDirection };
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EnvironmentProviders, Injector, EventEmitter, OnInit, AfterViewInit, ElementRef, ComponentRef, ApplicationRef, EnvironmentInjector, InjectionToken } from '@angular/core';
2
+ import { EnvironmentProviders, Injector, EventEmitter, OnInit, AfterViewInit, ElementRef, InjectionToken } from '@angular/core';
3
3
  import * as ngx_kit_message from 'ngx-kit/message';
4
4
  import * as rxjs from 'rxjs';
5
5
  import { SafeHtml, DomSanitizer } from '@angular/platform-browser';
6
+ import { OverlayRef, OverlayService } from 'ngx-kit/core';
6
7
 
7
8
  type MessageIcon = 'None' | 'success' | 'error' | 'warning' | 'info' | 'question' | 'loading';
8
9
 
@@ -34,13 +35,6 @@ interface IMessageOptions {
34
35
  * @default ''
35
36
  */
36
37
  html?: string | HTMLElement;
37
- /**
38
- * Whether or not should show a full screen click-to-dismiss backdrop.
39
- * Either a boolean value or a css background value (hex, rgb, rgba, url, etc.)
40
- *
41
- * @default true
42
- */
43
- backdrop?: boolean;
44
38
  icon?: MessageIcon;
45
39
  /**
46
40
  * Popup width, including paddings (`box-sizing: border-box`).
@@ -157,6 +151,9 @@ interface IMessageOptions {
157
151
  */
158
152
  showCloseButton?: boolean;
159
153
  containerClass?: string;
154
+ ariaLabel?: string;
155
+ ariaLabelledby?: string;
156
+ ariaDescribedby?: string;
160
157
  }
161
158
 
162
159
  declare function provideMessage(options?: IMessageOptions): EnvironmentProviders;
@@ -227,37 +224,24 @@ declare class NgxMessageComponent implements OnInit, AfterViewInit {
227
224
  }>;
228
225
  ngOnInit(): void;
229
226
  ngAfterViewInit(): void;
230
- /**
231
- * وقتی چند تا پیام هم‌زمان باز باشن، هرکدوم listener خودشو روی document
232
- * داشت — پس یه فشردن Escape/Enter، رویداد رو به *همه‌شون* هم‌زمان می‌فرستاد،
233
- * نه فقط آخرین پیامی که باز شده (رفتار طبیعیِ یه استکِ مودال باید این باشه
234
- * که فقط بالاترین لایه به کیبورد واکنش نشون بده). این چک همون چیزیه که
235
- * OverlayService با getLastDialog() برای اورلی‌ها انجام می‌ده.
236
- */
237
227
  private isTopmost;
238
- onScapeKey(event: Event): void;
239
228
  onEnterKey(event: Event): void;
240
229
  onConfirm(): void;
241
230
  onCancel(): void;
242
231
  onDeny(): void;
243
232
  close(): void;
244
- onOutSideClick(): void;
245
- innerOnClick(ev: Event): void;
246
233
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxMessageComponent, never>;
247
234
  static ɵcmp: i0.ɵɵComponentDeclaration<NgxMessageComponent, "ngx-message", never, {}, {}, never, never, true, never>;
248
235
  }
249
236
 
250
237
  declare class NgxMessageService {
251
- private appRef;
252
238
  private injector;
253
- private envInjector;
254
- private _doc;
255
- alerts: Map<number, ComponentRef<NgxMessageComponent>>;
239
+ alerts: Map<number, OverlayRef<NgxMessageComponent>>;
240
+ protected readonly overlay: OverlayService;
256
241
  insertedId: number;
257
- constructor(appRef: ApplicationRef, injector: Injector, envInjector: EnvironmentInjector, _doc: Document);
242
+ constructor(injector: Injector);
258
243
  show<T = any>(c?: IMessageOptions): MessageOutput<T>;
259
- private removeDialogComponentFromBody;
260
- private appendDialogComponentToBody;
244
+ private remove;
261
245
  closeAll(): void;
262
246
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxMessageService, never>;
263
247
  static ɵprov: i0.ɵɵInjectableDeclaration<NgxMessageService>;
@@ -0,0 +1,88 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, InjectionToken, EnvironmentProviders } from '@angular/core';
3
+
4
+ type NgxTooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
5
+
6
+ type NgxTooltipTrigger = 'hover' | 'focus' | 'hover-focus';
7
+
8
+ declare class NgxTooltip implements OnDestroy {
9
+ private readonly configs;
10
+ private readonly elementRef;
11
+ private readonly renderer;
12
+ private readonly sanitizer;
13
+ private readonly doc;
14
+ private readonly element;
15
+ private tooltip?;
16
+ private showTimer?;
17
+ private hideTimer?;
18
+ private rafId;
19
+ private visible;
20
+ private destroyed;
21
+ private removeMouseEnter?;
22
+ private removeMouseLeave?;
23
+ private removeFocusIn?;
24
+ private removeFocusOut?;
25
+ private removeScroll?;
26
+ private removeResize?;
27
+ readonly tooltipText: _angular_core.InputSignal<string>;
28
+ readonly ngxTooltipUseOverlay: _angular_core.InputSignal<boolean>;
29
+ readonly ngxTooltipPlacement: _angular_core.InputSignal<NgxTooltipPlacement>;
30
+ readonly ngxTooltipOffset: _angular_core.InputSignal<number>;
31
+ readonly ngxTooltipDelay: _angular_core.InputSignal<number>;
32
+ readonly ngxTooltipHideDelay: _angular_core.InputSignal<number>;
33
+ readonly ngxTooltipAllowHtml: _angular_core.InputSignal<boolean>;
34
+ readonly ngxTooltipTrigger: _angular_core.InputSignal<NgxTooltipTrigger>;
35
+ /**
36
+ * If true, the tooltip automatically changes placement
37
+ * when there is not enough room.
38
+ */
39
+ readonly ngxTooltipFlip: _angular_core.InputSignal<boolean>;
40
+ /**
41
+ * Keeps the tooltip inside the viewport.
42
+ */
43
+ readonly ngxTooltipShift: _angular_core.InputSignal<boolean>;
44
+ constructor();
45
+ ngOnDestroy(): void;
46
+ private bindEvents;
47
+ private scheduleShow;
48
+ private scheduleHide;
49
+ private show;
50
+ private hide;
51
+ private getOrCreateTooltip;
52
+ private updateContent;
53
+ private applyDirection;
54
+ private schedulePositionUpdate;
55
+ private positionTooltip;
56
+ private calculatePosition;
57
+ private findBestPlacement;
58
+ private getPlacementCandidates;
59
+ private shiftIntoViewport;
60
+ private fitsViewport;
61
+ private intersectsViewport;
62
+ private parsePlacement;
63
+ private addViewportListeners;
64
+ private removeViewportListeners;
65
+ private removeListeners;
66
+ private hasContent;
67
+ private clearTimers;
68
+ private clearShowTimer;
69
+ private clearHideTimer;
70
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTooltip, never>;
71
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxTooltip, "[ngxTooltip]", never, { "tooltipText": { "alias": "ngxTooltip"; "required": true; "isSignal": true; }; "ngxTooltipUseOverlay": { "alias": "ngxTooltipUseOverlay"; "required": false; "isSignal": true; }; "ngxTooltipPlacement": { "alias": "ngxTooltipPlacement"; "required": false; "isSignal": true; }; "ngxTooltipOffset": { "alias": "ngxTooltipOffset"; "required": false; "isSignal": true; }; "ngxTooltipDelay": { "alias": "ngxTooltipDelay"; "required": false; "isSignal": true; }; "ngxTooltipHideDelay": { "alias": "ngxTooltipHideDelay"; "required": false; "isSignal": true; }; "ngxTooltipAllowHtml": { "alias": "ngxTooltipAllowHtml"; "required": false; "isSignal": true; }; "ngxTooltipTrigger": { "alias": "ngxTooltipTrigger"; "required": false; "isSignal": true; }; "ngxTooltipFlip": { "alias": "ngxTooltipFlip"; "required": false; "isSignal": true; }; "ngxTooltipShift": { "alias": "ngxTooltipShift"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
72
+ }
73
+
74
+ declare class NgxTooltipConfig {
75
+ placement: NgxTooltipPlacement;
76
+ offset: number;
77
+ delay: number;
78
+ hideDelay: number;
79
+ useHtml: boolean;
80
+ usePopOver: boolean;
81
+ trigger: NgxTooltipTrigger;
82
+ }
83
+
84
+ declare const NGX_TOOLTIP_CONFIG: InjectionToken<NgxTooltipConfig>;
85
+ declare function provideTooltip(configs?: NgxTooltipConfig): EnvironmentProviders;
86
+
87
+ export { NGX_TOOLTIP_CONFIG, NgxTooltip, provideTooltip };
88
+ export type { NgxTooltipPlacement, NgxTooltipTrigger };