@slickgrid-universal/custom-tooltip-plugin 9.12.0 → 10.0.0-beta.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/README.md CHANGED
@@ -5,11 +5,6 @@
5
5
  [![npm](https://img.shields.io/npm/dy/@slickgrid-universal/custom-tooltip-plugin)](https://www.npmjs.com/package/@slickgrid-universal/custom-tooltip-plugin)
6
6
  [![npm bundle size](https://img.shields.io/bundlephobia/minzip/@slickgrid-universal/custom-tooltip-plugin?color=success&label=gzip)](https://bundlephobia.com/result?p=@slickgrid-universal/custom-tooltip-plugin)
7
7
 
8
- [![Actions Status](https://github.com/ghiscoding/slickgrid-universal/workflows/CI%20Build/badge.svg)](https://github.com/ghiscoding/slickgrid-universal/actions)
9
- [![Cypress.io](https://img.shields.io/badge/tested%20with-Cypress-04C38E.svg)](https://www.cypress.io/)
10
- [![Vitest](https://img.shields.io/badge/tested%20with-vitest-fcc72b.svg?logo=vitest)](https://vitest.dev/)
11
- [![codecov](https://codecov.io/gh/ghiscoding/slickgrid-universal/branch/master/graph/badge.svg)](https://codecov.io/gh/ghiscoding/slickgrid-universal)
12
-
13
8
  ## Custom Tooltip (plugin)
14
9
  #### @slickgrid-universal/custom-tooltip-plugin
15
10
 
@@ -53,8 +48,5 @@ export class MyExample {
53
48
  }
54
49
  ```
55
50
 
56
- ### Internal Dependencies
57
- - [@slickgrid-universal/common](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/common)
58
-
59
51
  ### Installation
60
52
  Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation)
@@ -3,7 +3,7 @@ import type { CancellablePromiseWrapper, Column, ContainerService, CustomDataVie
3
3
  import { SlickEventHandler } from '@slickgrid-universal/common';
4
4
  type CellType = 'slick-cell' | 'slick-header-column' | 'slick-headerrow-column';
5
5
  export declare class SlickCustomTooltip {
6
- name: 'CustomTooltip';
6
+ readonly pluginName = "CustomTooltip";
7
7
  protected _addonOptions?: CustomTooltipOption;
8
8
  protected _cellAddonOptions?: CustomTooltipOption;
9
9
  protected _cellNodeElm?: HTMLElement;
@@ -22,6 +22,7 @@ export declare class SlickCustomTooltip {
22
22
  protected _hideTooltipTimeout?: any;
23
23
  protected _autoHideTimeout?: any;
24
24
  protected _isMouseOverTooltip: boolean;
25
+ protected _isGridTooltip: boolean;
25
26
  protected _bindEventService: BindingEventService;
26
27
  constructor();
27
28
  get addonOptions(): CustomTooltipOption | undefined;
@@ -39,6 +40,8 @@ export declare class SlickCustomTooltip {
39
40
  addRxJsResource(rxjs: RxJsFacade): void;
40
41
  init(grid: SlickGrid, containerService: ContainerService): void;
41
42
  dispose(): void;
43
+ protected handleGlobalMouseOver(event: MouseEvent): void;
44
+ protected handleGlobalMouseOut(event: MouseEvent): void;
42
45
  protected handleOnMouseLeave(): void;
43
46
  /**
44
47
  * hide (remove) tooltip from the DOM, it will also remove it from the DOM and also cancel any pending requests (as mentioned below).
@@ -47,6 +50,12 @@ export declare class SlickCustomTooltip {
47
50
  hideTooltip(): void;
48
51
  getOptions(): CustomTooltipOption | undefined;
49
52
  setOptions(newOptions: CustomTooltipOption): void;
53
+ /** Clear all timeouts (hide and auto-hide) */
54
+ protected clearTimeouts(): void;
55
+ /** Truncate text if it exceeds maxLength */
56
+ protected truncateText(text: string, maxLength?: number): string;
57
+ /** Find the closest tooltip element based on attributes */
58
+ protected findTooltipElement(target: HTMLElement | null): HTMLElement | null;
50
59
  /**
51
60
  * Async process callback will hide any prior tooltip & then merge the new result with the item `dataContext` under a `__params` property
52
61
  * (unless a new prop name is provided) to provice as dataContext object to the asyncPostFormatter.
@@ -79,6 +88,8 @@ export declare class SlickCustomTooltip {
79
88
  row: number;
80
89
  cell: number;
81
90
  }, value: any, columnDef: Column, item: unknown, tooltipText?: string, inputTitleElm?: Element | null): void;
91
+ /** Bind mouseenter/mouseleave events to tooltip when persistOnHover is disabled */
92
+ protected bindPersistOnHoverEvents(): void;
82
93
  /**
83
94
  * Reposition the Tooltip to be top-left position over the cell.
84
95
  * By default we use an "auto" mode which will allow to position the Tooltip to the best logical position in the window, also when we mention position, we are talking about the relative position against the grid cell.
@@ -90,6 +101,15 @@ export declare class SlickCustomTooltip {
90
101
  row: number;
91
102
  cell: number;
92
103
  }): void;
104
+ /** Check if element has tooltip attribute (title or data-slick-tooltip) */
105
+ protected hasTooltipAttribute(element: HTMLElement | null): boolean;
106
+ /**
107
+ * Find title element - returns the element itself if it has a non-empty title attribute,
108
+ * otherwise queries for a child element with a title attribute
109
+ */
110
+ protected findElementWithTitle(element: HTMLElement): Element | null;
111
+ /** Swap title attribute to data-slick-tooltip and clear title to prevent native browser tooltip */
112
+ protected swapTitleAttribute(element?: Element | null, tooltipText?: string): void;
93
113
  /**
94
114
  * swap and copy the "title" attribute into a new custom attribute then clear the "title" attribute
95
115
  * from the grid div text content so that it won't show also as a 2nd browser tooltip
@@ -1 +1 @@
1
- {"version":3,"file":"slickCustomTooltip.d.ts","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slickCustomTooltip.d.ts","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ const SELECTOR_CLOSEST_TOOLTIP_ATTR = '[title], [data-slick-tooltip]';
31
31
  const DEFAULT_CLASS_NAME = 'slick-custom-tooltip';
32
32
  export class SlickCustomTooltip {
33
33
  constructor() {
34
- this.name = 'CustomTooltip';
34
+ this.pluginName = 'CustomTooltip';
35
35
  this._cellType = 'slick-cell';
36
36
  this._rxjs = null;
37
37
  this._sharedService = null;
@@ -46,8 +46,11 @@ export class SlickCustomTooltip {
46
46
  whiteSpace: 'normal',
47
47
  autoHideDelay: 3000,
48
48
  persistOnHover: true,
49
+ observeAllTooltips: false, // global tooltip observation is disabled by default
50
+ observeTooltipContainer: 'body',
49
51
  };
50
52
  this._isMouseOverTooltip = false;
53
+ this._isGridTooltip = false; // tracks if tooltip is from grid events vs global events
51
54
  this._bindEventService = new BindingEventService();
52
55
  this._eventHandler = new SlickEventHandler();
53
56
  }
@@ -106,14 +109,62 @@ export class SlickCustomTooltip {
106
109
  .subscribe(grid.onHeaderMouseOut, this.handleOnMouseLeave.bind(this))
107
110
  .subscribe(grid.onHeaderRowMouseLeave, this.handleOnMouseLeave.bind(this))
108
111
  .subscribe(grid.onHeaderRowMouseOut, this.handleOnMouseLeave.bind(this));
112
+ // optionally observe all title elements outside the grid
113
+ if (this._addonOptions?.observeAllTooltips) {
114
+ const containerSelector = this._addonOptions.observeTooltipContainer || 'body';
115
+ const scope = containerSelector === 'body' ? document.body : document.querySelector(containerSelector) || grid.getContainerNode();
116
+ this._bindEventService.bind(scope, 'mouseover', this.handleGlobalMouseOver.bind(this));
117
+ this._bindEventService.bind(scope, 'mouseout', this.handleGlobalMouseOut.bind(this));
118
+ }
109
119
  }
110
120
  dispose() {
111
121
  // hide (remove) any tooltip and unsubscribe from all events
112
122
  this.hideTooltip();
113
123
  this._cancellablePromise = undefined;
114
124
  this._eventHandler.unsubscribeAll();
125
+ this._bindEventService.unbindAll();
126
+ }
127
+ handleGlobalMouseOver(event) {
128
+ const target = event.target;
129
+ // skip if target is within a SlickGrid cell (to avoid duplicate tooltips)
130
+ if (target?.closest('.slick-cell, .slick-header-column, .slick-headerrow-column')) {
131
+ return;
132
+ }
133
+ // Always hide any existing tooltip first to prevent overlapping tooltips
134
+ this._isGridTooltip = false; // mark as global tooltip event
135
+ this.hideTooltip();
136
+ // Find element with tooltip
137
+ const titleElm = this.findTooltipElement(target);
138
+ if (titleElm) {
139
+ const tooltipText = findFirstAttribute(titleElm, CLOSEST_TOOLTIP_FILLED_ATTR);
140
+ if (tooltipText) {
141
+ this._cellNodeElm = titleElm;
142
+ this._mouseTarget = titleElm;
143
+ this._cellType = 'slick-cell'; // use as default type
144
+ this._hasMultipleTooltips = (titleElm?.querySelectorAll(SELECTOR_CLOSEST_TOOLTIP_ATTR).length || 0) > 1;
145
+ // render the tooltip using regular tooltip mode
146
+ this._cellAddonOptions = { ...this._addonOptions, useRegularTooltip: true };
147
+ this.renderRegularTooltip(undefined, { row: -1, cell: -1 }, null, {}, {});
148
+ }
149
+ }
150
+ }
151
+ handleGlobalMouseOut(event) {
152
+ const target = event.target;
153
+ const relatedTarget = event.relatedTarget;
154
+ // check if we're leaving an element with a title attribute
155
+ const leavingTitleElm = target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
156
+ if (leavingTitleElm) {
157
+ // don't hide if we're moving to the tooltip itself (for persistOnHover support)
158
+ const enteringTooltip = relatedTarget?.closest('.slick-custom-tooltip');
159
+ // also don't hide if moving to a child of the same element with title
160
+ const stayingInSameTitleElm = relatedTarget?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR) === leavingTitleElm;
161
+ if (!enteringTooltip && !stayingInSameTitleElm) {
162
+ this.handleOnMouseLeave();
163
+ }
164
+ }
115
165
  }
116
166
  handleOnMouseLeave() {
167
+ this._isGridTooltip = false; // reset tooltip type flag
117
168
  if (this.addonOptions?.persistOnHover === false) {
118
169
  if (this._hideTooltipTimeout) {
119
170
  clearTimeout(this._hideTooltipTimeout);
@@ -136,14 +187,7 @@ export class SlickCustomTooltip {
136
187
  this._cancellablePromise?.cancel();
137
188
  this._observable$?.unsubscribe();
138
189
  if (this.addonOptions?.persistOnHover === false) {
139
- if (this._hideTooltipTimeout) {
140
- clearTimeout(this._hideTooltipTimeout);
141
- this._hideTooltipTimeout = undefined;
142
- }
143
- if (this._autoHideTimeout) {
144
- clearTimeout(this._autoHideTimeout);
145
- this._autoHideTimeout = undefined;
146
- }
190
+ this.clearTimeouts();
147
191
  this._isMouseOverTooltip = false;
148
192
  this._bindEventService.unbindAll();
149
193
  }
@@ -160,6 +204,37 @@ export class SlickCustomTooltip {
160
204
  // --
161
205
  // protected functions
162
206
  // ---------------------
207
+ /** Clear all timeouts (hide and auto-hide) */
208
+ clearTimeouts() {
209
+ if (this._hideTooltipTimeout) {
210
+ clearTimeout(this._hideTooltipTimeout);
211
+ this._hideTooltipTimeout = undefined;
212
+ }
213
+ if (this._autoHideTimeout) {
214
+ clearTimeout(this._autoHideTimeout);
215
+ this._autoHideTimeout = undefined;
216
+ }
217
+ }
218
+ /** Truncate text if it exceeds maxLength */
219
+ truncateText(text, maxLength) {
220
+ if (maxLength && text.length > maxLength) {
221
+ return text.substring(0, maxLength - 3) + '...';
222
+ }
223
+ return text;
224
+ }
225
+ /** Find the closest tooltip element based on attributes */
226
+ findTooltipElement(target) {
227
+ if (target) {
228
+ const targetHasTooltipAttr = this.hasTooltipAttribute(target);
229
+ if (findFirstAttribute(target, CLOSEST_TOOLTIP_FILLED_ATTR)) {
230
+ return target;
231
+ }
232
+ if (!targetHasTooltipAttr) {
233
+ return target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
234
+ }
235
+ }
236
+ return null;
237
+ }
163
238
  /**
164
239
  * Async process callback will hide any prior tooltip & then merge the new result with the item `dataContext` under a `__params` property
165
240
  * (unless a new prop name is provided) to provice as dataContext object to the asyncPostFormatter.
@@ -176,8 +251,11 @@ export class SlickCustomTooltip {
176
251
  }
177
252
  /** depending on the selector type, execute the necessary handler code */
178
253
  handleOnHeaderMouseOverByType(event, args, selector) {
254
+ this._isGridTooltip = true; // mark as grid tooltip event
179
255
  this._cellType = selector;
180
- this._mouseTarget = event.target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
256
+ // Find element with tooltip
257
+ const target = event.target;
258
+ this._mouseTarget = this.findTooltipElement(target);
181
259
  // before doing anything, let's remove any previous tooltip before
182
260
  // and cancel any opened Promise/Observable when using async
183
261
  this.hideTooltip();
@@ -214,8 +292,15 @@ export class SlickCustomTooltip {
214
292
  }
215
293
  }
216
294
  async handleOnMouseOver(event) {
295
+ this._isGridTooltip = true; // mark as grid tooltip event
217
296
  this._cellType = 'slick-cell';
218
- this._mouseTarget = event.target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
297
+ // Find element with tooltip
298
+ const target = event.target;
299
+ this._mouseTarget = this.findTooltipElement(target);
300
+ // if target has tooltip attribute but it's empty, return early to prevent showing parent/cell tooltip
301
+ if (this.hasTooltipAttribute(target) && !this._mouseTarget) {
302
+ return;
303
+ }
219
304
  // before doing anything, let's remove any previous tooltip before
220
305
  // and cancel any opened Promise/Observable when using async
221
306
  this.hideTooltip();
@@ -252,6 +337,13 @@ export class SlickCustomTooltip {
252
337
  // when we aren't using regular tooltip and we do have a tooltip formatter, let's render it
253
338
  if (typeof this._cellAddonOptions?.formatter === 'function') {
254
339
  this.renderTooltipFormatter(this._cellAddonOptions.formatter, cell, cellValue, columnDef, item);
340
+ // Clear all title attributes from elements in the cell to prevent native browser tooltips
341
+ // This should happen whenever we're using custom tooltips (not regular tooltips)
342
+ if (!this._cellAddonOptions?.useRegularTooltip && this._cellNodeElm) {
343
+ this._cellNodeElm.querySelectorAll('[title]').forEach((elm) => {
344
+ this.swapTitleAttribute(elm, elm.getAttribute('title') || '');
345
+ });
346
+ }
255
347
  }
256
348
  // when tooltip is an Async (delayed, e.g. with a backend API call)
257
349
  if (typeof this._cellAddonOptions?.asyncProcess === 'function') {
@@ -322,13 +414,17 @@ export class SlickCustomTooltip {
322
414
  !this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
323
415
  tooltipText = cellElm.textContent?.trim() ?? '';
324
416
  if (this._cellAddonOptions?.tooltipTextMaxLength && tooltipText.length > this._cellAddonOptions?.tooltipTextMaxLength) {
325
- tooltipText = tooltipText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...';
417
+ tooltipText = this.truncateText(tooltipText, this._cellAddonOptions.tooltipTextMaxLength);
326
418
  }
327
419
  tmpTitleElm = cellElm;
328
420
  }
329
421
  else {
330
422
  if (this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
423
+ // For nested tooltips in formatters, prioritize formatter output first, then fallback to cell element
331
424
  tmpTitleElm = tmpDiv.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
425
+ if (!tmpTitleElm) {
426
+ tmpTitleElm = cellElm && findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR) ? cellElm : null;
427
+ }
332
428
  }
333
429
  else {
334
430
  tmpTitleElm = findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR)
@@ -339,7 +435,10 @@ export class SlickCustomTooltip {
339
435
  }
340
436
  }
341
437
  // prettier-ignore
342
- if (tmpTitleElm?.style.display === 'none' || (this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))) {
438
+ // When in global tooltip observation mode (cell.row === -1), we always want to show the tooltip from the target element
439
+ // For grid cells with multiple tooltips, only hide if hovering the cell container itself (not a specific child element)
440
+ if (tmpTitleElm?.style.display === 'none' ||
441
+ (cell.row !== -1 && this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))) {
343
442
  tooltipText = '';
344
443
  }
345
444
  else if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
@@ -367,10 +466,7 @@ export class SlickCustomTooltip {
367
466
  value = findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || value;
368
467
  }
369
468
  let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';
370
- outputText =
371
- this._cellAddonOptions?.tooltipTextMaxLength && outputText.length > this._cellAddonOptions.tooltipTextMaxLength
372
- ? outputText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...'
373
- : outputText;
469
+ outputText = this.truncateText(outputText, this._cellAddonOptions?.tooltipTextMaxLength);
374
470
  let finalOutputText = '';
375
471
  if (!tooltipText || this._cellAddonOptions?.renderRegularTooltipAsHtml) {
376
472
  finalOutputText = this._grid.sanitizeHtmlString(outputText);
@@ -381,7 +477,7 @@ export class SlickCustomTooltip {
381
477
  finalOutputText = outputText || '';
382
478
  this._tooltipBodyElm.textContent = finalOutputText;
383
479
  this._tooltipBodyElm.style.whiteSpace =
384
- this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace; // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters
480
+ this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace;
385
481
  }
386
482
  // optional max height/width of the tooltip container
387
483
  if (this._cellAddonOptions?.maxHeight) {
@@ -393,29 +489,32 @@ export class SlickCustomTooltip {
393
489
  // when do have text to show, then append the new tooltip to the html body & reposition the tooltip
394
490
  if (finalOutputText.toString()) {
395
491
  document.body.appendChild(this._tooltipElm);
396
- if (this.addonOptions?.persistOnHover === false) {
397
- this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
398
- this._isMouseOverTooltip = true;
399
- if (this._hideTooltipTimeout) {
400
- clearTimeout(this._hideTooltipTimeout);
401
- this._hideTooltipTimeout = undefined;
402
- }
403
- });
404
- this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
405
- this._isMouseOverTooltip = false;
406
- this.hideTooltip();
407
- });
408
- // Auto-hide tooltip after 3 seconds regardless of mouse position
409
- this._autoHideTimeout = setTimeout(() => {
410
- this.hideTooltip();
411
- }, this.addonOptions?.autoHideDelay);
412
- }
413
- // reposition the tooltip on top of the cell that triggered the mouse over event
492
+ this.bindPersistOnHoverEvents();
414
493
  this.reposition(cell);
415
- // also clear any "title" attribute to avoid showing a 2nd browser tooltip
416
494
  this.swapAndClearTitleAttribute(inputTitleElm, outputText);
417
495
  }
418
496
  }
497
+ /** Bind mouseenter/mouseleave events to tooltip when persistOnHover is disabled */
498
+ bindPersistOnHoverEvents() {
499
+ if (this.addonOptions?.persistOnHover === false && this._tooltipElm) {
500
+ this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
501
+ this._isMouseOverTooltip = true;
502
+ if (this._hideTooltipTimeout) {
503
+ clearTimeout(this._hideTooltipTimeout);
504
+ this._hideTooltipTimeout = undefined;
505
+ }
506
+ });
507
+ this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
508
+ this._isMouseOverTooltip = false;
509
+ this.hideTooltip();
510
+ });
511
+ if (this._autoHideTimeout) {
512
+ clearTimeout(this._autoHideTimeout);
513
+ }
514
+ // Auto-hide tooltip after 3 seconds regardless of mouse position
515
+ this._autoHideTimeout = setTimeout(() => this.hideTooltip(), this.addonOptions?.autoHideDelay);
516
+ }
517
+ }
419
518
  /**
420
519
  * Reposition the Tooltip to be top-left position over the cell.
421
520
  * By default we use an "auto" mode which will allow to position the Tooltip to the best logical position in the window, also when we mention position, we are talking about the relative position against the grid cell.
@@ -474,34 +573,49 @@ export class SlickCustomTooltip {
474
573
  this._tooltipElm.style.left = `${newPositionLeft}px`;
475
574
  }
476
575
  }
576
+ /** Check if element has tooltip attribute (title or data-slick-tooltip) */
577
+ hasTooltipAttribute(element) {
578
+ return !!element && (element.hasAttribute('title') || element.hasAttribute('data-slick-tooltip'));
579
+ }
580
+ /**
581
+ * Find title element - returns the element itself if it has a non-empty title attribute,
582
+ * otherwise queries for a child element with a title attribute
583
+ */
584
+ findElementWithTitle(element) {
585
+ if (element.hasAttribute('title') && element.getAttribute('title')) {
586
+ return element;
587
+ }
588
+ return element.querySelector('[title]');
589
+ }
590
+ /** Swap title attribute to data-slick-tooltip and clear title to prevent native browser tooltip */
591
+ swapTitleAttribute(element, tooltipText) {
592
+ if (element && tooltipText) {
593
+ element.setAttribute('data-slick-tooltip', tooltipText);
594
+ if (element.hasAttribute('title')) {
595
+ element.setAttribute('title', '');
596
+ }
597
+ }
598
+ }
477
599
  /**
478
600
  * swap and copy the "title" attribute into a new custom attribute then clear the "title" attribute
479
601
  * from the grid div text content so that it won't show also as a 2nd browser tooltip
480
602
  */
481
603
  swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
482
- // the title attribute might be directly on the slick-cell container element (when formatter returns a result object)
483
- // OR in a child element (most commonly as a custom formatter)
604
+ let titleElm = inputTitleElm;
484
605
  let cellWithTitleElm;
485
- if (inputTitleElm) {
486
- cellWithTitleElm =
487
- this._cellNodeElm &&
488
- (this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')
489
- ? this._cellNodeElm
490
- : this._cellNodeElm?.querySelector('[title]'));
491
- }
492
- // prettier-ignore
493
- const titleElm = inputTitleElm || (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm?.querySelector('[title]')));
494
- // flip tooltip text from `title` to `data-slick-tooltip`
495
- if (titleElm && tooltipText) {
496
- titleElm.setAttribute('data-slick-tooltip', tooltipText || '');
497
- if (titleElm.hasAttribute('title')) {
498
- titleElm.setAttribute('title', '');
499
- }
500
- // targeted element might actually not be the cell element,
501
- // so let's also clear the cell element title attribute to avoid showing native + custom tooltips
502
- if (cellWithTitleElm?.hasAttribute('title')) {
503
- cellWithTitleElm.setAttribute('title', '');
504
- }
606
+ // Only search for children in grid cells, not in global tooltip elements
607
+ if (!titleElm && this._cellNodeElm && this._isGridTooltip) {
608
+ titleElm = this.findElementWithTitle(this._cellNodeElm);
609
+ }
610
+ // For grid cells with inputTitleElm matching cellNodeElm, also check for child elements with title attributes
611
+ if (this._isGridTooltip && inputTitleElm && inputTitleElm === this._cellNodeElm) {
612
+ cellWithTitleElm = this.findElementWithTitle(this._cellNodeElm);
613
+ }
614
+ // Swap title to data-slick-tooltip and clear title to prevent native browser tooltip
615
+ this.swapTitleAttribute(titleElm, tooltipText);
616
+ // Also clear cell element's title if it's different (only for grid cells)
617
+ if (cellWithTitleElm && cellWithTitleElm !== titleElm) {
618
+ this.swapTitleAttribute(cellWithTitleElm, cellWithTitleElm.getAttribute('title') || '');
505
619
  }
506
620
  }
507
621
  }
@@ -1 +1 @@
1
- {"version":3,"file":"slickCustomTooltip.js","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slickCustomTooltip.js","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slickgrid-universal/custom-tooltip-plugin",
3
- "version": "9.12.0",
3
+ "version": "10.0.0-beta.0",
4
4
  "description": "A plugin to add Custom Tooltip when hovering a cell, it subscribes to the cell",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -31,9 +31,9 @@
31
31
  "url": "https://github.com/ghiscoding/slickgrid-universal/issues"
32
32
  },
33
33
  "dependencies": {
34
- "@slickgrid-universal/binding": "9.12.0",
35
- "@slickgrid-universal/common": "9.12.0",
36
- "@slickgrid-universal/utils": "9.12.0"
34
+ "@slickgrid-universal/binding": "10.0.0-beta.0",
35
+ "@slickgrid-universal/common": "10.0.0-beta.0",
36
+ "@slickgrid-universal/utils": "10.0.0-beta.0"
37
37
  },
38
- "gitHead": "02bb1252e7069954d0ee0c5d187edc7c209d2245"
38
+ "gitHead": "9ee3b4ce76e171dd3375f1e68e232e315364600e"
39
39
  }
@@ -62,8 +62,7 @@ const SELECTOR_CLOSEST_TOOLTIP_ATTR = '[title], [data-slick-tooltip]';
62
62
  const DEFAULT_CLASS_NAME = 'slick-custom-tooltip';
63
63
 
64
64
  export class SlickCustomTooltip {
65
- name: 'CustomTooltip' = 'CustomTooltip' as const;
66
-
65
+ readonly pluginName = 'CustomTooltip';
67
66
  protected _addonOptions?: CustomTooltipOption;
68
67
  protected _cellAddonOptions?: CustomTooltipOption;
69
68
  protected _cellNodeElm?: HTMLElement;
@@ -86,12 +85,15 @@ export class SlickCustomTooltip {
86
85
  whiteSpace: 'normal',
87
86
  autoHideDelay: 3000,
88
87
  persistOnHover: true,
88
+ observeAllTooltips: false, // global tooltip observation is disabled by default
89
+ observeTooltipContainer: 'body',
89
90
  } as CustomTooltipOption;
90
91
  protected _grid!: SlickGrid;
91
92
  protected _eventHandler: SlickEventHandler;
92
93
  protected _hideTooltipTimeout?: any;
93
94
  protected _autoHideTimeout?: any;
94
95
  protected _isMouseOverTooltip = false;
96
+ protected _isGridTooltip = false; // tracks if tooltip is from grid events vs global events
95
97
  protected _bindEventService: BindingEventService = new BindingEventService();
96
98
 
97
99
  constructor() {
@@ -161,6 +163,14 @@ export class SlickCustomTooltip {
161
163
  .subscribe(grid.onHeaderMouseOut, this.handleOnMouseLeave.bind(this))
162
164
  .subscribe(grid.onHeaderRowMouseLeave, this.handleOnMouseLeave.bind(this))
163
165
  .subscribe(grid.onHeaderRowMouseOut, this.handleOnMouseLeave.bind(this));
166
+
167
+ // optionally observe all title elements outside the grid
168
+ if (this._addonOptions?.observeAllTooltips) {
169
+ const containerSelector = this._addonOptions.observeTooltipContainer || 'body';
170
+ const scope = containerSelector === 'body' ? document.body : document.querySelector(containerSelector) || grid.getContainerNode();
171
+ this._bindEventService.bind(scope, 'mouseover', this.handleGlobalMouseOver.bind(this) as EventListener);
172
+ this._bindEventService.bind(scope, 'mouseout', this.handleGlobalMouseOut.bind(this) as EventListener);
173
+ }
164
174
  }
165
175
 
166
176
  dispose(): void {
@@ -168,14 +178,64 @@ export class SlickCustomTooltip {
168
178
  this.hideTooltip();
169
179
  this._cancellablePromise = undefined;
170
180
  this._eventHandler.unsubscribeAll();
181
+ this._bindEventService.unbindAll();
182
+ }
183
+
184
+ protected handleGlobalMouseOver(event: MouseEvent): void {
185
+ const target = event.target as HTMLElement;
186
+
187
+ // skip if target is within a SlickGrid cell (to avoid duplicate tooltips)
188
+ if (target?.closest('.slick-cell, .slick-header-column, .slick-headerrow-column')) {
189
+ return;
190
+ }
191
+
192
+ // Always hide any existing tooltip first to prevent overlapping tooltips
193
+ this._isGridTooltip = false; // mark as global tooltip event
194
+ this.hideTooltip();
195
+
196
+ // Find element with tooltip
197
+ const titleElm = this.findTooltipElement(target);
198
+
199
+ if (titleElm) {
200
+ const tooltipText = findFirstAttribute(titleElm, CLOSEST_TOOLTIP_FILLED_ATTR);
201
+ if (tooltipText) {
202
+ this._cellNodeElm = titleElm;
203
+ this._mouseTarget = titleElm;
204
+ this._cellType = 'slick-cell'; // use as default type
205
+ this._hasMultipleTooltips = (titleElm?.querySelectorAll(SELECTOR_CLOSEST_TOOLTIP_ATTR).length || 0) > 1;
206
+
207
+ // render the tooltip using regular tooltip mode
208
+ this._cellAddonOptions = { ...this._addonOptions, useRegularTooltip: true };
209
+ this.renderRegularTooltip(undefined, { row: -1, cell: -1 }, null, {} as Column, {});
210
+ }
211
+ }
212
+ }
213
+
214
+ protected handleGlobalMouseOut(event: MouseEvent): void {
215
+ const target = event.target as HTMLElement;
216
+ const relatedTarget = event.relatedTarget as HTMLElement;
217
+
218
+ // check if we're leaving an element with a title attribute
219
+ const leavingTitleElm = target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
220
+
221
+ if (leavingTitleElm) {
222
+ // don't hide if we're moving to the tooltip itself (for persistOnHover support)
223
+ const enteringTooltip = relatedTarget?.closest('.slick-custom-tooltip');
224
+ // also don't hide if moving to a child of the same element with title
225
+ const stayingInSameTitleElm = relatedTarget?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR) === leavingTitleElm;
226
+
227
+ if (!enteringTooltip && !stayingInSameTitleElm) {
228
+ this.handleOnMouseLeave();
229
+ }
230
+ }
171
231
  }
172
232
 
173
233
  protected handleOnMouseLeave(): void {
234
+ this._isGridTooltip = false; // reset tooltip type flag
174
235
  if (this.addonOptions?.persistOnHover === false) {
175
236
  if (this._hideTooltipTimeout) {
176
237
  clearTimeout(this._hideTooltipTimeout);
177
238
  }
178
-
179
239
  this._hideTooltipTimeout = setTimeout(() => {
180
240
  if (!this._isMouseOverTooltip) {
181
241
  this.hideTooltip();
@@ -195,15 +255,7 @@ export class SlickCustomTooltip {
195
255
  this._observable$?.unsubscribe();
196
256
 
197
257
  if (this.addonOptions?.persistOnHover === false) {
198
- if (this._hideTooltipTimeout) {
199
- clearTimeout(this._hideTooltipTimeout);
200
- this._hideTooltipTimeout = undefined;
201
- }
202
- if (this._autoHideTimeout) {
203
- clearTimeout(this._autoHideTimeout);
204
- this._autoHideTimeout = undefined;
205
- }
206
-
258
+ this.clearTimeouts();
207
259
  this._isMouseOverTooltip = false;
208
260
  this._bindEventService.unbindAll();
209
261
  }
@@ -225,6 +277,40 @@ export class SlickCustomTooltip {
225
277
  // protected functions
226
278
  // ---------------------
227
279
 
280
+ /** Clear all timeouts (hide and auto-hide) */
281
+ protected clearTimeouts(): void {
282
+ if (this._hideTooltipTimeout) {
283
+ clearTimeout(this._hideTooltipTimeout);
284
+ this._hideTooltipTimeout = undefined;
285
+ }
286
+ if (this._autoHideTimeout) {
287
+ clearTimeout(this._autoHideTimeout);
288
+ this._autoHideTimeout = undefined;
289
+ }
290
+ }
291
+
292
+ /** Truncate text if it exceeds maxLength */
293
+ protected truncateText(text: string, maxLength?: number): string {
294
+ if (maxLength && text.length > maxLength) {
295
+ return text.substring(0, maxLength - 3) + '...';
296
+ }
297
+ return text;
298
+ }
299
+
300
+ /** Find the closest tooltip element based on attributes */
301
+ protected findTooltipElement(target: HTMLElement | null): HTMLElement | null {
302
+ if (target) {
303
+ const targetHasTooltipAttr = this.hasTooltipAttribute(target);
304
+ if (findFirstAttribute(target, CLOSEST_TOOLTIP_FILLED_ATTR)) {
305
+ return target;
306
+ }
307
+ if (!targetHasTooltipAttr) {
308
+ return target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR) as HTMLElement;
309
+ }
310
+ }
311
+ return null;
312
+ }
313
+
228
314
  /**
229
315
  * Async process callback will hide any prior tooltip & then merge the new result with the item `dataContext` under a `__params` property
230
316
  * (unless a new prop name is provided) to provice as dataContext object to the asyncPostFormatter.
@@ -247,8 +333,12 @@ export class SlickCustomTooltip {
247
333
 
248
334
  /** depending on the selector type, execute the necessary handler code */
249
335
  protected handleOnHeaderMouseOverByType(event: SlickEventData, args: any, selector: CellType): void {
336
+ this._isGridTooltip = true; // mark as grid tooltip event
250
337
  this._cellType = selector;
251
- this._mouseTarget = event.target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
338
+
339
+ // Find element with tooltip
340
+ const target = event.target as HTMLElement;
341
+ this._mouseTarget = this.findTooltipElement(target);
252
342
 
253
343
  // before doing anything, let's remove any previous tooltip before
254
344
  // and cancel any opened Promise/Observable when using async
@@ -292,9 +382,17 @@ export class SlickCustomTooltip {
292
382
  }
293
383
 
294
384
  protected async handleOnMouseOver(event: SlickEventData): Promise<void> {
385
+ this._isGridTooltip = true; // mark as grid tooltip event
295
386
  this._cellType = 'slick-cell';
296
- this._mouseTarget = event.target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
297
387
 
388
+ // Find element with tooltip
389
+ const target = event.target as HTMLElement;
390
+ this._mouseTarget = this.findTooltipElement(target);
391
+
392
+ // if target has tooltip attribute but it's empty, return early to prevent showing parent/cell tooltip
393
+ if (this.hasTooltipAttribute(target) && !this._mouseTarget) {
394
+ return;
395
+ }
298
396
  // before doing anything, let's remove any previous tooltip before
299
397
  // and cancel any opened Promise/Observable when using async
300
398
  this.hideTooltip();
@@ -339,6 +437,14 @@ export class SlickCustomTooltip {
339
437
  // when we aren't using regular tooltip and we do have a tooltip formatter, let's render it
340
438
  if (typeof this._cellAddonOptions?.formatter === 'function') {
341
439
  this.renderTooltipFormatter(this._cellAddonOptions.formatter, cell, cellValue, columnDef, item);
440
+
441
+ // Clear all title attributes from elements in the cell to prevent native browser tooltips
442
+ // This should happen whenever we're using custom tooltips (not regular tooltips)
443
+ if (!this._cellAddonOptions?.useRegularTooltip && this._cellNodeElm) {
444
+ this._cellNodeElm.querySelectorAll('[title]').forEach((elm) => {
445
+ this.swapTitleAttribute(elm, elm.getAttribute('title') || '');
446
+ });
447
+ }
342
448
  }
343
449
 
344
450
  // when tooltip is an Async (delayed, e.g. with a backend API call)
@@ -436,12 +542,16 @@ export class SlickCustomTooltip {
436
542
  ) {
437
543
  tooltipText = cellElm.textContent?.trim() ?? '';
438
544
  if (this._cellAddonOptions?.tooltipTextMaxLength && tooltipText.length > this._cellAddonOptions?.tooltipTextMaxLength) {
439
- tooltipText = tooltipText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...';
545
+ tooltipText = this.truncateText(tooltipText, this._cellAddonOptions.tooltipTextMaxLength);
440
546
  }
441
547
  tmpTitleElm = cellElm;
442
548
  } else {
443
549
  if (this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
550
+ // For nested tooltips in formatters, prioritize formatter output first, then fallback to cell element
444
551
  tmpTitleElm = tmpDiv.querySelector<HTMLDivElement>(SELECTOR_CLOSEST_TOOLTIP_ATTR);
552
+ if (!tmpTitleElm) {
553
+ tmpTitleElm = cellElm && findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR) ? cellElm : null;
554
+ }
445
555
  } else {
446
556
  tmpTitleElm = findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR)
447
557
  ? cellElm
@@ -453,7 +563,12 @@ export class SlickCustomTooltip {
453
563
  }
454
564
 
455
565
  // prettier-ignore
456
- if (tmpTitleElm?.style.display === 'none' || (this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))) {
566
+ // When in global tooltip observation mode (cell.row === -1), we always want to show the tooltip from the target element
567
+ // For grid cells with multiple tooltips, only hide if hovering the cell container itself (not a specific child element)
568
+ if (
569
+ tmpTitleElm?.style.display === 'none' ||
570
+ (cell.row !== -1 && this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))
571
+ ) {
457
572
  tooltipText = '';
458
573
  } else if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
459
574
  tooltipText = findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || '';
@@ -493,10 +608,7 @@ export class SlickCustomTooltip {
493
608
  }
494
609
 
495
610
  let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';
496
- outputText =
497
- this._cellAddonOptions?.tooltipTextMaxLength && outputText.length > this._cellAddonOptions.tooltipTextMaxLength
498
- ? outputText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...'
499
- : outputText;
611
+ outputText = this.truncateText(outputText, this._cellAddonOptions?.tooltipTextMaxLength);
500
612
 
501
613
  let finalOutputText = '';
502
614
  if (!tooltipText || this._cellAddonOptions?.renderRegularTooltipAsHtml) {
@@ -507,7 +619,7 @@ export class SlickCustomTooltip {
507
619
  finalOutputText = outputText || '';
508
620
  this._tooltipBodyElm.textContent = finalOutputText;
509
621
  this._tooltipBodyElm.style.whiteSpace =
510
- this._cellAddonOptions?.regularTooltipWhiteSpace ?? (this._defaultOptions.regularTooltipWhiteSpace as string); // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters
622
+ this._cellAddonOptions?.regularTooltipWhiteSpace ?? (this._defaultOptions.regularTooltipWhiteSpace as string);
511
623
  }
512
624
 
513
625
  // optional max height/width of the tooltip container
@@ -521,32 +633,33 @@ export class SlickCustomTooltip {
521
633
  // when do have text to show, then append the new tooltip to the html body & reposition the tooltip
522
634
  if (finalOutputText.toString()) {
523
635
  document.body.appendChild(this._tooltipElm);
636
+ this.bindPersistOnHoverEvents();
637
+ this.reposition(cell);
638
+ this.swapAndClearTitleAttribute(inputTitleElm, outputText);
639
+ }
640
+ }
524
641
 
525
- if (this.addonOptions?.persistOnHover === false) {
526
- this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
527
- this._isMouseOverTooltip = true;
528
- if (this._hideTooltipTimeout) {
529
- clearTimeout(this._hideTooltipTimeout);
530
- this._hideTooltipTimeout = undefined;
531
- }
532
- });
642
+ /** Bind mouseenter/mouseleave events to tooltip when persistOnHover is disabled */
643
+ protected bindPersistOnHoverEvents(): void {
644
+ if (this.addonOptions?.persistOnHover === false && this._tooltipElm) {
645
+ this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
646
+ this._isMouseOverTooltip = true;
647
+ if (this._hideTooltipTimeout) {
648
+ clearTimeout(this._hideTooltipTimeout);
649
+ this._hideTooltipTimeout = undefined;
650
+ }
651
+ });
533
652
 
534
- this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
535
- this._isMouseOverTooltip = false;
536
- this.hideTooltip();
537
- });
653
+ this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
654
+ this._isMouseOverTooltip = false;
655
+ this.hideTooltip();
656
+ });
538
657
 
539
- // Auto-hide tooltip after 3 seconds regardless of mouse position
540
- this._autoHideTimeout = setTimeout(() => {
541
- this.hideTooltip();
542
- }, this.addonOptions?.autoHideDelay);
658
+ if (this._autoHideTimeout) {
659
+ clearTimeout(this._autoHideTimeout);
543
660
  }
544
-
545
- // reposition the tooltip on top of the cell that triggered the mouse over event
546
- this.reposition(cell);
547
-
548
- // also clear any "title" attribute to avoid showing a 2nd browser tooltip
549
- this.swapAndClearTitleAttribute(inputTitleElm, outputText);
661
+ // Auto-hide tooltip after 3 seconds regardless of mouse position
662
+ this._autoHideTimeout = setTimeout(() => this.hideTooltip(), this.addonOptions?.autoHideDelay);
550
663
  }
551
664
  }
552
665
 
@@ -614,35 +727,55 @@ export class SlickCustomTooltip {
614
727
  }
615
728
  }
616
729
 
730
+ /** Check if element has tooltip attribute (title or data-slick-tooltip) */
731
+ protected hasTooltipAttribute(element: HTMLElement | null): boolean {
732
+ return !!element && (element.hasAttribute('title') || element.hasAttribute('data-slick-tooltip'));
733
+ }
734
+
735
+ /**
736
+ * Find title element - returns the element itself if it has a non-empty title attribute,
737
+ * otherwise queries for a child element with a title attribute
738
+ */
739
+ protected findElementWithTitle(element: HTMLElement): Element | null {
740
+ if (element.hasAttribute('title') && element.getAttribute('title')) {
741
+ return element;
742
+ }
743
+ return element.querySelector('[title]');
744
+ }
745
+
746
+ /** Swap title attribute to data-slick-tooltip and clear title to prevent native browser tooltip */
747
+ protected swapTitleAttribute(element?: Element | null, tooltipText?: string): void {
748
+ if (element && tooltipText) {
749
+ element.setAttribute('data-slick-tooltip', tooltipText);
750
+ if (element.hasAttribute('title')) {
751
+ element.setAttribute('title', '');
752
+ }
753
+ }
754
+ }
755
+
617
756
  /**
618
757
  * swap and copy the "title" attribute into a new custom attribute then clear the "title" attribute
619
758
  * from the grid div text content so that it won't show also as a 2nd browser tooltip
620
759
  */
621
760
  protected swapAndClearTitleAttribute(inputTitleElm?: Element | null, tooltipText?: string): void {
622
- // the title attribute might be directly on the slick-cell container element (when formatter returns a result object)
623
- // OR in a child element (most commonly as a custom formatter)
761
+ let titleElm: Element | null | undefined = inputTitleElm;
624
762
  let cellWithTitleElm: Element | null | undefined;
625
- if (inputTitleElm) {
626
- cellWithTitleElm =
627
- this._cellNodeElm &&
628
- (this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')
629
- ? this._cellNodeElm
630
- : this._cellNodeElm?.querySelector('[title]'));
763
+
764
+ // Only search for children in grid cells, not in global tooltip elements
765
+ if (!titleElm && this._cellNodeElm && this._isGridTooltip) {
766
+ titleElm = this.findElementWithTitle(this._cellNodeElm);
631
767
  }
632
- // prettier-ignore
633
- const titleElm = inputTitleElm || (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm?.querySelector('[title]')));
634
-
635
- // flip tooltip text from `title` to `data-slick-tooltip`
636
- if (titleElm && tooltipText) {
637
- titleElm.setAttribute('data-slick-tooltip', tooltipText || '');
638
- if (titleElm.hasAttribute('title')) {
639
- titleElm.setAttribute('title', '');
640
- }
641
- // targeted element might actually not be the cell element,
642
- // so let's also clear the cell element title attribute to avoid showing native + custom tooltips
643
- if (cellWithTitleElm?.hasAttribute('title')) {
644
- cellWithTitleElm.setAttribute('title', '');
645
- }
768
+
769
+ // For grid cells with inputTitleElm matching cellNodeElm, also check for child elements with title attributes
770
+ if (this._isGridTooltip && inputTitleElm && inputTitleElm === this._cellNodeElm) {
771
+ cellWithTitleElm = this.findElementWithTitle(this._cellNodeElm);
772
+ }
773
+
774
+ // Swap title to data-slick-tooltip and clear title to prevent native browser tooltip
775
+ this.swapTitleAttribute(titleElm, tooltipText);
776
+ // Also clear cell element's title if it's different (only for grid cells)
777
+ if (cellWithTitleElm && cellWithTitleElm !== titleElm) {
778
+ this.swapTitleAttribute(cellWithTitleElm, cellWithTitleElm.getAttribute('title') || '');
646
779
  }
647
780
  }
648
781
  }