@proyecto-viviana/solidaria-components 0.3.1 → 0.3.2

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/src/Tooltip.tsx CHANGED
@@ -226,6 +226,40 @@ const TriggerWrapper: ParentComponent<{
226
226
  }> = (props) => {
227
227
  const child = () => props.children as JSX.Element;
228
228
  const [triggerElement, setTriggerElement] = createSignal<HTMLElement | null>(null);
229
+ const [wrapperElement, setWrapperElement] = createSignal<HTMLSpanElement | null>(null);
230
+ const getWrapperEventProps = () => {
231
+ const triggerProps = props.triggerProps as Record<string, unknown>;
232
+ const wrapperProps: Record<string, unknown> = {};
233
+ const eventPropNames = [
234
+ "onFocus",
235
+ "onBlur",
236
+ "onPointerEnter",
237
+ "onPointerLeave",
238
+ "onPointerOver",
239
+ "onPointerOut",
240
+ "onMouseEnter",
241
+ "onMouseLeave",
242
+ "onTouchStart",
243
+ "onPointerDown",
244
+ "onKeyDown",
245
+ ];
246
+
247
+ for (const propName of eventPropNames) {
248
+ const handler = triggerProps[propName];
249
+ if (typeof handler === "function") {
250
+ wrapperProps[propName] = handler;
251
+ }
252
+ }
253
+
254
+ if (!wrapperProps.onPointerEnter && typeof triggerProps.onMouseEnter === "function") {
255
+ wrapperProps.onPointerEnter = triggerProps.onMouseEnter;
256
+ }
257
+ if (!wrapperProps.onPointerLeave && typeof triggerProps.onMouseLeave === "function") {
258
+ wrapperProps.onPointerLeave = triggerProps.onMouseLeave;
259
+ }
260
+
261
+ return wrapperProps as JSX.HTMLAttributes<HTMLSpanElement>;
262
+ };
229
263
 
230
264
  createEffect(() => {
231
265
  const element = triggerElement();
@@ -241,7 +275,9 @@ const TriggerWrapper: ParentComponent<{
241
275
  element.removeAttribute("aria-describedby");
242
276
  }
243
277
 
244
- const listeners: Array<[string, EventListener]> = [];
278
+ const wrapper = wrapperElement();
279
+ const targets = Array.from(new Set([element, wrapper].filter(Boolean))) as HTMLElement[];
280
+ const listeners: Array<[HTMLElement, string, EventListener]> = [];
245
281
  const eventProps = [
246
282
  ["onFocus", "focus"],
247
283
  ["onBlur", "blur"],
@@ -257,17 +293,24 @@ const TriggerWrapper: ParentComponent<{
257
293
  ] as const;
258
294
 
259
295
  for (const [propName, eventName] of eventProps) {
260
- const handler = triggerProps[propName];
296
+ let handler = triggerProps[propName];
297
+ if (!handler && propName === "onPointerEnter") {
298
+ handler = triggerProps.onMouseEnter;
299
+ } else if (!handler && propName === "onPointerLeave") {
300
+ handler = triggerProps.onMouseLeave;
301
+ }
261
302
  if (typeof handler === "function") {
262
303
  const listener = handler as EventListener;
263
- element.addEventListener(eventName, listener);
264
- listeners.push([eventName, listener]);
304
+ for (const target of targets) {
305
+ target.addEventListener(eventName, listener);
306
+ listeners.push([target, eventName, listener]);
307
+ }
265
308
  }
266
309
  }
267
310
 
268
311
  onCleanup(() => {
269
- for (const [eventName, listener] of listeners) {
270
- element.removeEventListener(eventName, listener);
312
+ for (const [target, eventName, listener] of listeners) {
313
+ target.removeEventListener(eventName, listener);
271
314
  }
272
315
  if (describedBy && element.getAttribute("aria-describedby") === describedBy) {
273
316
  element.removeAttribute("aria-describedby");
@@ -279,6 +322,8 @@ const TriggerWrapper: ParentComponent<{
279
322
  // However, display:contents makes getBoundingClientRect return zeros,
280
323
  // so we pass a ref callback that finds the first actual element child.
281
324
  const handleRef = (span: HTMLSpanElement) => {
325
+ setWrapperElement(span);
326
+
282
327
  const findElementChild = (el: Element): HTMLElement | null => {
283
328
  for (const child of el.children) {
284
329
  if (child instanceof HTMLElement) {
@@ -329,7 +374,7 @@ const TriggerWrapper: ParentComponent<{
329
374
  };
330
375
 
331
376
  return (
332
- <span ref={handleRef} style={{ display: "contents" }}>
377
+ <span {...getWrapperEventProps()} ref={handleRef} style={{ display: "contents" }}>
333
378
  {child()}
334
379
  </span>
335
380
  );