@taiga-ui/cdk 2.50.0 → 2.51.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.
Files changed (85) hide show
  1. package/bundles/taiga-ui-cdk-directives-copy-processor.umd.js +7 -7
  2. package/bundles/taiga-ui-cdk-directives-copy-processor.umd.js.map +1 -1
  3. package/bundles/taiga-ui-cdk-directives-copy-processor.umd.min.js +1 -1
  4. package/bundles/taiga-ui-cdk-directives-copy-processor.umd.min.js.map +1 -1
  5. package/bundles/taiga-ui-cdk-directives-overscroll.umd.js +4 -1
  6. package/bundles/taiga-ui-cdk-directives-overscroll.umd.js.map +1 -1
  7. package/bundles/taiga-ui-cdk-directives-overscroll.umd.min.js +1 -1
  8. package/bundles/taiga-ui-cdk-directives-overscroll.umd.min.js.map +1 -1
  9. package/bundles/taiga-ui-cdk-exceptions.umd.js +39 -0
  10. package/bundles/taiga-ui-cdk-exceptions.umd.js.map +1 -1
  11. package/bundles/taiga-ui-cdk-exceptions.umd.min.js +1 -1
  12. package/bundles/taiga-ui-cdk-exceptions.umd.min.js.map +1 -1
  13. package/bundles/taiga-ui-cdk-services.umd.js +3 -1
  14. package/bundles/taiga-ui-cdk-services.umd.js.map +1 -1
  15. package/bundles/taiga-ui-cdk-services.umd.min.js.map +1 -1
  16. package/bundles/taiga-ui-cdk-utils-dom.umd.js +26 -0
  17. package/bundles/taiga-ui-cdk-utils-dom.umd.js.map +1 -1
  18. package/bundles/taiga-ui-cdk-utils-dom.umd.min.js +1 -1
  19. package/bundles/taiga-ui-cdk-utils-dom.umd.min.js.map +1 -1
  20. package/directives/copy-processor/taiga-ui-cdk-directives-copy-processor.metadata.json +1 -1
  21. package/esm2015/directives/copy-processor/copy-processor.directive.js +5 -4
  22. package/esm2015/directives/overscroll/overscroll.directive.js +5 -2
  23. package/esm2015/exceptions/invalid-day.exception.js +8 -1
  24. package/esm2015/exceptions/invalid-month.exception.js +8 -1
  25. package/esm2015/exceptions/invalid-year.exception.js +8 -1
  26. package/esm2015/services/directive-styles.service.js +4 -2
  27. package/esm2015/utils/dom/get-selected-text.js +16 -0
  28. package/esm2015/utils/dom/index.js +3 -1
  29. package/esm2015/utils/dom/is-form-field.js +8 -0
  30. package/esm5/directives/copy-processor/copy-processor.directive.js +5 -4
  31. package/esm5/directives/overscroll/overscroll.directive.js +5 -2
  32. package/esm5/exceptions/invalid-day.exception.js +14 -1
  33. package/esm5/exceptions/invalid-month.exception.js +14 -1
  34. package/esm5/exceptions/invalid-year.exception.js +14 -1
  35. package/esm5/services/directive-styles.service.js +4 -2
  36. package/esm5/utils/dom/get-selected-text.js +17 -0
  37. package/esm5/utils/dom/index.js +3 -1
  38. package/esm5/utils/dom/is-form-field.js +8 -0
  39. package/exceptions/invalid-day.exception.d.ts +6 -0
  40. package/exceptions/invalid-month.exception.d.ts +6 -0
  41. package/exceptions/invalid-year.exception.d.ts +6 -0
  42. package/exceptions/taiga-ui-cdk-exceptions.metadata.json +1 -1
  43. package/fesm2015/taiga-ui-cdk-directives-copy-processor.js +4 -3
  44. package/fesm2015/taiga-ui-cdk-directives-copy-processor.js.map +1 -1
  45. package/fesm2015/taiga-ui-cdk-directives-overscroll.js +4 -1
  46. package/fesm2015/taiga-ui-cdk-directives-overscroll.js.map +1 -1
  47. package/fesm2015/taiga-ui-cdk-exceptions.js +22 -1
  48. package/fesm2015/taiga-ui-cdk-exceptions.js.map +1 -1
  49. package/fesm2015/taiga-ui-cdk-services.js +3 -1
  50. package/fesm2015/taiga-ui-cdk-services.js.map +1 -1
  51. package/fesm2015/taiga-ui-cdk-utils-dom.js +24 -1
  52. package/fesm2015/taiga-ui-cdk-utils-dom.js.map +1 -1
  53. package/fesm5/taiga-ui-cdk-directives-copy-processor.js +4 -3
  54. package/fesm5/taiga-ui-cdk-directives-copy-processor.js.map +1 -1
  55. package/fesm5/taiga-ui-cdk-directives-overscroll.js +4 -1
  56. package/fesm5/taiga-ui-cdk-directives-overscroll.js.map +1 -1
  57. package/fesm5/taiga-ui-cdk-exceptions.js +37 -1
  58. package/fesm5/taiga-ui-cdk-exceptions.js.map +1 -1
  59. package/fesm5/taiga-ui-cdk-services.js +3 -1
  60. package/fesm5/taiga-ui-cdk-services.js.map +1 -1
  61. package/fesm5/taiga-ui-cdk-utils-dom.js +25 -1
  62. package/fesm5/taiga-ui-cdk-utils-dom.js.map +1 -1
  63. package/package.json +1 -1
  64. package/schematics/ng-update/constants/consts.js +10 -0
  65. package/schematics/ng-update/constants/modules.js +1 -0
  66. package/schematics/ng-update/constants/services.js +9 -0
  67. package/schematics/ng-update/constants/templates.d.ts +17 -0
  68. package/schematics/ng-update/constants/templates.js +54 -0
  69. package/schematics/ng-update/constants/types.js +30 -0
  70. package/schematics/ng-update/index.js +2 -0
  71. package/schematics/ng-update/steps/migrate-progress.d.ts +3 -0
  72. package/schematics/ng-update/steps/migrate-progress.js +43 -0
  73. package/schematics/ng-update/steps/migrate-sliders/index.js +2 -0
  74. package/schematics/ng-update/steps/migrate-sliders/migrate-input-range.d.ts +2 -0
  75. package/schematics/ng-update/steps/migrate-sliders/migrate-input-range.js +87 -0
  76. package/schematics/ng-update/steps/migrate-sliders/migrate-input-slider.js +29 -19
  77. package/schematics/ng-update/steps/migrate-templates.js +77 -10
  78. package/schematics/ng-update/steps/show-warnings.js +1 -1
  79. package/schematics/utils/templates/elements.js +2 -1
  80. package/schematics/utils/templates/ng-component-input-manipulations.js +2 -1
  81. package/services/directive-styles.service.d.ts +3 -1
  82. package/utils/dom/get-selected-text.d.ts +9 -0
  83. package/utils/dom/index.d.ts +2 -0
  84. package/utils/dom/is-form-field.d.ts +1 -0
  85. package/utils/dom/taiga-ui-cdk-utils-dom.metadata.json +1 -1
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_file_system_1 = require("ng-morph/project/classes/devkit-file-system");
4
+ const get_component_templates_1 = require("../../../utils/templates/get-component-templates");
5
+ const ng_component_input_manipulations_1 = require("../../../utils/templates/ng-component-input-manipulations");
6
+ const ng_morph_1 = require("ng-morph");
7
+ const ng_component_1 = require("../../../utils/angular/ng-component");
8
+ const add_unique_import_1 = require("../../../utils/add-unique-import");
9
+ const MIN_LABELS_MIGRATION_METHOD_NAME = 'tuiMigrationInputRangeMinLabel';
10
+ const MAX_LABELS_MIGRATION_METHOD_NAME = 'tuiMigrationInputRangeMaxLabel';
11
+ function migrateInputRange(tree) {
12
+ const fileSystem = new devkit_file_system_1.DevkitFileSystem(tree);
13
+ const templateResources = get_component_templates_1.getComponentTemplates('**/**');
14
+ const COMPONENTS_WITH_MIN_LABELS = new Set();
15
+ const COMPONENTS_WITH_MAX_LABELS = new Set();
16
+ for (const templateResource of templateResources) {
17
+ replaceMinLabel(templateResource, fileSystem, COMPONENTS_WITH_MIN_LABELS);
18
+ replaceMaxLabel(templateResource, fileSystem, COMPONENTS_WITH_MAX_LABELS);
19
+ }
20
+ save(fileSystem);
21
+ for (const componentPath of COMPONENTS_WITH_MIN_LABELS) {
22
+ addMinMaxLabelMethod(componentPath, MIN_LABELS_MIGRATION_METHOD_NAME, [
23
+ 'const currentValue = context.$implicit;',
24
+ 'const minValue = 0; // TODO: (Taiga UI migration) replace with the MIN value of the input-range',
25
+ 'const minLabelText = "Min"; // TODO: (Taiga UI migration) replace with the required label',
26
+ 'if (currentValue === minValue) return minLabelText;',
27
+ 'return String(currentValue);',
28
+ ]);
29
+ }
30
+ for (const componentPath of COMPONENTS_WITH_MAX_LABELS) {
31
+ addMinMaxLabelMethod(componentPath, MAX_LABELS_MIGRATION_METHOD_NAME, [
32
+ 'const currentValue = context.$implicit;',
33
+ 'const maxValue = 100; // TODO: (Taiga UI migration) replace with the MAX value of the input',
34
+ 'const maxLabelText = "Max"; // TODO: (Taiga UI migration) replace with the required label',
35
+ 'if (currentValue === maxValue) return maxLabelText;',
36
+ 'return String(currentValue);',
37
+ ]);
38
+ }
39
+ }
40
+ exports.migrateInputRange = migrateInputRange;
41
+ function replaceMinLabel(templateResource, fileSystem, modifiedComponentStorage) {
42
+ const wasModified = ng_component_input_manipulations_1.replaceInputProperty({
43
+ templateResource,
44
+ fileSystem,
45
+ componentSelector: 'tui-input-range',
46
+ from: 'minLabel',
47
+ to: '[leftValueContent]',
48
+ newValue: MIN_LABELS_MIGRATION_METHOD_NAME,
49
+ });
50
+ if (wasModified) {
51
+ modifiedComponentStorage.add(templateResource.componentPath);
52
+ }
53
+ }
54
+ function replaceMaxLabel(templateResource, fileSystem, modifiedComponentStorage) {
55
+ const wasModified = ng_component_input_manipulations_1.replaceInputProperty({
56
+ templateResource,
57
+ fileSystem,
58
+ componentSelector: 'tui-input-range',
59
+ from: 'maxLabel',
60
+ to: '[rightValueContent]',
61
+ newValue: MAX_LABELS_MIGRATION_METHOD_NAME,
62
+ });
63
+ if (wasModified) {
64
+ modifiedComponentStorage.add(templateResource.componentPath);
65
+ }
66
+ }
67
+ function addMinMaxLabelMethod(componentPath, methodName, methodCode) {
68
+ const [ngComponent] = ng_component_1.getNgComponents(componentPath);
69
+ if (ngComponent) {
70
+ add_unique_import_1.addUniqueImport(ngComponent.getSourceFile().getFilePath(), 'TuiContextWithImplicit', '@taiga-ui/cdk');
71
+ ng_morph_1.addMethods(ngComponent, {
72
+ name: methodName,
73
+ returnType: 'string',
74
+ parameters: [{ name: 'context', type: 'TuiContextWithImplicit<number>' }],
75
+ statements: methodCode,
76
+ });
77
+ }
78
+ }
79
+ /**
80
+ * We should update virtual file tree after template manipulations
81
+ * otherwise all following ng-morph commands will overwrite all previous template manipulations
82
+ * */
83
+ function save(fileSystem) {
84
+ fileSystem.commitEdits();
85
+ ng_morph_1.saveActiveProject();
86
+ ng_morph_1.setActiveProject(ng_morph_1.createProject(fileSystem.tree, '/', '**/**'));
87
+ }
@@ -10,19 +10,31 @@ const elements_1 = require("../../../utils/templates/elements");
10
10
  function migrateInputSlider(tree) {
11
11
  const fileSystem = new devkit_file_system_1.DevkitFileSystem(tree);
12
12
  const templateResources = get_component_templates_1.getComponentTemplates('**/**');
13
+ const COMPONENTS_WITH_MIN_MAX_LABELS = new Set();
13
14
  for (const templateResource of templateResources) {
14
- replaceMinMaxLabels(templateResource, fileSystem);
15
+ replaceMinMaxLabels(templateResource, fileSystem, COMPONENTS_WITH_MIN_MAX_LABELS);
16
+ }
17
+ /**
18
+ * We should update virtual file tree
19
+ * otherwise all following ng-morph commands will overwrite all previous template manipulations
20
+ * */
21
+ fileSystem.commitEdits();
22
+ ng_morph_1.saveActiveProject();
23
+ ng_morph_1.setActiveProject(ng_morph_1.createProject(fileSystem.tree, '/', '**/**'));
24
+ for (const componentPath of COMPONENTS_WITH_MIN_MAX_LABELS) {
25
+ addMinMaxLabelMethod(componentPath);
15
26
  }
16
27
  }
