vrembem 4.0.0-next.22 → 4.0.0-next.24

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
  }
@@ -1333,8 +1330,9 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1333
1330
  async function close(query) {
1334
1331
  const popover = query ? getPopover.call(this, query) : await closeAll.call(this);
1335
1332
  if (popover && popover.state === "opened") {
1333
+ popover.el.inert = true;
1336
1334
  popover.el.classList.remove(this.settings.stateActive);
1337
- if (popover.trigger.hasAttribute("aria-controls")) {
1335
+ if (!popover.isTooltip) {
1338
1336
  popover.trigger.setAttribute("aria-expanded", "false");
1339
1337
  }
1340
1338
  popover.popper.setOptions({
@@ -1363,10 +1361,11 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1363
1361
  function closeCheck(popover) {
1364
1362
  if (popover.state != "opened") return;
1365
1363
  setTimeout(() => {
1366
- const isHovered = popover.el.closest(":hover") === popover.el || popover.trigger.closest(":hover") === popover.trigger;
1367
- 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(
1368
1366
  `#${popover.id}, [aria-controls="${popover.id}"], [aria-describedby="${popover.id}"]`
1369
1367
  );
1368
+ isFocused = isFocused ? isFocused.matches(":focus-visible") : false;
1370
1369
  if (!isHovered && !isFocused) {
1371
1370
  popover.close();
1372
1371
  }
@@ -1374,6 +1373,16 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1374
1373
  }, 1);
1375
1374
  }
1376
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
+ }
1377
1386
  if (popover.state === "opened") {
1378
1387
  popover.close();
1379
1388
  } else {
@@ -1382,7 +1391,14 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
1382
1391
  handleDocumentClick.call(this, popover);
1383
1392
  }
1384
1393
  }
1385
- 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
+ }
1386
1402
  if (popover.toggleDelayId) {
1387
1403
  clearTimeout(popover.toggleDelayId);
1388
1404
  }
@@ -2816,8 +2832,9 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2816
2832
  }
2817
2833
  async function open(query) {
2818
2834
  const popover = getPopover.call(this, query);
2835
+ popover.el.inert = false;
2819
2836
  popover.el.classList.add(this.settings.stateActive);
2820
- if (popover.trigger.hasAttribute("aria-controls")) {
2837
+ if (!popover.isTooltip) {
2821
2838
  popover.trigger.setAttribute("aria-expanded", "true");
2822
2839
  }
2823
2840
  popover.config = getConfig(popover.el, this.settings);
@@ -2844,7 +2861,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2844
2861
  popper: createPopper(trigger, el),
2845
2862
  config: getConfig(el, this.settings),
2846
2863
  get isTooltip() {
2847
- return trigger.hasAttribute("aria-describedby");
2864
+ return !!el.closest(root.settings.selectorTooltip) || el.getAttribute("role") == "tooltip";
2848
2865
  },
2849
2866
  open() {
2850
2867
  return open.call(root, this);
@@ -2856,7 +2873,10 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2856
2873
  return deregister.call(root, this);
2857
2874
  }
2858
2875
  };
2859
- if (entry.trigger.hasAttribute("aria-controls")) {
2876
+ if (entry.isTooltip) {
2877
+ entry.el.setAttribute("role", "tooltip");
2878
+ }
2879
+ if (!entry.isTooltip) {
2860
2880
  entry.trigger.setAttribute("aria-expanded", "false");
2861
2881
  }
2862
2882
  registerEventListeners.call(this, entry);
@@ -2864,6 +2884,8 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2864
2884
  if (entry.el.classList.contains(this.settings.stateActive)) {
2865
2885
  await entry.open();
2866
2886
  handleDocumentClick.call(this, entry);
2887
+ } else {
2888
+ entry.el.inert = true;
2867
2889
  }
2868
2890
  entry.popper.setOptions({
2869
2891
  placement: entry.config["placement"]
@@ -2872,7 +2894,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
2872
2894
  }
2873
2895
  function registerEventListeners(entry) {
2874
2896
  if (!entry.__eventListeners) {
2875
- const eventType = entry.config["event"];
2897
+ const eventType = entry.isTooltip ? "hover" : entry.config["event"];
2876
2898
  if (eventType === "hover") {
2877
2899
  entry.__eventListeners = [{
2878
2900
  el: ["trigger"],