13 Commits

Author SHA1 Message Date
jenkins
3b2ea10fdc [ci skip] Updated packages #2616
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2026-02-03 09:01:03 +00:00
c20754e10a AW-7266 NG0956: The configured tracking expression (track by identity) caused re-creation of the entire collection
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-02-03 09:59:25 +01:00
jenkins
c4b8e9664c [ci skip] Updated packages #2615
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2026-01-30 12:55:46 +00:00
7822015f8c Revert "NG0956 Tracking expression caused re-creation of the DOM structure."
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
This reverts commit 48261c9657.
2026-01-30 13:54:24 +01:00
48261c9657 NG0956 Tracking expression caused re-creation of the DOM structure.
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2026-01-30 13:40:47 +01:00
jenkins
a6bd28ac45 [ci skip] Updated packages #2613
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2026-01-21 11:49:36 +00:00
jenkins
674a0f2a9e [ci skip] Updated packages #2612
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-01-21 11:32:36 +00:00
77800fe0f7 feature/Aw6526Angular21
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-01-21 12:30:47 +01:00
3251ba4022 Angular 20, oa. migrating from Karma to Vitest
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-01-21 11:53:59 +01:00
a758a38a0a Angular 20, oa. migrating from Karma to Vitest
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-01-21 11:32:10 +01:00
3c6a8e28c1 Angular 20, oa. migrating from Karma to Vitest
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2026-01-21 11:25:38 +01:00
b72e309fbe npm error ERESOLVE unable to resolve dependency tree
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2026-01-20 18:01:58 +01:00
d7b978c477 ERESOLVE unable to resolve dependency tree
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2026-01-20 17:53:50 +01:00
57 changed files with 7595 additions and 9995 deletions

View File

@@ -133,39 +133,10 @@
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular/build:unit-test",
"options": { "options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json", "tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js", "browsers": ["chromium"]
"styles": [
"src/styles.css"
],
"scripts": [],
"assets": [
"src/favicon.ico",
"src/assets"
]
}
}
}
},
"farmmaps-lib-app-e2e": {
"root": "e2e/",
"projectType": "application",
"prefix": "",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "farmmaps-lib-app:serve"
},
"configurations": {
"production": {
"devServerTarget": "farmmaps-lib-app:serve:production"
}
} }
} }
} }
@@ -189,11 +160,10 @@
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular/build:unit-test",
"options": { "options": {
"main": "projects/common/src/test.ts",
"tsConfig": "projects/common/tsconfig.spec.json", "tsConfig": "projects/common/tsconfig.spec.json",
"karmaConfig": "projects/common/karma.conf.js" "browsers": ["chromium"]
} }
} }
} }
@@ -217,11 +187,10 @@
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular/build:unit-test",
"options": { "options": {
"main": "projects/common-map/src/test.ts",
"tsConfig": "projects/common-map/tsconfig.spec.json", "tsConfig": "projects/common-map/tsconfig.spec.json",
"karmaConfig": "projects/common-map/karma.conf.js" "browsers": ["chromium"]
} }
} }
} }
@@ -245,11 +214,10 @@
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular/build:unit-test",
"options": { "options": {
"main": "projects/common-map3d/src/test.ts",
"tsConfig": "projects/common-map3d/tsconfig.spec.json", "tsConfig": "projects/common-map3d/tsconfig.spec.json",
"karmaConfig": "projects/common-map3d/karma.conf.js" "browsers": ["chromium"]
} }
} }
} }
@@ -273,11 +241,10 @@
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular/build:unit-test",
"options": { "options": {
"main": "projects/ng-openlayers/src/test.ts",
"tsConfig": "projects/ng-openlayers/tsconfig.spec.json", "tsConfig": "projects/ng-openlayers/tsconfig.spec.json",
"karmaConfig": "projects/ng-openlayers/karma.conf.js" "browsers": ["chromium"]
} }
}, },
"lint": { "lint": {

View File

@@ -1,28 +0,0 @@
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.e2e.json')
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};

View File

@@ -1,23 +0,0 @@
import { AppPage } from './app.po';
import { browser, logging } from 'protractor';
describe('workspace-project App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getTitleText()).toEqual('Welcome to farmmaps-lib-app!');
});
afterEach(async () => {
// Assert that there are no errors emitted from the browser
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
expect(logs).not.toContain(jasmine.objectContaining({
level: logging.Level.SEVERE,
} as logging.Entry));
});
});

View File

@@ -1,11 +0,0 @@
import { browser, by, element } from 'protractor';
export class AppPage {
navigateTo() {
return browser.get(browser.baseUrl) as Promise<any>;
}
getTitleText() {
return element(by.css('app-root h1')).getText() as Promise<string>;
}
}

View File

@@ -1,13 +0,0 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"jasminewd2",
"node"
]
}
}

