@taiga-ui/cdk 3.53.0-canary.699cd59 → 3.53.0-canary.f51807c
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/bundles/taiga-ui-cdk-utils-focus.umd.js +6 -2
- package/bundles/taiga-ui-cdk-utils-focus.umd.js.map +1 -1
- package/esm2015/utils/focus/is-native-focused-in.js +4 -2
- package/esm2015/utils/focus/is-native-focused.js +4 -2
- package/fesm2015/taiga-ui-cdk-utils-focus.js +6 -2
- package/fesm2015/taiga-ui-cdk-utils-focus.js.map +1 -1
- package/package.json +68 -68
- package/schematics/ng-add/steps/add-taiga-modules.js +1 -1
- package/schematics/ng-update/v4/steps/constants/attrs-to-replace.js +7 -0
- package/schematics/ng-update/v4/steps/constants/html-comments.js +10 -0
- package/schematics/ng-update/v4/steps/constants/identifiers-to-replace.js +4 -0
- package/schematics/ng-update/v4/steps/migrate-templates.js +1 -0
- package/schematics/ng-update/v4/steps/templates/index.d.ts +1 -0
- package/schematics/ng-update/v4/steps/templates/index.js +1 -0
- package/schematics/ng-update/v4/steps/templates/migrate-avatar.d.ts +8 -0
- package/schematics/ng-update/v4/steps/templates/migrate-avatar.js +75 -0
@@ -101,7 +101,9 @@
|
|
101
101
|
* @return true if focused
|
102
102
|
*/
|
103
103
|
function tuiIsNativeFocused(node) {
|
104
|
-
return !!(node === null || node === void 0 ? void 0 : node.ownerDocument) &&
|
104
|
+
return (!!(node === null || node === void 0 ? void 0 : node.ownerDocument) &&
|
105
|
+
tuiGetNativeFocused(node.ownerDocument) === node &&
|
106
|
+
node.ownerDocument.hasFocus());
|
105
107
|
}
|
106
108
|
|
107
109
|
/**
|
@@ -116,7 +118,9 @@
|
|
116
118
|
return false;
|
117
119
|
}
|
118
120
|
var nativeFocused = tuiGetNativeFocused(node.ownerDocument);
|
119
|
-
return nativeFocused !== null &&
|
121
|
+
return (nativeFocused !== null &&
|
122
|
+
node.contains(nativeFocused) &&
|
123
|
+
node.ownerDocument.hasFocus());
|
120
124
|
}
|
121
125
|
|
122
126
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"taiga-ui-cdk-utils-focus.umd.js","sources":["../../../projects/cdk/utils/focus/get-native-focused.ts","../../../projects/cdk/utils/focus/blur-native-focused.ts","../../../projects/cdk/utils/focus/is-native-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-mouse-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/is-native-focused.ts","../../../projects/cdk/utils/focus/is-native-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/set-native-mouse-focused.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetNativeFocused({activeElement}: Document): Element | null {\n if (!activeElement?.shadowRoot) {\n return activeElement;\n }\n\n let element = activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Finds and blurs current active element, including shadow DOM\n */\nexport function tuiBlurNativeFocused(doc: Document): void {\n const activeElement = tuiGetNativeFocused(doc);\n\n if (tuiIsHTMLElement(activeElement)) {\n activeElement.blur();\n }\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsNativeKeyboardFocusable(element: Element): boolean {\n if (element.hasAttribute(`disabled`) || element.getAttribute(`tabIndex`) === `-1`) {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute(`tabIndex`) === `0`\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case `BUTTON`:\n case `SELECT`:\n case `TEXTAREA`:\n return true;\n case `VIDEO`:\n case `AUDIO`:\n return element.hasAttribute(`controls`);\n case `INPUT`:\n return element.getAttribute(`type`) !== `hidden`;\n case `A`:\n case `LINK`:\n return element.hasAttribute(`href`);\n default:\n return false;\n }\n}\n","import {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\n\nexport function tuiIsNativeMouseFocusable(element: Element): boolean {\n return (\n !element.hasAttribute(`disabled`) &&\n (element.getAttribute(`tabIndex`) === `-1` ||\n tuiIsNativeKeyboardFocusable(element))\n );\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\nimport {tuiIsNativeMouseFocusable} from './is-native-mouse-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * determine if only keyboard focus is of interest\n */\n keyboard?: boolean;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n keyboard = true,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n while (previous ? treeWalker.previousNode() : treeWalker.nextNode()) {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && check(initial)) {\n return initial;\n }\n }\n\n return null;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsNativeFocused(node: Node | null): boolean {\n return !!node?.ownerDocument && tuiGetNativeFocused(node.ownerDocument) === node;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsNativeFocusedIn(node: Node): boolean {\n // !node.contains - check for IE11\n if (!node.ownerDocument || !node.contains) {\n return false;\n }\n\n const nativeFocused = tuiGetNativeFocused(node.ownerDocument);\n\n return nativeFocused !== null && node.contains(nativeFocused);\n}\n","import {tuiIsNativeFocused} from './is-native-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex].focus();\n\n if (tuiIsNativeFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})\n *\n * @param element\n * @param focused desired focused state\n * @param preventScroll optionally prevent native browser scroll after focus\n */\nexport function tuiSetNativeMouseFocused(\n element: Element & HTMLOrSVGElement,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (!element.ownerDocument) {\n return;\n }\n\n if (typeof Event === `function`) {\n element.dispatchEvent(new Event(`mousedown`, {bubbles: true, cancelable: true}));\n } else {\n const event = element.ownerDocument.createEvent(`Event`);\n\n event.initEvent(`mousedown`, true, true);\n element.dispatchEvent(event);\n }\n\n if (focused) {\n element.focus({preventScroll});\n } else {\n element.blur();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tuiIsHTMLElement","svgNodeFilter"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"taiga-ui-cdk-utils-focus.umd.js","sources":["../../../projects/cdk/utils/focus/get-native-focused.ts","../../../projects/cdk/utils/focus/blur-native-focused.ts","../../../projects/cdk/utils/focus/is-native-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-mouse-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/is-native-focused.ts","../../../projects/cdk/utils/focus/is-native-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/set-native-mouse-focused.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetNativeFocused({activeElement}: Document): Element | null {\n if (!activeElement?.shadowRoot) {\n return activeElement;\n }\n\n let element = activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Finds and blurs current active element, including shadow DOM\n */\nexport function tuiBlurNativeFocused(doc: Document): void {\n const activeElement = tuiGetNativeFocused(doc);\n\n if (tuiIsHTMLElement(activeElement)) {\n activeElement.blur();\n }\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsNativeKeyboardFocusable(element: Element): boolean {\n if (element.hasAttribute(`disabled`) || element.getAttribute(`tabIndex`) === `-1`) {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute(`tabIndex`) === `0`\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case `BUTTON`:\n case `SELECT`:\n case `TEXTAREA`:\n return true;\n case `VIDEO`:\n case `AUDIO`:\n return element.hasAttribute(`controls`);\n case `INPUT`:\n return element.getAttribute(`type`) !== `hidden`;\n case `A`:\n case `LINK`:\n return element.hasAttribute(`href`);\n default:\n return false;\n }\n}\n","import {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\n\nexport function tuiIsNativeMouseFocusable(element: Element): boolean {\n return (\n !element.hasAttribute(`disabled`) &&\n (element.getAttribute(`tabIndex`) === `-1` ||\n tuiIsNativeKeyboardFocusable(element))\n );\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\nimport {tuiIsNativeMouseFocusable} from './is-native-mouse-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * determine if only keyboard focus is of interest\n */\n keyboard?: boolean;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n keyboard = true,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n while (previous ? treeWalker.previousNode() : treeWalker.nextNode()) {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && check(initial)) {\n return initial;\n }\n }\n\n return null;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsNativeFocused(node: Node | null): boolean {\n return (\n !!node?.ownerDocument &&\n tuiGetNativeFocused(node.ownerDocument) === node &&\n node.ownerDocument.hasFocus()\n );\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsNativeFocusedIn(node: Node): boolean {\n // !node.contains - check for IE11\n if (!node.ownerDocument || !node.contains) {\n return false;\n }\n\n const nativeFocused = tuiGetNativeFocused(node.ownerDocument);\n\n return (\n nativeFocused !== null &&\n node.contains(nativeFocused) &&\n node.ownerDocument.hasFocus()\n );\n}\n","import {tuiIsNativeFocused} from './is-native-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex].focus();\n\n if (tuiIsNativeFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})\n *\n * @param element\n * @param focused desired focused state\n * @param preventScroll optionally prevent native browser scroll after focus\n */\nexport function tuiSetNativeMouseFocused(\n element: Element & HTMLOrSVGElement,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (!element.ownerDocument) {\n return;\n }\n\n if (typeof Event === `function`) {\n element.dispatchEvent(new Event(`mousedown`, {bubbles: true, cancelable: true}));\n } else {\n const event = element.ownerDocument.createEvent(`Event`);\n\n event.initEvent(`mousedown`, true, true);\n element.dispatchEvent(event);\n }\n\n if (focused) {\n element.focus({preventScroll});\n } else {\n element.blur();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tuiIsHTMLElement","svgNodeFilter"],"mappings":"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"}
|
@@ -11,6 +11,8 @@ export function tuiIsNativeFocusedIn(node) {
|
|
11
11
|
return false;
|
12
12
|
}
|
13
13
|
const nativeFocused = tuiGetNativeFocused(node.ownerDocument);
|
14
|
-
return nativeFocused !== null &&
|
14
|
+
return (nativeFocused !== null &&
|
15
|
+
node.contains(nativeFocused) &&
|
16
|
+
node.ownerDocument.hasFocus());
|
15
17
|
}
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtbmF0aXZlLWZvY3VzZWQtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvZm9jdXMvaXMtbmF0aXZlLWZvY3VzZWQtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFekQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBVTtJQUMzQyxrQ0FBa0M7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTlELE9BQU8sQ0FDSCxhQUFhLEtBQUssSUFBSTtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUNoQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dHVpR2V0TmF0aXZlRm9jdXNlZH0gZnJvbSAnLi9nZXQtbmF0aXZlLWZvY3VzZWQnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBmb2N1c2VkIGVsZW1lbnQgaXMgd2l0aGluIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm4gdHJ1ZSBpZiBmb2N1c2VkIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0dWlJc05hdGl2ZUZvY3VzZWRJbihub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgLy8gIW5vZGUuY29udGFpbnMgLSBjaGVjayBmb3IgSUUxMVxuICAgIGlmICghbm9kZS5vd25lckRvY3VtZW50IHx8ICFub2RlLmNvbnRhaW5zKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYXRpdmVGb2N1c2VkID0gdHVpR2V0TmF0aXZlRm9jdXNlZChub2RlLm93bmVyRG9jdW1lbnQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgbmF0aXZlRm9jdXNlZCAhPT0gbnVsbCAmJlxuICAgICAgICBub2RlLmNvbnRhaW5zKG5hdGl2ZUZvY3VzZWQpICYmXG4gICAgICAgIG5vZGUub3duZXJEb2N1bWVudC5oYXNGb2N1cygpXG4gICAgKTtcbn1cbiJdfQ==
|
@@ -8,6 +8,8 @@ import { tuiGetNativeFocused } from './get-native-focused';
|
|
8
8
|
* @return true if focused
|
9
9
|
*/
|
10
10
|
export function tuiIsNativeFocused(node) {
|
11
|
-
return !!(node === null || node === void 0 ? void 0 : node.ownerDocument) &&
|
11
|
+
return (!!(node === null || node === void 0 ? void 0 : node.ownerDocument) &&
|
12
|
+
tuiGetNativeFocused(node.ownerDocument) === node &&
|
13
|
+
node.ownerDocument.hasFocus());
|
12
14
|
}
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtbmF0aXZlLWZvY3VzZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvZm9jdXMvaXMtbmF0aXZlLWZvY3VzZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFekQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFpQjtJQUNoRCxPQUFPLENBQ0gsQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGFBQWEsQ0FBQTtRQUNyQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSTtRQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUNoQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dHVpR2V0TmF0aXZlRm9jdXNlZH0gZnJvbSAnLi9nZXQtbmF0aXZlLWZvY3VzZWQnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBlbGVtZW50IGlzIGZvY3VzZWQuXG4gKlxuICogQ291bGQgcmV0dXJuIHRydWUgZXZlbiBhZnRlciBibHVyIHNpbmNlIGVsZW1lbnQgcmVtYWlucyBmb2N1c2VkIGlmIHlvdSBzd2l0Y2ggYXdheSBmcm9tIGEgYnJvd3NlciB0YWIuXG4gKlxuICogQHBhcmFtIG5vZGUgb3IgbnVsbCAoYXMgYSBjb21tb24gcmV0dXJuIHZhbHVlIG9mIERPTSBub2RlcyB3YWxraW5nKVxuICogQHJldHVybiB0cnVlIGlmIGZvY3VzZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR1aUlzTmF0aXZlRm9jdXNlZChub2RlOiBOb2RlIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAgICEhbm9kZT8ub3duZXJEb2N1bWVudCAmJlxuICAgICAgICB0dWlHZXROYXRpdmVGb2N1c2VkKG5vZGUub3duZXJEb2N1bWVudCkgPT09IG5vZGUgJiZcbiAgICAgICAgbm9kZS5vd25lckRvY3VtZW50Lmhhc0ZvY3VzKClcbiAgICApO1xufVxuIl19
|
@@ -96,7 +96,9 @@ function tuiGetClosestFocusable({ initial, root, previous = false, keyboard = tr
|
|
96
96
|
* @return true if focused
|
97
97
|
*/
|
98
98
|
function tuiIsNativeFocused(node) {
|
99
|
-
return !!(node === null || node === void 0 ? void 0 : node.ownerDocument) &&
|
99
|
+
return (!!(node === null || node === void 0 ? void 0 : node.ownerDocument) &&
|
100
|
+
tuiGetNativeFocused(node.ownerDocument) === node &&
|
101
|
+
node.ownerDocument.hasFocus());
|
100
102
|
}
|
101
103
|
|
102
104
|
/**
|
@@ -111,7 +113,9 @@ function tuiIsNativeFocusedIn(node) {
|
|
111
113
|
return false;
|
112
114
|
}
|
113
115
|
const nativeFocused = tuiGetNativeFocused(node.ownerDocument);
|
114
|
-
return nativeFocused !== null &&
|
116
|
+
return (nativeFocused !== null &&
|
117
|
+
node.contains(nativeFocused) &&
|
118
|
+
node.ownerDocument.hasFocus());
|
115
119
|
}
|
116
120
|
|
117
121
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"taiga-ui-cdk-utils-focus.js","sources":["../../../projects/cdk/utils/focus/get-native-focused.ts","../../../projects/cdk/utils/focus/blur-native-focused.ts","../../../projects/cdk/utils/focus/is-native-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-mouse-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/is-native-focused.ts","../../../projects/cdk/utils/focus/is-native-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/set-native-mouse-focused.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetNativeFocused({activeElement}: Document): Element | null {\n if (!activeElement?.shadowRoot) {\n return activeElement;\n }\n\n let element = activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Finds and blurs current active element, including shadow DOM\n */\nexport function tuiBlurNativeFocused(doc: Document): void {\n const activeElement = tuiGetNativeFocused(doc);\n\n if (tuiIsHTMLElement(activeElement)) {\n activeElement.blur();\n }\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsNativeKeyboardFocusable(element: Element): boolean {\n if (element.hasAttribute(`disabled`) || element.getAttribute(`tabIndex`) === `-1`) {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute(`tabIndex`) === `0`\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case `BUTTON`:\n case `SELECT`:\n case `TEXTAREA`:\n return true;\n case `VIDEO`:\n case `AUDIO`:\n return element.hasAttribute(`controls`);\n case `INPUT`:\n return element.getAttribute(`type`) !== `hidden`;\n case `A`:\n case `LINK`:\n return element.hasAttribute(`href`);\n default:\n return false;\n }\n}\n","import {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\n\nexport function tuiIsNativeMouseFocusable(element: Element): boolean {\n return (\n !element.hasAttribute(`disabled`) &&\n (element.getAttribute(`tabIndex`) === `-1` ||\n tuiIsNativeKeyboardFocusable(element))\n );\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\nimport {tuiIsNativeMouseFocusable} from './is-native-mouse-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * determine if only keyboard focus is of interest\n */\n keyboard?: boolean;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n keyboard = true,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n while (previous ? treeWalker.previousNode() : treeWalker.nextNode()) {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && check(initial)) {\n return initial;\n }\n }\n\n return null;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsNativeFocused(node: Node | null): boolean {\n return !!node?.ownerDocument && tuiGetNativeFocused(node.ownerDocument) === node;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsNativeFocusedIn(node: Node): boolean {\n // !node.contains - check for IE11\n if (!node.ownerDocument || !node.contains) {\n return false;\n }\n\n const nativeFocused = tuiGetNativeFocused(node.ownerDocument);\n\n return nativeFocused !== null && node.contains(nativeFocused);\n}\n","import {tuiIsNativeFocused} from './is-native-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex].focus();\n\n if (tuiIsNativeFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})\n *\n * @param element\n * @param focused desired focused state\n * @param preventScroll optionally prevent native browser scroll after focus\n */\nexport function tuiSetNativeMouseFocused(\n element: Element & HTMLOrSVGElement,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (!element.ownerDocument) {\n return;\n }\n\n if (typeof Event === `function`) {\n element.dispatchEvent(new Event(`mousedown`, {bubbles: true, cancelable: true}));\n } else {\n const event = element.ownerDocument.createEvent(`Event`);\n\n event.initEvent(`mousedown`, true, true);\n element.dispatchEvent(event);\n }\n\n if (focused) {\n element.focus({preventScroll});\n } else {\n element.blur();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"taiga-ui-cdk-utils-focus.js","sources":["../../../projects/cdk/utils/focus/get-native-focused.ts","../../../projects/cdk/utils/focus/blur-native-focused.ts","../../../projects/cdk/utils/focus/is-native-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-mouse-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/is-native-focused.ts","../../../projects/cdk/utils/focus/is-native-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/set-native-mouse-focused.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetNativeFocused({activeElement}: Document): Element | null {\n if (!activeElement?.shadowRoot) {\n return activeElement;\n }\n\n let element = activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Finds and blurs current active element, including shadow DOM\n */\nexport function tuiBlurNativeFocused(doc: Document): void {\n const activeElement = tuiGetNativeFocused(doc);\n\n if (tuiIsHTMLElement(activeElement)) {\n activeElement.blur();\n }\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsNativeKeyboardFocusable(element: Element): boolean {\n if (element.hasAttribute(`disabled`) || element.getAttribute(`tabIndex`) === `-1`) {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute(`tabIndex`) === `0`\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case `BUTTON`:\n case `SELECT`:\n case `TEXTAREA`:\n return true;\n case `VIDEO`:\n case `AUDIO`:\n return element.hasAttribute(`controls`);\n case `INPUT`:\n return element.getAttribute(`type`) !== `hidden`;\n case `A`:\n case `LINK`:\n return element.hasAttribute(`href`);\n default:\n return false;\n }\n}\n","import {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\n\nexport function tuiIsNativeMouseFocusable(element: Element): boolean {\n return (\n !element.hasAttribute(`disabled`) &&\n (element.getAttribute(`tabIndex`) === `-1` ||\n tuiIsNativeKeyboardFocusable(element))\n );\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\nimport {tuiIsNativeMouseFocusable} from './is-native-mouse-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * determine if only keyboard focus is of interest\n */\n keyboard?: boolean;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n keyboard = true,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n while (previous ? treeWalker.previousNode() : treeWalker.nextNode()) {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && check(initial)) {\n return initial;\n }\n }\n\n return null;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsNativeFocused(node: Node | null): boolean {\n return (\n !!node?.ownerDocument &&\n tuiGetNativeFocused(node.ownerDocument) === node &&\n node.ownerDocument.hasFocus()\n );\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsNativeFocusedIn(node: Node): boolean {\n // !node.contains - check for IE11\n if (!node.ownerDocument || !node.contains) {\n return false;\n }\n\n const nativeFocused = tuiGetNativeFocused(node.ownerDocument);\n\n return (\n nativeFocused !== null &&\n node.contains(nativeFocused) &&\n node.ownerDocument.hasFocus()\n );\n}\n","import {tuiIsNativeFocused} from './is-native-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex].focus();\n\n if (tuiIsNativeFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})\n *\n * @param element\n * @param focused desired focused state\n * @param preventScroll optionally prevent native browser scroll after focus\n */\nexport function tuiSetNativeMouseFocused(\n element: Element & HTMLOrSVGElement,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (!element.ownerDocument) {\n return;\n }\n\n if (typeof Event === `function`) {\n element.dispatchEvent(new Event(`mousedown`, {bubbles: true, cancelable: true}));\n } else {\n const event = element.ownerDocument.createEvent(`Event`);\n\n event.initEvent(`mousedown`, true, true);\n element.dispatchEvent(event);\n }\n\n if (focused) {\n element.focus({preventScroll});\n } else {\n element.blur();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,70 +1,70 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
2
|
+
"name": "@taiga-ui/cdk",
|
3
|
+
"version": "3.53.0-canary.f51807c",
|
4
|
+
"description": "Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance",
|
5
|
+
"keywords": [
|
6
|
+
"angular",
|
7
|
+
"cdk",
|
8
|
+
"component",
|
9
|
+
"development",
|
10
|
+
"kit",
|
11
|
+
"service",
|
12
|
+
"directive"
|
13
|
+
],
|
14
|
+
"homepage": "https://github.com/taiga-family/taiga-ui",
|
15
|
+
"repository": "https://github.com/taiga-family/taiga-ui",
|
16
|
+
"license": "Apache-2.0",
|
17
|
+
"dependencies": {
|
18
|
+
"@ng-web-apis/common": "3.0.6",
|
19
|
+
"@ng-web-apis/mutation-observer": "3.0.6",
|
20
|
+
"@ng-web-apis/resize-observer": "3.0.6",
|
21
|
+
"@tinkoff/ng-event-plugins": "3.1.0",
|
22
|
+
"@tinkoff/ng-polymorpheus": "4.2.0",
|
23
|
+
"tslib": "2.6.2"
|
24
|
+
},
|
25
|
+
"peerDependencies": {
|
26
|
+
"@angular/animations": ">=12.0.0",
|
27
|
+
"@angular/common": ">=12.0.0",
|
28
|
+
"@angular/core": ">=12.0.0",
|
29
|
+
"@angular/forms": ">=12.0.0",
|
30
|
+
"rxjs": ">=6.0.0"
|
31
|
+
},
|
32
|
+
"optionalDependencies": {
|
33
|
+
"ng-morph": "4.0.0",
|
34
|
+
"parse5": "6.0.1"
|
35
|
+
},
|
36
|
+
"ng-update": {
|
37
|
+
"migrations": "./schematics/migration.json",
|
38
|
+
"packageGroup": [
|
39
|
+
"@taiga-ui/i18n",
|
40
|
+
"@taiga-ui/cdk",
|
41
|
+
"@taiga-ui/core",
|
42
|
+
"@taiga-ui/kit",
|
43
|
+
"@taiga-ui/styles",
|
44
|
+
"@taiga-ui/testing",
|
45
|
+
"@taiga-ui/addon-doc",
|
46
|
+
"@taiga-ui/addon-charts",
|
47
|
+
"@taiga-ui/addon-commerce",
|
48
|
+
"@taiga-ui/icons",
|
49
|
+
"@taiga-ui/addon-preview",
|
50
|
+
"@taiga-ui/addon-tablebars",
|
51
|
+
"@taiga-ui/addon-table",
|
52
|
+
"@taiga-ui/addon-mobile",
|
53
|
+
"@taiga-ui/layout",
|
54
|
+
"@taiga-ui/proprietary-banking",
|
55
|
+
"@taiga-ui/proprietary-core",
|
56
|
+
"@taiga-ui/proprietary-icons",
|
57
|
+
"@taiga-ui/proprietary-navigation",
|
58
|
+
"@taiga-ui/proprietary-tds-icons",
|
59
|
+
"@taiga-ui/proprietary-tds-palette"
|
60
|
+
]
|
61
|
+
},
|
62
|
+
"schematics": "./schematics/collection.json",
|
63
|
+
"main": "bundles/taiga-ui-cdk.umd.js",
|
64
|
+
"module": "fesm2015/taiga-ui-cdk.js",
|
65
|
+
"es2015": "fesm2015/taiga-ui-cdk.js",
|
66
|
+
"esm2015": "esm2015/taiga-ui-cdk.js",
|
67
|
+
"fesm2015": "fesm2015/taiga-ui-cdk.js",
|
68
|
+
"typings": "taiga-ui-cdk.d.ts",
|
69
|
+
"sideEffects": false
|
70
70
|
}
|
@@ -22,7 +22,7 @@ function addTaigaModules(options) {
|
|
22
22
|
return;
|
23
23
|
}
|
24
24
|
const buildOptions = get_project_target_options_1.getProjectTargetOptions(project, `build`);
|
25
|
-
const mainFilePath = buildOptions.main;
|
25
|
+
const mainFilePath = (buildOptions.main || buildOptions.browser);
|
26
26
|
if (!mainFilePath) {
|
27
27
|
context.logger.error(`[ERROR]: Could not find the project main file`);
|
28
28
|
return;
|
@@ -7,4 +7,14 @@ exports.HTML_COMMENTS = [
|
|
7
7
|
withAttrs: [`singleColor`, `showLoader`],
|
8
8
|
comment: `toggle [singleColor] and [showLoader] inputs have been removed due to design changes`,
|
9
9
|
},
|
10
|
+
{
|
11
|
+
tag: `tui-table-pagination`,
|
12
|
+
withAttrs: [`[(page)]`, `[(size)]`, `(pageChange)`, `(sizeChange)`],
|
13
|
+
comment: `(pageChange) and (sizeChange) outputs have been removed. Use (paginationChange) instead`,
|
14
|
+
},
|
15
|
+
{
|
16
|
+
tag: `tui-radio`,
|
17
|
+
withAttrs: [`identityMatcher`, `showLoader`],
|
18
|
+
comment: `radio [identityMatcher] and [pseudoDisabled] inputs have been removed. If you need a workaround, please start a discussion on GitHub to think together`,
|
19
|
+
},
|
10
20
|
];
|
@@ -25,6 +25,10 @@ exports.IDENTIFIERS_TO_REPLACE = [
|
|
25
25
|
from: { name: `TuiRadioModule`, moduleSpecifier: `@taiga-ui/experimental` },
|
26
26
|
to: { name: `TuiRadioModule`, moduleSpecifier: `@taiga-ui/kit` },
|
27
27
|
},
|
28
|
+
{
|
29
|
+
from: { name: `TuiAvatarModule`, moduleSpecifier: `@taiga-ui/experimental` },
|
30
|
+
to: { name: `TuiAvatarModule`, moduleSpecifier: `@taiga-ui/kit` },
|
31
|
+
},
|
28
32
|
{
|
29
33
|
from: { name: `TuiToggleModule`, moduleSpecifier: `@taiga-ui/experimental` },
|
30
34
|
to: { name: `TuiToggleModule`, moduleSpecifier: `@taiga-ui/kit` },
|
@@ -27,6 +27,7 @@ function migrateTemplates(fileSystem, options) {
|
|
27
27
|
templates_2.migrateCheckbox,
|
28
28
|
templates_2.migrateRadio,
|
29
29
|
templates_2.migrateToggle,
|
30
|
+
templates_2.migrateAvatar,
|
30
31
|
];
|
31
32
|
const progressLog = progress_1.setupProgressLogger({
|
32
33
|
total: componentWithTemplatesPaths.length,
|
@@ -1,5 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const tslib_1 = require("tslib");
|
4
|
+
tslib_1.__exportStar(require("./migrate-avatar"), exports);
|
4
5
|
tslib_1.__exportStar(require("./migrate-badge"), exports);
|
5
6
|
tslib_1.__exportStar(require("./toggles"), exports);
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { UpdateRecorder } from '@angular-devkit/schematics';
|
2
|
+
import { DevkitFileSystem } from 'ng-morph';
|
3
|
+
import { TemplateResource } from '../../../interfaces';
|
4
|
+
export declare function migrateAvatar({ resource, recorder, fileSystem, }: {
|
5
|
+
fileSystem: DevkitFileSystem;
|
6
|
+
recorder: UpdateRecorder;
|
7
|
+
resource: TemplateResource;
|
8
|
+
}): void;
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.migrateAvatar = void 0;
|
4
|
+
const add_import_to_closest_module_1 = require("../../../../utils/add-import-to-closest-module");
|
5
|
+
const elements_1 = require("../../../../utils/templates/elements");
|
6
|
+
const template_resource_1 = require("../../../../utils/templates/template-resource");
|
7
|
+
function migrateAvatar({ resource, recorder, fileSystem, }) {
|
8
|
+
const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
|
9
|
+
const templateOffset = template_resource_1.getTemplateOffset(resource);
|
10
|
+
const elements = elements_1.findElementsByTagName(template, `tui-avatar`);
|
11
|
+
elements.forEach(({ attrs, sourceCodeLocation }) => {
|
12
|
+
const avatarUrlAttr = attrs.find(attr => attr.name === `[avatarurl]` || attr.name === `avatarurl`);
|
13
|
+
const fallbackAttr = attrs.find(attr => attr.name === `[fallback]` || attr.name === `fallback`);
|
14
|
+
const textAttr = attrs.find(attr => attr.name === `[text]` || attr.name === `text`);
|
15
|
+
const roundedAttr = attrs.find(attr => attr.name === `[rounded]` || attr.name === `rounded`);
|
16
|
+
if ((!avatarUrlAttr && !textAttr) || !sourceCodeLocation) {
|
17
|
+
return;
|
18
|
+
}
|
19
|
+
const urlAttrValue = (avatarUrlAttr === null || avatarUrlAttr === void 0 ? void 0 : avatarUrlAttr.value) &&
|
20
|
+
normalizeAttrValue(avatarUrlAttr.name, avatarUrlAttr.value);
|
21
|
+
const textAttrValue = (textAttr === null || textAttr === void 0 ? void 0 : textAttr.value) && normalizeAttrValue(textAttr.name, textAttr.value);
|
22
|
+
const fallbackAttrValue = (fallbackAttr === null || fallbackAttr === void 0 ? void 0 : fallbackAttr.value) &&
|
23
|
+
normalizeAttrValue(fallbackAttr.name, fallbackAttr.value);
|
24
|
+
const insertTo = sourceCodeLocation.startTag.startOffset + `<tui-avatar`.length;
|
25
|
+
if (!insertTo) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
const mainSrc = urlAttrValue || (textAttrValue ? `${textAttrValue} | tuiInitials` : ``);
|
29
|
+
const fallbackValue = urlAttrValue
|
30
|
+
? getFallbackValue(textAttrValue, fallbackAttrValue)
|
31
|
+
: ``;
|
32
|
+
const fallbackSrc = urlAttrValue && fallbackValue
|
33
|
+
? `| tuiFallbackSrc : ${fallbackValue} | async`
|
34
|
+
: ``;
|
35
|
+
recorder.insertRight(insertTo + templateOffset, ` [src]="${mainSrc}${fallbackSrc ? ` ${fallbackSrc}` : ``}"${!roundedAttr ? ` [round]="false"` : ``}`);
|
36
|
+
const attrsToRemove = [avatarUrlAttr, textAttr, fallbackAttr].filter((attr) => attr !== undefined);
|
37
|
+
const fallbackModule = !!((avatarUrlAttr && textAttrValue) || fallbackAttr);
|
38
|
+
const initialsModule = !!textAttrValue;
|
39
|
+
const modules = [
|
40
|
+
...(fallbackModule
|
41
|
+
? [{ moduleName: `TuiFallbackModule`, moduleSpecifier: `@taiga-ui/cdk` }]
|
42
|
+
: []),
|
43
|
+
...(initialsModule
|
44
|
+
? [{ moduleName: `TuiInitialsModule`, moduleSpecifier: `@taiga-ui/cdk` }]
|
45
|
+
: []),
|
46
|
+
];
|
47
|
+
addModules(resource.componentPath, modules);
|
48
|
+
removeAttrs(attrsToRemove, sourceCodeLocation, recorder, templateOffset);
|
49
|
+
});
|
50
|
+
}
|
51
|
+
exports.migrateAvatar = migrateAvatar;
|
52
|
+
function addModules(componentPath, modules) {
|
53
|
+
modules.forEach(({ moduleName, moduleSpecifier }) => {
|
54
|
+
add_import_to_closest_module_1.addImportToClosestModule(componentPath, moduleName, moduleSpecifier);
|
55
|
+
});
|
56
|
+
}
|
57
|
+
function removeAttrs(attrs, sourceCodeLocation, recorder, templateOffset) {
|
58
|
+
attrs.forEach(attr => {
|
59
|
+
var _a;
|
60
|
+
const attrOffset = (_a = sourceCodeLocation.attrs) === null || _a === void 0 ? void 0 : _a[attr.name];
|
61
|
+
if (attrOffset) {
|
62
|
+
const { startOffset, endOffset } = attrOffset;
|
63
|
+
recorder.remove(templateOffset + startOffset - 1, endOffset - startOffset + 1);
|
64
|
+
}
|
65
|
+
});
|
66
|
+
}
|
67
|
+
function getFallbackValue(textValue, fallbackValue) {
|
68
|
+
if (textValue) {
|
69
|
+
return `(${textValue} | tuiInitials)`;
|
70
|
+
}
|
71
|
+
return textValue ? `(${textValue} | tuiInitials)` : fallbackValue || ``;
|
72
|
+
}
|
73
|
+
function normalizeAttrValue(attrName, attrValue) {
|
74
|
+
return attrName.startsWith(`[`) ? attrValue : `'${attrValue}'`;
|
75
|
+
}
|