@taiga-ui/cdk 2.50.2 → 2.52.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 (86) 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-utils-dom.umd.js +26 -0
  14. package/bundles/taiga-ui-cdk-utils-dom.umd.js.map +1 -1
  15. package/bundles/taiga-ui-cdk-utils-dom.umd.min.js +1 -1
  16. package/bundles/taiga-ui-cdk-utils-dom.umd.min.js.map +1 -1
  17. package/directives/copy-processor/taiga-ui-cdk-directives-copy-processor.metadata.json +1 -1
  18. package/esm2015/directives/copy-processor/copy-processor.directive.js +5 -4
  19. package/esm2015/directives/overscroll/overscroll.directive.js +5 -2
  20. package/esm2015/exceptions/invalid-day.exception.js +8 -1
  21. package/esm2015/exceptions/invalid-month.exception.js +8 -1
  22. package/esm2015/exceptions/invalid-year.exception.js +8 -1
  23. package/esm2015/utils/dom/get-selected-text.js +16 -0
  24. package/esm2015/utils/dom/index.js +3 -1
  25. package/esm2015/utils/dom/is-form-field.js +8 -0
  26. package/esm5/directives/copy-processor/copy-processor.directive.js +5 -4
  27. package/esm5/directives/overscroll/overscroll.directive.js +5 -2
  28. package/esm5/exceptions/invalid-day.exception.js +14 -1
  29. package/esm5/exceptions/invalid-month.exception.js +14 -1
  30. package/esm5/exceptions/invalid-year.exception.js +14 -1
  31. package/esm5/utils/dom/get-selected-text.js +17 -0
  32. package/esm5/utils/dom/index.js +3 -1
  33. package/esm5/utils/dom/is-form-field.js +8 -0
  34. package/exceptions/invalid-day.exception.d.ts +6 -0
  35. package/exceptions/invalid-month.exception.d.ts +6 -0
  36. package/exceptions/invalid-year.exception.d.ts +6 -0
  37. package/exceptions/taiga-ui-cdk-exceptions.metadata.json +1 -1
  38. package/fesm2015/taiga-ui-cdk-directives-copy-processor.js +4 -3
  39. package/fesm2015/taiga-ui-cdk-directives-copy-processor.js.map +1 -1
  40. package/fesm2015/taiga-ui-cdk-directives-overscroll.js +4 -1
  41. package/fesm2015/taiga-ui-cdk-directives-overscroll.js.map +1 -1
  42. package/fesm2015/taiga-ui-cdk-exceptions.js +22 -1
  43. package/fesm2015/taiga-ui-cdk-exceptions.js.map +1 -1
  44. package/fesm2015/taiga-ui-cdk-utils-dom.js +24 -1
  45. package/fesm2015/taiga-ui-cdk-utils-dom.js.map +1 -1
  46. package/fesm5/taiga-ui-cdk-directives-copy-processor.js +4 -3
  47. package/fesm5/taiga-ui-cdk-directives-copy-processor.js.map +1 -1
  48. package/fesm5/taiga-ui-cdk-directives-overscroll.js +4 -1
  49. package/fesm5/taiga-ui-cdk-directives-overscroll.js.map +1 -1
  50. package/fesm5/taiga-ui-cdk-exceptions.js +37 -1
  51. package/fesm5/taiga-ui-cdk-exceptions.js.map +1 -1
  52. package/fesm5/taiga-ui-cdk-utils-dom.js +25 -1
  53. package/fesm5/taiga-ui-cdk-utils-dom.js.map +1 -1
  54. package/package.json +1 -1
  55. package/schematics/ng-update/constants/modules.js +1 -0
  56. package/schematics/ng-update/constants/services.js +9 -0
  57. package/schematics/ng-update/constants/templates.d.ts +17 -0
  58. package/schematics/ng-update/constants/templates.js +32 -0
  59. package/schematics/ng-update/constants/types.js +30 -0
  60. package/schematics/ng-update/index.js +39 -4
  61. package/schematics/ng-update/steps/migrate-date-time.d.ts +1 -0
  62. package/schematics/ng-update/steps/migrate-date-time.js +152 -0
  63. package/schematics/ng-update/steps/migrate-progress.d.ts +3 -0
  64. package/schematics/ng-update/steps/migrate-progress.js +41 -0
  65. package/schematics/ng-update/steps/migrate-sliders/index.d.ts +2 -2
  66. package/schematics/ng-update/steps/migrate-sliders/index.js +3 -3
  67. package/schematics/ng-update/steps/migrate-sliders/migrate-input-range.d.ts +2 -2
  68. package/schematics/ng-update/steps/migrate-sliders/migrate-input-range.js +32 -27
  69. package/schematics/ng-update/steps/migrate-sliders/migrate-input-slider.d.ts +2 -2
  70. package/schematics/ng-update/steps/migrate-sliders/migrate-input-slider.js +30 -22
  71. package/schematics/ng-update/steps/migrate-templates.d.ts +2 -2
  72. package/schematics/ng-update/steps/migrate-templates.js +61 -21
  73. package/schematics/ng-update/steps/miscellaneous.js +2 -6
  74. package/schematics/ng-update/steps/replace-services.js +5 -1
  75. package/schematics/ng-update/steps/show-warnings.js +1 -1
  76. package/schematics/utils/colored-log.d.ts +2 -0
  77. package/schematics/utils/colored-log.js +10 -0
  78. package/schematics/utils/insert-todo.d.ts +2 -0
  79. package/schematics/utils/insert-todo.js +8 -0
  80. package/schematics/utils/templates/elements.d.ts +1 -0
  81. package/schematics/utils/templates/elements.js +9 -19
  82. package/schematics/utils/templates/ng-component-input-manipulations.js +2 -1
  83. package/utils/dom/get-selected-text.d.ts +9 -0
  84. package/utils/dom/index.d.ts +2 -0
  85. package/utils/dom/is-form-field.d.ts +1 -0
  86. package/utils/dom/taiga-ui-cdk-utils-dom.metadata.json +1 -1