13627
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,27 +12,27 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular-eslint/eslint-plugin": "20.7.0", "@angular-eslint/eslint-plugin": "20.7.0",
"@angular/animations": "20.3.16", "@angular/animations": "21.1.0",
"@angular/common": "20.3.16", "@angular/common": "21.1.0",
"@angular/compiler": "20.3.16", "@angular/compiler": "21.1.0",
"@angular/core": "20.3.16", "@angular/core": "21.1.0",
"@angular/forms": "20.3.16", "@angular/forms": "21.1.0",
"@angular/platform-browser": "20.3.16", "@angular/platform-browser": "21.1.0",
"@angular/platform-browser-dynamic": "20.3.16", "@angular/platform-browser-dynamic": "21.1.0",
"@angular/router": "20.3.16", "@angular/router": "21.1.0",
"@farmmaps/common": "file:dist/common", "@farmmaps/common": "file:dist/common",
"@farmmaps/common-map": "file:dist/common-map", "@farmmaps/common-map": "file:dist/common-map",
"@farmmaps/common-map3d": "file:dist/common-map3d", "@farmmaps/common-map3d": "file:dist/common-map3d",
"@farmmaps/ng-openlayers": "file:dist/ng-openlayers", "@farmmaps/ng-openlayers": "file:dist/ng-openlayers",
"@microsoft/signalr": "^3.1.16", "@microsoft/signalr": "10.0.0",
"@ng-bootstrap/ng-bootstrap": "^19.0.0", "@ng-bootstrap/ng-bootstrap": "20.0.0",
"@ngrx/effects": "20.1.0", "@ngrx/effects": "21.0.1",
"@ngrx/router-store": "20.1.0", "@ngrx/router-store": "21.0.1",
"@ngrx/store": "20.1.0", "@ngrx/store": "21.0.1",
"@popperjs/core": "^2.11.8", "@popperjs/core": "2.11.8",
"angular-oauth2-oidc": "^17.0.2", "angular-oauth2-oidc": "20.0.2",
"assert": "^2.0.0", "assert": "2.1.0",
"bootstrap": "^5.3.3", "bootstrap": "5.3.8",
"browserify-zlib": "^0.2.0", "browserify-zlib": "^0.2.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"cesium": "^1.97.0", "cesium": "^1.97.0",
@@ -40,7 +40,7 @@
"https-browserify": "^1.0.0", "https-browserify": "^1.0.0",
"moment": "^2.29.4", "moment": "^2.29.4",
"ngrx-store-localstorage": "20.1.0", "ngrx-store-localstorage": "20.1.0",
"ngx-avatars": "1.10.0", "ngx-avatars": "1.10.1",
"ngx-clipboard": "^16.0.0", "ngx-clipboard": "^16.0.0",
"ngx-image-cropper": "^7.0.0", "ngx-image-cropper": "^7.0.0",
"ngx-uploadx": "7.0.1", "ngx-uploadx": "7.0.1",
@@ -61,37 +61,38 @@
"@rollup/rollup-linux-x64-gnu": "^4.21.2" "@rollup/rollup-linux-x64-gnu": "^4.21.2"
}, },
"devDependencies": { "devDependencies": {
"@angular-builders/custom-webpack": "20.0.0", "@angular-builders/custom-webpack": "21.0.3",
"@angular-devkit/build-angular": "20.3.14", "@angular-devkit/build-angular": "21.1.0",
"@angular/cli": "20.3.14", "@angular/build": "21.1.0",
"@angular/compiler-cli": "20.3.16", "@angular/cli": "21.1.0",
"@angular/language-service": "20.3.16", "@angular/compiler-cli": "21.1.0",
"@angular/localize": "20.3.16", "@angular/language-service": "21.1.0",
"@angular/localize": "21.1.0",
"@types/arcgis-rest-api": "^10.4.5", "@types/arcgis-rest-api": "^10.4.5",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "^2.0.9",
"@types/node": "^22.5.4", "@types/node": "^22.5.4",
"@typescript-eslint/eslint-plugin": "^6.18.0", "@typescript-eslint/eslint-plugin": "8.53.1",
"@typescript-eslint/eslint-plugin-tslint": "^6.18.0", "@typescript-eslint/parser": "8.53.1",
"@typescript-eslint/parser": "^6.18.0", "@vitest/browser": "4.0.17",
"codelyzer": "^6.0.2", "@vitest/browser-playwright": "^4.0.17",
"eslint": "^8.35.0", "eslint": "9.39.2",
"eslint-config-prettier": "^8.6.0", "eslint-config-prettier": "10.1.8",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "2.32.0",
"jasmine-core": "^4.3.0", "jsdom": "^27.4.0",
"jasmine-spec-reporter": "^7.0.0", "ng-packagr": "21.1.0",
"karma": "^6.3.20",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0",
"ng-packagr": "^20.3.2",
"protractor": "~7.0.0",
"ts-node": "^8.8.1", "ts-node": "^8.8.1",
"typescript": "~5.8.3" "typescript": "~5.9.3",
"vitest": "4.0.17"
}, },
"overrides": { "overrides": {
"some-library": { "ngrx-store-localstorage": {
"@angular/common": "$@angular/common",
"@angular/core": "$@angular/core"
},
"ngx-avatars": {
"@angular/common": "$@angular/common",
"@angular/core": "$@angular/core"
},
"ngx-uploadx": {
"@angular/common": "$@angular/common", "@angular/common": "$@angular/common",
"@angular/core": "$@angular/core" "@angular/core": "$@angular/core"
} }

View File

@@ -11,11 +11,11 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "^18.2.3", "@angular/core": "20.3.16",
"@ngrx/effects": "^18.0.2", "@ngrx/effects": "20.1.0",
"@ngrx/router-store": "^18.0.2", "@ngrx/router-store": "20.1.0",
"@ngrx/store": "^18.0.2", "@ngrx/store": "20.1.0",
"ngrx-store-localstorage": "^18", "ngrx-store-localstorage": "20.1.0",
"tassign": "^1.0.0" "tassign": "^1.0.0"
} }
}, },
@@ -36,52 +36,64 @@
"extraneous": true "extraneous": true
}, },
"node_modules/@angular/common": { "node_modules/@angular/common": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.16.tgz",
"integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==", "integrity": "sha512-GRAziNlntwdnJy3F+8zCOvDdy7id0gITjDnM6P9+n2lXvtDuBLGJKU3DWBbvxcCjtD6JK/g/rEX5fbCxbUHkQQ==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "18.2.3", "@angular/core": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0" "rxjs": "^6.5.3 || ^7.4.0"
} }
}, },
"node_modules/@angular/core": { "node_modules/@angular/core": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.16.tgz",
"integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==", "integrity": "sha512-KSFPKvOmWWLCJBbEO+CuRUXfecX2FRuO0jNi9c54ptXMOPHlK1lIojUnyXmMNzjdHgRug8ci9qDuftvC2B7MKg==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/compiler": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0", "rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.14.10" "zone.js": "~0.15.0"
},
"peerDependenciesMeta": {
"@angular/compiler": {
"optional": true
},
"zone.js": {
"optional": true
}
} }
}, },
"node_modules/@angular/platform-browser": { "node_modules/@angular/platform-browser": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.16.tgz",
"integrity": "sha512-M2ob4zN7tAcL2mx7U6KnZNqNFPFl9MlPBE0FrjQjIzAjU0wSYPIJXmaPu9aMUp9niyo+He5iX98I+URi2Yc99g==", "integrity": "sha512-YsrLS6vyS77i4pVHg4gdSBW74qvzHjpQRTVQ5Lv/OxIjJdYYYkMmjNalCNgy1ZuyY6CaLIB11ccxhrNnxfKGOQ==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/animations": "18.2.3", "@angular/animations": "20.3.16",
"@angular/common": "18.2.3", "@angular/common": "20.3.16",
"@angular/core": "18.2.3" "@angular/core": "20.3.16"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"@angular/animations": { "@angular/animations": {
@@ -90,76 +102,67 @@
} }
}, },
"node_modules/@angular/router": { "node_modules/@angular/router": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.16.tgz",
"integrity": "sha512-fvD9eSDIiIbeYoUokoWkXzu7/ZaxlzKPUHFqX1JuKuH5ciQDeT/d7lp4mj31Bxammhohzi3+z12THJYsCkj/iQ==", "integrity": "sha512-e1LiQFZaajKqc00cY5FboIrWJZSMnZ64GDp5R0UejritYrqorQQQNOqP1W85BMuY2owibMmxVfX+dJg/Mc8PuQ==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "18.2.3", "@angular/common": "20.3.16",
"@angular/core": "18.2.3", "@angular/core": "20.3.16",
"@angular/platform-browser": "18.2.3", "@angular/platform-browser": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0" "rxjs": "^6.5.3 || ^7.4.0"
} }
}, },
"node_modules/@ngrx/effects": { "node_modules/@ngrx/effects": {
"version": "18.0.2", "version": "20.1.0",
"resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-18.0.2.tgz", "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-20.1.0.tgz",
"integrity": "sha512-YojXcOD9Lsq4kl2HCjENccyUM/mOlgBdtddsg9j/ojzSUgu3ZuBVKLN3atrL2TJYkbMX1MN0RzafSkL3TPGFIA==", "integrity": "sha512-wkIu0QnTarBd1zUswk643H5SILO9Be1OeswMe7g4tXlkNLFRPkyu0BUzXT80PsUPP5p0VrdFz3akrn3HHjjTjA==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@ngrx/operators": "18.0.1",
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "^18.0.0", "@angular/core": "^20.0.0",
"@ngrx/store": "18.0.2", "@ngrx/store": "20.1.0",
"rxjs": "^6.5.3 || ^7.5.0" "rxjs": "^6.5.3 || ^7.5.0"
} }
}, },
"node_modules/@ngrx/operators": {
"version": "18.0.1",
"resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-18.0.1.tgz",
"integrity": "sha512-M+QMrHNKgcuiLaRGZxJ4aQi5/OCRfKC4+T/63dsHyLFZ53/FFpF6a/ytSO1Q+tzOplZ5o99S+i8FVaZqNQ3LmQ==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@ngrx/router-store": { "node_modules/@ngrx/router-store": {
"version": "18.0.2", "version": "20.1.0",
"resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-18.0.2.tgz", "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-20.1.0.tgz",
"integrity": "sha512-jUrQ/uJJ53x8O1XbN2YxH2GpRREZlwS5gRxlCoc4fWL4Us/uS1/K6+QfRmKBPtpTKBIixqsOb+dIUV5iwBrivA==", "integrity": "sha512-XlpQsgmEc1E9Ogiv6QbJ8g8JzjrJOlr7JX9FngHIDLyXQFCMn5wcXsqhjiBjG9JgJLwlzV+v14i7EM/nqwQCGA==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "^18.0.0", "@angular/common": "^20.0.0",
"@angular/core": "^18.0.0", "@angular/core": "^20.0.0",
"@angular/router": "^18.0.0", "@angular/router": "^20.0.0",
"@ngrx/store": "18.0.2", "@ngrx/store": "20.1.0",
"rxjs": "^6.5.3 || ^7.5.0" "rxjs": "^6.5.3 || ^7.5.0"
} }
}, },
"node_modules/@ngrx/store": { "node_modules/@ngrx/store": {
"version": "18.0.2", "version": "20.1.0",
"resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.0.2.tgz", "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-20.1.0.tgz",
"integrity": "sha512-ajwv0+njsO4vzArp9esnFvs1wyUb1U1W8E8LSCKrcW2hWWo9o1Pezj+JRsdQwatxHfrrPFuTDyajsl6GQM/JSA==", "integrity": "sha512-o8j3CGAGedm+BIb+QDhNXrVaU//n9uF0wH0HZWtXHmW1mjRBaQiUA+ZPMUkDwAeN8KuOcoIEC+2QUXxXGVI7ow==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "^18.0.0", "@angular/core": "^20.0.0",
"rxjs": "^6.5.3 || ^7.5.0" "rxjs": "^6.5.3 || ^7.5.0"
} }
}, },
@@ -173,18 +176,19 @@
} }
}, },
"node_modules/ngrx-store-localstorage": { "node_modules/ngrx-store-localstorage": {
"version": "18.0.0", "version": "20.1.0",
"resolved": "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-18.0.0.tgz", "resolved": "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-20.1.0.tgz",
"integrity": "sha512-WoDePvMWiWF9LQHe+dTqbpm8lxoKCPoIvA0/1enIPTmdLQsOpdDKhMSD5YgwuqDusNfEik3QslProTFGyXZwtw==", "integrity": "sha512-/5+i5qTxZdE8Q5qdSmj7+9JvriAnHwW7RsXzh1rrQ/UHA9vf12q6mJ6wYTTehUO4Qcl2t/K5MRkooN2eG2ZEvw==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"deepmerge": "^4.2.2", "deepmerge": "^4.2.2",
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "^18.0.1", "@angular/common": ">=20.0.0",
"@angular/core": "^18.0.1", "@angular/core": ">=20.0.0",
"@ngrx/store": "^18.0.0" "@ngrx/store": ">=20.0.0"
} }
}, },
"node_modules/rxjs": { "node_modules/rxjs": {
@@ -206,12 +210,6 @@
"version": "2.7.0", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
"integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="
},
"node_modules/zone.js": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
"integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
"peer": true
} }
} }
} }

