@unovis/ts 1.5.0-alpha.1 → 1.5.0-alpha.3
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.
|
@@ -39,8 +39,9 @@ export declare class Tooltip {
|
|
|
39
39
|
}): void;
|
|
40
40
|
placeByElement(hoveredElement: SVGElement | HTMLElement): void;
|
|
41
41
|
isContainerBody(): boolean;
|
|
42
|
-
|
|
42
|
+
render(html: string | HTMLElement | null | void): void;
|
|
43
43
|
private _applyPosition;
|
|
44
|
+
private _constraintPosToContainer;
|
|
44
45
|
private _setContainerPosition;
|
|
45
46
|
private _setUpEvents;
|
|
46
47
|
private _setUpAttributes;
|
|
@@ -65,7 +65,7 @@ class Tooltip {
|
|
|
65
65
|
}
|
|
66
66
|
/** Show the tooltip by providing content and position */
|
|
67
67
|
show(html, pos) {
|
|
68
|
-
this.
|
|
68
|
+
this.render(html);
|
|
69
69
|
this.place(pos);
|
|
70
70
|
}
|
|
71
71
|
/** Hide the tooltip */
|
|
@@ -87,49 +87,37 @@ class Tooltip {
|
|
|
87
87
|
this._isShown = true;
|
|
88
88
|
}
|
|
89
89
|
place(pos) {
|
|
90
|
+
this._position = [pos.x, pos.y];
|
|
90
91
|
if (!this.hasContainer()) {
|
|
91
92
|
console.warn('Unovis | Tooltip: Container was not set or is not initialized yet');
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
95
|
const { config } = this;
|
|
95
|
-
const isContainerBody = this.isContainerBody();
|
|
96
96
|
const tooltipWidth = this.element.offsetWidth;
|
|
97
97
|
const tooltipHeight = this.element.offsetHeight;
|
|
98
|
-
const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight;
|
|
99
|
-
const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth;
|
|
100
98
|
const horizontalPlacement = config.horizontalPlacement === Position.Auto
|
|
101
99
|
? Position.Center
|
|
102
100
|
: config.horizontalPlacement;
|
|
103
101
|
const verticalPlacement = config.verticalPlacement === Position.Auto
|
|
104
|
-
? ((pos.y - tooltipHeight)
|
|
102
|
+
? ((pos.y - tooltipHeight) < 0 ? Position.Bottom : Position.Top)
|
|
105
103
|
: config.verticalPlacement;
|
|
106
104
|
// dx and dy variables shift the tooltip from the default position (above the cursor, centred horizontally)
|
|
107
105
|
const margin = 5;
|
|
108
|
-
const
|
|
106
|
+
const translateX = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift
|
|
109
107
|
: horizontalPlacement === Position.Center ? -tooltipWidth / 2
|
|
110
108
|
: margin + config.horizontalShift;
|
|
111
|
-
const
|
|
112
|
-
: verticalPlacement === Position.Center ? tooltipHeight / 2
|
|
113
|
-
: -margin - config.verticalShift;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const hitRight = pos.x > (containerWidth - tooltipWidth - dx - paddingX);
|
|
117
|
-
const hitLeft = pos.x < -dx + paddingX;
|
|
118
|
-
const constraintX = hitRight ? (containerWidth - tooltipWidth - dx) - pos.x - paddingX
|
|
119
|
-
: hitLeft ? -dx - pos.x + paddingX : 0;
|
|
120
|
-
const paddingY = 10;
|
|
121
|
-
const hitBottom = pos.y > (containerHeight - dy - paddingY);
|
|
122
|
-
const hitTop = pos.y < (tooltipHeight - dy + paddingY);
|
|
123
|
-
const constraintY = hitBottom ? containerHeight - dy - pos.y - paddingY
|
|
124
|
-
: hitTop ? tooltipHeight - dy - pos.y + paddingY : 0;
|
|
125
|
-
// Placing
|
|
126
|
-
// If the container size is smaller than the the tooltip size we just stick the tooltip to the top / left
|
|
127
|
-
const x = containerWidth < tooltipWidth ? 0 : pos.x + constraintX + dx;
|
|
128
|
-
const y = containerHeight < tooltipHeight ? tooltipHeight : pos.y + constraintY + dy;
|
|
129
|
-
this._applyPosition(x, y, null, tooltipHeight);
|
|
109
|
+
const translateY = verticalPlacement === Position.Bottom ? margin + config.verticalShift
|
|
110
|
+
: verticalPlacement === Position.Center ? -tooltipHeight / 2
|
|
111
|
+
: -margin - config.verticalShift - tooltipHeight;
|
|
112
|
+
const [top, left] = this._constraintPosToContainer(pos.x + translateX, pos.y + translateY, tooltipWidth, tooltipHeight);
|
|
113
|
+
this._applyPosition(top, left, tooltipHeight);
|
|
130
114
|
}
|
|
131
115
|
placeByElement(hoveredElement) {
|
|
132
116
|
const { config } = this;
|
|
117
|
+
// Store the hovered element and the event for future reference,
|
|
118
|
+
// i.e. to re-position the tooltip if the content has been changed
|
|
119
|
+
// by something else and it was captured by the MutationObserver
|
|
120
|
+
this._hoveredElement = hoveredElement;
|
|
133
121
|
const margin = 5;
|
|
134
122
|
const tooltipWidth = this.element.offsetWidth;
|
|
135
123
|
const tooltipHeight = this.element.offsetHeight;
|
|
@@ -138,7 +126,7 @@ class Tooltip {
|
|
|
138
126
|
const hoveredElementRect = hoveredElement.getBoundingClientRect();
|
|
139
127
|
// We use D3's point transformation to get the correct position of the element by pretending it's a pointer event
|
|
140
128
|
// See more: https://github.com/d3/d3-selection/blob/main/src/pointer.js
|
|
141
|
-
const elementPos = pointer({
|
|
129
|
+
const elementPos = isContainerBody ? [hoveredElementRect.x, hoveredElementRect.y] : pointer({
|
|
142
130
|
clientX: hoveredElementRect.x,
|
|
143
131
|
clientY: hoveredElementRect.y,
|
|
144
132
|
pageX: hoveredElementRect.x,
|
|
@@ -148,43 +136,43 @@ class Tooltip {
|
|
|
148
136
|
? (elementPos[0] - tooltipWidth < 0 ? Position.Right
|
|
149
137
|
: elementPos[0] + tooltipWidth > containerWidth ? Position.Left : Position.Center)
|
|
150
138
|
: config.horizontalPlacement;
|
|
151
|
-
let translateX =
|
|
139
|
+
let translateX = 0;
|
|
152
140
|
switch (horizontalPlacement) {
|
|
153
141
|
case Position.Left:
|
|
154
|
-
translateX =
|
|
142
|
+
translateX = -tooltipWidth - margin;
|
|
155
143
|
break;
|
|
156
144
|
case Position.Right:
|
|
157
|
-
translateX =
|
|
145
|
+
translateX = hoveredElementRect.width + margin;
|
|
158
146
|
break;
|
|
159
147
|
case Position.Center:
|
|
160
148
|
default:
|
|
161
|
-
translateX =
|
|
149
|
+
translateX = (-tooltipWidth + hoveredElementRect.width) / 2;
|
|
162
150
|
break;
|
|
163
151
|
}
|
|
164
152
|
const verticalPlacement = config.verticalPlacement === Position.Auto
|
|
165
153
|
? (horizontalPlacement !== Position.Center ? Position.Center
|
|
166
154
|
: elementPos[1] - tooltipHeight < 0 ? Position.Bottom : Position.Top)
|
|
167
155
|
: config.verticalPlacement;
|
|
168
|
-
let translateY =
|
|
156
|
+
let translateY = -tooltipHeight;
|
|
169
157
|
switch (verticalPlacement) {
|
|
170
158
|
case Position.Center:
|
|
171
|
-
translateY
|
|
159
|
+
translateY += (tooltipHeight + hoveredElementRect.height) / 2;
|
|
172
160
|
break;
|
|
173
161
|
case Position.Bottom:
|
|
174
|
-
translateY
|
|
162
|
+
translateY += tooltipHeight + hoveredElementRect.height + margin;
|
|
175
163
|
break;
|
|
176
164
|
case Position.Top:
|
|
177
165
|
default:
|
|
178
|
-
translateY
|
|
166
|
+
translateY += -margin;
|
|
179
167
|
break;
|
|
180
168
|
}
|
|
181
|
-
const
|
|
182
|
-
this._applyPosition(
|
|
169
|
+
const [top, left] = this._constraintPosToContainer(elementPos[0] + translateX, elementPos[1] + translateY, tooltipWidth, tooltipHeight);
|
|
170
|
+
this._applyPosition(top, left, tooltipHeight);
|
|
183
171
|
}
|
|
184
172
|
isContainerBody() {
|
|
185
173
|
return this._container === document.body;
|
|
186
174
|
}
|
|
187
|
-
|
|
175
|
+
render(html) {
|
|
188
176
|
const { config } = this;
|
|
189
177
|
if (html instanceof HTMLElement) {
|
|
190
178
|
const node = this.div.select(':first-child').node();
|
|
@@ -198,17 +186,34 @@ class Tooltip {
|
|
|
198
186
|
.classed(nonInteractive, !config.allowHover || config.followCursor);
|
|
199
187
|
this.display();
|
|
200
188
|
}
|
|
201
|
-
_applyPosition(x, y,
|
|
189
|
+
_applyPosition(x, y, tooltipHeight) {
|
|
202
190
|
const isContainerBody = this.isContainerBody();
|
|
203
191
|
const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight;
|
|
204
192
|
this.div
|
|
205
193
|
.classed(positionFixed, isContainerBody)
|
|
206
|
-
.style('top', isContainerBody ? `${y
|
|
207
|
-
.style('bottom', !isContainerBody ? `${containerHeight - y}px` : 'unset')
|
|
208
|
-
.style('left', `${x}px`)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
194
|
+
.style('top', isContainerBody ? `${y}px` : 'unset')
|
|
195
|
+
.style('bottom', !isContainerBody ? `${containerHeight - y - tooltipHeight}px` : 'unset')
|
|
196
|
+
.style('left', `${x}px`);
|
|
197
|
+
}
|
|
198
|
+
_constraintPosToContainer(top, left, tooltipWidth, tooltipHeight) {
|
|
199
|
+
const isContainerBody = this.isContainerBody();
|
|
200
|
+
const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight;
|
|
201
|
+
const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth;
|
|
202
|
+
// // Constraint to container
|
|
203
|
+
const paddingX = 10;
|
|
204
|
+
const hitRight = top > (containerWidth - tooltipWidth - paddingX);
|
|
205
|
+
const hitLeft = top < paddingX;
|
|
206
|
+
const constrainedLeft = hitRight ? containerWidth - tooltipWidth - paddingX
|
|
207
|
+
: hitLeft ? paddingX : top;
|
|
208
|
+
const paddingY = 10;
|
|
209
|
+
const hitBottom = left > (containerHeight - tooltipHeight - paddingY);
|
|
210
|
+
const hitTop = left < paddingY;
|
|
211
|
+
const constrainedTop = hitBottom ? containerHeight - tooltipHeight - paddingY
|
|
212
|
+
: hitTop ? paddingY : left;
|
|
213
|
+
return [
|
|
214
|
+
containerWidth < tooltipWidth ? 0 : constrainedLeft,
|
|
215
|
+
containerHeight < tooltipHeight ? 0 : constrainedTop,
|
|
216
|
+
];
|
|
212
217
|
}
|
|
213
218
|
_setContainerPosition() {
|
|
214
219
|
var _a;
|
|
@@ -250,17 +255,12 @@ class Tooltip {
|
|
|
250
255
|
else {
|
|
251
256
|
// Otherwise we show the tooltip, but don't render the content if it's `undefined` or
|
|
252
257
|
// an empty string. This way we can allow it to work with things like `createPortal` in React
|
|
253
|
-
this.
|
|
258
|
+
this.render(content);
|
|
254
259
|
if (config.followCursor)
|
|
255
260
|
this.place({ x, y });
|
|
256
261
|
else
|
|
257
262
|
this.placeByElement(el);
|
|
258
263
|
}
|
|
259
|
-
// Store the hovered element and the event for future reference,
|
|
260
|
-
// i.e. to re-position the tooltip if the content has been changed
|
|
261
|
-
// by something else and it was captured by the MutationObserver
|
|
262
|
-
this._hoveredElement = el;
|
|
263
|
-
this._position = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container);
|
|
264
264
|
// Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair
|
|
265
265
|
e.stopPropagation();
|
|
266
266
|
// Stop looking for other matches
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { select, Selection, pointer } from 'd3-selection'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Types\nimport { Position } from 'types/position'\n\n// Utils\nimport { merge, throttle } from 'utils/data'\n\n// Config\nimport { TooltipDefaultConfig, TooltipConfigInterface } from './config'\n\n// Style\nimport * as s from './style'\n\nexport class Tooltip {\n element: HTMLElement\n div: Selection<HTMLElement, unknown, null, undefined>\n protected _defaultConfig = TooltipDefaultConfig as TooltipConfigInterface\n public config: TooltipConfigInterface = this._defaultConfig\n prevConfig: TooltipConfigInterface\n components: ComponentCore<unknown>[]\n static selectors = s\n private _setUpEventsThrottled = throttle(this._setUpEvents, 500)\n private _setContainerPositionThrottled = throttle(this._setContainerPosition, 500)\n private _isShown = false\n private _container: HTMLElement\n private _mutationObserver: MutationObserver\n private _hoveredElement: HTMLElement | SVGElement\n private _position: [number, number]\n\n constructor (config: TooltipConfigInterface = {}) {\n this.element = document.createElement('div')\n this.div = select(this.element)\n .attr('class', s.root)\n\n this.setConfig(config)\n this.components = this.config.components\n\n // Set up MutationObserver to automatically re-position the tooltip\n // if the content has been dynamically changed\n this._mutationObserver = new MutationObserver(() => {\n if (!this._isShown) return\n\n // Handle changes to the content of this.div\n // Add your logic here\n if (!this.config.followCursor && this._hoveredElement) {\n this.placeByElement(this._hoveredElement)\n } else if (this._position) {\n this.place({ x: this._position[0], y: this._position[1] })\n }\n })\n\n this._mutationObserver.observe(this.div.node(), { childList: true, subtree: true })\n }\n\n public setConfig (config: TooltipConfigInterface): void {\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n\n if (this.config.container && (this.config.container !== this.prevConfig?.container)) {\n this.setContainer(this.config.container)\n }\n\n this._setUpAttributes()\n }\n\n public setContainer (container: HTMLElement): void {\n this.element.parentNode?.removeChild(this.element)\n\n this._container = container\n this._container.appendChild(this.element)\n\n this._setContainerPositionThrottled()\n }\n\n public getContainer (): HTMLElement {\n return this._container\n }\n\n public hasContainer (): boolean {\n return !!this._container && this._container.isConnected\n }\n\n public setComponents (components: ComponentCore<unknown>[]): void {\n this.components = components\n }\n\n public update (): void {\n if (!this._container) return\n\n this._setUpEventsThrottled()\n }\n\n /** Show the tooltip by providing content and position */\n public show (html: string | HTMLElement | null | void, pos: { x: number; y: number }): void {\n this._render(html)\n this.place(pos)\n }\n\n /** Hide the tooltip */\n public hide (): void {\n this.div\n .classed(s.show, false) // The `show` class triggers the opacity transition\n .on('transitionend', () => {\n // We hide the element once the transition completes\n // This ensures container overflow will not occur when the window is resized\n this.div.classed(s.hidden, !this._isShown)\n })\n\n this._isShown = false\n }\n\n /** Simply displays the tooltip with its previous content on position */\n public display (): void {\n this.div\n .classed(s.hidden, false) // The `hidden` class sets `display: none;`\n .classed(s.show, true) // The `show` class triggers the opacity transition\n\n this._isShown = true\n }\n\n public place (pos: { x: number; y: number }): void {\n if (!this.hasContainer()) {\n console.warn('Unovis | Tooltip: Container was not set or is not initialized yet')\n return\n }\n const { config } = this\n const isContainerBody = this.isContainerBody()\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? Position.Center\n : config.horizontalPlacement\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? ((pos.y - tooltipHeight) > containerHeight / 8 ? Position.Top : Position.Bottom)\n : config.verticalPlacement\n\n // dx and dy variables shift the tooltip from the default position (above the cursor, centred horizontally)\n const margin = 5\n const dx = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift\n : horizontalPlacement === Position.Center ? -tooltipWidth / 2\n : margin + config.horizontalShift\n const dy = verticalPlacement === Position.Bottom ? tooltipHeight + margin + config.verticalShift\n : verticalPlacement === Position.Center ? tooltipHeight / 2\n : -margin - config.verticalShift\n\n // Constraint to container\n const paddingX = 10\n const hitRight = pos.x > (containerWidth - tooltipWidth - dx - paddingX)\n const hitLeft = pos.x < -dx + paddingX\n const constraintX = hitRight ? (containerWidth - tooltipWidth - dx) - pos.x - paddingX\n : hitLeft ? -dx - pos.x + paddingX : 0\n\n const paddingY = 10\n const hitBottom = pos.y > (containerHeight - dy - paddingY)\n const hitTop = pos.y < (tooltipHeight - dy + paddingY)\n const constraintY = hitBottom ? containerHeight - dy - pos.y - paddingY\n : hitTop ? tooltipHeight - dy - pos.y + paddingY : 0\n\n // Placing\n // If the container size is smaller than the the tooltip size we just stick the tooltip to the top / left\n const x = containerWidth < tooltipWidth ? 0 : pos.x + constraintX + dx\n const y = containerHeight < tooltipHeight ? tooltipHeight : pos.y + constraintY + dy\n\n this._applyPosition(x, y, null, tooltipHeight)\n }\n\n public placeByElement (hoveredElement: SVGElement | HTMLElement): void {\n const { config } = this\n const margin = 5\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n const isContainerBody = this.isContainerBody()\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n const hoveredElementRect = hoveredElement.getBoundingClientRect()\n\n // We use D3's point transformation to get the correct position of the element by pretending it's a pointer event\n // See more: https://github.com/d3/d3-selection/blob/main/src/pointer.js\n const elementPos = pointer({\n clientX: hoveredElementRect.x,\n clientY: hoveredElementRect.y,\n pageX: hoveredElementRect.x,\n pageY: hoveredElementRect.y,\n }, this._container)\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? (elementPos[0] - tooltipWidth < 0 ? Position.Right\n : elementPos[0] + tooltipWidth > containerWidth ? Position.Left : Position.Center)\n : config.horizontalPlacement\n\n let translateX = ''\n switch (horizontalPlacement) {\n case Position.Left:\n translateX = `calc(-100% - ${margin}px)`\n break\n case Position.Right:\n translateX = `calc(${hoveredElementRect.width}px + ${margin}px)`\n break\n case Position.Center:\n default:\n translateX = `calc(-50% + ${hoveredElementRect.width / 2}px)`\n break\n }\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? (horizontalPlacement !== Position.Center ? Position.Center\n : elementPos[1] - tooltipHeight < 0 ? Position.Bottom : Position.Top)\n : config.verticalPlacement\n\n let translateY = ''\n switch (verticalPlacement) {\n case Position.Center:\n translateY = `calc(50% + ${hoveredElementRect.height / 2}px)` // `calc(-50% + ${hoveredElementRect.height / 2}px)`\n break\n case Position.Bottom:\n translateY = `calc(100% + ${hoveredElementRect.height}px + ${margin}px)` // `calc(${hoveredElementRect.height}px + ${margin}px)`\n break\n case Position.Top:\n default:\n translateY = `${-margin}px` // `calc(-100% - ${margin}px)`\n break\n }\n\n const translate = `translate(${translateX}, ${translateY})`\n this._applyPosition(elementPos[0], elementPos[1], translate, tooltipHeight)\n }\n\n public isContainerBody (): boolean {\n return this._container === document.body\n }\n\n private _render (html: string | HTMLElement | null | void): void {\n const { config } = this\n if (html instanceof HTMLElement) {\n const node = this.div.select(':first-child').node()\n if (node !== html) this.div.html('').append(() => html)\n } else if (html) {\n this.div.html(html)\n }\n\n this.div\n .classed(s.nonInteractive, !config.allowHover || config.followCursor)\n\n this.display()\n }\n\n private _applyPosition (x: number, y: number, transform: string | null, tooltipHeight: number): void {\n const isContainerBody = this.isContainerBody()\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n\n this.div\n .classed(s.positionFixed, isContainerBody)\n .style('top', isContainerBody ? `${y - tooltipHeight}px` : 'unset')\n .style('bottom', !isContainerBody ? `${containerHeight - y}px` : 'unset')\n .style('left', `${x}px`)\n // We use `transform` to position the tooltip with relative units like percentages,\n // this way it works automatically with dynamic content that can change the tooltip's size\n .style('transform', transform)\n }\n\n private _setContainerPosition (): void {\n // Tooltip position calculation relies on the parent position\n // If it's not set (static), we set it to `relative` (not a good practice)\n if (this._container !== document.body && getComputedStyle(this._container)?.position === 'static') {\n this._container.style.position = 'relative'\n }\n }\n\n private _setUpEvents (): void {\n const { config } = this\n\n // We use the Event Delegation pattern to set up Tooltip events\n // Every component will have single `mousemove` and `mouseleave` event listener functions, where we'll check\n // the `path` of the event and trigger corresponding callbacks\n this.components.forEach(component => {\n const selection = select(component.element)\n selection\n .on('mousemove.tooltip', (e: MouseEvent) => {\n const path: (HTMLElement | SVGGElement)[] = (e.composedPath && e.composedPath()) || (e as any).path || [e.target]\n\n // Go through all of the configured triggers\n for (const className of Object.keys(config.triggers)) {\n const template = config.triggers[className]\n if (!template) continue // Skip if the trigger is not configured\n\n const els = selection.selectAll<HTMLElement | SVGGElement, unknown>(`.${className}`).nodes()\n\n // Go through all of the elements in the event path (from the deepest element upwards)\n for (const el of path) {\n if (el === selection.node()) break // Break on the component's level (usually the `<g>` element)\n if (el.classList.contains(className)) { // If there's a match, show the tooltip\n const i = els.indexOf(el)\n const d = select(el).datum()\n const content = template(d, i, els)\n const [x, y] = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container)\n if (content === null) {\n // If the content is `null`, we hide the tooltip\n this.hide()\n } else {\n // Otherwise we show the tooltip, but don't render the content if it's `undefined` or\n // an empty string. This way we can allow it to work with things like `createPortal` in React\n this._render(content)\n if (config.followCursor) this.place({ x, y })\n else this.placeByElement(el)\n }\n\n // Store the hovered element and the event for future reference,\n // i.e. to re-position the tooltip if the content has been changed\n // by something else and it was captured by the MutationObserver\n this._hoveredElement = el\n this._position = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container)\n\n // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n e.stopPropagation()\n\n // Stop looking for other matches\n return\n }\n }\n }\n\n // Hide the tooltip if the event didn't pass through any of the configured triggers.\n // We use the `this._isShown` condition as a little performance optimization tweak\n // (we don't want the tooltip to update its class on every mouse movement, see `this.hide()`).\n if (this._isShown) this.hide()\n })\n .on('mouseleave.tooltip', (e: MouseEvent) => {\n e.stopPropagation() // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n this.hide()\n })\n })\n\n // Set up Tooltip hover\n if (config.allowHover && !config.followCursor) {\n this.div\n .on('mouseenter.tooltip', this.display.bind(this))\n .on('mouseleave.tooltip', this.hide.bind(this))\n } else {\n this.div\n .on('mouseenter.tooltip', null)\n .on('mouseleave.tooltip', null)\n }\n }\n\n private _setUpAttributes (): void {\n const attributesMap = this.config.attributes\n if (!attributesMap) return\n\n Object.keys(attributesMap).forEach(attr => {\n this.div.attr(attr, attributesMap[attr])\n })\n }\n\n public destroy (): void {\n this._mutationObserver.disconnect()\n this.div?.remove()\n }\n}\n"],"names":["s.root","s.show","s.hidden","s.nonInteractive","s.positionFixed","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { select, Selection, pointer } from 'd3-selection'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Types\nimport { Position } from 'types/position'\n\n// Utils\nimport { merge, throttle } from 'utils/data'\n\n// Config\nimport { TooltipDefaultConfig, TooltipConfigInterface } from './config'\n\n// Style\nimport * as s from './style'\n\nexport class Tooltip {\n element: HTMLElement\n div: Selection<HTMLElement, unknown, null, undefined>\n protected _defaultConfig = TooltipDefaultConfig as TooltipConfigInterface\n public config: TooltipConfigInterface = this._defaultConfig\n prevConfig: TooltipConfigInterface\n components: ComponentCore<unknown>[]\n static selectors = s\n private _setUpEventsThrottled = throttle(this._setUpEvents, 500)\n private _setContainerPositionThrottled = throttle(this._setContainerPosition, 500)\n private _isShown = false\n private _container: HTMLElement\n private _mutationObserver: MutationObserver\n private _hoveredElement: HTMLElement | SVGElement\n private _position: [number, number]\n\n constructor (config: TooltipConfigInterface = {}) {\n this.element = document.createElement('div')\n this.div = select(this.element)\n .attr('class', s.root)\n\n this.setConfig(config)\n this.components = this.config.components\n\n // Set up MutationObserver to automatically re-position the tooltip\n // if the content has been dynamically changed\n this._mutationObserver = new MutationObserver(() => {\n if (!this._isShown) return\n\n // Handle changes to the content of this.div\n // Add your logic here\n if (!this.config.followCursor && this._hoveredElement) {\n this.placeByElement(this._hoveredElement)\n } else if (this._position) {\n this.place({ x: this._position[0], y: this._position[1] })\n }\n })\n\n this._mutationObserver.observe(this.div.node(), { childList: true, subtree: true })\n }\n\n public setConfig (config: TooltipConfigInterface): void {\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n\n if (this.config.container && (this.config.container !== this.prevConfig?.container)) {\n this.setContainer(this.config.container)\n }\n\n this._setUpAttributes()\n }\n\n public setContainer (container: HTMLElement): void {\n this.element.parentNode?.removeChild(this.element)\n\n this._container = container\n this._container.appendChild(this.element)\n\n this._setContainerPositionThrottled()\n }\n\n public getContainer (): HTMLElement {\n return this._container\n }\n\n public hasContainer (): boolean {\n return !!this._container && this._container.isConnected\n }\n\n public setComponents (components: ComponentCore<unknown>[]): void {\n this.components = components\n }\n\n public update (): void {\n if (!this._container) return\n\n this._setUpEventsThrottled()\n }\n\n /** Show the tooltip by providing content and position */\n public show (html: string | HTMLElement | null | void, pos: { x: number; y: number }): void {\n this.render(html)\n this.place(pos)\n }\n\n /** Hide the tooltip */\n public hide (): void {\n this.div\n .classed(s.show, false) // The `show` class triggers the opacity transition\n .on('transitionend', () => {\n // We hide the element once the transition completes\n // This ensures container overflow will not occur when the window is resized\n this.div.classed(s.hidden, !this._isShown)\n })\n\n this._isShown = false\n }\n\n /** Simply displays the tooltip with its previous content on position */\n public display (): void {\n this.div\n .classed(s.hidden, false) // The `hidden` class sets `display: none;`\n .classed(s.show, true) // The `show` class triggers the opacity transition\n\n this._isShown = true\n }\n\n public place (pos: { x: number; y: number }): void {\n this._position = [pos.x, pos.y]\n\n if (!this.hasContainer()) {\n console.warn('Unovis | Tooltip: Container was not set or is not initialized yet')\n return\n }\n\n const { config } = this\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? Position.Center\n : config.horizontalPlacement\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? ((pos.y - tooltipHeight) < 0 ? Position.Bottom : Position.Top)\n : config.verticalPlacement\n\n // dx and dy variables shift the tooltip from the default position (above the cursor, centred horizontally)\n const margin = 5\n const translateX = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift\n : horizontalPlacement === Position.Center ? -tooltipWidth / 2\n : margin + config.horizontalShift\n\n const translateY = verticalPlacement === Position.Bottom ? margin + config.verticalShift\n : verticalPlacement === Position.Center ? -tooltipHeight / 2\n : -margin - config.verticalShift - tooltipHeight\n\n const [top, left] = this._constraintPosToContainer(pos.x + translateX, pos.y + translateY, tooltipWidth, tooltipHeight)\n this._applyPosition(top, left, tooltipHeight)\n }\n\n public placeByElement (hoveredElement: SVGElement | HTMLElement): void {\n const { config } = this\n\n // Store the hovered element and the event for future reference,\n // i.e. to re-position the tooltip if the content has been changed\n // by something else and it was captured by the MutationObserver\n this._hoveredElement = hoveredElement\n\n const margin = 5\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n const isContainerBody = this.isContainerBody()\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n const hoveredElementRect = hoveredElement.getBoundingClientRect()\n\n // We use D3's point transformation to get the correct position of the element by pretending it's a pointer event\n // See more: https://github.com/d3/d3-selection/blob/main/src/pointer.js\n const elementPos = isContainerBody ? [hoveredElementRect.x, hoveredElementRect.y] : pointer({\n clientX: hoveredElementRect.x,\n clientY: hoveredElementRect.y,\n pageX: hoveredElementRect.x,\n pageY: hoveredElementRect.y,\n }, this._container)\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? (elementPos[0] - tooltipWidth < 0 ? Position.Right\n : elementPos[0] + tooltipWidth > containerWidth ? Position.Left : Position.Center)\n : config.horizontalPlacement\n\n let translateX = 0\n switch (horizontalPlacement) {\n case Position.Left:\n translateX = -tooltipWidth - margin\n break\n case Position.Right:\n translateX = hoveredElementRect.width + margin\n break\n case Position.Center:\n default:\n translateX = (-tooltipWidth + hoveredElementRect.width) / 2\n break\n }\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? (horizontalPlacement !== Position.Center ? Position.Center\n : elementPos[1] - tooltipHeight < 0 ? Position.Bottom : Position.Top)\n : config.verticalPlacement\n\n let translateY = -tooltipHeight\n switch (verticalPlacement) {\n case Position.Center:\n translateY += (tooltipHeight + hoveredElementRect.height) / 2\n break\n case Position.Bottom:\n translateY += tooltipHeight + hoveredElementRect.height + margin\n break\n case Position.Top:\n default:\n translateY += -margin\n break\n }\n\n const [top, left] = this._constraintPosToContainer(elementPos[0] + translateX, elementPos[1] + translateY, tooltipWidth, tooltipHeight)\n this._applyPosition(top, left, tooltipHeight)\n }\n\n public isContainerBody (): boolean {\n return this._container === document.body\n }\n\n public render (html: string | HTMLElement | null | void): void {\n const { config } = this\n if (html instanceof HTMLElement) {\n const node = this.div.select(':first-child').node()\n if (node !== html) this.div.html('').append(() => html)\n } else if (html) {\n this.div.html(html)\n }\n\n this.div\n .classed(s.nonInteractive, !config.allowHover || config.followCursor)\n\n this.display()\n }\n\n private _applyPosition (x: number, y: number, tooltipHeight: number): void {\n const isContainerBody = this.isContainerBody()\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n\n this.div\n .classed(s.positionFixed, isContainerBody)\n .style('top', isContainerBody ? `${y}px` : 'unset')\n .style('bottom', !isContainerBody ? `${containerHeight - y - tooltipHeight}px` : 'unset')\n .style('left', `${x}px`)\n }\n\n private _constraintPosToContainer (top: number, left: number, tooltipWidth: number, tooltipHeight: number): [number, number] {\n const isContainerBody = this.isContainerBody()\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n\n // // Constraint to container\n const paddingX = 10\n const hitRight = top > (containerWidth - tooltipWidth - paddingX)\n const hitLeft = top < paddingX\n const constrainedLeft = hitRight ? containerWidth - tooltipWidth - paddingX\n : hitLeft ? paddingX : top\n\n const paddingY = 10\n const hitBottom = left > (containerHeight - tooltipHeight - paddingY)\n const hitTop = left < paddingY\n const constrainedTop = hitBottom ? containerHeight - tooltipHeight - paddingY\n : hitTop ? paddingY : left\n\n return [\n containerWidth < tooltipWidth ? 0 : constrainedLeft,\n containerHeight < tooltipHeight ? 0 : constrainedTop,\n ]\n }\n\n private _setContainerPosition (): void {\n // Tooltip position calculation relies on the parent position\n // If it's not set (static), we set it to `relative` (not a good practice)\n if (this._container !== document.body && getComputedStyle(this._container)?.position === 'static') {\n this._container.style.position = 'relative'\n }\n }\n\n private _setUpEvents (): void {\n const { config } = this\n\n // We use the Event Delegation pattern to set up Tooltip events\n // Every component will have single `mousemove` and `mouseleave` event listener functions, where we'll check\n // the `path` of the event and trigger corresponding callbacks\n this.components.forEach(component => {\n const selection = select(component.element)\n selection\n .on('mousemove.tooltip', (e: MouseEvent) => {\n const path: (HTMLElement | SVGGElement)[] = (e.composedPath && e.composedPath()) || (e as any).path || [e.target]\n\n // Go through all of the configured triggers\n for (const className of Object.keys(config.triggers)) {\n const template = config.triggers[className]\n if (!template) continue // Skip if the trigger is not configured\n\n const els = selection.selectAll<HTMLElement | SVGGElement, unknown>(`.${className}`).nodes()\n\n // Go through all of the elements in the event path (from the deepest element upwards)\n for (const el of path) {\n if (el === selection.node()) break // Break on the component's level (usually the `<g>` element)\n if (el.classList.contains(className)) { // If there's a match, show the tooltip\n const i = els.indexOf(el)\n const d = select(el).datum()\n const content = template(d, i, els)\n const [x, y] = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container)\n if (content === null) {\n // If the content is `null`, we hide the tooltip\n this.hide()\n } else {\n // Otherwise we show the tooltip, but don't render the content if it's `undefined` or\n // an empty string. This way we can allow it to work with things like `createPortal` in React\n this.render(content)\n if (config.followCursor) this.place({ x, y })\n else this.placeByElement(el)\n }\n\n // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n e.stopPropagation()\n\n // Stop looking for other matches\n return\n }\n }\n }\n\n // Hide the tooltip if the event didn't pass through any of the configured triggers.\n // We use the `this._isShown` condition as a little performance optimization tweak\n // (we don't want the tooltip to update its class on every mouse movement, see `this.hide()`).\n if (this._isShown) this.hide()\n })\n .on('mouseleave.tooltip', (e: MouseEvent) => {\n e.stopPropagation() // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n this.hide()\n })\n })\n\n // Set up Tooltip hover\n if (config.allowHover && !config.followCursor) {\n this.div\n .on('mouseenter.tooltip', this.display.bind(this))\n .on('mouseleave.tooltip', this.hide.bind(this))\n } else {\n this.div\n .on('mouseenter.tooltip', null)\n .on('mouseleave.tooltip', null)\n }\n }\n\n private _setUpAttributes (): void {\n const attributesMap = this.config.attributes\n if (!attributesMap) return\n\n Object.keys(attributesMap).forEach(attr => {\n this.div.attr(attr, attributesMap[attr])\n })\n }\n\n public destroy (): void {\n this._mutationObserver.disconnect()\n this.div?.remove()\n }\n}\n"],"names":["s.root","s.show","s.hidden","s.nonInteractive","s.positionFixed","s"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unovis/ts",
|
|
3
3
|
"description": "Modular data visualization framework for React, Angular, Svelte, and vanilla TypeScript or JavaScript",
|
|
4
|
-
"version": "1.5.0-alpha.
|
|
4
|
+
"version": "1.5.0-alpha.3",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/f5/unovis.git",
|