diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 0b2da6803..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "root": true, - "overrides": [ - { - "files": [ - "*.ts" - ], - "plugins": [ - "@angular-eslint", - "import", - "unused-imports" - ], - "extends": [ - "eslint:recommended", - "plugin:import/typescript", - "plugin:@typescript-eslint/recommended", - "plugin:@angular-eslint/all", - "plugin:@angular-eslint/template/process-inline-templates", - "plugin:prettier/recommended" - ], - "settings": { - "import/resolver": { - "typescript": { - "project": "./tsconfig.json" - } - } - }, - "rules": { - "@angular-eslint/use-injectable-provided-in": "off", - "@angular-eslint/prefer-on-push-component-change-detection": "off", - "@angular-eslint/prefer-signals": "off", - "@angular-eslint/prefer-standalone": "error", - "@typescript-eslint/consistent-type-definitions": "error", - "@typescript-eslint/dot-notation": "off", - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - "accessibility": "no-public" - } - ], - "@typescript-eslint/member-ordering": [ - "error", - { - "default": [ - "private-static-field", - "protected-static-field", - "public-static-field", - "private-instance-field", - "protected-instance-field", - "public-instance-field", - "private-constructor", - "protected-constructor", - "public-constructor", - "public-static-method", - "public-instance-method", - "protected-static-method", - "protected-instance-method", - "private-static-method", - "private-instance-method" - ] - } - ], - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": [ - "enumMember" - ], - "format": [ - "PascalCase" - ] - } - ], - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-empty-interface": [ - "error", - { - "allowSingleExtends": true - } - ], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_" - } - ], - "arrow-body-style": [ - "error", - "as-needed", - { - "requireReturnForObjectLiteral": true - } - ], - "comma-dangle": [ - "error", - "always-multiline" - ], - "id-blacklist": "off", - "id-match": "off", - "import/order": [ - "error", - { - "pathGroups": [ - { - "pattern": "@dynamic-forms/**", - "group": "external" - } - ], - "newlines-between": "never", - "alphabetize": { - "order": "asc", - "caseInsensitive": true - } - } - ], - "prettier/prettier": [ - "error" - ], - "no-console": "error", - "no-underscore-dangle": "off", - "sort-imports": [ - "error", - { - "ignoreCase": false, - "ignoreDeclarationSort": true, - "ignoreMemberSort": false, - "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], - "allowSeparatedGroups": false - } - ], - "unused-imports/no-unused-imports": "error" - } - }, - { - "files": [ - "*.html" - ], - "extends": [ - "plugin:@angular-eslint/template/all", - "plugin:prettier/recommended" - ], - "rules": { - "@angular-eslint/template/click-events-have-key-events": "off", - "@angular-eslint/template/cyclomatic-complexity": "off", - "@angular-eslint/template/i18n": "off", - "@angular-eslint/template/interactive-supports-focus": "off", - "prettier/prettier": [ - "error", - { - "parser": "angular", - "htmlWhitespaceSensitivity": "strict" - } - ] - } - } - ] -} diff --git a/CHANGELOG.md b/CHANGELOG.md index 872236e0c..9949c4fc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 19.0.0-rc.0 (2025-01-23) + +### General + +* migration to eslint 9 und use of tslint stylistic + ## 19.0.0-next.3 (2025-01-20) ### Bug Fixes diff --git a/README.md b/README.md index 31cc1cb35..5b3dacbe4 100644 --- a/README.md +++ b/README.md @@ -65,12 +65,12 @@ This is an [**Angular**](https://angular.dev) project for dynamic forms based on ## **Packages** -### **Version 19** [![Build Status](https://dev.azure.com/alexandergebuhr/dynamic-forms/_apis/build/status/dynamic-forms-publish?branchName=refs/tags/19.0.0-next.3)](https://dev.azure.com/alexandergebuhr/dynamic-forms/_build/latest?definitionId=45&branchName=refs/tags/19.0.0-next.3) +### **Version 19** [![Build Status](https://dev.azure.com/alexandergebuhr/dynamic-forms/_apis/build/status/dynamic-forms-publish?branchName=refs/tags/19.0.0-rc.0)](https://dev.azure.com/alexandergebuhr/dynamic-forms/_build/latest?definitionId=45&branchName=refs/tags/19.0.0-rc.0) -- `npm install @dynamic-forms/core@19.0.0-next.3` -- `npm install @dynamic-forms/bootstrap@19.0.0-next.3` -- `npm install @dynamic-forms/material@19.0.0-next.3` -- `npm install @dynamic-forms/markdown@19.0.0-next.3` +- `npm install @dynamic-forms/core@19.0.0-rc.0` +- `npm install @dynamic-forms/bootstrap@19.0.0-rc.0` +- `npm install @dynamic-forms/material@19.0.0-rc.0` +- `npm install @dynamic-forms/markdown@19.0.0-rc.0` ### **Version 18** [![Build Status](https://dev.azure.com/alexandergebuhr/dynamic-forms/_apis/build/status/dynamic-forms-publish?branchName=refs/tags/18.1.2)](https://dev.azure.com/alexandergebuhr/dynamic-forms/_build/latest?definitionId=45&branchName=refs/tags/18.1.2) diff --git a/angular.json b/angular.json index 8a6813518..83735dc0e 100644 --- a/angular.json +++ b/angular.json @@ -38,7 +38,8 @@ "lintFilePatterns": [ "libs/core/**/*.ts", "libs/core/**/*.html" - ] + ], + "eslintConfig": "libs/core/eslint.config.js" } } } @@ -78,7 +79,8 @@ "lintFilePatterns": [ "libs/bootstrap/**/*.ts", "libs/bootstrap/**/*.html" - ] + ], + "eslintConfig": "libs/bootstrap/eslint.config.js" } } } @@ -118,7 +120,8 @@ "lintFilePatterns": [ "libs/material/**/*.ts", "libs/material/**/*.html" - ] + ], + "eslintConfig": "libs/material/eslint.config.js" } } } @@ -158,7 +161,8 @@ "lintFilePatterns": [ "libs/markdown/**/*.ts", "libs/markdown/**/*.html" - ] + ], + "eslintConfig": "libs/markdown/eslint.config.js" } } } @@ -338,7 +342,8 @@ "lintFilePatterns": [ "apps/demo/src/**/*.ts", "apps/demo/src/**/*.html" - ] + ], + "eslintConfig": "apps/demo/eslint.config.js" } }, "e2e": { diff --git a/apps/demo-e2e/.eslintrc.json b/apps/demo-e2e/.eslintrc.json deleted file mode 100644 index be89ddcfc..000000000 --- a/apps/demo-e2e/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*" - ], - "overrides": [ - { - "files": [ - "*.ts" - ], - "parserOptions": { - "project": [ - "apps/demo-e2e/tsconfig.e2e.json" - ], - "createDefaultProgram": true - }, - "rules": { - - } - } - ] -} diff --git a/apps/demo-e2e/eslint.config.js b/apps/demo-e2e/eslint.config.js new file mode 100644 index 000000000..1e9393b42 --- /dev/null +++ b/apps/demo-e2e/eslint.config.js @@ -0,0 +1,7 @@ +// @ts-check +const tseslint = require("typescript-eslint"); +const rootConfig = require("../../eslint.config.js"); + +module.exports = tseslint.config( + ...rootConfig +); diff --git a/apps/demo/.eslintrc.json b/apps/demo/.eslintrc.json deleted file mode 100644 index 1702f454d..000000000 --- a/apps/demo/.eslintrc.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*", - "src/assets/coverage", - "src/assets/docs" - ], - "overrides": [ - { - "files": [ - "*.ts" - ], - "parserOptions": { - "project": [ - "apps/demo/tsconfig.app.json", - "apps/demo/tsconfig.spec.json" - ], - "createDefaultProgram": true - }, - "rules": { - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ], - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/prefer-signals": "error" - } - }, - { - "files": [ - "*.html" - ], - "rules": { - "@angular-eslint/template/prefer-control-flow": "error", - "@angular-eslint/template/no-call-expression": "off" - } - } - ] -} diff --git a/apps/demo/eslint.config.js b/apps/demo/eslint.config.js new file mode 100644 index 000000000..f45ddf658 --- /dev/null +++ b/apps/demo/eslint.config.js @@ -0,0 +1,36 @@ +// @ts-check +const tseslint = require("typescript-eslint"); +const rootConfig = require("../../eslint.config.js"); + +module.exports = tseslint.config( + ...rootConfig, + { + files: ["**/*.ts"], + rules: { + "@angular-eslint/component-selector": [ + "error", + { + type: "element", + prefix: "app", + style: "kebab-case" + } + ], + "@angular-eslint/directive-selector": [ + "error", + { + type: "attribute", + prefix: "app", + style: "camelCase" + } + ], + "@angular-eslint/prefer-signals": "error" + }, + }, + { + files: ["**/*.html"], + rules: { + "@angular-eslint/template/prefer-control-flow": "error", + "@angular-eslint/template/no-call-expression": "off" + } + } +); diff --git a/apps/demo/src/app/layout/content/sidebar/sidebar-menu/sidebar-menu.component.html b/apps/demo/src/app/layout/content/sidebar/sidebar-menu/sidebar-menu.component.html index 2c15068d0..3ebf78df3 100644 --- a/apps/demo/src/app/layout/content/sidebar/sidebar-menu/sidebar-menu.component.html +++ b/apps/demo/src/app/layout/content/sidebar/sidebar-menu/sidebar-menu.component.html @@ -1,4 +1,3 @@ - @if (treeDataSource$ | async; as treeDataSource) { diff --git a/apps/demo/src/app/services/http-request.interceptor.ts b/apps/demo/src/app/services/http-request.interceptor.ts index 9c37ca627..41e9dcc80 100644 --- a/apps/demo/src/app/services/http-request.interceptor.ts +++ b/apps/demo/src/app/services/http-request.interceptor.ts @@ -9,7 +9,7 @@ export class HttpRequestInterceptor implements HttpInterceptor { return next.handle(request.clone({ setHeaders })); } - private getCacheHeaders(): { [key: string]: string } { + private getCacheHeaders(): Record { return { 'Cache-Control': 'no-cache', Pragma: 'no-cache' }; } } diff --git a/apps/demo/src/app/services/icon.service.ts b/apps/demo/src/app/services/icon.service.ts index ea91159c5..53d6cde40 100644 --- a/apps/demo/src/app/services/icon.service.ts +++ b/apps/demo/src/app/services/icon.service.ts @@ -4,7 +4,7 @@ import { DomSanitizer } from '@angular/platform-browser'; @Injectable({ providedIn: 'root' }) export class IconService { - private readonly _svgs: { [svg: string]: string } = { + private readonly _svgs: Record = { github: 'assets/images/github.svg', 'azure-devops': 'assets/images/azure-devops.svg', }; diff --git a/apps/demo/src/app/state/examples/examples.model.ts b/apps/demo/src/app/state/examples/examples.model.ts index cee6a873f..9e87fb41f 100644 --- a/apps/demo/src/app/state/examples/examples.model.ts +++ b/apps/demo/src/app/state/examples/examples.model.ts @@ -32,7 +32,7 @@ export interface Example extends ExampleMenu { export interface Examples { menu: ExamplesMenu; - examples: { [key: string]: Example }; + examples: Record; } export const EXAMPLES = new StateToken('examples'); diff --git a/apps/demo/src/app/state/examples/examples.state.ts b/apps/demo/src/app/state/examples/examples.state.ts index 7d244ad2f..975ff78a8 100644 --- a/apps/demo/src/app/state/examples/examples.state.ts +++ b/apps/demo/src/app/state/examples/examples.state.ts @@ -20,7 +20,7 @@ export class ExamplesState { } @Selector() - static examples(state: Examples): { [key: string]: Example } { + static examples(state: Examples): Record { return state ? state.examples : undefined; } @@ -35,7 +35,7 @@ export class ExamplesState { context.patchState({ menu, examples }); } - private getExamples(items: ExampleMenuItem[], path?: string): { [key: string]: Example } { + private getExamples(items: ExampleMenuItem[], path?: string): Record { return items.reduce((result, item) => { const group = item as ExampleMenuGroup; if (group.items && group.items.length) { diff --git a/apps/demo/src/assets/config.json b/apps/demo/src/assets/config.json index 4facbccc1..1ed76921d 100644 --- a/apps/demo/src/assets/config.json +++ b/apps/demo/src/assets/config.json @@ -1,5 +1,5 @@ { - "version": "19.0.0-next.3", + "version": "19.0.0-rc.0", "build": "187", "buildUrl": "https://dev.azure.com/alexandergebuhr/dynamic-forms/_build?definitionId=39&_a=summary", "release": "17", @@ -16,7 +16,7 @@ }, "versions": [ { - "name": "19.0.0-next.3", + "name": "19.0.0-rc.0", "url": "https://dynamic-forms.azurewebsites.net/v19/dev" }, { diff --git a/apps/demo/src/assets/config.prod.json b/apps/demo/src/assets/config.prod.json index cb4727c5e..c4eea6fcf 100644 --- a/apps/demo/src/assets/config.prod.json +++ b/apps/demo/src/assets/config.prod.json @@ -1,5 +1,5 @@ { - "version": "19.0.0-next.3", + "version": "19.0.0-rc.0", "build": "187", "buildUrl": "https://dev.azure.com/alexandergebuhr/dynamic-forms/_build?definitionId=39&_a=summary", "release": "17", @@ -16,7 +16,7 @@ }, "versions": [ { - "name": "19.0.0-next.3", + "name": "19.0.0-rc.0", "url": "https://dynamic-forms.azurewebsites.net/v19" }, { diff --git a/apps/demo/src/index.html b/apps/demo/src/index.html index afda5648a..6f4d9c74d 100644 --- a/apps/demo/src/index.html +++ b/apps/demo/src/index.html @@ -1,4 +1,3 @@ - diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..194404373 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,165 @@ +// @ts-nocheck +const eslint = require("@eslint/js"); +const tseslint = require("typescript-eslint"); +const angular = require("angular-eslint"); +const eslintPluginImport = require('eslint-plugin-import'); +const eslintPluginUnusedImports = require("eslint-plugin-unused-imports"); +const eslintPluginPrettierRecommended = require("eslint-plugin-prettier/recommended"); + +module.exports = tseslint.config( + { + ignores: ["apps/demo/src/assets/"] + }, + { + files: ["**/*.ts"], + plugins: { + "unused-imports": eslintPluginUnusedImports, + }, + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + ...angular.configs.tsAll, + // @ts-ignore + eslintPluginImport.flatConfigs.recommended, + eslintPluginImport.flatConfigs.typescript, + eslintPluginPrettierRecommended + ], + processor: angular.processInlineTemplates, + settings: { + "import/resolver": { + "typescript": { + "project": "./tsconfig.lint.json" + } + } + }, + rules: { + "@angular-eslint/use-injectable-provided-in": "off", + "@angular-eslint/prefer-on-push-component-change-detection": "off", + "@angular-eslint/prefer-signals": "off", + "@angular-eslint/prefer-standalone": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/dot-notation": "off", + "@typescript-eslint/explicit-member-accessibility": [ + "error", + { + "accessibility": "no-public" + } + ], + "@typescript-eslint/member-ordering": [ + "error", + { + "default": [ + "private-static-field", + "protected-static-field", + "public-static-field", + "private-instance-field", + "protected-instance-field", + "public-instance-field", + "private-constructor", + "protected-constructor", + "public-constructor", + "public-static-method", + "public-instance-method", + "protected-static-method", + "protected-instance-method", + "private-static-method", + "private-instance-method" + ] + } + ], + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": [ + "enumMember" + ], + "format": [ + "PascalCase" + ] + } + ], + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": [ + "error", + { + "allowSingleExtends": true + } + ], + "@typescript-eslint/no-empty-object-type": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_" + } + ], + "arrow-body-style": [ + "error", + "as-needed", + { + "requireReturnForObjectLiteral": true + } + ], + "comma-dangle": [ + "error", + "always-multiline" + ], + "id-blacklist": "off", + "id-match": "off", + "import/order": [ + "error", + { + "pathGroups": [ + { + "pattern": "@dynamic-forms/**", + "group": "external" + } + ], + "newlines-between": "never", + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], + "prettier/prettier": [ + "error" + ], + "no-console": "error", + "no-underscore-dangle": "off", + "sort-imports": [ + "error", + { + "ignoreCase": false, + "ignoreDeclarationSort": true, + "ignoreMemberSort": false, + "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], + "allowSeparatedGroups": false + } + ], + "unused-imports/no-unused-imports": "error" + }, + }, + { + files: ["**/*.html"], + extends: [ + ...angular.configs.templateAll, + eslintPluginPrettierRecommended + ], + rules: { + "@angular-eslint/template/click-events-have-key-events": "off", + "@angular-eslint/template/cyclomatic-complexity": "off", + "@angular-eslint/template/i18n": "off", + "@angular-eslint/template/interactive-supports-focus": "off", + "prettier/prettier": [ + "error", + { + "parser": "angular", + "htmlWhitespaceSensitivity": "strict" + } + ] + }, + } +); diff --git a/libs/bootstrap/.eslintrc.json b/libs/bootstrap/.eslintrc.json deleted file mode 100644 index f0c74b741..000000000 --- a/libs/bootstrap/.eslintrc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*" - ], - "overrides": [ - { - "files": [ - "*.ts" - ], - "parserOptions": { - "project": [ - "libs/bootstrap/tsconfig.lib.json", - "libs/bootstrap/tsconfig.spec.json" - ], - "createDefaultProgram": true - }, - "rules": { - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "bs-dynamic", - "style": "kebab-case" - } - ], - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "bsDynamic", - "style": "camelCase" - } - ] - } - }, - { - "files": [ - "*.html" - ], - "rules": {} - } - ] -} diff --git a/libs/bootstrap/eslint.config.js b/libs/bootstrap/eslint.config.js new file mode 100644 index 000000000..30e65341f --- /dev/null +++ b/libs/bootstrap/eslint.config.js @@ -0,0 +1,32 @@ +// @ts-check +const tseslint = require("typescript-eslint"); +const rootConfig = require("../../eslint.config.js"); + +module.exports = tseslint.config( + ...rootConfig, + { + files: ["**/*.ts"], + rules: { + "@angular-eslint/component-selector": [ + "error", + { + type: "element", + prefix: "bs-dynamic", + style: "kebab-case" + } + ], + "@angular-eslint/directive-selector": [ + "error", + { + type: "attribute", + prefix: "bsDynamic", + style: "camelCase" + } + ], + }, + }, + { + files: ["**/*.html"], + rules: {}, + } +); diff --git a/libs/bootstrap/package.json b/libs/bootstrap/package.json index 6b2363423..fb8548b0d 100644 --- a/libs/bootstrap/package.json +++ b/libs/bootstrap/package.json @@ -1,6 +1,6 @@ { "name": "@dynamic-forms/bootstrap", - "version": "19.0.0-next.3", + "version": "19.0.0-rc.0", "author": "dynamic-forms", "description": "dynamic-forms - component library using bootstrap", "keywords": [ @@ -24,7 +24,7 @@ "@angular/common": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", - "@dynamic-forms/core": "19.0.0-next.3", + "@dynamic-forms/core": "19.0.0-rc.0", "bootstrap": "^5.3.3", "inputmask": "^5.0.8", "rxjs": "^7.4.0" diff --git a/libs/core/.eslintrc.json b/libs/core/.eslintrc.json deleted file mode 100644 index c445219d1..000000000 --- a/libs/core/.eslintrc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*" - ], - "overrides": [ - { - "files": [ - "*.ts" - ], - "parserOptions": { - "project": [ - "libs/core/tsconfig.lib.json", - "libs/core/tsconfig.spec.json" - ], - "createDefaultProgram": true - }, - "rules": { - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "dynamic", - "style": "kebab-case" - } - ], - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "dynamic", - "style": "camelCase" - } - ] - } - }, - { - "files": [ - "*.html" - ], - "rules": {} - } - ] -} diff --git a/libs/core/eslint.config.js b/libs/core/eslint.config.js new file mode 100644 index 000000000..e2113b63a --- /dev/null +++ b/libs/core/eslint.config.js @@ -0,0 +1,32 @@ +// @ts-check +const tseslint = require("typescript-eslint"); +const rootConfig = require("../../eslint.config.js"); + +module.exports = tseslint.config( + ...rootConfig, + { + files: ["**/*.ts"], + rules: { + "@angular-eslint/component-selector": [ + "error", + { + type: "element", + prefix: "dynamic", + style: "kebab-case" + } + ], + "@angular-eslint/directive-selector": [ + "error", + { + type: "attribute", + prefix: "dynamic", + style: "camelCase" + } + ], + }, + }, + { + files: ["**/*.html"], + rules: {}, + } +); diff --git a/libs/core/input-mask/src/lib/dynamic-form-input-mask-base.ts b/libs/core/input-mask/src/lib/dynamic-form-input-mask-base.ts index 7121b6bb5..1a2ffee37 100644 --- a/libs/core/input-mask/src/lib/dynamic-form-input-mask-base.ts +++ b/libs/core/input-mask/src/lib/dynamic-form-input-mask-base.ts @@ -19,7 +19,6 @@ export abstract class DynamicFormInputMaskBase constructor(protected override validationService: DynamicFormValidationService) { super(validationService); - this.field; } get inputMask(): DynamicFormInputMaskControl { diff --git a/libs/core/package.json b/libs/core/package.json index 5365a79a3..7ea6bd5cf 100644 --- a/libs/core/package.json +++ b/libs/core/package.json @@ -1,6 +1,6 @@ { "name": "@dynamic-forms/core", - "version": "19.0.0-next.3", + "version": "19.0.0-rc.0", "author": "dynamic-forms", "description": "dynamic-forms - core library", "keywords": [ diff --git a/libs/core/src/lib/dynamic-form-action/dynamic-form-action-definition.ts b/libs/core/src/lib/dynamic-form-action/dynamic-form-action-definition.ts index 8f48b26b8..fac7c2587 100644 --- a/libs/core/src/lib/dynamic-form-action/dynamic-form-action-definition.ts +++ b/libs/core/src/lib/dynamic-form-action/dynamic-form-action-definition.ts @@ -5,6 +5,6 @@ import { DynamicFormActionTemplate } from './dynamic-form-action-template'; export interface DynamicFormActionDefinition