View File

@@ -8,11 +8,16 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "20.3.16", "@angular/core": "21.1.0",
"ngrx-store-localstorage": "20.1.0", "ngrx-store-localstorage": "20.1.0",
"@ngrx/effects": "20.1.0", "@ngrx/effects": "21.0.1",
"@ngrx/router-store": "20.1.0", "@ngrx/router-store": "21.0.1",
"@ngrx/store": "20.1.0", "@ngrx/store": "21.0.1",
"tassign": "^1.0.0" "tassign": "^1.0.0"
},
"overrides": {
"ngrx-store-localstorage": {
"@angular/core": "$@angular/core"
}
} }
} }

View File

@@ -2,7 +2,7 @@
@if (itemLayers.length > 0) { @if (itemLayers.length > 0) {
<div class="layerlist"> <div class="layerlist">
<div class="list-group"> <div class="list-group">
@for (itemLayer of itemLayers; track itemLayer) { @for (itemLayer of itemLayers; track itemLayer.item.code) {
<div class="list-group-item list-group-item-action p-2 text-truncate" [ngClass]="{'active' : selectedLayer==itemLayer}"> <div class="list-group-item list-group-item-action p-2 text-truncate" [ngClass]="{'active' : selectedLayer==itemLayer}">
<div (click)="handleSelectLayer($event,itemLayer)" [title]="itemLayer.item.name">{{itemLayer.item.name}}</div> <div (click)="handleSelectLayer($event,itemLayer)" [title]="itemLayer.item.name">{{itemLayer.item.name}}</div>
@if (selectedLayer==itemLayer && !baseLayers) { @if (selectedLayer==itemLayer && !baseLayers) {

View File

@@ -7,7 +7,7 @@
<div class="lonlat pb-2 "><span class="font-weight-bold">{{lonlat$}}</span><i class="ms-2 fal fa-copy" (click)="copyToClipboard()"></i> </div> <div class="lonlat pb-2 "><span class="font-weight-bold">{{lonlat$}}</span><i class="ms-2 fal fa-copy" (click)="copyToClipboard()"></i> </div>
@if (layers.length>0 ) { @if (layers.length>0 ) {
<ul class="value-list p-0 mb-0"> <ul class="value-list p-0 mb-0">
@for (layerValue of layers; track layerValue) { @for (layerValue of layers; track $index) {
<li class="border-top pt-1 pb-1 value"> <li class="border-top pt-1 pb-1 value">
<div>{{layerValue.layerName}}</div> <div>{{layerValue.layerName}}</div>
<div>{{layerValue.date|date}}</div> <div>{{layerValue.date|date}}</div>

View File

@@ -7,7 +7,7 @@
@if (features; as features) { @if (features; as features) {
<div> <div>
<div class="cropfields"> <div class="cropfields">
@for (feature of features; track feature) { @for (feature of features; track $index) {
<div class="row m-0 ps-3 pe-3" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>

View File

@@ -5,7 +5,7 @@
@if (features; as features) { @if (features; as features) {
<div> <div>
<div class="farms"> <div class="farms">
@for (feature of features; track feature) { @for (feature of features; track $index) {
<div class="row m-0 ps-3 pe-3"[ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3"[ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>

View File

@@ -7,7 +7,7 @@
@if (features; as features) { @if (features; as features) {
<div> <div>
<div class="cropfields"> <div class="cropfields">
@for (feature of features; track feature) { @for (feature of features; track $index) {
<div class="row m-0 ps-3 pe-3" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>

View File

@@ -1,7 +1,7 @@
@if (features; as features) { @if (features; as features) {
<div> <div>
<fm-back-button></fm-back-button> <fm-back-button></fm-back-button>
@for (feature of features; track feature) { @for (feature of features; track $index) {
<div class="row m-0 ps-3 pe-3" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 ps-3 pe-3" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>

View File

@@ -1,6 +1,6 @@
@if (items; as items) { @if (items; as items) {
<div class="widget-container pt-0"> <div class="widget-container pt-0">
@for (item of items; track item) { @for (item of items; track item.code) {
<div class="widget" (click)="handleItemClick(item)"> <div class="widget" (click)="handleItemClick(item)">
<div class="content"> <div class="content">
<fm-map-item-list-item-container [item]="item" class="item-container"></fm-map-item-list-item-container> <fm-map-item-list-item-container [item]="item" class="item-container"></fm-map-item-list-item-container>

View File

@@ -1,6 +1,6 @@
@if (widgets; as widgets) { @if (widgets; as widgets) {
<div class="widget-container pt-0"> <div class="widget-container pt-0">
@for (widget of widgets; track widget) { @for (widget of widgets; track widget.item.code) {
<div class="widget"> <div class="widget">
<div class="content"> <div class="content">
<ng-template #widgetTemplate></ng-template> <ng-template #widgetTemplate></ng-template>

View File

@@ -25,7 +25,7 @@
} }
</td> </td>
</tr> </tr>
@for (entry of layer.renderer.colorMap.entries; track entry; let i = $index) { @for (entry of layer.renderer.colorMap.entries; track $index; let i = $index) {
<tr> <tr>
<td class="legend-items"><span [style.background-color]="getAlphaHex(entry.color)" [style.border-color]="getHex(entry.color)"class="color"></span></td> <td class="legend-items"><span [style.background-color]="getAlphaHex(entry.color)" [style.border-color]="getHex(entry.color)"class="color"></span></td>
<td class="legend-items-text">@if (!entry.label) { <td class="legend-items-text">@if (!entry.label) {

View File

@@ -16,7 +16,7 @@
@if (layers.length>1) { @if (layers.length>1) {
<div> <div>
<select (change)="onLayerChanged($event.target.value)"> <select (change)="onLayerChanged($event.target.value)">
@for (l of layers; track l) { @for (l of layers; track l.index) {
<option [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option> <option [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
} }
</select> </select>

View File

@@ -16,7 +16,7 @@
@if (layers.length>1) { @if (layers.length>1) {
<div> <div>
<select (change)="onLayerChanged($event.target.value)"> <select (change)="onLayerChanged($event.target.value)">
@for (l of layers; track l) { @for (l of layers; track l.index) {
<option [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option> <option [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
} }
</select> </select>

View File

@@ -36,7 +36,7 @@
@if (layers.length>1) { @if (layers.length>1) {
<div> <div>
<select (change)="onLayerChanged($event.target.value)"> <select (change)="onLayerChanged($event.target.value)">
@for (l of layers; track l) { @for (l of layers; track l.index) {
<option [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option> <option [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
} }
</select> </select>

View File

@@ -1,18 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'core-js/es7/reflect';
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(), {
teardown: { destroyAfterEach: false }
}
);

View File

@@ -12,10 +12,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -31,7 +27,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -12,10 +12,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -31,7 +27,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -3,12 +3,10 @@
"compilerOptions": { "compilerOptions": {
"outDir": "../../out-tsc/spec", "outDir": "../../out-tsc/spec",
"types": [ "types": [
"jasmine",
"node" "node"
] ]
}, },
"files": [ "files": [
"src/test.ts"
], ],
"include": [ "include": [
"**/*.spec.ts", "**/*.spec.ts",

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/common-map3d'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

View File

@@ -11,8 +11,8 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "^18.2.3", "@angular/common": "20.3.16",
"@angular/core": "^18.2.3", "@angular/core": "20.3.16",
"cesium": "^1.97.0", "cesium": "^1.97.0",
"ol-cesium": ">=2.13.0" "ol-cesium": ">=2.13.0"
} }
@@ -34,35 +34,46 @@
"extraneous": true "extraneous": true
}, },
"node_modules/@angular/common": { "node_modules/@angular/common": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.16.tgz",
"integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==", "integrity": "sha512-GRAziNlntwdnJy3F+8zCOvDdy7id0gITjDnM6P9+n2lXvtDuBLGJKU3DWBbvxcCjtD6JK/g/rEX5fbCxbUHkQQ==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "18.2.3", "@angular/core": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0" "rxjs": "^6.5.3 || ^7.4.0"
} }
}, },
"node_modules/@angular/core": { "node_modules/@angular/core": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.16.tgz",
"integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==", "integrity": "sha512-KSFPKvOmWWLCJBbEO+CuRUXfecX2FRuO0jNi9c54ptXMOPHlK1lIojUnyXmMNzjdHgRug8ci9qDuftvC2B7MKg==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/compiler": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0", "rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.14.10" "zone.js": "~0.15.0"
},
"peerDependenciesMeta": {
"@angular/compiler": {
"optional": true
},
"zone.js": {
"optional": true
}
} }
}, },
"node_modules/@cesium/engine": { "node_modules/@cesium/engine": {
@@ -498,9 +509,10 @@
} }
}, },
"node_modules/rxjs": { "node_modules/rxjs": {
"version": "7.8.1", "version": "7.8.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
"license": "Apache-2.0",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.1.0" "tslib": "^2.1.0"
@@ -549,12 +561,6 @@
"integrity": "sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==", "integrity": "sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==",
"peer": true "peer": true
}, },
"node_modules/zone.js": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
"integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
"peer": true
},
"node_modules/zstddec": { "node_modules/zstddec": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",

View File

@@ -8,8 +8,8 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "20.3.16", "@angular/common": "21.1.0",
"@angular/core": "20.3.16", "@angular/core": "21.1.0",
"cesium": "^1.97.0", "cesium": "^1.97.0",
"ol-cesium": ">=2.13.0" "ol-cesium": ">=2.13.0"
} }

View File

@@ -1,17 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(), {
teardown: { destroyAfterEach: false }
}
);

View File

@@ -13,10 +13,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -32,7 +28,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -13,10 +13,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -32,7 +28,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -3,12 +3,10 @@
"compilerOptions": { "compilerOptions": {
"outDir": "../../out-tsc/spec", "outDir": "../../out-tsc/spec",
"types": [ "types": [
"jasmine",
"node" "node"
] ]
}, },
"files": [ "files": [
"src/test.ts"
], ],
"include": [ "include": [
"**/*.spec.ts", "**/*.spec.ts",

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/common'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

File diff suppressed because it is too large Load Diff

View File

@@ -5,20 +5,20 @@
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"peerDependencies": { "peerDependencies": {
"@ng-bootstrap/ng-bootstrap": "^19.0.0", "@ng-bootstrap/ng-bootstrap": "^20.0.0",
"@angular/common": "20.3.16", "@angular/common": "21.1.0",
"@angular/core": "20.3.16", "@angular/core": "21.1.0",
"@angular/forms": "20.3.16", "@angular/forms": "21.1.0",
"@ngrx/effects": "20.1.0", "@ngrx/effects": "21.0.1",
"@ngrx/router-store": "20.1.0", "@ngrx/router-store": "21.0.1",
"@ngrx/store": "20.1.0", "@ngrx/store": "21.0.1",
"tassign": "^1.0.0", "tassign": "^1.0.0",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"@microsoft/signalr": "^3.1.16", "@microsoft/signalr": "10.0.0",
"ngx-uploadx": "7.0.1", "ngx-uploadx": "7.0.1",
"angular-oauth2-oidc": "^17.0.2", "angular-oauth2-oidc": "20.0.2",
"moment": "^2.29.4", "moment": "^2.29.4",
"ngx-avatars": "1.10.0", "ngx-avatars": "1.10.1",
"ngx-image-cropper": "^7.0.0", "ngx-image-cropper": "^7.0.0",
"ngx-clipboard": "^16.0.0" "ngx-clipboard": "^16.0.0"
} }

View File

@@ -11,7 +11,7 @@
<div class="gradient-list" [ngClass]="{'visible':listVisible}"> <div class="gradient-list" [ngClass]="{'visible':listVisible}">
@if (gradientItems) { @if (gradientItems) {
<ul> <ul>
@for (item of gradientItems; track item) { @for (item of gradientItems; track item.code) {
<li (click)="handleSelect(item)" [ngClass]="{'bg-primary':isSelected(item),'text-white':isSelected(item)} "> <li (click)="handleSelect(item)" [ngClass]="{'bg-primary':isSelected(item),'text-white':isSelected(item)} ">
<div>{{item?.name}}</div> <div>{{item?.name}}</div>
<div><fm-gradient [gradientItem]="item"></fm-gradient></div> <div><fm-gradient [gradientItem]="item"></fm-gradient></div>

View File

@@ -13,7 +13,7 @@
<div [ngClass]="{'minimized': uploadService.isMinimized }"> <div [ngClass]="{'minimized': uploadService.isMinimized }">
<div class="card-block p-3"> <div class="card-block p-3">
<ul class="list-unstyled"> <ul class="list-unstyled">
@for (file of uploadService.files; track file) { @for (file of uploadService.files; track $index) {
<li class="upload-file busy" [ngClass]="{'done': file.success,'busy':file.success == false,'error': file.error }"> <li class="upload-file busy" [ngClass]="{'done': file.success,'busy':file.success == false,'error': file.error }">
@if (file.success == false) { @if (file.success == false) {
<div><span class="file-name" [attr.title]="file?.fileName">{{file.fileName}}</span><span class="fal fa-times" title="Cancel" (click)="uploadService.cancelFile(file)"></span><span class="fal fa-check"></span></div> <div><span class="file-name" [attr.title]="file?.fileName">{{file.fileName}}</span><span class="fal fa-times" title="Cancel" (click)="uploadService.cancelFile(file)"></span><span class="fal fa-check"></span></div>

View File

@@ -1,5 +1,5 @@
<div class="tags"> <div class="tags">
@for (tag of tags; track tag) { @for (tag of tags; track $index) {
<span class="tag rounded bg-primary text-white"><span>{{tag}}</span> <i <span class="tag rounded bg-primary text-white"><span>{{tag}}</span> <i
(click)="handleDeleteTag(tag)" class="fal fa-times" aria-hidden="true"></i></span> (click)="handleDeleteTag(tag)" class="fal fa-times" aria-hidden="true"></i></span>
}<input }<input

View File

@@ -1,18 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'core-js/es7/reflect';
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(), {
teardown: { destroyAfterEach: false }
}
);

View File

@@ -12,10 +12,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -31,7 +27,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -12,10 +12,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -31,7 +27,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -3,12 +3,10 @@
"compilerOptions": { "compilerOptions": {
"outDir": "../../out-tsc/spec", "outDir": "../../out-tsc/spec",
"types": [ "types": [
"jasmine",
"node" "node"
] ]
}, },
"files": [ "files": [
"src/test.ts"
], ],
"include": [ "include": [
"**/*.spec.ts", "**/*.spec.ts",

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/ng-openlayers'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,54 +1,63 @@
{ {
"name": "ng-openlayers", "name": "@farmmaps/ng-openlayers",
"version": "18.0.0", "version": "18.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ng-openlayers", "name": "@farmmaps/ng-openlayers",
"version": "18.0.0", "version": "18.0.0",
"license": "MPL-2.0", "license": "MPL-2.0",
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "^18.2.3", "@angular/common": "20.3.16",
"@angular/core": "^18.2.3", "@angular/core": "20.3.16",
"ol": "^8.2.0" "ol": "^8.2.0"
} }
}, },
"node_modules/@angular/common": { "node_modules/@angular/common": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.16.tgz",
"integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==", "integrity": "sha512-GRAziNlntwdnJy3F+8zCOvDdy7id0gITjDnM6P9+n2lXvtDuBLGJKU3DWBbvxcCjtD6JK/g/rEX5fbCxbUHkQQ==",
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "18.2.3", "@angular/core": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0" "rxjs": "^6.5.3 || ^7.4.0"
} }
}, },
"node_modules/@angular/core": { "node_modules/@angular/core": {
"version": "18.2.3", "version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz", "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.16.tgz",
"integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==", "integrity": "sha512-KSFPKvOmWWLCJBbEO+CuRUXfecX2FRuO0jNi9c54ptXMOPHlK1lIojUnyXmMNzjdHgRug8ci9qDuftvC2B7MKg==",
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"engines": { "engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/compiler": "20.3.16",
"rxjs": "^6.5.3 || ^7.4.0", "rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.14.10" "zone.js": "~0.15.0"
},
"peerDependenciesMeta": {
"@angular/compiler": {
"optional": true
},
"zone.js": {
"optional": true
}
} }
}, },
"node_modules/@petamoriken/float16": { "node_modules/@petamoriken/float16": {
@@ -246,9 +255,9 @@
} }
}, },
"node_modules/rxjs": { "node_modules/rxjs": {
"version": "7.8.1", "version": "7.8.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
"license": "Apache-2.0", "license": "Apache-2.0",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
@@ -274,13 +283,6 @@
"license": "CC0-1.0", "license": "CC0-1.0",
"peer": true "peer": true
}, },
"node_modules/zone.js": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
"integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
"license": "MIT",
"peer": true
},
"node_modules/zstddec": { "node_modules/zstddec": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",

View File

@@ -31,8 +31,8 @@
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "20.3.16", "@angular/common": "21.1.0",
"@angular/core": "20.3.16", "@angular/core": "21.1.0",
"ol": "^8.2.0" "ol": "^8.2.0"
} }
} }

View File

@@ -18,11 +18,10 @@
} }
}, },
"test": { "test": {
"executor": "@angular-devkit/build-angular:karma", "executor": "@angular/build:unit-test",
"options": { "options": {
"main": "libs/ng-openlayers/src/test.ts",
"tsConfig": "libs/ng-openlayers/tsconfig.spec.json", "tsConfig": "libs/ng-openlayers/tsconfig.spec.json",
"karmaConfig": "libs/ng-openlayers/karma.conf.js" "browsers": ["chromium"]
} }
}, },
"lint": { "lint": {

View File

@@ -1,12 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'core-js/es7/reflect';
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
teardown: { destroyAfterEach: false },
});

View File

@@ -12,10 +12,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -31,7 +27,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -12,10 +12,6 @@
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true, "esModuleInterop": true,
"types": [], "types": [],
"lib": [
"dom",
"es2018"
],
"paths": { "paths": {
"@angular/*": [ "@angular/*": [
"node_modules/@angular/*" "node_modules/@angular/*"
@@ -31,7 +27,6 @@
"compilationMode": "partial" "compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts",
"**/*.spec.ts" "**/*.spec.ts"
] ]
} }

View File

@@ -3,12 +3,10 @@
"compilerOptions": { "compilerOptions": {
"outDir": "../../dist/out-tsc", "outDir": "../../dist/out-tsc",
"types": [ "types": [
"jasmine",
"node" "node"
] ]
}, },
"files": [ "files": [
"src/test.ts"
], ],
"include": [ "include": [
"**/*.spec.ts", "**/*.spec.ts",

View File

@@ -1,7 +0,0 @@
{
"extends": [
"./tslint.json",
"tslint-config-prettier",
"tslint-plugin-prettier"
]
}

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage/farmmaps-lib-app'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

View File

@@ -1,6 +1,6 @@
import * as Cesium from 'cesium'; import * as Cesium from 'cesium';
import { enableProdMode } from '@angular/core'; import { enableProdMode, provideZoneChangeDetection } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module'; import { AppModule } from './app/app.module';
@@ -15,5 +15,5 @@ if (environment.production) {
window['CESIUM_BASE_URL'] = '/assets/cesium/'; window['CESIUM_BASE_URL'] = '/assets/cesium/';
window['Cesium'] = Cesium; window['Cesium'] = Cesium;
platformBrowserDynamic().bootstrapModule(AppModule) platformBrowserDynamic().bootstrapModule(AppModule, { applicationProviders: [provideZoneChangeDetection()], })
.catch(err => console.error(err)); .catch(err => console.error(err));

View File

@@ -1,16 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(), {
teardown: { destroyAfterEach: false }
}
);

View File

@@ -3,12 +3,10 @@
"compilerOptions": { "compilerOptions": {
"outDir": "../out-tsc/spec", "outDir": "../out-tsc/spec",
"types": [ "types": [
"jasmine",
"node" "node"
] ]
}, },
"files": [ "files": [
"test.ts",
"polyfills.ts" "polyfills.ts"
], ],
"include": [ "include": [

View File

@@ -1,17 +0,0 @@
{
"extends": "../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"app",
"camelCase"
],
"component-selector": [
true,
"element",
"app",
"kebab-case"
]
}
}

View File

@@ -16,10 +16,6 @@
"typeRoots": [ "typeRoots": [
"node_modules/@types" "node_modules/@types"
], ],
"lib": [
"es2018",
"dom"
],
"paths": { "paths": {
"ng-openlayers": [ "ng-openlayers": [
"dist/ng-openlayers" "dist/ng-openlayers"