@slickgrid-universal/custom-tooltip-plugin 4.6.0 → 4.6.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.
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SlickCustomTooltip = void 0;
4
4
  const common_1 = require("@slickgrid-universal/common");
5
5
  const utils_1 = require("@slickgrid-universal/utils");
6
+ const CLOSEST_TOOLTIP_FILLED_ATTR = ['title', 'data-slick-tooltip'];
7
+ const SELECTOR_CLOSEST_TOOLTIP_ATTR = '[title], [data-slick-tooltip]';
6
8
  /**
7
9
  * A plugin to add Custom Tooltip when hovering a cell, it subscribes to the cell "onMouseEnter" and "onMouseLeave" events.
8
10
  * The "customTooltip" is defined in the Column Definition OR Grid Options (the first found will have priority over the second)
@@ -33,8 +35,12 @@ class SlickCustomTooltip {
33
35
  this._cellType = 'slick-cell';
34
36
  this._rxjs = null;
35
37
  this._sharedService = null;
38
+ this._mousePosition = { x: 0, y: 0 };
39
+ this._hasMultipleTooltips = false;
36
40
  this._defaultOptions = {
41
+ bodyClassName: 'tooltip-body',
37
42
  className: 'slick-custom-tooltip',
43
+ offsetArrow: 3, // same as `$slick-tooltip-arrow-side-margin` CSS/SASS variable
38
44
  offsetLeft: 0,
39
45
  offsetRight: 0,
40
46
  offsetTopBottom: 4,
@@ -53,6 +59,9 @@ class SlickCustomTooltip {
53
59
  get cellAddonOptions() {
54
60
  return this._cellAddonOptions;
55
61
  }
62
+ get bodyClassName() {
63
+ return this._cellAddonOptions?.bodyClassName ?? 'tooltip-body';
64
+ }
56
65
  get className() {
57
66
  return this._cellAddonOptions?.className ?? 'slick-custom-tooltip';
58
67
  }
@@ -82,12 +91,12 @@ class SlickCustomTooltip {
82
91
  this._sharedService = containerService.get('SharedService');
83
92
  this._addonOptions = { ...this._defaultOptions, ...(this._sharedService?.gridOptions?.customTooltip) };
84
93
  this._eventHandler
85
- .subscribe(grid.onMouseEnter, this.handleOnMouseEnter.bind(this))
86
- .subscribe(grid.onHeaderMouseEnter, (e, args) => this.handleOnHeaderMouseEnterByType(e, args, 'slick-header-column'))
87
- .subscribe(grid.onHeaderRowMouseEnter, (e, args) => this.handleOnHeaderMouseEnterByType(e, args, 'slick-headerrow-column'))
94
+ .subscribe(grid.onMouseEnter, this.handleOnMouseOver.bind(this))
95
+ .subscribe(grid.onHeaderMouseOver, (e, args) => this.handleOnHeaderMouseOverByType(e, args, 'slick-header-column'))
96
+ .subscribe(grid.onHeaderRowMouseOver, (e, args) => this.handleOnHeaderMouseOverByType(e, args, 'slick-headerrow-column'))
88
97
  .subscribe(grid.onMouseLeave, this.hideTooltip.bind(this))
89
- .subscribe(grid.onHeaderMouseLeave, this.hideTooltip.bind(this))
90
- .subscribe(grid.onHeaderRowMouseLeave, this.hideTooltip.bind(this));
98
+ .subscribe(grid.onHeaderMouseOut, this.hideTooltip.bind(this))
99
+ .subscribe(grid.onHeaderRowMouseOut, this.hideTooltip.bind(this));
91
100
  }
92
101
  dispose() {
93
102
  // hide (remove) any tooltip and unsubscribe from all events
@@ -129,8 +138,10 @@ class SlickCustomTooltip {
129
138
  }
130
139
  }
131
140
  /** depending on the selector type, execute the necessary handler code */
132
- handleOnHeaderMouseEnterByType(event, args, selector) {
141
+ handleOnHeaderMouseOverByType(event, args, selector) {
133
142
  this._cellType = selector;
143
+ this._mousePosition = { x: event.clientX || 0, y: event.clientY || 0 };
144
+ this._mouseTarget = document.elementFromPoint(event.clientX || 0, event.clientY || 0)?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
134
145
  // before doing anything, let's remove any previous tooltip before
135
146
  // and cancel any opened Promise/Observable when using async
136
147
  this.hideTooltip();
@@ -165,8 +176,10 @@ class SlickCustomTooltip {
165
176
  }
166
177
  }
167
178
  }