@@ -1,28 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const ng_morph_1 = require("ng-morph");
4
- const devkit_file_system_1 = require("ng-morph/project/classes/devkit-file-system");
5
4
  const ng_component_input_manipulations_1 = require("../../../utils/templates/ng-component-input-manipulations");
6
5
  const ng_component_1 = require("../../../utils/angular/ng-component");
7
6
  const add_unique_import_1 = require("../../../utils/add-unique-import");
8
7
  const get_component_templates_1 = require("../../../utils/templates/get-component-templates");
9
8
  const elements_1 = require("../../../utils/templates/elements");
10
- function migrateInputSlider(tree) {
11
- const fileSystem = new devkit_file_system_1.DevkitFileSystem(tree);
9
+ function migrateInputSlider(fileSystem) {
12
10
  const templateResources = get_component_templates_1.getComponentTemplates('**/**');
11
+ const COMPONENTS_WITH_MIN_MAX_LABELS = new Set();
13
12
  for (const templateResource of templateResources) {
14
- replaceMinMaxLabels(templateResource, fileSystem);
13
+ replaceMinMaxLabels(templateResource, fileSystem, COMPONENTS_WITH_MIN_MAX_LABELS);
14
+ }
15
+ /**
16
+ * We should update virtual file tree
17
+ * otherwise all following ng-morph commands will overwrite all previous template manipulations
18
+ * */
19
+ fileSystem.commitEdits();
20
+ ng_morph_1.saveActiveProject();
21
+ ng_morph_1.setActiveProject(ng_morph_1.createProject(fileSystem.tree, '/', '**/**'));
22
+ for (const componentPath of COMPONENTS_WITH_MIN_MAX_LABELS) {
23
+ addMinMaxLabelMethod(componentPath);
15
24
  }
16
25
  }
17
26
  exports.migrateInputSlider = migrateInputSlider;
18
- function replaceMinMaxLabels(templateResource, fileSystem) {
27
+ const MIN_MAX_LABELS_MIGRATION_METHOD_NAME = 'tuiMigrationMinMaxLabel';
28
+ function replaceMinMaxLabels(templateResource, fileSystem, modifiedComponentStorage) {
19
29
  const wasMaxLabelModified = ng_component_input_manipulations_1.replaceInputProperty({
20
30
  templateResource,
21
31
  fileSystem,
22
32
  componentSelector: 'tui-input-slider',
23
33
  from: 'maxLabel',
24
34
  to: '[valueContent]',
25
- newValue: 'tuiMigrationMinMaxLabel',
35
+ newValue: MIN_MAX_LABELS_MIGRATION_METHOD_NAME,
26
36
  });
27
37
  const wasMinLabelModified = ng_component_input_manipulations_1.replaceInputProperty({
28
38
  templateResource,
@@ -30,7 +40,7 @@ function replaceMinMaxLabels(templateResource, fileSystem) {
30
40
  componentSelector: 'tui-input-slider',
31
41
  from: 'minLabel',
32
42
  to: '[valueContent]',
33
- newValue: 'tuiMigrationMinMaxLabel',
43
+ newValue: MIN_MAX_LABELS_MIGRATION_METHOD_NAME,
34
44
  filterFn: element => !elements_1.hasElementAttribute(element, 'maxLabel'),
35
45
  });
36
46
  ng_component_input_manipulations_1.removeInputProperty({
@@ -40,26 +50,24 @@ function replaceMinMaxLabels(templateResource, fileSystem) {
40
50
  inputProperty: 'minLabel',
41
51
  filterFn: element => elements_1.hasElementAttribute(element, 'maxLabel'),
42
52
  });
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');
53
+ if (wasMaxLabelModified || wasMinLabelModified) {
54
+ modifiedComponentStorage.add(templateResource.componentPath);
55
+ }
56
+ }
57
+ function addMinMaxLabelMethod(componentPath) {
58
+ const [ngComponent] = ng_component_1.getNgComponents(componentPath);
59
+ if (ngComponent) {
60
+ add_unique_import_1.addUniqueImport(componentPath, 'TuiContextWithImplicit', '@taiga-ui/cdk');
53
61
  ng_morph_1.addMethods(ngComponent, {
54
- name: 'tuiMigrationMinMaxLabel',
62
+ name: MIN_MAX_LABELS_MIGRATION_METHOD_NAME,
55
63
  returnType: 'string',
56
64
  parameters: [{ name: 'context', type: 'TuiContextWithImplicit<number>' }],
57
65
  statements: [
58
66
  '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',
67
+ 'const maxValue = 100; // TODO: (Taiga UI migration) replace with the MAX value of the input',
68
+ 'const maxLabelText = "Max"; // TODO: (Taiga UI migration) replace with the required label',
69
+ 'const minValue = 0; // TODO: (Taiga UI migration) replace with the MIN value of the input',
70
+ 'const minLabelText = "Min"; // TODO: (Taiga UI migration) replace with the required label',
63
71
  'if (currentValue === maxValue) return maxLabelText;',
64
72
  'if (currentValue === minValue) return minLabelText;',
65
73
  'return String(currentValue);',
@@ -1,2 +1,2 @@
1
- import { Tree } from '@angular-devkit/schematics';
2
- export declare function migrateTemplates(tree: Tree): void;
1
+ import { DevkitFileSystem } from 'ng-morph/project/classes/devkit-file-system';
2
+ export declare function migrateTemplates(fileSystem: DevkitFileSystem): void;
@@ -3,43 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const get_component_templates_1 = require("../../utils/templates/get-component-templates");
4
4
  const templates_1 = require("../constants/templates");
5
5
  const elements_1 = require("../../utils/templates/elements");
6
- const devkit_file_system_1 = require("ng-morph/project/classes/devkit-file-system");
7
6
  const ng_component_input_manipulations_1 = require("../../utils/templates/ng-component-input-manipulations");
8
7
  const template_resource_1 = require("../../utils/templates/template-resource");
9
8
  const ng_morph_1 = require("ng-morph");
9
+ const ng_component_1 = require("../../utils/angular/ng-component");
10
+ const add_unique_import_1 = require("../../utils/add-unique-import");
10
11
  const START_TAG_OFFSET = 1;
11
12
  const END_TAG_OFFSET = 2;
12
- function migrateTemplates(tree) {
13
- const fileSystem = new devkit_file_system_1.DevkitFileSystem(tree);
14
- const componentWithTemplatesPaths = get_component_templates_1.getComponentTemplates('**/**').map(({ componentPath }) => componentPath);
13
+ function migrateTemplates(fileSystem) {
14
+ const componentWithTemplatesPaths = get_component_templates_1.getComponentTemplates('**/**');
15
15
  const actions = [
16
16
  replaceTags,
17
17
  replaceAttrs,
18
18
  replaceAttrsByDirective,
19
19
  replaceBreadcrumbs,
20
20
  replaceFieldError,
21
+ addHTMLCommentTags,
22
+ addEditorProviders,
23
+ migrateTuiHideSelectedPipe,
21
24
  ];
22
- actions.forEach(action => {
23
- componentWithTemplatesPaths.forEach(componentPath => {
24
- // get updated version of template after the previous action
25
- const [resource] = get_component_templates_1.getComponentTemplates(componentPath);
26
- const path = fileSystem.resolve(template_resource_1.getPathFromTemplateResource(resource));
27
- const recorder = fileSystem.edit(path);
25
+ componentWithTemplatesPaths.forEach(resource => {
26
+ const path = fileSystem.resolve(template_resource_1.getPathFromTemplateResource(resource));
27
+ const recorder = fileSystem.edit(path);
28
+ actions.forEach(action => {
28
29
  action({ resource, fileSystem, recorder });
29
30
  });
30
- save(fileSystem);
31
31
  });
32
32
  }
33
33
  exports.migrateTemplates = migrateTemplates;
34
- /**
35
- * We should update virtual file tree
36
- * otherwise all following ng-morph commands will overwrite all previous template manipulations
37
- * */
38
- function save(fileSystem) {
39
- fileSystem.commitEdits();
40
- ng_morph_1.saveActiveProject();
41
- ng_morph_1.setActiveProject(ng_morph_1.createProject(fileSystem.tree, '/', '**/**'));
42
- }
43
34
  function replaceAttrsByDirective({ resource, fileSystem, }) {
44
35
  templates_1.ATTR_TO_DIRECTIVE.forEach(({ componentSelector, directiveModule, directive, inputProperty }) => {
45
36
  ng_component_input_manipulations_1.replaceInputPropertyByDirective({
@@ -61,7 +52,7 @@ function replaceAttrs({ resource, recorder, fileSystem, }) {
61
52
  ...elements_1.findAttributeOnElementWithAttrs(template, from.attrName, from.withAttrsNames || []),
62
53
  ];
63
54
  offsets.forEach(offset => {
64
- recorder.remove(offset + templateOffset, from.attrName.length + (to.attrName.length ? 0 : 1));
55
+ recorder.remove(offset + templateOffset, from.attrName.length);
65
56
  recorder.insertRight(offset + templateOffset, to.attrName);
66
57
  });
67
58
  });
@@ -78,6 +69,21 @@ function replaceTags({ resource, recorder, fileSystem, }) {
78
69
  });
79
70
  });
80
71
  }
72
+ function addHTMLCommentTags({ resource, recorder, fileSystem, }) {
73
+ const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
74
+ const templateOffset = template_resource_1.getTemplateOffset(resource);
75
+ templates_1.TEMPLATE_COMMENTS.forEach(({ comment, tag, withAttr }) => {
76
+ const elementStartOffsets = [
77
+ ...elements_1.findElementsWithAttribute(template, withAttr),
78
+ ...elements_1.findElementsWithAttribute(template, `[${withAttr}]`),
79
+ ]
80
+ .filter(el => el.tagName === tag)
81
+ .map(el => { var _a; return (((_a = el.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.startOffset) || 0) + templateOffset; });
82
+ elementStartOffsets.forEach(offset => {
83
+ recorder.insertRight(offset, `<!-- TODO: (Taiga UI migration) ${comment} -->\n`);
84
+ });
85
+ });
86
+ }
81
87
  function replaceBreadcrumbs({ resource, recorder, fileSystem, }) {
82
88
  const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
83
89
  const templateOffset = template_resource_1.getTemplateOffset(resource);
@@ -131,3 +137,37 @@ function replaceTag(recorder, sourceCodeLocation, from, to, templateOffset = 0,
131
137
  recorder.remove(startTagOffset + templateOffset + START_TAG_OFFSET, from.length);
132
138
  recorder.insertRight(startTagOffset + templateOffset + START_TAG_OFFSET, `${to} ${addAttributes.join(' ')}`);
133
139
  }
140
+ function addEditorProviders({ resource, fileSystem, }) {
141
+ const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
142
+ const elements = elements_1.findElementsByTagName(template, 'tui-editor').filter(element => !elements_1.hasElementAttribute(element, 'new'));
143
+ if (elements.length) {
144
+ const componentPath = resource.componentPath;
145
+ const componentClass = ng_component_1.getNgComponents(componentPath);
146
+ ng_morph_1.addProviderToComponent(componentClass[0], `{
147
+ provide: TUI_EDITOR_EXTENSIONS,
148
+ useValue: defaultEditorExtensions
149
+ }`, { unique: true });
150
+ add_unique_import_1.addUniqueImport(componentPath, 'TUI_EDITOR_EXTENSIONS', '@taiga-ui/addon-editor');
151
+ add_unique_import_1.addUniqueImport(componentPath, 'defaultEditorExtensions', '@taiga-ui/addon-editor');
152
+ }
153
+ }
154
+ const HIDE_SELECTED_PIPE_WITH_ARGS_REG = /\|\s*tuiHideSelected(\s*:\s*[^|'"]*)?/gi;
155
+ function migrateTuiHideSelectedPipe({ resource, fileSystem, recorder, }) {
156
+ const template = template_resource_1.getTemplateFromTemplateResource(resource, fileSystem);
157
+ const templateOffset = template_resource_1.getTemplateOffset(resource);
158
+ const elementsWithPipe = elements_1.findElementByFn(template, el => { var _a; return (_a = el.attrs) === null || _a === void 0 ? void 0 : _a.some(attr => attr.value.match(HIDE_SELECTED_PIPE_WITH_ARGS_REG)); });
159
+ elementsWithPipe.forEach(el => {
160
+ var _a;
161
+ const { name, value: oldValue } = el.attrs.find(attr => attr.value.match(HIDE_SELECTED_PIPE_WITH_ARGS_REG)) ||
162
+ {};
163
+ const attrLocations = (_a = el.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.attrs;
164
+ if (!name || !oldValue || !attrLocations) {
165
+ return;
166
+ }
167
+ const newValue = oldValue.replace(HIDE_SELECTED_PIPE_WITH_ARGS_REG, '| tuiHideSelected');
168
+ const { startOffset } = attrLocations[name];
169
+ const valueOffset = templateOffset + startOffset + name.length + '="'.length;
170
+ recorder.remove(valueOffset, oldValue.length);
171
+ recorder.insertRight(valueOffset, newValue);
172
+ });
173
+ }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const get_named_import_references_1 = require("../../utils/get-named-import-references");
4
4
  const ng_morph_1 = require("ng-morph");
5
+ const insert_todo_1 = require("../../utils/insert-todo");
5
6
  function miscellaneousMigrations() {
6
7
  replaceEnumProperty({
7
8
  enumName: 'TuiCurrency',
@@ -52,14 +53,9 @@ function checkMethod(node, method, message) {
52
53
  if (ng_morph_1.Node.isPropertyAccessExpression(parent)) {
53
54
  parent.getChildrenOfKind(ng_morph_1.SyntaxKind.Identifier).forEach(identifier => {
54
55
  if (identifier.getText() === method) {
55
- insertTodo(identifier, message);
56
+ insert_todo_1.insertTodo(identifier, message);
56
57
  }
57
58
  });
58
59
  }
59
60
  });
60
61
  }
61
- function insertTodo(identifier, message) {
62
- const startLinePos = identifier.getStartLinePos();
63
- const sourceFile = identifier.getSourceFile();
64
- sourceFile.insertText(startLinePos, `// TODO: ${message}\n`);
65
- }
@@ -5,8 +5,12 @@ const get_named_import_references_1 = require("../../utils/get-named-import-refe
5
5
  const ng_morph_1 = require("ng-morph");
6
6
  const import_manipulations_1 = require("../../utils/import-manipulations");
7
7
  const add_unique_import_1 = require("../../utils/add-unique-import");
8
+ const colored_log_1 = require("../../utils/colored-log");
8
9
  function replaceServices() {
9
- services_1.SERVICES_TO_REPLACE.forEach(service => replaceService(service));
10
+ services_1.SERVICES_TO_REPLACE.forEach(service => {
11
+ colored_log_1.infoLog(`replacing ${service.from.name}`);
12
+ replaceService(service);
13
+ });
10
14
  }
11
15
  exports.replaceServices = replaceServices;
12
16
  function replaceService({ from, to, replaceMethods }) {
@@ -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
  }
@@ -0,0 +1,2 @@
1
+ export declare function successLog(message: string): void;
2
+ export declare function infoLog(message: string): void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function successLog(message) {
4
+ console.info('\x1B[32m%s\x1B[0m', message, '\u2713');
5
+ }
6
+ exports.successLog = successLog;
7
+ function infoLog(message) {
8
+ console.info('\x1B[34m%s\x1B[0m', message);
9
+ }
10
+ exports.infoLog = infoLog;
@@ -0,0 +1,2 @@
1
+ import { Identifier } from 'ng-morph';
2
+ export declare function insertTodo(identifier: Identifier, message: string): void;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function insertTodo(identifier, message) {
4
+ const startLinePos = identifier.getStartLinePos();
5
+ const sourceFile = identifier.getSourceFile();
6
+ sourceFile.insertText(startLinePos, `// TODO: (Taiga UI migration) ${message}\n`);
7
+ }
8
+ exports.insertTodo = insertTodo;
@@ -1,4 +1,5 @@
1
1
  import { Element } from 'parse5';
2
+ export declare function findElementByFn(html: string, predicateFn: (el: Element) => boolean): Element[];
2
3
  export declare function findElementsByTagName(html: string, tagName: string): Element[];
3
4
  /**
4
5
  * Parses a HTML fragment and traverses all AST nodes in order find elements that
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const parse5_1 = require("parse5");
4
4
  const ALWAYS_TRUE_HANDLER = () => true;
5
- function findElementsByTagName(html, tagName) {
5
+ function findElementByFn(html, predicateFn) {
6
6
  const document = parse5_1.parseFragment(html, { sourceCodeLocationInfo: true });
7
7
  const elements = [];
8
8
  const visitNodes = (nodes) => {
@@ -11,7 +11,7 @@ function findElementsByTagName(html, tagName) {
11
11
  if (node.childNodes) {
12
12
  visitNodes(node.childNodes);
13
13
  }
14
- if (node.tagName === tagName) {
14
+ if (predicateFn(node)) {
15
15
  elements.push(node);
16
16
  }
17
17
  });
@@ -19,28 +19,17 @@ function findElementsByTagName(html, tagName) {
19
19
  visitNodes(document.childNodes);
20
20
  return elements;
21
21
  }
22
+ exports.findElementByFn = findElementByFn;
23
+ function findElementsByTagName(html, tagName) {
24
+ return findElementByFn(html, el => el.tagName === tagName);
25
+ }
22
26
  exports.findElementsByTagName = findElementsByTagName;
23
27
  /**
24
28
  * Parses a HTML fragment and traverses all AST nodes in order find elements that
25
29
  * include the specified attribute.
26
30
  */
27
31
  function findElementsWithAttribute(html, attributeName) {
28
- const document = parse5_1.parseFragment(html, { sourceCodeLocationInfo: true });
29
- const elements = [];
30
- const visitNodes = (nodes) => {
31
- nodes.forEach(n => {
32
- var _a;
33
- const node = n;
34
- if (node.childNodes) {
35
- visitNodes(node.childNodes);
36
- }
37
- if ((_a = node.attrs) === null || _a === void 0 ? void 0 : _a.some(attr => attr.name === attributeName.toLowerCase())) {
38
- elements.push(node);
39
- }
40
- });
41
- };
42
- visitNodes(document.childNodes);
43
- return elements;
32
+ return findElementByFn(html, el => { var _a; return (_a = el.attrs) === null || _a === void 0 ? void 0 : _a.some(attr => attr.name === attributeName.toLowerCase()); });
44
33
  }
45
34
  exports.findElementsWithAttribute = findElementsWithAttribute;
46
35
  /**
@@ -49,7 +38,8 @@ exports.findElementsWithAttribute = findElementsWithAttribute;
49
38
  */
50
39
  function findAttributeOnElementWithTag(html, name, tagNames, filterFn = ALWAYS_TRUE_HANDLER) {
51
40
  return findElementsWithAttribute(html, name)
52
- .filter(element => tagNames.includes(element.tagName) && filterFn(element))
41
+ .filter(element => (tagNames.includes(element.tagName) || tagNames.includes('*')) &&
42
+ filterFn(element))
53
43
  .map(element => getStartOffsetOfAttribute(element, name));
54
44
  }
55
45
  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()]) || {};
@@ -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"}