vrembem 4.0.0-next.23 → 4.0.0-next.25

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/dev/index.umd.cjs CHANGED
@@ -86,29 +86,6 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
86
86
  });
87
87
  }
88
88
  }
89
- const not = {
90
- inert: ":not([inert]):not([inert] *)",
91
- negTabIndex: ':not([tabindex^="-"])',
92
- disabled: ":not(:disabled)"
93
- };
94
- const focusableSelectors = [
95
- `a[href]${not.inert}${not.negTabIndex}`,
96
- `area[href]${not.inert}${not.negTabIndex}`,
97
- `input:not([type="hidden"]):not([type="radio"])${not.inert}${not.negTabIndex}${not.disabled}`,
98
- `input[type="radio"]${not.inert}${not.negTabIndex}${not.disabled}`,
99
- `select${not.inert}${not.negTabIndex}${not.disabled}`,
100
- `textarea${not.inert}${not.negTabIndex}${not.disabled}`,
101
- `button${not.inert}${not.negTabIndex}${not.disabled}`,
102
- `details${not.inert} > summary:first-of-type${not.negTabIndex}`,
103
- // Discard until Firefox supports `:has()`
104
- // See: https://github.com/KittyGiraudel/focusable-selectors/issues/12
105
- // `details:not(:has(> summary))${not.inert}${not.negTabIndex}`,
106
- `iframe${not.inert}${not.negTabIndex}`,
107
- `audio[controls]${not.inert}${not.negTabIndex}`,
108
- `video[controls]${not.inert}${not.negTabIndex}`,
109
- `[contenteditable]${not.inert}${not.negTabIndex}`,
110
- `[tabindex]${not.inert}${not.negTabIndex}`
111
- ];
112
89
  class FocusTrap {
113
90
  constructor(el = null, selectorFocus = "[data-focus]") {
114
91
  __privateAdd(this, _focusable);
@@ -158,7 +135,8 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
158
135
  const focusable = [];
159
136
  const initFocus = document.activeElement;
160
137
  const initScrollTop = el.scrollTop;
161
- const els = el.querySelectorAll(focusableSelectors.join(","));
138
+ const selector = focusableSelectors.join(",");
139
+ const els = el.querySelectorAll(selector);
162
140
  els.forEach((el2) => {
163
141
  el2.focus();
164
142
  if (document.activeElement === el2) {
@@ -173,6 +151,24 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
173
151
  _focusable = new WeakMap();
174
152
  _handleFocusTrap = new WeakMap();
175
153
  _handleFocusLock = new WeakMap();
154
+ const notInert = ":not([inert])";
155
+ const notNegTabIndex = ':not([tabindex^="-"])';
156
+ const notDisabled = ":not(:disabled)";
157
+ const focusableSelectors = [
158
+ `a[href]${notInert}${notNegTabIndex}`,
159
+ `area[href]${notInert}${notNegTabIndex}`,
160
+ `input:not([type="hidden"]):not([type="radio"])${notInert}${notNegTabIndex}${notDisabled}`,
161
+ `input[type="radio"]${notInert}${notNegTabIndex}${notDisabled}`,
162
+ `select${notInert}${notNegTabIndex}${notDisabled}`,
163
+ `textarea${notInert}${notNegTabIndex}${notDisabled}`,
164
+ `button${notInert}${notNegTabIndex}${notDisabled}`,
165
+ `details${notInert} > summary:first-of-type${notNegTabIndex}`,
166
+ `iframe${notInert}${notNegTabIndex}`,
167
+ `audio[controls]${notInert}${notNegTabIndex}`,
168
+ `video[controls]${notInert}${notNegTabIndex}`,
169
+ `[contenteditable]${notInert}${notNegTabIndex}`,
170
+ `[tabindex]${notInert}${notNegTabIndex}`
171
+ ];
176
172
  function handleFocusTrap(event) {
177
173
  const isTab = event.key === "Tab" || event.keyCode === 9;
178
174
  if (!isTab) return;
@@ -1196,6 +1192,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1196
1192
  autoMount: false,
1197
1193
  // Selectors
1198
1194
  selectorPopover: ".popover",
1195
+ selectorTooltip: ".popover_tooltip",
1199
1196
  selectorArrow: ".popover__arrow",
1200
1197
  // State classes
1201
1198
  stateActive: "is-active",
@@ -1320,9 +1317,9 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1320
1317
  if (!trigger && !popover) {
1321
1318
  return { error: new Error(`No popover elements found using the ID: "${id}".`) };
1322
1319
  } else if (!trigger) {
1323
- return { error: new Error("No popover trigger associated with the provided popover.") };
1320
+ return { error: new Error(`No popover trigger associated with the provided popover: "${id}".`) };
1324
1321
  } else if (!popover) {
1325
- return { error: new Error("No popover associated with the provided popover trigger.") };
1322
+ return { error: new Error(`No popover associated with the provided popover trigger: "${id}".`) };
1326
1323
  } else {
1327
1324
  return { popover, trigger };
1328
1325
  }
@@ -1335,7 +1332,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1335
1332
  if (popover && popover.state === "opened") {
1336
1333
  popover.el.inert = true;
1337
1334
  popover.el.classList.remove(this.settings.stateActive);
1338
- if (popover.trigger.hasAttribute("aria-controls")) {
1335
+ if (!popover.isTooltip) {
1339
1336
  popover.trigger.setAttribute("aria-expanded", "false");
1340
1337
  }
1341
1338
  popover.popper.setOptions({
@@ -1364,10 +1361,11 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1364
1361
  function closeCheck(popover) {
1365
1362
  if (popover.state != "opened") return;
1366
1363
  setTimeout(() => {
1367
- const isHovered = popover.el.closest(":hover") === popover.el || popover.trigger.closest(":hover") === popover.trigger;
1368
- const isFocused = document.activeElement.closest(
1364
+ const isHovered = popover.el.matches(":hover") === popover.el || popover.trigger.matches(":hover") === popover.trigger;
1365
+ let isFocused = document.activeElement.closest(
1369
1366
  `#${popover.id}, [aria-controls="${popover.id}"], [aria-describedby="${popover.id}"]`
1370
1367
  );
1368
+ isFocused = isFocused ? isFocused.matches(":focus-visible") : false;
1371
1369
  if (!isHovered && !isFocused) {
1372
1370
  popover.close();
1373
1371
  }
@@ -1375,6 +1373,16 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1375
1373
  }, 1);
1376
1374
  }
1377
1375
  function handleClick(popover) {
1376
+ const tooltipId = popover.trigger.getAttribute("aria-describedby");
1377
+ if (tooltipId) {
1378
+ const entry = this.get(tooltipId);
1379
+ if (entry.isTooltip) {
1380
+ if (entry.toggleDelayId) {
1381
+ clearTimeout(entry.toggleDelayId);
1382
+ }
1383
+ entry.close();
1384
+ }
1385
+ }
1378
1386
  if (popover.state === "opened") {
1379
1387
  popover.close();
1380
1388
  } else {
@@ -1383,7 +1391,14 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1383
1391
  handleDocumentClick.call(this, popover);
1384
1392
  }
1385
1393
  }
1386
- function handleMouseEnter(popover) {
1394
+ function handleMouseEnter(popover, event) {
1395
+ if (event.type == "focus" && !popover.trigger.matches(":focus-visible")) {
1396
+ return;
1397
+ }
1398
+ const isExpanded = popover.trigger.getAttribute("aria-expanded");
1399
+ if (isExpanded && isExpanded == "true") {
1400
+ return;
1401
+ }
1387
1402
  if (popover.toggleDelayId) {
1388
1403
  clearTimeout(popover.toggleDelayId);
1389
1404
  }
@@ -2819,7 +2834,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2819
2834
  const popover = getPopover.call(this, query);
2820
2835
  popover.el.inert = false;
2821
2836
  popover.el.classList.add(this.settings.stateActive);
2822
- if (popover.trigger.hasAttribute("aria-controls")) {
2837
+ if (!popover.isTooltip) {
2823
2838
  popover.trigger.setAttribute("aria-expanded", "true");
2824
2839
  }
2825
2840
  popover.config = getConfig(popover.el, this.settings);
@@ -2846,7 +2861,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2846
2861
  popper: createPopper(trigger, el),
2847
2862
  config: getConfig(el, this.settings),
2848
2863
  get isTooltip() {
2849
- return trigger.hasAttribute("aria-describedby");
2864
+ return !!el.closest(root.settings.selectorTooltip) || el.getAttribute("role") == "tooltip";
2850
2865
  },
2851
2866
  open() {
2852
2867
  return open.call(root, this);
@@ -2858,7 +2873,10 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2858
2873
  return deregister.call(root, this);
2859
2874
  }
2860
2875
  };
2861
- if (entry.trigger.hasAttribute("aria-controls")) {
2876
+ if (entry.isTooltip) {
2877
+ entry.el.setAttribute("role", "tooltip");
2878
+ }
2879
+ if (!entry.isTooltip) {
2862
2880
  entry.trigger.setAttribute("aria-expanded", "false");
2863
2881
  }
2864
2882
  registerEventListeners.call(this, entry);
@@ -2876,7 +2894,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2876
2894
  }
2877
2895
  function registerEventListeners(entry) {
2878
2896
  if (!entry.__eventListeners) {
2879
- const eventType = entry.config["event"];
2897
+ const eventType = entry.isTooltip ? "hover" : entry.config["event"];
2880
2898
  if (eventType === "hover") {
2881
2899
  entry.__eventListeners = [{
2882
2900
  el: ["trigger"],