168
- async handleOnMouseEnter(event) {
179
+ async handleOnMouseOver(event) {
169
180
  this._cellType = 'slick-cell';
181
+ this._mousePosition = { x: event.clientX || 0, y: event.clientY || 0 };
182
+ this._mouseTarget = document.elementFromPoint(event.clientX || 0, event.clientY || 0)?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
170
183
  // before doing anything, let's remove any previous tooltip before
171
184
  // and cancel any opened Promise/Observable when using async
172
185
  this.hideTooltip();
@@ -249,33 +262,42 @@ class SlickCustomTooltip {
249
262
  renderRegularTooltip(formatterOrText, cell, value, columnDef, item) {
250
263
  const tmpDiv = document.createElement('div');
251
264
  this._grid.applyHtmlCode(tmpDiv, this.parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item));
252
- let tooltipText = columnDef?.toolTip ?? '';
265
+ this._hasMultipleTooltips = (this._cellNodeElm?.querySelectorAll(SELECTOR_CLOSEST_TOOLTIP_ATTR).length || 0) > 1;
253
266
  let tmpTitleElm;
267
+ const cellElm = (this._cellAddonOptions?.useRegularTooltipFromCellTextOnly || !this._mouseTarget)
268
+ ? this._cellNodeElm
269
+ : this._mouseTarget;
270
+ let tooltipText = columnDef?.toolTip ?? '';
254
271
  if (!tooltipText) {
255
- if (this._cellType === 'slick-cell' && this._cellNodeElm && (this._cellNodeElm.clientWidth < this._cellNodeElm.scrollWidth) && !this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
256
- tooltipText = this._cellNodeElm.textContent?.trim() ?? '';
272
+ if (this._cellType === 'slick-cell' && cellElm && (cellElm.clientWidth < cellElm.scrollWidth) && !this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
273
+ tooltipText = cellElm.textContent?.trim() ?? '';
257
274
  if (this._cellAddonOptions?.tooltipTextMaxLength && tooltipText.length > this._cellAddonOptions?.tooltipTextMaxLength) {
258
275
  tooltipText = tooltipText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...';
259
276
  }
260
- tmpTitleElm = this._cellNodeElm;
277
+ tmpTitleElm = cellElm;
261
278
  }
262
279
  else {
263
280
  if (this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
264
- tmpTitleElm = tmpDiv.querySelector('[title], [data-slick-tooltip]');
281
+ tmpTitleElm = tmpDiv.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
265
282
  }
266
283
  else {
267
- tmpTitleElm = (0, common_1.findFirstAttribute)(this._cellNodeElm, ['title', 'data-slick-tooltip']) ? this._cellNodeElm : tmpDiv.querySelector('[title], [data-slick-tooltip]');
268
- if ((!tmpTitleElm || !(0, common_1.findFirstAttribute)(tmpTitleElm, ['title', 'data-slick-tooltip'])) && this._cellNodeElm) {
269
- tmpTitleElm = this._cellNodeElm.querySelector('[title], [data-slick-tooltip]');
284
+ tmpTitleElm = (0, common_1.findFirstAttribute)(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR)
285
+ ? cellElm
286
+ : tmpDiv.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
287
+ if ((!tmpTitleElm || !(0, common_1.findFirstAttribute)(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR)) && cellElm) {
288
+ tmpTitleElm = cellElm.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
270
289
  }
271
290
  }
272
- if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
273
- tooltipText = (0, common_1.findFirstAttribute)(tmpTitleElm, ['title', 'data-slick-tooltip']) || '';
291
+ if (tmpTitleElm?.style.display === 'none' || (this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))) {
292
+ tooltipText = '';
293
+ }
294
+ else if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
295
+ tooltipText = (0, common_1.findFirstAttribute)(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || '';
274
296
  }
275
297
  }
276
298
  }
277
299
  if (tooltipText !== '') {
278
- this.renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText);
300
+ this.renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText, tmpTitleElm);
279
301
  }
280
302
  // also clear any "title" attribute to avoid showing a 2nd browser tooltip
281
303
  this.swapAndClearTitleAttribute(tmpTitleElm, tooltipText);
@@ -283,28 +305,30 @@ class SlickCustomTooltip {
283
305
  renderTooltipFormatter(formatter, cell, value, columnDef, item, tooltipText, inputTitleElm) {
284
306
  // create the tooltip DOM element with the text returned by the Formatter
285
307
  this._tooltipElm = (0, common_1.createDomElement)('div', { className: this.className });
308
+ this._tooltipBodyElm = (0, common_1.createDomElement)('div', { className: this.bodyClassName });
286
309
  this._tooltipElm.classList.add(this.gridUid);
287
310
  this._tooltipElm.classList.add('l' + cell.cell);
288
311
  this._tooltipElm.classList.add('r' + cell.cell);
312
+ this.tooltipElm?.appendChild(this._tooltipBodyElm);
289
313
  // when cell is currently lock for editing, we'll force a tooltip title search
290
314
  // that can happen when user has a formatter but is currently editing and in that case we want the new value
291
- // ie: when user is currently editing and uses the Slider, when dragging its value is changing, so we wish to use the editing value instead of the previous cell value.
315
+ // e.g.: when user is currently editing and uses the Slider, when dragging its value is changing, so we wish to use the editing value instead of the previous cell value.
292
316
  if (value === null || value === undefined) {
293
- const tmpTitleElm = this._cellNodeElm?.querySelector('[title], [data-slick-tooltip]');
294
- value = (0, common_1.findFirstAttribute)(tmpTitleElm, ['title', 'data-slick-tooltip']) || value;
317
+ const tmpTitleElm = this._cellNodeElm?.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
318
+ value = (0, common_1.findFirstAttribute)(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || value;
295
319
  }
296
320
  let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';
297
321
  outputText = (this._cellAddonOptions?.tooltipTextMaxLength && outputText.length > this._cellAddonOptions.tooltipTextMaxLength) ? outputText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...' : outputText;
298
322
  let finalOutputText = '';
299
323
  if (!tooltipText || this._cellAddonOptions?.renderRegularTooltipAsHtml) {
300
324
  finalOutputText = (0, common_1.sanitizeTextByAvailableSanitizer)(this.gridOptions, outputText);
301
- this._grid.applyHtmlCode(this._tooltipElm, finalOutputText);
302
- this._tooltipElm.style.whiteSpace = this._cellAddonOptions?.whiteSpace ?? this._defaultOptions.whiteSpace;
325
+ this._grid.applyHtmlCode(this._tooltipBodyElm, finalOutputText);
326
+ this._tooltipBodyElm.style.whiteSpace = this._cellAddonOptions?.whiteSpace ?? this._defaultOptions.whiteSpace;
303
327
  }
304
328
  else {
305
329
  finalOutputText = outputText || '';
306
- this._tooltipElm.textContent = finalOutputText;
307
- this._tooltipElm.style.whiteSpace = this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace; // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters
330
+ this._tooltipBodyElm.textContent = finalOutputText;
331
+ this._tooltipBodyElm.style.whiteSpace = this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace; // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters
308
332
  }
309
333
  // optional max height/width of the tooltip container
310
334
  if (this._cellAddonOptions?.maxHeight) {
@@ -348,33 +372,46 @@ class SlickCustomTooltip {
348
372
  // or when using "auto" and we detect not enough available space then we'll position to the "left" of the cell
349
373
  // NOTE the class name is for the arrow and is inverse compare to the tooltip itself, so if user ask for "left-align", then the arrow will in fact be "arrow-right-align"
350
374
  const position = this._cellAddonOptions?.position ?? 'auto';
375
+ let finalTooltipPosition = '';
351
376
  if (position === 'center') {
352
377
  newPositionLeft += (cellContainerWidth / 2) - (calculatedTooltipWidth / 2) + (this._cellAddonOptions?.offsetRight ?? 0);
353
- this._tooltipElm.classList.remove('arrow-left-align');
354
- this._tooltipElm.classList.remove('arrow-right-align');
378
+ finalTooltipPosition = 'top-center';
379
+ this._tooltipElm.classList.remove('arrow-left-align', 'arrow-right-align');
355
380
  this._tooltipElm.classList.add('arrow-center-align');
356
381
  }
357
382
  else if (position === 'right-align' || ((position === 'auto' || position !== 'left-align') && (newPositionLeft + calculatedTooltipWidth) > calculatedBodyWidth)) {
383
+ finalTooltipPosition = 'right';
358
384
  newPositionLeft -= (calculatedTooltipWidth - cellContainerWidth - (this._cellAddonOptions?.offsetLeft ?? 0));
359
- this._tooltipElm.classList.remove('arrow-center-align');
360
- this._tooltipElm.classList.remove('arrow-left-align');
385
+ this._tooltipElm.classList.remove('arrow-center-align', 'arrow-left-align');
361
386
  this._tooltipElm.classList.add('arrow-right-align');
362
387
  }
363
388
  else {
364
- this._tooltipElm.classList.remove('arrow-center-align');
365
- this._tooltipElm.classList.remove('arrow-right-align');
389
+ finalTooltipPosition = 'left';
390
+ this._tooltipElm.classList.remove('arrow-center-align', 'arrow-right-align');
366
391
  this._tooltipElm.classList.add('arrow-left-align');
367
392
  }
368
393
  // do the same calculation/reposition with top/bottom (default is top of the cell or in other word starting from the cell going down)
369
394
  // NOTE the class name is for the arrow and is inverse compare to the tooltip itself, so if user ask for "bottom", then the arrow will in fact be "arrow-top"
370
395
  if (position === 'bottom' || ((position === 'auto' || position !== 'top') && calculatedTooltipHeight > (0, common_1.calculateAvailableSpace)(this._cellNodeElm).top)) {
371
396
  newPositionTop = (cellPosition.top || 0) + (this.gridOptions.rowHeight ?? 0) + (this._cellAddonOptions?.offsetTopBottom ?? 0);
397
+ finalTooltipPosition = `bottom-${finalTooltipPosition}`;
372
398
  this._tooltipElm.classList.remove('arrow-down');
373
399
  this._tooltipElm.classList.add('arrow-up');
374
400
  }
375
401
  else {
376
- this._tooltipElm.classList.add('arrow-down');
402
+ finalTooltipPosition = `top-${finalTooltipPosition}`;
377
403
  this._tooltipElm.classList.remove('arrow-up');
404
+ this._tooltipElm.classList.add('arrow-down');
405
+ }
406
+ // when having multiple tooltips, we'll try to reposition tooltip to mouse position
407
+ if (this._tooltipElm && (this._hasMultipleTooltips || this.cellAddonOptions?.repositionByMouseOverTarget)) {
408
+ const mouseElmOffset = (0, common_1.getOffset)(this._mouseTarget);
409
+ if (finalTooltipPosition.includes('left') || finalTooltipPosition === 'top-center') {
410
+ newPositionLeft = mouseElmOffset.left - (this._addonOptions?.offsetArrow ?? 3);
411
+ }
412
+ else if (finalTooltipPosition.includes('right')) {
413
+ newPositionLeft = mouseElmOffset.left - calculatedTooltipWidth + (this._mouseTarget?.offsetWidth ?? 0) + (this._addonOptions?.offsetArrow ?? 3);
414
+ }
378
415
  }
379
416
  // reposition the tooltip over the cell (90% of the time this will end up using a position on the "right" of the cell)
380
417
  this._tooltipElm.style.top = `${newPositionTop}px`;
@@ -388,6 +425,10 @@ class SlickCustomTooltip {
388
425
  swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
389
426
  // the title attribute might be directly on the slick-cell container element (when formatter returns a result object)
390
427
  // OR in a child element (most commonly as a custom formatter)
428
+ let cellWithTitleElm;
429
+ if (inputTitleElm) {
430
+ cellWithTitleElm = (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm?.querySelector('[title]')));
431
+ }
391
432
  const titleElm = inputTitleElm || (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm?.querySelector('[title]')));
392
433
  // flip tooltip text from `title` to `data-slick-tooltip`
393
434
  if (titleElm) {
@@ -395,6 +436,11 @@ class SlickCustomTooltip {
395
436
  if (titleElm.hasAttribute('title')) {
396
437
  titleElm.setAttribute('title', '');
397
438
  }
439
+ // targeted element might actually not be the cell element,
440
+ // so let's also clear the cell element title attribute to avoid showing native + custom tooltips
441
+ if (cellWithTitleElm?.hasAttribute('title')) {
442
+ cellWithTitleElm.setAttribute('title', '');
443
+ }
398
444
  }
399
445
  }
400
446
  }
@@ -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":";;;AAiBA,wDASqC;AACrC,sDAA+D;AAI/D,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AACpE,MAAM,6BAA6B,GAAG,+BAA+B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAa,kBAAkB;IA8B7B;QA7BA,SAAI,GAAoB,eAAwB,CAAC;QAKvC,cAAS,GAAa,YAAY,CAAC;QAGnC,UAAK,GAAuB,IAAI,CAAC;QACjC,mBAAc,GAA0B,IAAI,CAAC;QAG7C,mBAAc,GAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAE3D,yBAAoB,GAAG,KAAK,CAAC;QAC7B,oBAAe,GAAG;YAC1B,aAAa,EAAE,cAAc;YAC7B,SAAS,EAAE,sBAAsB;YACjC,WAAW,EAAE,CAAC,EAAE,+DAA+D;YAC/E,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,KAAK;YAChB,wBAAwB,EAAE,UAAU;YACpC,UAAU,EAAE,QAAQ;SACE,CAAC;QAKvB,IAAI,CAAC,aAAa,GAAG,IAAI,0BAAiB,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,iBAAiB,EAAE,aAAa,IAAI,cAAc,CAAC;IACjE,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,iBAAiB,EAAE,SAAS,IAAI,sBAAsB,CAAC;IACrE,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAkB,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,iEAAiE;IACjE,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAgB,CAAC;IACtD,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,eAAe,CAAC,IAAgB;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,IAAe,EAAE,gBAAkC;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAa,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAgB,eAAe,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,aAAa,CAAC,EAAyB,CAAC;QAC9H,IAAI,CAAC,aAAa;aACf,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/D,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;aAClH,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;aACxH,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzD,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7D,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO;QACL,4DAA4D;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7F,WAAW,EAAE,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,UAA+B;QACxC,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,UAAU,EAAyB,CAAC;IACvF,CAAC;IAED,KAAK;IACL,sBAAsB;IACtB,wBAAwB;IAExB;;;OAGG;IACO,oBAAoB,CAAC,WAAgB,EAAE,IAAoC,EAAE,KAAU,EAAE,SAAiB,EAAE,WAAgB;QACpI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,iBAAiB,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;QAClH,IAAI,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;YAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAkB,CAAC,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACnH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAkB,CAAC,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACrH,CAAC;IACH,CAAC;IAED,yEAAyE;IAC/D,6BAA6B,CAAC,KAAqB,EAAE,IAAS,EAAE,QAAkB;QAC1F,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAE9H,kEAAkE;QAClE,4DAA4D;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,CAAC,CAAC,EAAE,gEAAgE;YACzE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;SACtF,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,eAAe,GAAG,QAAQ,KAAK,wBAAwB,CAAC;QAE9D,uFAAuF;QACvF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,EAAyB,CAAC;QACzG,IAAI,SAAS,EAAE,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACtJ,OAAO;QACT,CAAC;QAED,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAI,KAAK,CAAC,MAAyB,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAmB,CAAC;YAC/F,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;YAEvH,IAAI,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5D,MAAM,eAAe,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACzH,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC1E,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBAChE,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,KAAqB;QACrD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAE9H,kEAAkE;QAClE,4DAA4D;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,6HAA6H;YAC7H,MAAM,eAAe,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;YACzE,MAAM,IAAI,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEjH,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAmB,CAAC;gBAElF,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;oBACtB,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,EAAyB,CAAC;oBAEzG,IAAI,SAAS,EAAE,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;wBAC1P,OAAO;oBACT,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAElF,8EAA8E;oBAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;oBAEvE,kHAAkH;oBAClH,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC;wBAC9H,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBACnF,CAAC;yBAAM,CAAC;wBACN,2FAA2F;wBAC3F,IAAI,OAAO,IAAI,CAAC,iBAAiB,EAAE,SAAS,KAAK,UAAU,EAAE,CAAC;4BAC5D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;wBAClG,CAAC;wBAED,mEAAmE;wBACnE,IAAI,OAAO,IAAI,CAAC,iBAAiB,EAAE,YAAY,KAAK,UAAU,EAAE,CAAC;4BAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;4BAClH,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;gCAC/C,OAAO,CAAC,KAAK,CAAC,+HAA+H,CAAC,CAAC;4BACjJ,CAAC;4BAED,IAAI,YAAY,YAAY,OAAO,EAAE,CAAC;gCACpC,iJAAiJ;gCACjJ,IAAI,CAAC,mBAAmB,GAAG,IAAA,2BAAkB,EAAC,YAAY,CAAC,CAAC;gCAC5D,IAAI,CAAC,mBAAmB,CAAC,OAAO;qCAC7B,IAAI,CAAC,CAAC,WAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;qCAChG,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;oCACtB,sJAAsJ;oCACtJ,IAAI,CAAC,CAAC,KAAK,YAAY,2BAAkB,CAAC,EAAE,CAAC;wCAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oCACvB,CAAC;gCACH,CAAC,CAAC,CAAC;4BACP,CAAC;iCAAM,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;gCAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAmB,CAAC;gCACtC,IAAI,CAAC,YAAY,GAAI,YAA2C;qCAC7D,IAAI;gCACH,kLAAkL;gCAClL,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CACtD,CAAC,SAAS,CACT,CAAC,WAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAC1F,CAAC,KAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CACrC,CAAC;4BACN,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,yBAAyB,CAAC,eAA+C,EAAE,IAAoC,EAAE,KAAU,EAAE,SAAiB,EAAE,IAAa;QACrK,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/F,MAAM,aAAa,GAAG,IAAA,yBAAiB,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAE,aAAyC,CAAC,IAAI,IAAK,aAAyC,CAAC,IAAI,CAAC;YAC5K,OAAO,IAAA,yCAAgC,EAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,YAAY,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAuB,CAAC,IAAI,EAAE,CAAC,CAAC;QAChK,CAAC;aAAM,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,IAAA,yCAAgC,EAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACO,oBAAoB,CAAC,eAA+C,EAAE,IAAoC,EAAE,KAAU,EAAE,SAAiB,EAAE,IAAS;QAC5J,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,yBAAyB,CAAC,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,6BAA6B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjH,IAAI,WAA2C,CAAC;QAChD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,iCAAiC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/F,CAAC,CAAC,IAAI,CAAC,YAA2B;YAClC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAEtB,IAAI,WAAW,GAAG,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,CAAC;gBAC7J,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAChD,IAAI,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;oBACtH,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAClG,CAAC;gBACD,WAAW,GAAG,OAAO,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,CAAC,iBAAiB,EAAE,kCAAkC,EAAE,CAAC;oBAC/D,WAAW,GAAG,MAAM,CAAC,aAAa,CAAiB,6BAA6B,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,IAAA,2BAAkB,EAAC,OAAO,EAAE,2BAA2B,CAAC;wBACpE,CAAC,CAAC,OAAO;wBACT,CAAC,CAAC,MAAM,CAAC,aAAa,CAAiB,6BAA6B,CAAC,CAAC;oBAExE,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,IAAA,2BAAkB,EAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;wBAC/F,WAAW,GAAG,OAAO,CAAC,aAAa,CAAiB,6BAA6B,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC;gBAED,IAAI,WAAW,EAAE,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;oBACxH,WAAW,GAAG,EAAE,CAAC;gBACnB,CAAC;qBAAM,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,eAAe,KAAK,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,EAAE,CAAC;oBACjI,WAAW,GAAG,IAAA,2BAAkB,EAAC,WAAW,EAAE,2BAA2B,CAAC,IAAI,EAAE,CAAC;gBACnF,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACvG,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAES,sBAAsB,CAAC,SAAyC,EAAE,IAAoC,EAAE,KAAU,EAAE,SAAiB,EAAE,IAAa,EAAE,WAAoB,EAAE,aAA8B;QAClN,yEAAyE;QACzE,IAAI,CAAC,WAAW,GAAG,IAAA,yBAAgB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,IAAA,yBAAgB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEnD,8EAA8E;QAC9E,4GAA4G;QAC5G,yKAAyK;QACzK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAiB,6BAA6B,CAAC,CAAC;YACpG,KAAK,GAAG,IAAA,2BAAkB,EAAC,WAAW,EAAE,2BAA2B,CAAC,IAAI,KAAK,CAAC;QAChF,CAAC;QAED,IAAI,UAAU,GAAG,WAAW,IAAI,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9G,UAAU,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;QAE/N,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,CAAC;YACvE,eAAe,GAAG,IAAA,yCAAgC,EAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAChE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,UAAoB,CAAC;QAC1H,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,UAAU,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAkC,CAAC,CAAC,mGAAmG;QAC1P,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,IAAI,CAAC;QAC7E,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,IAAI,CAAC;QAC3E,CAAC;QAED,mGAAmG;QACnG,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE5C,gFAAgF;YAChF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEtB,0IAA0I;YAC1I,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAClD,CAAC;YAED,0EAA0E;YAC1E,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACO,UAAU,CAAC,IAAoC;QACvD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAmB,CAAC;YACvG,MAAM,YAAY,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YACzD,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;YAChF,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAC9E,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;YAE3E,kDAAkD;YAClD,IAAI,cAAc,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,IAAI,CAAC,CAAC,CAAC;YAC9H,IAAI,eAAe,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;YAE5F,gIAAgI;YAChI,8GAA8G;YAC9G,yKAAyK;YACzK,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,IAAI,MAAM,CAAC;YAC5D,IAAI,oBAAoB,GAAG,EAAE,CAAC;YAC9B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1B,eAAe,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;gBACxH,oBAAoB,GAAG,YAAY,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;gBAC3E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,YAAY,CAAC,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAAC;gBAClK,oBAAoB,GAAG,OAAO,CAAC;gBAC/B,eAAe,IAAI,CAAC,sBAAsB,GAAG,kBAAkB,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7G,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;gBAC5E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,oBAAoB,GAAG,MAAM,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;gBAC7E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACrD,CAAC;YAED,qIAAqI;YACrI,6JAA6J;YAC7J,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,KAAK,CAAC,IAAI,uBAAuB,GAAG,IAAA,gCAAuB,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvJ,cAAc,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,IAAI,CAAC,CAAC,CAAC;gBAC9H,oBAAoB,GAAG,UAAU,oBAAoB,EAAE,CAAC;gBACxD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,oBAAoB,GAAG,OAAO,oBAAoB,EAAE,CAAC;gBACrD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC9C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;YAED,mFAAmF;YACnF,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,EAAE,CAAC;gBAC1G,MAAM,cAAc,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,YAAY,CAAE,CAAC;gBACrD,IAAI,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,oBAAoB,KAAK,YAAY,EAAE,CAAC;oBACnF,eAAe,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;gBACjF,CAAC;qBAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClD,eAAe,GAAG,cAAc,CAAC,IAAI,GAAG,sBAAsB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;gBAClJ,CAAC;YACH,CAAC;YAED,sHAAsH;YACtH,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,cAAc,IAAI,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,eAAe,IAAI,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,0BAA0B,CAAC,aAA8B,EAAE,WAAoB;QACvF,qHAAqH;QACrH,8DAA8D;QAC9D,IAAI,gBAA4C,CAAC;QACjD,IAAI,aAAa,EAAE,CAAC;YAClB,gBAAgB,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrM,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAElN,yDAAyD;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,YAAY,CAAC,oBAAoB,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,2DAA2D;YAC3D,iGAAiG;YACjG,IAAI,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA1dD,gDA0dC"}
@@ -1,5 +1,7 @@
1
1
  import { calculateAvailableSpace, CancelledException, cancellablePromise, createDomElement, findFirstAttribute, getOffset, sanitizeTextByAvailableSanitizer, SlickEventHandler, } from '@slickgrid-universal/common';
2
2
  import { isPrimitiveOrHTML } from '@slickgrid-universal/utils';
3
+ const CLOSEST_TOOLTIP_FILLED_ATTR = ['title', 'data-slick-tooltip'];
4
+ const SELECTOR_CLOSEST_TOOLTIP_ATTR = '[title], [data-slick-tooltip]';
3
5
  /**
4
6
  * A plugin to add Custom Tooltip when hovering a cell, it subscribes to the cell "onMouseEnter" and "onMouseLeave" events.
5
7
  * The "customTooltip" is defined in the Column Definition OR Grid Options (the first found will have priority over the second)
@@ -30,8 +32,12 @@ export class SlickCustomTooltip {
30
32
  this._cellType = 'slick-cell';
31
33
  this._rxjs = null;
32
34
  this._sharedService = null;
35
+ this._mousePosition = { x: 0, y: 0 };
36
+ this._hasMultipleTooltips = false;
33
37
  this._defaultOptions = {
38
+ bodyClassName: 'tooltip-body',
34
39
  className: 'slick-custom-tooltip',
40
+ offsetArrow: 3, // same as `$slick-tooltip-arrow-side-margin` CSS/SASS variable
35
41
  offsetLeft: 0,
36
42
  offsetRight: 0,
37
43
  offsetTopBottom: 4,
@@ -50,6 +56,9 @@ export class SlickCustomTooltip {
50
56
  get cellAddonOptions() {
51
57
  return this._cellAddonOptions;
52
58
  }
59
+ get bodyClassName() {
60
+ return this._cellAddonOptions?.bodyClassName ?? 'tooltip-body';
61
+ }
53
62
  get className() {
54
63
  return this._cellAddonOptions?.className ?? 'slick-custom-tooltip';
55
64
  }
@@ -79,12 +88,12 @@ export class SlickCustomTooltip {
79
88
  this._sharedService = containerService.get('SharedService');
80
89
  this._addonOptions = { ...this._defaultOptions, ...(this._sharedService?.gridOptions?.customTooltip) };
81
90
  this._eventHandler
82
- .subscribe(grid.onMouseEnter, this.handleOnMouseEnter.bind(this))
83
- .subscribe(grid.onHeaderMouseEnter, (e, args) => this.handleOnHeaderMouseEnterByType(e, args, 'slick-header-column'))
84
- .subscribe(grid.onHeaderRowMouseEnter, (e, args) => this.handleOnHeaderMouseEnterByType(e, args, 'slick-headerrow-column'))
91
+ .subscribe(grid.onMouseEnter, this.handleOnMouseOver.bind(this))
92
+ .subscribe(grid.onHeaderMouseOver, (e, args) => this.handleOnHeaderMouseOverByType(e, args, 'slick-header-column'))
93
+ .subscribe(grid.onHeaderRowMouseOver, (e, args) => this.handleOnHeaderMouseOverByType(e, args, 'slick-headerrow-column'))
85
94
  .subscribe(grid.onMouseLeave, this.hideTooltip.bind(this))
86
- .subscribe(grid.onHeaderMouseLeave, this.hideTooltip.bind(this))
87
- .subscribe(grid.onHeaderRowMouseLeave, this.hideTooltip.bind(this));
95
+ .subscribe(grid.onHeaderMouseOut, this.hideTooltip.bind(this))
96
+ .subscribe(grid.onHeaderRowMouseOut, this.hideTooltip.bind(this));
88
97
  }
89
98
  dispose() {
90
99
  // hide (remove) any tooltip and unsubscribe from all events
@@ -126,8 +135,10 @@ export class SlickCustomTooltip {
126
135
  }
127
136
  }
128
137
  /** depending on the selector type, execute the necessary handler code */
129
- handleOnHeaderMouseEnterByType(event, args, selector) {
138
+ handleOnHeaderMouseOverByType(event, args, selector) {
130
139
  this._cellType = selector;
140
+ this._mousePosition = { x: event.clientX || 0, y: event.clientY || 0 };
141
+ this._mouseTarget = document.elementFromPoint(event.clientX || 0, event.clientY || 0)?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
131
142
  // before doing anything, let's remove any previous tooltip before
132
143
  // and cancel any opened Promise/Observable when using async
133
144
  this.hideTooltip();
@@ -162,8 +173,10 @@ export class SlickCustomTooltip {
162
173
  }
163
174
  }
164
175
  }
165
- async handleOnMouseEnter(event) {
176
+ async handleOnMouseOver(event) {
166
177
  this._cellType = 'slick-cell';
178
+ this._mousePosition = { x: event.clientX || 0, y: event.clientY || 0 };
179
+ this._mouseTarget = document.elementFromPoint(event.clientX || 0, event.clientY || 0)?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
167
180
  // before doing anything, let's remove any previous tooltip before
168
181
  // and cancel any opened Promise/Observable when using async
169
182
  this.hideTooltip();
@@ -246,33 +259,42 @@ export class SlickCustomTooltip {
246
259
  renderRegularTooltip(formatterOrText, cell, value, columnDef, item) {
247
260
  const tmpDiv = document.createElement('div');
248
261
  this._grid.applyHtmlCode(tmpDiv, this.parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item));
249
- let tooltipText = columnDef?.toolTip ?? '';
262
+ this._hasMultipleTooltips = (this._cellNodeElm?.querySelectorAll(SELECTOR_CLOSEST_TOOLTIP_ATTR).length || 0) > 1;
250
263
  let tmpTitleElm;
264
+ const cellElm = (this._cellAddonOptions?.useRegularTooltipFromCellTextOnly || !this._mouseTarget)
265
+ ? this._cellNodeElm
266
+ : this._mouseTarget;
267
+ let tooltipText = columnDef?.toolTip ?? '';
251
268
  if (!tooltipText) {
252
- if (this._cellType === 'slick-cell' && this._cellNodeElm && (this._cellNodeElm.clientWidth < this._cellNodeElm.scrollWidth) && !this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
253
- tooltipText = this._cellNodeElm.textContent?.trim() ?? '';
269
+ if (this._cellType === 'slick-cell' && cellElm && (cellElm.clientWidth < cellElm.scrollWidth) && !this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
270
+ tooltipText = cellElm.textContent?.trim() ?? '';
254
271
  if (this._cellAddonOptions?.tooltipTextMaxLength && tooltipText.length > this._cellAddonOptions?.tooltipTextMaxLength) {
255
272
  tooltipText = tooltipText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...';
256
273
  }
257
- tmpTitleElm = this._cellNodeElm;
274
+ tmpTitleElm = cellElm;
258
275
  }
259
276
  else {
260
277
  if (this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
261
- tmpTitleElm = tmpDiv.querySelector('[title], [data-slick-tooltip]');
278
+ tmpTitleElm = tmpDiv.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
262
279
  }
263
280
  else {
264
- tmpTitleElm = findFirstAttribute(this._cellNodeElm, ['title', 'data-slick-tooltip']) ? this._cellNodeElm : tmpDiv.querySelector('[title], [data-slick-tooltip]');
265
- if ((!tmpTitleElm || !findFirstAttribute(tmpTitleElm, ['title', 'data-slick-tooltip'])) && this._cellNodeElm) {
266
- tmpTitleElm = this._cellNodeElm.querySelector('[title], [data-slick-tooltip]');
281
+ tmpTitleElm = findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR)
282
+ ? cellElm
283
+ : tmpDiv.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
284
+ if ((!tmpTitleElm || !findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR)) && cellElm) {
285
+ tmpTitleElm = cellElm.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
267
286
  }
268
287
  }
269
- if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
270
- tooltipText = findFirstAttribute(tmpTitleElm, ['title', 'data-slick-tooltip']) || '';
288
+ if (tmpTitleElm?.style.display === 'none' || (this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))) {
289
+ tooltipText = '';
290
+ }
291
+ else if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
292
+ tooltipText = findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || '';
271
293
  }
272
294
  }
273
295
  }
274
296
  if (tooltipText !== '') {
275
- this.renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText);
297
+ this.renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText, tmpTitleElm);
276
298
  }
277
299
  // also clear any "title" attribute to avoid showing a 2nd browser tooltip
278
300
  this.swapAndClearTitleAttribute(tmpTitleElm, tooltipText);
@@ -280,28 +302,30 @@ export class SlickCustomTooltip {
280
302
  renderTooltipFormatter(formatter, cell, value, columnDef, item, tooltipText, inputTitleElm) {
281
303
  // create the tooltip DOM element with the text returned by the Formatter
282
304
  this._tooltipElm = createDomElement('div', { className: this.className });
305
+ this._tooltipBodyElm = createDomElement('div', { className: this.bodyClassName });
283
306
  this._tooltipElm.classList.add(this.gridUid);
284
307
  this._tooltipElm.classList.add('l' + cell.cell);
285
308
  this._tooltipElm.classList.add('r' + cell.cell);
309
+ this.tooltipElm?.appendChild(this._tooltipBodyElm);
286
310
  // when cell is currently lock for editing, we'll force a tooltip title search
287
311
  // that can happen when user has a formatter but is currently editing and in that case we want the new value
288
- // ie: when user is currently editing and uses the Slider, when dragging its value is changing, so we wish to use the editing value instead of the previous cell value.
312
+ // e.g.: when user is currently editing and uses the Slider, when dragging its value is changing, so we wish to use the editing value instead of the previous cell value.
289
313
  if (value === null || value === undefined) {
290
- const tmpTitleElm = this._cellNodeElm?.querySelector('[title], [data-slick-tooltip]');
291
- value = findFirstAttribute(tmpTitleElm, ['title', 'data-slick-tooltip']) || value;
314
+ const tmpTitleElm = this._cellNodeElm?.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
315
+ value = findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || value;
292
316
  }
293
317
  let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';
294
318
  outputText = (this._cellAddonOptions?.tooltipTextMaxLength && outputText.length > this._cellAddonOptions.tooltipTextMaxLength) ? outputText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...' : outputText;
295
319
  let finalOutputText = '';
296
320
  if (!tooltipText || this._cellAddonOptions?.renderRegularTooltipAsHtml) {
297
321
  finalOutputText = sanitizeTextByAvailableSanitizer(this.gridOptions, outputText);
298
- this._grid.applyHtmlCode(this._tooltipElm, finalOutputText);
299
- this._tooltipElm.style.whiteSpace = this._cellAddonOptions?.whiteSpace ?? this._defaultOptions.whiteSpace;
322
+ this._grid.applyHtmlCode(this._tooltipBodyElm, finalOutputText);
323
+ this._tooltipBodyElm.style.whiteSpace = this._cellAddonOptions?.whiteSpace ?? this._defaultOptions.whiteSpace;
300
324
  }
301
325
  else {
302
326
  finalOutputText = outputText || '';
303
- this._tooltipElm.textContent = finalOutputText;
304
- this._tooltipElm.style.whiteSpace = this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace; // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters
327
+ this._tooltipBodyElm.textContent = finalOutputText;
328
+ this._tooltipBodyElm.style.whiteSpace = this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace; // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters
305
329
  }
306
330
  // optional max height/width of the tooltip container
307
331
  if (this._cellAddonOptions?.maxHeight) {
@@ -345,33 +369,46 @@ export class SlickCustomTooltip {
345
369
  // or when using "auto" and we detect not enough available space then we'll position to the "left" of the cell
346
370
  // NOTE the class name is for the arrow and is inverse compare to the tooltip itself, so if user ask for "left-align", then the arrow will in fact be "arrow-right-align"
347
371
  const position = this._cellAddonOptions?.position ?? 'auto';
372
+ let finalTooltipPosition = '';
348
373
  if (position === 'center') {
349
374
  newPositionLeft += (cellContainerWidth / 2) - (calculatedTooltipWidth / 2) + (this._cellAddonOptions?.offsetRight ?? 0);
350
- this._tooltipElm.classList.remove('arrow-left-align');
351
- this._tooltipElm.classList.remove('arrow-right-align');
375
+ finalTooltipPosition = 'top-center';
376
+ this._tooltipElm.classList.remove('arrow-left-align', 'arrow-right-align');
352
377
  this._tooltipElm.classList.add('arrow-center-align');
353
378
  }
354
379
  else if (position === 'right-align' || ((position === 'auto' || position !== 'left-align') && (newPositionLeft + calculatedTooltipWidth) > calculatedBodyWidth)) {
380
+ finalTooltipPosition = 'right';
355
381
  newPositionLeft -= (calculatedTooltipWidth - cellContainerWidth - (this._cellAddonOptions?.offsetLeft ?? 0));
356
- this._tooltipElm.classList.remove('arrow-center-align');
357
- this._tooltipElm.classList.remove('arrow-left-align');
382
+ this._tooltipElm.classList.remove('arrow-center-align', 'arrow-left-align');
358
383
  this._tooltipElm.classList.add('arrow-right-align');
359
384
  }
360
385
  else {
361
- this._tooltipElm.classList.remove('arrow-center-align');
362
- this._tooltipElm.classList.remove('arrow-right-align');
386
+ finalTooltipPosition = 'left';
387
+ this._tooltipElm.classList.remove('arrow-center-align', 'arrow-right-align');
363
388
  this._tooltipElm.classList.add('arrow-left-align');
364
389
  }
365
390
  // do the same calculation/reposition with top/bottom (default is top of the cell or in other word starting from the cell going down)
366
391
  // NOTE the class name is for the arrow and is inverse compare to the tooltip itself, so if user ask for "bottom", then the arrow will in fact be "arrow-top"
367
392
  if (position === 'bottom' || ((position === 'auto' || position !== 'top') && calculatedTooltipHeight > calculateAvailableSpace(this._cellNodeElm).top)) {
368
393
  newPositionTop = (cellPosition.top || 0) + (this.gridOptions.rowHeight ?? 0) + (this._cellAddonOptions?.offsetTopBottom ?? 0);
394
+ finalTooltipPosition = `bottom-${finalTooltipPosition}`;
369
395
  this._tooltipElm.classList.remove('arrow-down');
370
396
  this._tooltipElm.classList.add('arrow-up');
371
397
  }
372
398
  else {
373
- this._tooltipElm.classList.add('arrow-down');
399
+ finalTooltipPosition = `top-${finalTooltipPosition}`;
374
400
  this._tooltipElm.classList.remove('arrow-up');
401
+ this._tooltipElm.classList.add('arrow-down');
402
+ }
403
+ // when having multiple tooltips, we'll try to reposition tooltip to mouse position
404
+ if (this._tooltipElm && (this._hasMultipleTooltips || this.cellAddonOptions?.repositionByMouseOverTarget)) {
405
+ const mouseElmOffset = getOffset(this._mouseTarget);
406
+ if (finalTooltipPosition.includes('left') || finalTooltipPosition === 'top-center') {
407
+ newPositionLeft = mouseElmOffset.left - (this._addonOptions?.offsetArrow ?? 3);
408
+ }
409
+ else if (finalTooltipPosition.includes('right')) {
410
+ newPositionLeft = mouseElmOffset.left - calculatedTooltipWidth + (this._mouseTarget?.offsetWidth ?? 0) + (this._addonOptions?.offsetArrow ?? 3);
411
+ }
375
412
  }
376
413
  // reposition the tooltip over the cell (90% of the time this will end up using a position on the "right" of the cell)
377
414
  this._tooltipElm.style.top = `${newPositionTop}px`;
@@ -385,6 +422,10 @@ export class SlickCustomTooltip {
385
422
  swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
386
423
  // the title attribute might be directly on the slick-cell container element (when formatter returns a result object)
387
424
  // OR in a child element (most commonly as a custom formatter)
425
+ let cellWithTitleElm;
426
+ if (inputTitleElm) {
427
+ cellWithTitleElm = (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm?.querySelector('[title]')));
428
+ }
388
429
  const titleElm = inputTitleElm || (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm?.querySelector('[title]')));
389
430
  // flip tooltip text from `title` to `data-slick-tooltip`
390
431
  if (titleElm) {
@@ -392,6 +433,11 @@ export class SlickCustomTooltip {
392
433
  if (titleElm.hasAttribute('title')) {
393
434
  titleElm.setAttribute('title', '');
394
435
  }
436
+ // targeted element might actually not be the cell element,
437
+ // so let's also clear the cell element title attribute to avoid showing native + custom tooltips
438
+ if (cellWithTitleElm?.hasAttribute('title')) {
439
+ cellWithTitleElm.setAttribute('title', '');
440
+ }
395
441
  }
396
442
  }
397
443
  }