17
28
  exports.migrateInputSlider = migrateInputSlider;
18
- function replaceMinMaxLabels(templateResource, fileSystem) {
29
+ const MIN_MAX_LABELS_MIGRATION_METHOD_NAME = 'tuiMigrationMinMaxLabel';
30
+ function replaceMinMaxLabels(templateResource, fileSystem, modifiedComponentStorage) {
19
31
  const wasMaxLabelModified = ng_component_input_manipulations_1.replaceInputProperty({
20
32
  templateResource,
21
33
  fileSystem,
22
34
  componentSelector: 'tui-input-slider',
23
35
  from: 'maxLabel',
24
36
  to: '[valueContent]',
25
- newValue: 'tuiMigrationMinMaxLabel',
37
+ newValue: MIN_MAX_LABELS_MIGRATION_METHOD_NAME,
26
38
  });
27
39
  const wasMinLabelModified = ng_component_input_manipulations_1.replaceInputProperty({
28
40
  templateResource,
@@ -30,7 +42,7 @@ function replaceMinMaxLabels(templateResource, fileSystem) {
30
42
  componentSelector: 'tui-input-slider',
31
43
  from: 'minLabel',
32
44
  to: '[valueContent]',
33
- newValue: 'tuiMigrationMinMaxLabel',
45
+ newValue: MIN_MAX_LABELS_MIGRATION_METHOD_NAME,
34
46
  filterFn: element => !elements_1.hasElementAttribute(element, 'maxLabel'),
35
47
  });
36
48
  ng_component_input_manipulations_1.removeInputProperty({
@@ -40,26 +52,24 @@ function replaceMinMaxLabels(templateResource, fileSystem) {
40
52
  inputProperty: 'minLabel',
41
53
  filterFn: element => elements_1.hasElementAttribute(element, 'maxLabel'),
42
54
  });
43
- /**
44
- * We should update virtual file tree
45
- * otherwise all following ng-morph commands will overwrite all previous template manipulations
46
- * */
47
- fileSystem.commitEdits();
48
- ng_morph_1.saveActiveProject();
49
- ng_morph_1.setActiveProject(ng_morph_1.createProject(fileSystem.tree, '/', '**/**'));
50
- const [ngComponent] = ng_component_1.getNgComponents(templateResource.componentPath);
51
- if ((wasMaxLabelModified || wasMinLabelModified) && ngComponent) {
52
- add_unique_import_1.addUniqueImport(templateResource.componentPath, 'TuiContextWithImplicit', '@taiga-ui/cdk');
55
+ if (wasMaxLabelModified || wasMinLabelModified) {
56
+ modifiedComponentStorage.add(templateResource.componentPath);
57
+ }
58
+ }
59
+ function addMinMaxLabelMethod(componentPath) {
60
+ const [ngComponent] = ng_component_1.getNgComponents(componentPath);
61
+ if (ngComponent) {
62
+ add_unique_import_1.addUniqueImport(componentPath, 'TuiContextWithImplicit', '@taiga-ui/cdk');
53
63
  ng_morph_1.addMethods(ngComponent, {
54
- name: 'tuiMigrationMinMaxLabel',
64
+ name: MIN_MAX_LABELS_MIGRATION_METHOD_NAME,
55
65
  returnType: 'string',
56
66
  parameters: [{ name: 'context', type: 'TuiContextWithImplicit<number>' }],
57
67
  statements: [
58
68
  'const currentValue = context.$implicit;',
59
- 'const maxValue = 100; // TODO replace with the MAX value of the input',
60
- 'const maxLabelText = "Max"; // TODO replace with the required label',
61
- 'const minValue = 0; // TODO replace with the MIN value of the input',
62
- 'const minLabelText = "Min"; // TODO replace with the required label',
69
+ 'const maxValue = 100; // TODO: (Taiga UI migration) replace with the MAX value of the input',
70
+ 'const maxLabelText = "Max"; // TODO: (Taiga UI migration) replace with the required label',
71
+ 'const minValue = 0; // TODO: (Taiga UI migration) replace with the MIN value of the input',
72
+ 'const minLabelText = "Min"; // TODO: (Taiga UI migration) replace with the required label',
63
73
  'if (currentValue === maxValue) return maxLabelText;',
64
74
  'if (currentValue === minValue) return minLabelText;',
65
75
  'return String(currentValue);',
@@ -12,7 +12,14 @@ const END_TAG_OFFSET = 2;
12
12
  function migrateTemplates(tree) {
13
13
  const fileSystem = new devkit_file_system_1.DevkitFileSystem(tree);
14
14
  const componentWithTemplatesPaths = get_component_templates_1.getComponentTemplates('**/**').map(({ componentPath }) => componentPath);
15
- const actions = [replaceTags, replaceAttrs, replaceAttrsByDirective];
15
+ const actions = [
16
+ replaceTags,
17
+ replaceAttrs,
18
+ replaceAttrsByDirective,
19
+ replaceBreadcrumbs,
20
+ replaceFieldError,
21
+ addHTMLCommentTags,
22
+ ];
16
23
  actions.forEach(action => {
17
24
  componentWithTemplatesPaths.forEach(componentPath => {
18
25
  // get updated version of template after the previous action
@@ -66,17 +73,77 @@ function replaceTags({ resource, recorder, fileSystem, }) {
66
73
  templates_1.TAGS_TO_REPLACE.forEach(({ from, to, addAttributes }) => {
67
74
  const elements = elements_1.findElementsByTagName(template, from);
68
75
  elements.forEach(({ sourceCodeLocation }) => {
69
- var _a;
70
76
  if (sourceCodeLocation) {
71
- const startTagOffset = sourceCodeLocation.startTag.startOffset;
72
- const endTagOffset = (_a = sourceCodeLocation.endTag) === null || _a === void 0 ? void 0 : _a.startOffset;
73
- if (endTagOffset) {
74
- recorder.remove(endTagOffset + templateOffset + END_TAG_OFFSET, from.length);
75
- recorder.insertRight(endTagOffset + templateOffset + END_TAG_OFFSET, to);
76
- }
77
- recorder.remove(startTagOffset + templateOffset + START_TAG_OFFSET, from.length);
78
- recorder.insertRight(startTagOffset + templateOffset + START_TAG_OFFSET, `${to} ${addAttributes.join(' ')}`);
77
+ replaceTag(recorder, sourceCodeLocation, from, to, templateOffset, addAttributes);
79
78
  }
80
79
  });
81
80
  });
82
81
  }
82
+ function addHTMLCommentTags({ resource, recorder, fileSystem, }) {
83
+ const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
84
+ const templateOffset = template_resource_1.getTemplateOffset(resource);
85
+ templates_1.TEMPLATE_COMMENTS.forEach(({ comment, tag, withAttr }) => {
86
+ const elementStartOffsets = [
87
+ ...elements_1.findElementsWithAttribute(template, withAttr),
88
+ ...elements_1.findElementsWithAttribute(template, `[${withAttr}]`),
89
+ ]
90
+ .filter(el => el.tagName === tag)
91
+ .map(el => { var _a; return (((_a = el.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.startOffset) || 0) + templateOffset; });
92
+ elementStartOffsets.forEach(offset => {
93
+ recorder.insertRight(offset, `<!-- TODO: (Taiga UI migration) ${comment} -->\n`);
94
+ });
95
+ });
96
+ }
97
+ function replaceBreadcrumbs({ resource, recorder, fileSystem, }) {
98
+ const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
99
+ const templateOffset = template_resource_1.getTemplateOffset(resource);
100
+ const elements = elements_1.findElementsByTagName(template, 'tui-breadcrumbs');
101
+ elements.forEach(element => {
102
+ var _a, _b, _c;
103
+ const itemsAttr = element.attrs.find(attr => attr.name === '[items]');
104
+ const itemsValue = itemsAttr === null || itemsAttr === void 0 ? void 0 : itemsAttr.value;
105
+ const insertTo = (_a = element === null || element === void 0 ? void 0 : element.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.startTag.endOffset;
106
+ if (!itemsValue || !insertTo) {
107
+ return;
108
+ }
109
+ recorder.insertRight(insertTo + templateOffset, `
110
+ <ng-container *ngFor="let item of ${itemsValue}">
111
+ <a
112
+ *tuiBreadcrumb
113
+ tuiLink
114
+ [routerLink]="item.routerLink"
115
+ >
116
+ {{ item.caption }}
117
+ </a>
118
+ </ng-container>`);
119
+ const { startOffset = 0, endOffset = 0 } = ((_c = (_b = element.sourceCodeLocation) === null || _b === void 0 ? void 0 : _b.attrs) === null || _c === void 0 ? void 0 : _c['[items]']) || {};
120
+ recorder.remove(templateOffset + startOffset - 1, endOffset - startOffset + 1);
121
+ });
122
+ }
123
+ function replaceFieldError({ resource, recorder, fileSystem, }) {
124
+ const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
125
+ const templateOffset = template_resource_1.getTemplateOffset(resource);
126
+ const elements = elements_1.findElementsByTagName(template, 'tui-field-error');
127
+ elements.forEach(element => {
128
+ var _a, _b;
129
+ const orderAttr = element.attrs.find(attr => attr.name === '[order]');
130
+ const orderVal = orderAttr === null || orderAttr === void 0 ? void 0 : orderAttr.value;
131
+ if (orderAttr) {
132
+ const { startOffset = 0, endOffset = 0 } = ((_b = (_a = element.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b['[order]']) || {};
133
+ recorder.remove(templateOffset + startOffset - 1, endOffset - startOffset + 1);
134
+ }
135
+ const input = `[error]="${orderVal !== null && orderVal !== void 0 ? orderVal : '[]'} | tuiFieldError | async"`;
136
+ replaceTag(recorder, element.sourceCodeLocation, 'tui-field-error', 'tui-error', templateOffset, [input]);
137
+ });
138
+ }
139
+ function replaceTag(recorder, sourceCodeLocation, from, to, templateOffset = 0, addAttributes = []) {
140
+ var _a;
141
+ const startTagOffset = sourceCodeLocation.startTag.startOffset;
142
+ const endTagOffset = (_a = sourceCodeLocation.endTag) === null || _a === void 0 ? void 0 : _a.startOffset;
143
+ if (endTagOffset) {
144
+ recorder.remove(endTagOffset + templateOffset + END_TAG_OFFSET, from.length);
145
+ recorder.insertRight(endTagOffset + templateOffset + END_TAG_OFFSET, to);
146
+ }
147
+ recorder.remove(startTagOffset + templateOffset + START_TAG_OFFSET, from.length);
148
+ recorder.insertRight(startTagOffset + templateOffset + START_TAG_OFFSET, `${to} ${addAttributes.join(' ')}`);
149
+ }
@@ -30,6 +30,6 @@ function showWarning({ name, message, moduleSpecifier = '**/**' }, { logger }) {
30
30
  */
31
31
  referencesMeta.forEach(({ sourceFile, filePath, startLinePos }) => {
32
32
  logger.warn(`[WARNING] in ${filePath}: ${message}`);
33
- sourceFile.insertText(startLinePos, `// TODO: ${message}\n`);
33
+ sourceFile.insertText(startLinePos, `// TODO: (Taiga UI migration) ${message}\n`);
34
34
  });
35
35
  }
@@ -49,7 +49,8 @@ exports.findElementsWithAttribute = findElementsWithAttribute;
49
49
  */
50
50
  function findAttributeOnElementWithTag(html, name, tagNames, filterFn = ALWAYS_TRUE_HANDLER) {
51
51
  return findElementsWithAttribute(html, name)
52
- .filter(element => tagNames.includes(element.tagName) && filterFn(element))
52
+ .filter(element => (tagNames.includes(element.tagName) || tagNames.includes('*')) &&
53
+ filterFn(element))
53
54
  .map(element => getStartOffsetOfAttribute(element, name));
54
55
  }
55
56
  exports.findAttributeOnElementWithTag = findAttributeOnElementWithTag;
@@ -80,7 +80,8 @@ exports.replaceInputProperty = replaceInputProperty;
80
80
  */
81
81
  function getInputPropertyOffsets(html, attrName, tags, filterFn = () => true) {
82
82
  return elements_1.findElementsWithAttribute(html, attrName)
83
- .filter(element => tags.includes(element.tagName) && filterFn(element))
83
+ .filter(element => (tags.includes(element.tagName) || tags.includes('*')) &&
84
+ filterFn(element))
84
85
  .map((element) => {
85
86
  var _a, _b;
86
87
  const { startOffset = 0, endOffset = 0 } = ((_b = (_a = element.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b[attrName.toLowerCase()]) || {};
@@ -11,6 +11,8 @@ export declare class TuiDirectiveStylesService {
11
11
  private readonly map;
12
12
  constructor(resolver: ComponentFactoryResolver, injector: Injector, documentRef: Document, renderer: Renderer2);
13
13
  addComponent(component: Type<unknown>): void;
14
- /** @deprecated use components approach */
14
+ /** @deprecated use components approach
15
+ * TODO: delete in v3.0
16
+ */
15
17
  addStyle(styles: string, attribute: string): void;
16
18
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description:
3
+ * cross browser way to get selected text
4
+ *
5
+ * History:
6
+ * BUG - window.getSelection() fails when text selected in a form field
7
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=85686
8
+ */
9
+ export declare function tuiGetSelectedText({ getSelection, document }: Window): string | null;
@@ -8,6 +8,8 @@ export * from './get-document-or-shadow-root';
8
8
  export * from './get-element-obscurers';
9
9
  export * from './get-element-offset';
10
10
  export * from './get-scroll-parent';
11
+ export * from './get-selected-text';
11
12
  export * from './is-current-target';
13
+ export * from './is-form-field';
12
14
  export * from './is-inside-iframe';
13
15
  export * from './is-node-in';
@@ -0,0 +1 @@
1
+ export declare function tuiIsFormFieldElement(element: unknown | null): element is HTMLInputElement | HTMLTextAreaElement;
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"canScroll":{"__symbolic":"function","parameters":["element","rootElement","vertical","scrollEnd"],"value":{"__symbolic":"if","condition":{"__symbolic":"reference","name":"vertical"},"thenExpression":{"__symbolic":"error","message":"Reference to a non-exported function","line":11,"character":9,"context":{"name":"canScrollVertical"},"module":"./can-scroll"},"elseExpression":{"__symbolic":"error","message":"Reference to a non-exported function","line":38,"character":9,"context":{"name":"canScrollHorizontal"},"module":"./can-scroll"}}},"containsOrAfter":{"__symbolic":"function","parameters":["current","node"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"current"},"member":"contains"},"arguments":[{"__symbolic":"reference","name":"node"}]},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"binop","operator":"&","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"compareDocumentPosition"},"arguments":[{"__symbolic":"reference","name":"current"}]},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Node"},"member":"DOCUMENT_POSITION_PRECEDING"}}}}}},"tuiCustomEvent":{"__symbolic":"function"},"getActualTarget":{"__symbolic":"function"},"getClipboardDataText":{"__symbolic":"function","parameters":["event","format"],"defaults":[null,"text/plain"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"in","left":"clipboardData","right":{"__symbolic":"reference","name":"event"}},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"clipboardData"},"right":null}},"thenExpression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"clipboardData"},"member":"getData"},"arguments":[{"__symbolic":"reference","name":"format"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"clipboardData"},"member":"getData"},"arguments":["text/plain"]}},"elseExpression":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"target"},"member":"ownerDocument"},"member":"defaultView"},"member":"clipboardData"},"member":"getData"},"arguments":["text"]}}},"getClosestElement":{"__symbolic":"function"},"getDocumentOrShadowRoot":{"__symbolic":"function","parameters":["node"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"in","left":"getRootNode","right":{"__symbolic":"reference","name":"node"}},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"isConnected"}},"thenExpression":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"getRootNode"}},"elseExpression":{"__symbolic":"error","message":"Expression form not supported","line":3,"character":10,"module":"./get-document-or-shadow-root"}}},"getElementObscurers":{"__symbolic":"function"},"getElementOffset":{"__symbolic":"function"},"getScrollParent":{"__symbolic":"function"},"isCurrentTarget":{"__symbolic":"function","parameters":["target","currentTarget"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"target"},"right":{"__symbolic":"reference","name":"currentTarget"}}},"isInsideIframe":{"__symbolic":"function","parameters":["windowRef"],"value":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"windowRef"},"member":"parent"},"right":{"__symbolic":"reference","name":"windowRef"}}},"isNodeIn":{"__symbolic":"function","parameters":["node","selector"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"nodeType"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Node"},"member":"TEXT_NODE"}},"thenExpression":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"parentElement"}}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getClosestElement"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"parentElement"},{"__symbolic":"reference","name":"selector"}]}}}},"elseExpression":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"nodeType"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Node"},"member":"ELEMENT_NODE"}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getClosestElement"},"arguments":[{"__symbolic":"reference","name":"node"},{"__symbolic":"reference","name":"selector"}]}}}}}}},"origins":{"canScroll":"./can-scroll","containsOrAfter":"./contains-or-after","tuiCustomEvent":"./custom-event","getActualTarget":"./get-actual-target","getClipboardDataText":"./get-clipboard-data-text","getClosestElement":"./get-closest-element","getDocumentOrShadowRoot":"./get-document-or-shadow-root","getElementObscurers":"./get-element-obscurers","getElementOffset":"./get-element-offset","getScrollParent":"./get-scroll-parent","isCurrentTarget":"./is-current-target","isInsideIframe":"./is-inside-iframe","isNodeIn":"./is-node-in"},"importAs":"@taiga-ui/cdk/utils/dom"}
1
+ {"__symbolic":"module","version":4,"metadata":{"canScroll":{"__symbolic":"function","parameters":["element","rootElement","vertical","scrollEnd"],"value":{"__symbolic":"if","condition":{"__symbolic":"reference","name":"vertical"},"thenExpression":{"__symbolic":"error","message":"Reference to a non-exported function","line":11,"character":9,"context":{"name":"canScrollVertical"},"module":"./can-scroll"},"elseExpression":{"__symbolic":"error","message":"Reference to a non-exported function","line":38,"character":9,"context":{"name":"canScrollHorizontal"},"module":"./can-scroll"}}},"containsOrAfter":{"__symbolic":"function","parameters":["current","node"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"current"},"member":"contains"},"arguments":[{"__symbolic":"reference","name":"node"}]},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"binop","operator":"&","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"compareDocumentPosition"},"arguments":[{"__symbolic":"reference","name":"current"}]},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Node"},"member":"DOCUMENT_POSITION_PRECEDING"}}}}}},"tuiCustomEvent":{"__symbolic":"function"},"getActualTarget":{"__symbolic":"function"},"getClipboardDataText":{"__symbolic":"function","parameters":["event","format"],"defaults":[null,"text/plain"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"in","left":"clipboardData","right":{"__symbolic":"reference","name":"event"}},"right":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"clipboardData"},"right":null}},"thenExpression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"clipboardData"},"member":"getData"},"arguments":[{"__symbolic":"reference","name":"format"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"clipboardData"},"member":"getData"},"arguments":["text/plain"]}},"elseExpression":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"target"},"member":"ownerDocument"},"member":"defaultView"},"member":"clipboardData"},"member":"getData"},"arguments":["text"]}}},"getClosestElement":{"__symbolic":"function"},"getDocumentOrShadowRoot":{"__symbolic":"function","parameters":["node"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"in","left":"getRootNode","right":{"__symbolic":"reference","name":"node"}},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"isConnected"}},"thenExpression":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"getRootNode"}},"elseExpression":{"__symbolic":"error","message":"Expression form not supported","line":3,"character":10,"module":"./get-document-or-shadow-root"}}},"getElementObscurers":{"__symbolic":"function"},"getElementOffset":{"__symbolic":"function"},"getScrollParent":{"__symbolic":"function"},"tuiGetSelectedText":{"__symbolic":"function","parameters":["getSelection","document"],"value":{"__symbolic":"if","condition":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"tuiIsFormFieldElement"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"document"},"member":"activeElement"}]},"thenExpression":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"document"},"member":"activeElement"},"member":"value"},"member":"slice"},"arguments":[{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"document"},"member":"activeElement"},"member":"selectionStart"},"right":0},{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"document"},"member":"activeElement"},"member":"selectionEnd"},"right":0}]},"elseExpression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getSelection"}},"member":"toString"}},"right":null}}},"isCurrentTarget":{"__symbolic":"function","parameters":["target","currentTarget"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"target"},"right":{"__symbolic":"reference","name":"currentTarget"}}},"tuiIsFormFieldElement":{"__symbolic":"function"},"isInsideIframe":{"__symbolic":"function","parameters":["windowRef"],"value":{"__symbolic":"binop","operator":"!==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"windowRef"},"member":"parent"},"right":{"__symbolic":"reference","name":"windowRef"}}},"isNodeIn":{"__symbolic":"function","parameters":["node","selector"],"value":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"nodeType"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Node"},"member":"TEXT_NODE"}},"thenExpression":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"parentElement"}}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getClosestElement"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"parentElement"},{"__symbolic":"reference","name":"selector"}]}}}},"elseExpression":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"node"},"member":"nodeType"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Node"},"member":"ELEMENT_NODE"}},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getClosestElement"},"arguments":[{"__symbolic":"reference","name":"node"},{"__symbolic":"reference","name":"selector"}]}}}}}}},"origins":{"canScroll":"./can-scroll","containsOrAfter":"./contains-or-after","tuiCustomEvent":"./custom-event","getActualTarget":"./get-actual-target","getClipboardDataText":"./get-clipboard-data-text","getClosestElement":"./get-closest-element","getDocumentOrShadowRoot":"./get-document-or-shadow-root","getElementObscurers":"./get-element-obscurers","getElementOffset":"./get-element-offset","getScrollParent":"./get-scroll-parent","tuiGetSelectedText":"./get-selected-text","isCurrentTarget":"./is-current-target","tuiIsFormFieldElement":"./is-form-field","isInsideIframe":"./is-inside-iframe","isNodeIn":"./is-node-in"},"importAs":"@taiga-ui/cdk/utils/dom"}