@skbkontur/react-ui 6.4.3 → 6.4.4-3a8c8.0

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.
@@ -2,6 +2,22 @@ import { isFocusable, tabbable } from 'tabbable';
2
2
  import { getOwnerGlobalObject } from '../../lib/globalObject.js';
3
3
  import { isInstanceOf } from '../../lib/isInstanceOf.js';
4
4
  import { isElement } from '../../lib/utils.js';
5
+ // `tabbable` >= 6.4.0 throws in old browsers (Chrome < 88, Firefox < 84) on the `:not([inert] *)` selector.
6
+ // Fallback list is `candidateSelectors` from tabbable 6.0.1 (no `:not([inert])` parts yet):
7
+ // https://github.com/focus-trap/tabbable/blob/v6.0.1/src/index.js
8
+ var FALLBACK_CANDIDATE_SELECTOR = [
9
+ 'input',
10
+ 'select',
11
+ 'textarea',
12
+ 'a[href]',
13
+ 'button',
14
+ '[tabindex]:not(slot)',
15
+ 'audio[controls]',
16
+ 'video[controls]',
17
+ '[contenteditable]:not([contenteditable="false"])',
18
+ 'details>summary:first-of-type',
19
+ 'details',
20
+ ].join(',');
5
21
  /**
6
22
  * Поиск всех элементов, у которых tabindex > -1, в переданном родителе
7
23
  * или на всей странице
@@ -16,7 +32,12 @@ export var getTabbableElements = function (parent) {
16
32
  if (!parent || !parent.children.length || !isInstanceOf(parent, getOwnerGlobalObject(parent).Element)) {
17
33
  return [];
18
34
  }
19
- return tabbable(parent);
35
+ try {
36
+ return tabbable(parent);
37
+ }
38
+ catch (_a) {
39
+ return Array.from(parent.querySelectorAll(FALLBACK_CANDIDATE_SELECTOR)).filter(function (element) { return element.tabIndex >= 0; });
40
+ }
20
41
  };
21
42
  /**
22
43
  * Поиск ближайшего фокусируемого элемента среди переданного и его родителей
@@ -1 +1 @@
1
- {"version":3,"file":"tabbableHelpers.js","sourceRoot":"","sources":["tabbableHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C;;;;;;GAMG;AAEH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,MAAoC;IACtE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACtG,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;;GAKG;AAEH,MAAM,CAAC,IAAM,0BAA0B,GAAG,UAAC,OAA2B;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5F,CAAC,CAAC","sourcesContent":["import { isFocusable, tabbable } from 'tabbable';\nimport type { FocusableElement } from 'tabbable';\n\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport { isElement } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\n\n/**\n * Поиск всех элементов, у которых tabindex > -1, в переданном родителе\n * или на всей странице\n * @param {Element|Document|null} [parent=document] - Родительский элемент,\n * внутри которого осуществляется поиск.\n * @return {FocusableElement[]} - Массив найденных элементов\n */\n\nexport const getTabbableElements = (parent: Nullable<Element | Document>): FocusableElement[] => {\n if (!isElement(parent)) {\n return [];\n }\n\n if (!parent || !parent.children.length || !isInstanceOf(parent, getOwnerGlobalObject(parent).Element)) {\n return [];\n }\n return tabbable(parent);\n};\n\n/**\n * Поиск ближайшего фокусируемого элемента среди переданного и его родителей\n * @param {HTMLElement} current - Текущий элемент\n * @return {HTMLElement|null} - Найденный элемент или null\n *\n */\n\nexport const getClosestFocusableElement = (current: HTMLElement | null): HTMLElement | null => {\n if (!current) {\n return null;\n }\n\n return isFocusable(current) ? current : getClosestFocusableElement(current.parentElement);\n};\n"]}
1
+ {"version":3,"file":"tabbableHelpers.js","sourceRoot":"","sources":["tabbableHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,4GAA4G;AAC5G,4FAA4F;AAC5F,kEAAkE;AAClE,IAAM,2BAA2B,GAAG;IAClC,OAAO;IACP,QAAQ;IACR,UAAU;IACV,SAAS;IACT,QAAQ;IACR,sBAAsB;IACtB,iBAAiB;IACjB,iBAAiB;IACjB,kDAAkD;IAClD,+BAA+B;IAC/B,SAAS;CACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ;;;;;;GAMG;AAEH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,MAAoC;IACtE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACtG,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CAAC,MAAM,CAC5E,UAAC,OAAO,IAAkC,OAAC,OAAuB,CAAC,QAAQ,IAAI,CAAC,EAAtC,CAAsC,CACjF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AAEH,MAAM,CAAC,IAAM,0BAA0B,GAAG,UAAC,OAA2B;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5F,CAAC,CAAC","sourcesContent":["import { isFocusable, tabbable } from 'tabbable';\nimport type { FocusableElement } from 'tabbable';\n\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport { isElement } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\n\n// `tabbable` >= 6.4.0 throws in old browsers (Chrome < 88, Firefox < 84) on the `:not([inert] *)` selector.\n// Fallback list is `candidateSelectors` from tabbable 6.0.1 (no `:not([inert])` parts yet):\n// https://github.com/focus-trap/tabbable/blob/v6.0.1/src/index.js\nconst FALLBACK_CANDIDATE_SELECTOR = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]:not(slot)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n].join(',');\n\n/**\n * Поиск всех элементов, у которых tabindex > -1, в переданном родителе\n * или на всей странице\n * @param {Element|Document|null} [parent=document] - Родительский элемент,\n * внутри которого осуществляется поиск.\n * @return {FocusableElement[]} - Массив найденных элементов\n */\n\nexport const getTabbableElements = (parent: Nullable<Element | Document>): FocusableElement[] => {\n if (!isElement(parent)) {\n return [];\n }\n\n if (!parent || !parent.children.length || !isInstanceOf(parent, getOwnerGlobalObject(parent).Element)) {\n return [];\n }\n\n try {\n return tabbable(parent);\n } catch {\n return Array.from(parent.querySelectorAll(FALLBACK_CANDIDATE_SELECTOR)).filter(\n (element): element is FocusableElement => (element as HTMLElement).tabIndex >= 0,\n );\n }\n};\n\n/**\n * Поиск ближайшего фокусируемого элемента среди переданного и его родителей\n * @param {HTMLElement} current - Текущий элемент\n * @return {HTMLElement|null} - Найденный элемент или null\n *\n */\n\nexport const getClosestFocusableElement = (current: HTMLElement | null): HTMLElement | null => {\n if (!current) {\n return null;\n }\n\n return isFocusable(current) ? current : getClosestFocusableElement(current.parentElement);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "6.4.3",
3
+ "version": "6.4.4-3a8c8.0",
4
4
  "description": "UI Components",
5
5
  "homepage": "https://tech.skbkontur.ru/kontur-ui",
6
6
  "bugs": {