diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 509890e..d21e07f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,6 @@ jobs: - name: install run: npm i - name: build - run: npm run nx -- affected:build --base=origin/main --head=HEAD + run: npm run build:lib - name: test - run: npm run nx -- affected:test --base=origin/main --head=HEAD + run: npm run test:lib diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..950efba --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,55 @@ +name: Deploy Demo App + +on: + push: + branches: ["main"] + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [ 18.x ] + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Clean Install + run: npm ci + + - name: Build + run: npm run build-demo + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: './dist/packages/ngx-fast-icon-demo/browser' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.prettierignore b/.prettierignore index 85f8ece..1d6e78b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,4 +3,5 @@ /dist /coverage -/.nx/cache \ No newline at end of file +/.nx/cache +.angular diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 64553b1..d3f39ca 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,6 +3,7 @@ "nrwl.angular-console", "esbenp.prettier-vscode", "firsttris.vscode-jest-runner", - "dbaeumer.vscode-eslint" + "dbaeumer.vscode-eslint", + "ms-playwright.playwright" ] } diff --git a/nx.json b/nx.json index ff2d403..6a233d6 100644 --- a/nx.json +++ b/nx.json @@ -16,6 +16,19 @@ }, "@nrwl/angular:component": { "style": "scss" + }, + "@nx/angular:application": { + "style": "scss", + "linter": "eslint", + "unitTestRunner": "jest", + "e2eTestRunner": "playwright" + }, + "@nx/angular:library": { + "linter": "eslint", + "unitTestRunner": "jest" + }, + "@nx/angular:component": { + "style": "scss" } }, "defaultProject": "ngx-fast-lib", diff --git a/package-lock.json b/package-lock.json index 13901bd..92eb2e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,14 +28,17 @@ "@fortawesome/angular-fontawesome": "^0.14.0", "@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/free-solid-svg-icons": "^6.4.0", - "@ionic/angular": "^7.0.7", - "angular-svg-icon": "^16.0.0", + "@ionic/angular": "^7.7.0", + "angular-svg-icon": "^17.0.0", + "express": "~4.18.2", "rxjs": "^7.8.1", - "tslib": "^2.0.0", + "tslib": "^2.3.0", "zone.js": "0.14.2" }, "devDependencies": { "@angular-devkit/build-angular": "17.0.2", + "@angular-devkit/core": "17.0.2", + "@angular-devkit/schematics": "17.0.2", "@angular-eslint/eslint-plugin": "17.0.1", "@angular-eslint/eslint-plugin-template": "17.0.1", "@angular-eslint/template-parser": "17.0.1", @@ -48,11 +51,18 @@ "@nx/devkit": "17.1.3", "@nx/eslint": "17.1.3", "@nx/jest": "17.1.3", + "@nx/js": "17.1.3", + "@nx/playwright": "17.1.3", "@nx/workspace": "17.1.3", + "@playwright/test": "^1.36.0", "@push-based/user-flow": "^0.19.2", + "@schematics/angular": "17.0.2", + "@swc-node/register": "~1.6.7", + "@swc/core": "~1.3.85", "@types/compression": "^1.7.2", + "@types/express": "4.17.14", "@types/jest": "29.4.4", - "@types/node": "^16.11.7", + "@types/node": "^16.18.79", "@typescript-eslint/eslint-plugin": "6.12.0", "@typescript-eslint/parser": "6.12.0", "compression": "^1.7.4", @@ -61,14 +71,17 @@ "eslint": "8.46.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-cypress": "2.13.4", + "eslint-plugin-playwright": "^0.15.3", "jest": "^29.5.0", "jest-environment-jsdom": "29.5.0", "jest-preset-angular": "13.1.4", + "jsonc-eslint-parser": "^2.1.0", "ng-packagr": "17.0.2", "nx": "17.1.3", "postcss-preset-env": "~7.5.0", "prettier": "2.6.2", "ts-jest": "29.1.0", + "ts-node": "10.9.1", "typescript": "5.2.2" }, "engines": { @@ -119,45 +132,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/architect/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@angular-devkit/build-angular": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.2.tgz", @@ -281,33 +255,6 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, "node_modules/@angular-devkit/build-angular/node_modules/agent-base": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", @@ -412,21 +359,20 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.10.tgz", - "integrity": "sha512-eo7suLDjyu5bSlEr4TluYkFm4v2PVLSAPgnau8XHHlN5Yg4P/BZ00ve7LA7C9S1gzRSCrxQhK5ki4rnoFTo5zg==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", + "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", "dev": true, - "peer": true, "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", + "picomatch": "3.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": "^16.14.0 || >=18.10.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -439,6 +385,18 @@ } } }, + "node_modules/@angular-devkit/core/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@angular-devkit/schematics": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.2.tgz", @@ -457,45 +415,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@angular-eslint/bundled-angular-compiler": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.0.1.tgz", @@ -943,33 +862,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, "node_modules/@angular/cli/node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -987,18 +879,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@angular/cli/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@angular/common": { "version": "17.0.4", "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.4.tgz", @@ -4039,11 +3919,11 @@ } }, "node_modules/@ionic/angular": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.0.9.tgz", - "integrity": "sha512-e58ZbWIEWz2PNi82HzEsBNjVZjHmDfoCZdabszpY3T+CbJfbVd16iLATfRS6uWsrxhn77xpVXPpjVV9zSZDxsw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.7.0.tgz", + "integrity": "sha512-jEPgg8J1ZX5mBiz80LUOmAOtMOZuVFE5ZVNxSuMzTFdD6j4rSFowuOmci4DZoewyveQgPx5h4Kg+rLuQrxTYow==", "dependencies": { - "@ionic/core": "7.0.9", + "@ionic/core": "7.7.0", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -4057,12 +3937,12 @@ } }, "node_modules/@ionic/core": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.0.9.tgz", - "integrity": "sha512-HcDtDUcjYCwQKrPpOOI+FWuMHi0DYbDJCww9qDTW52B6LLXktoPCcCxNI8oiERjabXQNLB38r9yQNDGyrs913w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.7.0.tgz", + "integrity": "sha512-ewbvX8u4+FNRBAw1nqBuCy4dI8OLTxoqZgm4qRs4zbrNLJInwTpYjCPzYueN0KE9ufP0n9HhS23lfcrQzJC7Hg==", "dependencies": { - "@stencil/core": "^3.2.2", - "ionicons": "^7.1.0", + "@stencil/core": "^4.12.0", + "ionicons": "^7.2.2", "tslib": "^2.1.0" } }, @@ -6972,6 +6852,25 @@ "node": ">= 10" } }, + "node_modules/@nx/playwright": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/playwright/-/playwright-17.1.3.tgz", + "integrity": "sha512-1vgTByL3L4QdWBLHruZ7Dgn8DBu7R5KqlWRis09v0buo+D4pPYJ/5xoT1eCAU99ydI+pRlPF+bv7EmunEgoP7w==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.1.3", + "@nx/eslint": "17.1.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@playwright/test": "^1.36.0" + }, + "peerDependenciesMeta": { + "@playwright/test": { + "optional": true + } + } + }, "node_modules/@nx/web": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/@nx/web/-/web-17.1.3.tgz", @@ -7576,6 +7475,21 @@ "node": ">=14" } }, + "node_modules/@playwright/test": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", + "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "dev": true, + "dependencies": { + "playwright": "1.41.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@puppeteer/browsers": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", @@ -7999,45 +7913,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@sentry/core": { "version": "6.19.7", "dev": true, @@ -8229,17 +8104,276 @@ "dev": true }, "node_modules/@stencil/core": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-3.3.0.tgz", - "integrity": "sha512-+3hqJ8RmUvxz8FgvMP9lxYJdjb4EnZrkdo6ln5fUqGju62ORS5/Ch9m6OAIjlEn6CbDb5Uf1OdeMjO87DJwIAA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.12.0.tgz", + "integrity": "sha512-qAQcfNmp2sdxAh1DlyUhHfDmIUS7mhI+5LAhPphg74zK9sKgFL5vpLzgjs0wohpjlmI4msgJFYiRB8lxVPqjPg==", "bin": { "stencil": "bin/stencil" }, "engines": { - "node": ">=14.10.0", - "npm": ">=6.0.0" + "node": ">=16.0.0", + "npm": ">=7.10.0" + } + }, + "node_modules/@swc-node/core": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.12.0.tgz", + "integrity": "sha512-AYrEmPL2BT46wbikHwSMR5IK98SelBEYH+ycjalUxJ5xYjEupjF8Fd+NkadKoZAzf5zDtysFKd5R1PY4QBHIiw==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.3", + "@swc/types": ">= 0.1" + } + }, + "node_modules/@swc-node/register": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.6.8.tgz", + "integrity": "sha512-74ijy7J9CWr1Z88yO+ykXphV29giCrSpANQPQRooE0bObpkTO1g4RzQovIfbIaniBiGDDVsYwDoQ3FIrCE8HcQ==", + "dev": true, + "dependencies": { + "@swc-node/core": "^1.10.6", + "@swc-node/sourcemap-support": "^0.3.0", + "colorette": "^2.0.19", + "debug": "^4.3.4", + "pirates": "^4.0.5", + "tslib": "^2.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.3", + "typescript": ">= 4.3" + } + }, + "node_modules/@swc-node/sourcemap-support": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.3.0.tgz", + "integrity": "sha512-gqBJSmJMWomZFxlppaKea7NeAqFrDrrS0RMt24No92M3nJWcyI9YKGEQKl+EyJqZ5gh6w1s0cTklMHMzRwA1NA==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.21", + "tslib": "^2.5.0" + } + }, + "node_modules/@swc/core": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.107.tgz", + "integrity": "sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.107", + "@swc/core-darwin-x64": "1.3.107", + "@swc/core-linux-arm-gnueabihf": "1.3.107", + "@swc/core-linux-arm64-gnu": "1.3.107", + "@swc/core-linux-arm64-musl": "1.3.107", + "@swc/core-linux-x64-gnu": "1.3.107", + "@swc/core-linux-x64-musl": "1.3.107", + "@swc/core-win32-arm64-msvc": "1.3.107", + "@swc/core-win32-ia32-msvc": "1.3.107", + "@swc/core-win32-x64-msvc": "1.3.107" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz", + "integrity": "sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz", + "integrity": "sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz", + "integrity": "sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz", + "integrity": "sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz", + "integrity": "sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz", + "integrity": "sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz", + "integrity": "sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz", + "integrity": "sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz", + "integrity": "sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz", + "integrity": "sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" } }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "dev": true, @@ -8441,12 +8575,13 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.15", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", + "@types/express-serve-static-core": "^4.17.18", "@types/qs": "*", "@types/serve-static": "*" } @@ -8532,9 +8667,10 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "16.18.11", - "dev": true, - "license": "MIT" + "version": "16.18.79", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.79.tgz", + "integrity": "sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ==", + "dev": true }, "node_modules/@types/node-forge": { "version": "1.3.10", @@ -9206,7 +9342,6 @@ }, "node_modules/accepts": { "version": "1.3.8", - "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -9353,15 +9488,15 @@ } }, "node_modules/angular-svg-icon": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-16.0.0.tgz", - "integrity": "sha512-pTf4eI4T25POm/mMMXTnYGvi4ykjR+aoPq/D8Ipz9HmrrSHMSqb6Bp4MeqkaDgL6l8ACPY1/BdUKkgrmretaRw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-17.0.0.tgz", + "integrity": "sha512-cTHz79nzVcfUSBPwclFRwvAsWYbo3rRTse45lnzmHdCV0GjTLUNE3C1yQwBAnHqlH4eN0sl+mbVpZh8YeJxYug==", "dependencies": { "tslib": "^2.3.1" }, "peerDependencies": { - "@angular/common": ">=16.0.0", - "@angular/core": ">=16.0.0", + "@angular/common": ">=17.0.0", + "@angular/core": ">=17.0.0", "rxjs": ">=6.6.3" } }, @@ -9474,7 +9609,6 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "dev": true, "license": "MIT" }, "node_modules/array-ify": { @@ -10080,7 +10214,6 @@ }, "node_modules/body-parser": { "version": "1.20.1", - "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -10103,7 +10236,6 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -10111,7 +10243,6 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -10119,7 +10250,6 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "dev": true, "license": "MIT" }, "node_modules/bonjour-service": { @@ -10591,7 +10721,6 @@ }, "node_modules/call-bind": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1", @@ -11222,7 +11351,6 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -11233,7 +11361,6 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -11252,7 +11379,6 @@ }, "node_modules/content-type": { "version": "1.0.4", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11474,7 +11600,6 @@ }, "node_modules/cookie": { "version": "0.5.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11482,7 +11607,6 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "dev": true, "license": "MIT" }, "node_modules/copy-anything": { @@ -12446,7 +12570,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -12472,7 +12595,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8", @@ -12794,7 +12916,6 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "dev": true, "license": "MIT" }, "node_modules/ejs": { @@ -12844,7 +12965,6 @@ }, "node_modules/encodeurl": { "version": "1.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -13110,7 +13230,6 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { @@ -13310,6 +13429,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-playwright": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.15.3.tgz", + "integrity": "sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g==", + "dev": true, + "peerDependencies": { + "eslint": ">=7", + "eslint-plugin-jest": ">=25" + }, + "peerDependenciesMeta": { + "eslint-plugin-jest": { + "optional": true + } + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "dev": true, @@ -13664,7 +13798,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -13762,7 +13895,6 @@ }, "node_modules/express": { "version": "4.18.2", - "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -13803,7 +13935,6 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -13811,7 +13942,6 @@ }, "node_modules/express/node_modules/finalhandler": { "version": "1.2.0", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -13828,12 +13958,10 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "dev": true, "license": "MIT" }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -13852,7 +13980,6 @@ }, "node_modules/express/node_modules/send": { "version": "0.18.0", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -13875,12 +14002,10 @@ }, "node_modules/express/node_modules/send/node_modules/ms": { "version": "2.1.3", - "dev": true, "license": "MIT" }, "node_modules/express/node_modules/serve-static": { "version": "1.15.0", - "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", @@ -14445,7 +14570,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14466,7 +14590,6 @@ }, "node_modules/fresh": { "version": "0.5.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14531,7 +14654,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14554,7 +14676,6 @@ }, "node_modules/get-intrinsic": { "version": "1.1.3", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1", @@ -14820,7 +14941,6 @@ }, "node_modules/has": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1" @@ -14840,7 +14960,6 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -15009,7 +15128,6 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -15215,7 +15333,6 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -15397,7 +15514,6 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -15557,23 +15673,11 @@ "license": "BSD-3-Clause" }, "node_modules/ionicons": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.1.1.tgz", - "integrity": "sha512-DmX2W0q95JgX2MYSXGDSkTHNYzIK5Y9aZS9jkO0gCPp4VzpP7bkJhHZQUmNErQdFA408aZzJuMGwDS1v2kU0gQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "dependencies": { - "@stencil/core": "^2.18.0" - } - }, - "node_modules/ionicons/node_modules/@stencil/core": { - "version": "2.22.3", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.22.3.tgz", - "integrity": "sha512-kmVA0M/HojwsfkeHsifvHVIYe4l5tin7J5+DLgtl8h6WWfiMClND5K3ifCXXI2ETDNKiEk21p6jql3Fx9o2rng==", - "bin": { - "stencil": "bin/stencil" - }, - "engines": { - "node": ">=12.10.0", - "npm": ">=6.0.0" + "@stencil/core": "^4.0.3" } }, "node_modules/ip": { @@ -15584,7 +15688,6 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -18018,6 +18121,24 @@ "node": ">=6" } }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, "node_modules/jsonc-parser": { "version": "3.2.0", "license": "MIT" @@ -18802,7 +18923,6 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -18834,7 +18954,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", - "dev": true, "license": "MIT" }, "node_modules/merge-stream": { @@ -18857,7 +18976,6 @@ }, "node_modules/methods": { "version": "1.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -18877,7 +18995,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -18888,7 +19005,6 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -18896,7 +19012,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -19198,7 +19313,6 @@ }, "node_modules/negotiator": { "version": "0.6.3", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -19929,7 +20043,6 @@ }, "node_modules/object-inspect": { "version": "1.12.2", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19943,7 +20056,6 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -20359,7 +20471,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -20430,7 +20541,6 @@ }, "node_modules/path-to-regexp": { "version": "0.1.7", - "dev": true, "license": "MIT" }, "node_modules/path-type": { @@ -20509,6 +20619,36 @@ "node": ">=8" } }, + "node_modules/playwright": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", + "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "dev": true, + "dependencies": { + "playwright-core": "1.41.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", + "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/portfinder": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", @@ -21837,7 +21977,6 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "dev": true, "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -22072,7 +22211,6 @@ }, "node_modules/qs": { "version": "6.11.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" @@ -22118,7 +22256,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -22126,7 +22263,6 @@ }, "node_modules/raw-body": { "version": "2.5.1", - "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -22140,7 +22276,6 @@ }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -22839,7 +22974,6 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/safevalues": { @@ -23212,7 +23346,6 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "dev": true, "license": "ISC" }, "node_modules/shallow-clone": { @@ -23257,7 +23390,6 @@ }, "node_modules/side-channel": { "version": "1.0.4", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.0", @@ -23707,7 +23839,6 @@ }, "node_modules/statuses": { "version": "2.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -24414,7 +24545,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -24834,7 +24964,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "dev": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -25026,7 +25155,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -25100,7 +25228,6 @@ }, "node_modules/utils-merge": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -25162,7 +25289,6 @@ }, "node_modules/vary": { "version": "1.1.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -26357,7 +26483,7 @@ }, "packages/ngx-fast-lib": { "name": "@push-based/ngx-fast-svg", - "version": "0.5.1", + "version": "18.0.0", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -26401,28 +26527,6 @@ "requires": { "@angular-devkit/core": "17.0.2", "rxjs": "7.8.1" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true - } } }, "@angular-devkit/build-angular": { @@ -26499,20 +26603,6 @@ "webpack-subresource-integrity": "5.1.0" }, "dependencies": { - "@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, "agent-base": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", @@ -26586,18 +26676,25 @@ } }, "@angular-devkit/core": { - "version": "16.2.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.10.tgz", - "integrity": "sha512-eo7suLDjyu5bSlEr4TluYkFm4v2PVLSAPgnau8XHHlN5Yg4P/BZ00ve7LA7C9S1gzRSCrxQhK5ki4rnoFTo5zg==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", + "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", "dev": true, - "peer": true, "requires": { "ajv": "8.12.0", "ajv-formats": "2.1.1", "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", + "picomatch": "3.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" + }, + "dependencies": { + "picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true + } } }, "@angular-devkit/schematics": { @@ -26611,28 +26708,6 @@ "magic-string": "0.30.5", "ora": "5.4.1", "rxjs": "7.8.1" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true - } } }, "@angular-eslint/bundled-angular-compiler": { @@ -26916,20 +26991,6 @@ "yargs": "17.7.2" }, "dependencies": { - "@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, "open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -26940,12 +27001,6 @@ "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } - }, - "picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true } } }, @@ -28902,23 +28957,23 @@ "dev": true }, "@ionic/angular": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.0.9.tgz", - "integrity": "sha512-e58ZbWIEWz2PNi82HzEsBNjVZjHmDfoCZdabszpY3T+CbJfbVd16iLATfRS6uWsrxhn77xpVXPpjVV9zSZDxsw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.7.0.tgz", + "integrity": "sha512-jEPgg8J1ZX5mBiz80LUOmAOtMOZuVFE5ZVNxSuMzTFdD6j4rSFowuOmci4DZoewyveQgPx5h4Kg+rLuQrxTYow==", "requires": { - "@ionic/core": "7.0.9", + "@ionic/core": "7.7.0", "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" } }, "@ionic/core": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.0.9.tgz", - "integrity": "sha512-HcDtDUcjYCwQKrPpOOI+FWuMHi0DYbDJCww9qDTW52B6LLXktoPCcCxNI8oiERjabXQNLB38r9yQNDGyrs913w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.7.0.tgz", + "integrity": "sha512-ewbvX8u4+FNRBAw1nqBuCy4dI8OLTxoqZgm4qRs4zbrNLJInwTpYjCPzYueN0KE9ufP0n9HhS23lfcrQzJC7Hg==", "requires": { - "@stencil/core": "^3.2.2", - "ionicons": "^7.1.0", + "@stencil/core": "^4.12.0", + "ionicons": "^7.2.2", "tslib": "^2.1.0" } }, @@ -31259,6 +31314,17 @@ "dev": true, "optional": true }, + "@nx/playwright": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@nx/playwright/-/playwright-17.1.3.tgz", + "integrity": "sha512-1vgTByL3L4QdWBLHruZ7Dgn8DBu7R5KqlWRis09v0buo+D4pPYJ/5xoT1eCAU99ydI+pRlPF+bv7EmunEgoP7w==", + "dev": true, + "requires": { + "@nx/devkit": "17.1.3", + "@nx/eslint": "17.1.3", + "tslib": "^2.3.0" + } + }, "@nx/web": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/@nx/web/-/web-17.1.3.tgz", @@ -31683,6 +31749,15 @@ "dev": true, "optional": true }, + "@playwright/test": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", + "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "dev": true, + "requires": { + "playwright": "1.41.2" + } + }, "@puppeteer/browsers": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", @@ -31940,28 +32015,6 @@ "@angular-devkit/core": "17.0.2", "@angular-devkit/schematics": "17.0.2", "jsonc-parser": "3.2.0" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.2.tgz", - "integrity": "sha512-wmQyiXIqmdm9KSiB7d5SnDaqqRZSsZ7Oy2kEI4gUyLr2y9icj/4zpTpYvsqKyhF1NMU8ElZ5b4s1ru2pirlDVg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "3.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true - } } }, "@sentry/core": { @@ -32120,9 +32173,142 @@ "dev": true }, "@stencil/core": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-3.3.0.tgz", - "integrity": "sha512-+3hqJ8RmUvxz8FgvMP9lxYJdjb4EnZrkdo6ln5fUqGju62ORS5/Ch9m6OAIjlEn6CbDb5Uf1OdeMjO87DJwIAA==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.12.0.tgz", + "integrity": "sha512-qAQcfNmp2sdxAh1DlyUhHfDmIUS7mhI+5LAhPphg74zK9sKgFL5vpLzgjs0wohpjlmI4msgJFYiRB8lxVPqjPg==" + }, + "@swc-node/core": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.12.0.tgz", + "integrity": "sha512-AYrEmPL2BT46wbikHwSMR5IK98SelBEYH+ycjalUxJ5xYjEupjF8Fd+NkadKoZAzf5zDtysFKd5R1PY4QBHIiw==", + "dev": true, + "requires": {} + }, + "@swc-node/register": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.6.8.tgz", + "integrity": "sha512-74ijy7J9CWr1Z88yO+ykXphV29giCrSpANQPQRooE0bObpkTO1g4RzQovIfbIaniBiGDDVsYwDoQ3FIrCE8HcQ==", + "dev": true, + "requires": { + "@swc-node/core": "^1.10.6", + "@swc-node/sourcemap-support": "^0.3.0", + "colorette": "^2.0.19", + "debug": "^4.3.4", + "pirates": "^4.0.5", + "tslib": "^2.5.0" + } + }, + "@swc-node/sourcemap-support": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.3.0.tgz", + "integrity": "sha512-gqBJSmJMWomZFxlppaKea7NeAqFrDrrS0RMt24No92M3nJWcyI9YKGEQKl+EyJqZ5gh6w1s0cTklMHMzRwA1NA==", + "dev": true, + "requires": { + "source-map-support": "^0.5.21", + "tslib": "^2.5.0" + } + }, + "@swc/core": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.107.tgz", + "integrity": "sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ==", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.3.107", + "@swc/core-darwin-x64": "1.3.107", + "@swc/core-linux-arm-gnueabihf": "1.3.107", + "@swc/core-linux-arm64-gnu": "1.3.107", + "@swc/core-linux-arm64-musl": "1.3.107", + "@swc/core-linux-x64-gnu": "1.3.107", + "@swc/core-linux-x64-musl": "1.3.107", + "@swc/core-win32-arm64-msvc": "1.3.107", + "@swc/core-win32-ia32-msvc": "1.3.107", + "@swc/core-win32-x64-msvc": "1.3.107", + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz", + "integrity": "sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz", + "integrity": "sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz", + "integrity": "sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz", + "integrity": "sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz", + "integrity": "sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz", + "integrity": "sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz", + "integrity": "sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz", + "integrity": "sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz", + "integrity": "sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.3.107", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz", + "integrity": "sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA==", + "dev": true, + "optional": true + }, + "@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true }, "@tootallnate/once": { "version": "2.0.0", @@ -32301,11 +32487,13 @@ "dev": true }, "@types/express": { - "version": "4.17.15", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", + "@types/express-serve-static-core": "^4.17.18", "@types/qs": "*", "@types/serve-static": "*" } @@ -32385,7 +32573,9 @@ "dev": true }, "@types/node": { - "version": "16.18.11", + "version": "16.18.79", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.79.tgz", + "integrity": "sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ==", "dev": true }, "@types/node-forge": { @@ -32891,7 +33081,6 @@ }, "accepts": { "version": "1.3.8", - "dev": true, "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -32990,9 +33179,9 @@ } }, "angular-svg-icon": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-16.0.0.tgz", - "integrity": "sha512-pTf4eI4T25POm/mMMXTnYGvi4ykjR+aoPq/D8Ipz9HmrrSHMSqb6Bp4MeqkaDgL6l8ACPY1/BdUKkgrmretaRw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-17.0.0.tgz", + "integrity": "sha512-cTHz79nzVcfUSBPwclFRwvAsWYbo3rRTse45lnzmHdCV0GjTLUNE3C1yQwBAnHqlH4eN0sl+mbVpZh8YeJxYug==", "requires": { "tslib": "^2.3.1" } @@ -33060,8 +33249,7 @@ } }, "array-flatten": { - "version": "1.1.1", - "dev": true + "version": "1.1.1" }, "array-ify": { "version": "1.0.0", @@ -33473,7 +33661,6 @@ }, "body-parser": { "version": "1.20.1", - "dev": true, "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -33490,19 +33677,16 @@ }, "dependencies": { "bytes": { - "version": "3.1.2", - "dev": true + "version": "3.1.2" }, "debug": { "version": "2.6.9", - "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0", - "dev": true + "version": "2.0.0" } } }, @@ -33854,7 +34038,6 @@ }, "call-bind": { "version": "1.0.2", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -34290,20 +34473,17 @@ }, "content-disposition": { "version": "0.5.4", - "dev": true, "requires": { "safe-buffer": "5.2.1" }, "dependencies": { "safe-buffer": { - "version": "5.2.1", - "dev": true + "version": "5.2.1" } } }, "content-type": { - "version": "1.0.4", - "dev": true + "version": "1.0.4" }, "conventional-changelog": { "version": "5.1.0", @@ -34462,12 +34642,10 @@ "dev": true }, "cookie": { - "version": "0.5.0", - "dev": true + "version": "0.5.0" }, "cookie-signature": { - "version": "1.0.6", - "dev": true + "version": "1.0.6" }, "copy-anything": { "version": "2.0.6", @@ -35109,8 +35287,7 @@ "dev": true }, "depd": { - "version": "2.0.0", - "dev": true + "version": "2.0.0" }, "dependency-graph": { "version": "0.11.0", @@ -35125,8 +35302,7 @@ "dev": true }, "destroy": { - "version": "1.2.0", - "dev": true + "version": "1.2.0" }, "detect-indent": { "version": "6.1.0", @@ -35350,8 +35526,7 @@ } }, "ee-first": { - "version": "1.1.1", - "dev": true + "version": "1.1.1" }, "ejs": { "version": "3.1.8", @@ -35381,8 +35556,7 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "encoding": { "version": "0.1.13", @@ -35569,8 +35743,7 @@ "dev": true }, "escape-html": { - "version": "1.0.3", - "dev": true + "version": "1.0.3" }, "escape-string-regexp": { "version": "1.0.5", @@ -35852,6 +36025,13 @@ } } }, + "eslint-plugin-playwright": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.15.3.tgz", + "integrity": "sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g==", + "dev": true, + "requires": {} + }, "eslint-scope": { "version": "5.1.1", "dev": true, @@ -35924,8 +36104,7 @@ "dev": true }, "etag": { - "version": "1.8.1", - "dev": true + "version": "1.8.1" }, "eventemitter-asyncresource": { "version": "1.0.0", @@ -35998,7 +36177,6 @@ }, "express": { "version": "4.18.2", - "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -36035,14 +36213,12 @@ "dependencies": { "debug": { "version": "2.6.9", - "dev": true, "requires": { "ms": "2.0.0" } }, "finalhandler": { "version": "1.2.0", - "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -36054,16 +36230,13 @@ } }, "ms": { - "version": "2.0.0", - "dev": true + "version": "2.0.0" }, "safe-buffer": { - "version": "5.2.1", - "dev": true + "version": "5.2.1" }, "send": { "version": "0.18.0", - "dev": true, "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -36081,14 +36254,12 @@ }, "dependencies": { "ms": { - "version": "2.1.3", - "dev": true + "version": "2.1.3" } } }, "serve-static": { "version": "1.15.0", - "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -36491,8 +36662,7 @@ } }, "forwarded": { - "version": "0.2.0", - "dev": true + "version": "0.2.0" }, "fraction.js": { "version": "4.3.7", @@ -36501,8 +36671,7 @@ "dev": true }, "fresh": { - "version": "0.5.2", - "dev": true + "version": "0.5.2" }, "fs-constants": { "version": "1.0.0", @@ -36546,8 +36715,7 @@ "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "gensync": { "version": "1.0.0-beta.2", @@ -36559,7 +36727,6 @@ }, "get-intrinsic": { "version": "1.1.3", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -36746,7 +36913,6 @@ }, "has": { "version": "1.0.3", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -36758,8 +36924,7 @@ "dev": true }, "has-symbols": { - "version": "1.0.3", - "dev": true + "version": "1.0.3" }, "hasown": { "version": "2.0.0", @@ -36892,7 +37057,6 @@ }, "http-errors": { "version": "2.0.0", - "dev": true, "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -37037,7 +37201,6 @@ }, "iconv-lite": { "version": "0.4.24", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -37142,8 +37305,7 @@ } }, "inherits": { - "version": "2.0.4", - "dev": true + "version": "2.0.4" }, "ini": { "version": "4.1.1", @@ -37260,18 +37422,11 @@ "dev": true }, "ionicons": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.1.1.tgz", - "integrity": "sha512-DmX2W0q95JgX2MYSXGDSkTHNYzIK5Y9aZS9jkO0gCPp4VzpP7bkJhHZQUmNErQdFA408aZzJuMGwDS1v2kU0gQ==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.2.tgz", + "integrity": "sha512-I3iYIfc9Q9FRifWyFSwTAvbEABWlWY32i0sAVDDPGYnaIZVugkLCZFbEcrphW6ixVPg8tt1oLwalo/JJwbEqnA==", "requires": { - "@stencil/core": "^2.18.0" - }, - "dependencies": { - "@stencil/core": { - "version": "2.22.3", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.22.3.tgz", - "integrity": "sha512-kmVA0M/HojwsfkeHsifvHVIYe4l5tin7J5+DLgtl8h6WWfiMClND5K3ifCXXI2ETDNKiEk21p6jql3Fx9o2rng==" - } + "@stencil/core": "^4.0.3" } }, "ip": { @@ -37281,8 +37436,7 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.1", - "dev": true + "version": "1.9.1" }, "is-arrayish": { "version": "0.2.1", @@ -39029,6 +39183,18 @@ "version": "2.2.3", "dev": true }, + "jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + } + }, "jsonc-parser": { "version": "3.2.0" }, @@ -39577,8 +39743,7 @@ "dev": true }, "media-typer": { - "version": "0.3.0", - "dev": true + "version": "0.3.0" }, "memfs": { "version": "3.5.3", @@ -39596,8 +39761,7 @@ "dev": true }, "merge-descriptors": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "merge-stream": { "version": "2.0.0", @@ -39612,8 +39776,7 @@ "dev": true }, "methods": { - "version": "1.1.2", - "dev": true + "version": "1.1.2" }, "micromatch": { "version": "4.0.5", @@ -39624,16 +39787,13 @@ } }, "mime": { - "version": "1.6.0", - "dev": true + "version": "1.6.0" }, "mime-db": { - "version": "1.52.0", - "dev": true + "version": "1.52.0" }, "mime-types": { "version": "2.1.35", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -39847,8 +40007,7 @@ } }, "negotiator": { - "version": "0.6.3", - "dev": true + "version": "0.6.3" }, "neo-async": { "version": "2.6.2", @@ -40390,8 +40549,7 @@ "dev": true }, "object-inspect": { - "version": "1.12.2", - "dev": true + "version": "1.12.2" }, "obuf": { "version": "1.1.2", @@ -40401,7 +40559,6 @@ }, "on-finished": { "version": "2.4.1", - "dev": true, "requires": { "ee-first": "1.1.1" } @@ -40685,8 +40842,7 @@ } }, "parseurl": { - "version": "1.3.3", - "dev": true + "version": "1.3.3" }, "path-exists": { "version": "4.0.0", @@ -40729,8 +40885,7 @@ } }, "path-to-regexp": { - "version": "0.1.7", - "dev": true + "version": "0.1.7" }, "path-type": { "version": "4.0.0", @@ -40782,6 +40937,22 @@ "find-up": "^4.0.0" } }, + "playwright": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", + "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "dev": true, + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.41.2" + } + }, + "playwright-core": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", + "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", + "dev": true + }, "portfinder": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", @@ -41555,7 +41726,6 @@ }, "proxy-addr": { "version": "2.0.7", - "dev": true, "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -41712,7 +41882,6 @@ }, "qs": { "version": "6.11.0", - "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -41733,12 +41902,10 @@ } }, "range-parser": { - "version": "1.2.1", - "dev": true + "version": "1.2.1" }, "raw-body": { "version": "2.5.1", - "dev": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -41747,8 +41914,7 @@ }, "dependencies": { "bytes": { - "version": "3.1.2", - "dev": true + "version": "3.1.2" } } }, @@ -42246,8 +42412,7 @@ "dev": true }, "safer-buffer": { - "version": "2.1.2", - "dev": true + "version": "2.1.2" }, "safevalues": { "version": "0.3.4", @@ -42525,8 +42690,7 @@ "dev": true }, "setprototypeof": { - "version": "1.2.0", - "dev": true + "version": "1.2.0" }, "shallow-clone": { "version": "3.0.1", @@ -42556,7 +42720,6 @@ }, "side-channel": { "version": "1.0.4", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -42894,8 +43057,7 @@ } }, "statuses": { - "version": "2.0.1", - "dev": true + "version": "2.0.1" }, "stream-throttle": { "version": "0.1.3", @@ -43376,8 +43538,7 @@ } }, "toidentifier": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "tough-cookie": { "version": "4.1.3", @@ -43651,7 +43812,6 @@ }, "type-is": { "version": "1.6.18", - "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -43777,8 +43937,7 @@ "dev": true }, "unpipe": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "untildify": { "version": "4.0.0", @@ -43820,8 +43979,7 @@ "dev": true }, "utils-merge": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" }, "uuid": { "version": "8.3.2", @@ -43866,8 +44024,7 @@ } }, "vary": { - "version": "1.1.2", - "dev": true + "version": "1.1.2" }, "verror": { "version": "1.10.0", diff --git a/package.json b/package.json index 58ea7bd..fa6cde9 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ "scripts": { "ng": "ng", "nx": "nx", + "build:lib": "nx run ngx-fast-lib:build:production", + "test:lib": "nx run ngx-fast-lib:test", "start": "npm run serve", "start:ssr": "npm run serve:ssr", "serve": "nx serve ngx-fast-icon-demo", @@ -43,14 +45,17 @@ "@fortawesome/angular-fontawesome": "^0.14.0", "@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/free-solid-svg-icons": "^6.4.0", - "@ionic/angular": "^7.0.7", - "angular-svg-icon": "^16.0.0", + "@ionic/angular": "^7.7.0", + "angular-svg-icon": "^17.0.0", + "express": "~4.18.2", "rxjs": "^7.8.1", - "tslib": "^2.0.0", + "tslib": "^2.3.0", "zone.js": "0.14.2" }, "devDependencies": { "@angular-devkit/build-angular": "17.0.2", + "@angular-devkit/core": "17.0.2", + "@angular-devkit/schematics": "17.0.2", "@angular-eslint/eslint-plugin": "17.0.1", "@angular-eslint/eslint-plugin-template": "17.0.1", "@angular-eslint/template-parser": "17.0.1", @@ -63,11 +68,18 @@ "@nx/devkit": "17.1.3", "@nx/eslint": "17.1.3", "@nx/jest": "17.1.3", + "@nx/js": "17.1.3", + "@nx/playwright": "17.1.3", "@nx/workspace": "17.1.3", + "@playwright/test": "^1.36.0", "@push-based/user-flow": "^0.19.2", + "@schematics/angular": "17.0.2", + "@swc-node/register": "~1.6.7", + "@swc/core": "~1.3.85", "@types/compression": "^1.7.2", + "@types/express": "4.17.14", "@types/jest": "29.4.4", - "@types/node": "^16.11.7", + "@types/node": "^16.18.79", "@typescript-eslint/eslint-plugin": "6.12.0", "@typescript-eslint/parser": "6.12.0", "compression": "^1.7.4", @@ -76,14 +88,17 @@ "eslint": "8.46.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-cypress": "2.13.4", + "eslint-plugin-playwright": "^0.15.3", "jest": "^29.5.0", "jest-environment-jsdom": "29.5.0", "jest-preset-angular": "13.1.4", + "jsonc-eslint-parser": "^2.1.0", "ng-packagr": "17.0.2", "nx": "17.1.3", "postcss-preset-env": "~7.5.0", "prettier": "2.6.2", "ts-jest": "29.1.0", + "ts-node": "10.9.1", "typescript": "5.2.2" }, "overrides": { diff --git a/packages/ngx-fast-icon-demo/jest.config.ts b/packages/ngx-fast-icon-demo/jest.config.ts deleted file mode 100644 index 3ab1c9e..0000000 --- a/packages/ngx-fast-icon-demo/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'ngx-fast-icon-demo', - preset: '../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - }, - coverageDirectory: '../../coverage/packages/ngx-fast-icon-demo', - transform: { - '^.+\\.(ts|mjs|js|html)$': 'jest-preset-angular', - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/packages/ngx-fast-icon-demo/project.json b/packages/ngx-fast-icon-demo/project.json index 3ff1a1c..0e375c7 100644 --- a/packages/ngx-fast-icon-demo/project.json +++ b/packages/ngx-fast-icon-demo/project.json @@ -1,54 +1,46 @@ { "name": "ngx-fast-icon-demo", - "$schema": "..\\..\\node_modules\\nx\\schemas\\project-schema.json", + "$schema": "../../node_modules/nx/schemas/project-schema.json", "projectType": "application", "sourceRoot": "packages/ngx-fast-icon-demo/src", - "prefix": "ngx-fast-icon-demo", + "prefix": "app", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], + "executor": "@angular-devkit/build-angular:application", + "outputs": [ + "{options.outputPath}" + ], "options": { - "outputPath": "dist/ngx-fast-icon-demo/browser", + "outputPath": "dist/packages/ngx-fast-icon-demo", "index": "packages/ngx-fast-icon-demo/src/index.html", - "main": "packages/ngx-fast-icon-demo/src/main.ts", - "polyfills": "packages/ngx-fast-icon-demo/src/polyfills.ts", + "browser": "packages/ngx-fast-icon-demo/src/main.ts", + "polyfills": [ + "zone.js" + ], "tsConfig": "packages/ngx-fast-icon-demo/tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ "packages/ngx-fast-icon-demo/src/favicon.ico", "packages/ngx-fast-icon-demo/src/assets" ], - "styles": ["packages/ngx-fast-icon-demo/src/styles.scss"], - "scripts": [] + "styles": [ + "packages/ngx-fast-icon-demo/src/styles.scss" + ], + "scripts": [], + "server": "packages/ngx-fast-icon-demo/src/main.server.ts", + "prerender": true, + "ssr": { + "entry": "packages/ngx-fast-icon-demo/server.ts" + } }, "configurations": { "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb" - } - ], - "fileReplacements": [ - { - "replace": "packages/ngx-fast-icon-demo/src/environments/environment.ts", - "with": "packages/ngx-fast-icon-demo/src/environments/environment.prod.ts" - } - ], "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, - "sourceMap": true, - "namedChunks": true + "sourceMap": true } }, "defaultConfiguration": "production" @@ -79,97 +71,6 @@ "packages/ngx-fast-icon-demo/src/**/*.html" ] } - }, - "test": { - "executor": "@nrwl/jest:jest", - "outputs": ["{workspaceRoot}/coverage/packages/ngx-fast-icon-demo"], - "options": { - "jestConfig": "packages/ngx-fast-icon-demo/jest.config.ts", - "passWithNoTests": true - } - }, - "build-server": { - "executor": "@angular-devkit/build-angular:server", - "options": { - "outputPath": "dist/ngx-fast-icon-demo/server", - "main": "packages/ngx-fast-icon-demo/src/server.ts", - "tsConfig": "packages/ngx-fast-icon-demo/tsconfig.server.json", - "optimization": false, - "sourceMap": true, - "extractLicenses": false - }, - "configurations": { - "development": { - "outputHashing": "none", - "optimization": false, - "sourceMap": true, - "extractLicenses": true - }, - "production": { - "outputHashing": "media", - "fileReplacements": [ - { - "replace": "packages/ngx-fast-icon-demo/src/environments/environment.ts", - "with": "packages/ngx-fast-icon-demo/src/environments/environment.prod.ts" - } - ], - "optimization": true, - "sourceMap": false, - "extractLicenses": true - } - }, - "defaultConfiguration": "production", - "development": { - "outputHashing": "none", - "optimization": false, - "sourceMap": true, - "extractLicenses": true - }, - "production": { - "outputHashing": "media", - "fileReplacements": [ - { - "replace": "packages/ngx-fast-icon-demo/src/environments/environment.ts", - "with": "packages/ngx-fast-icon-demo/src/environments/environment.prod.ts" - } - ], - "optimization": true, - "sourceMap": false, - "extractLicenses": true - } - }, - "serve-ssr": { - "executor": "@angular-devkit/build-angular:ssr-dev-server", - "configurations": { - "development": { - "browserTarget": "ngx-fast-icon-demo:build:development", - "serverTarget": "ngx-fast-icon-demo:build-server:development" - }, - "production": { - "browserTarget": "ngx-fast-icon-demo:build:production", - "serverTarget": "ngx-fast-icon-demo:build-server:production" - } - }, - "defaultConfiguration": "development" - }, - "prerender": { - "executor": "@angular-devkit/build-angular:prerender", - "options": { - "browserTarget": "ngx-fast-icon-demo:build:production", - "serverTarget": "ngx-fast-icon-demo:build-server:production", - "routesFile": "routes.txt" - }, - "configurations": { - "production": { - "browserTarget": "ngx-fast-icon-demo:build:production", - "serverTarget": "ngx-fast-icon-demo:build-server:production" - }, - "development": { - "browserTarget": "ngx-fast-icon-demo:build:development", - "serverTarget": "ngx-fast-icon-demo:build-server:development" - } - }, - "defaultConfiguration": "development" } }, "tags": [] diff --git a/packages/ngx-fast-icon-demo/src/server.ts b/packages/ngx-fast-icon-demo/server.ts similarity index 57% rename from packages/ngx-fast-icon-demo/src/server.ts rename to packages/ngx-fast-icon-demo/server.ts index a7aed42..8c3936a 100644 --- a/packages/ngx-fast-icon-demo/src/server.ts +++ b/packages/ngx-fast-icon-demo/server.ts @@ -1,31 +1,28 @@ -import 'zone.js/node'; - import { APP_BASE_HREF } from '@angular/common'; import { CommonEngine } from '@angular/ssr'; -import * as express from 'express'; -import { existsSync } from 'node:fs'; -import { join } from 'node:path'; +import express from 'express'; +import { fileURLToPath } from 'node:url'; +import { dirname, join, resolve } from 'node:path'; import bootstrap from './src/main.server'; // The Express app is exported so that it can be used by serverless Functions. export function app(): express.Express { const server = express(); - const distFolder = join(process.cwd(), 'dist/ngx-fast-icon-demo/browser'); - const indexHtml = existsSync(join(distFolder, 'index.original.html')) - ? join(distFolder, 'index.original.html') - : join(distFolder, 'index.html'); + const serverDistFolder = dirname(fileURLToPath(import.meta.url)); + const browserDistFolder = resolve(serverDistFolder, '../browser'); + const indexHtml = join(serverDistFolder, 'index.server.html'); const commonEngine = new CommonEngine(); server.set('view engine', 'html'); - server.set('views', distFolder); + server.set('views', browserDistFolder); // Example Express Rest API endpoints // server.get('/api/**', (req, res) => { }); // Serve static files from /browser server.get( '*.*', - express.static(distFolder, { + express.static(browserDistFolder, { maxAge: '1y', }) ); @@ -37,9 +34,10 @@ export function app(): express.Express { commonEngine .render({ bootstrap, + inlineCriticalCss: true, documentFilePath: indexHtml, url: `${protocol}://${headers.host}${originalUrl}`, - publicPath: distFolder, + publicPath: browserDistFolder, providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], }) .then((html) => res.send(html)) @@ -58,15 +56,3 @@ function run(): void { console.log(`Node Express server listening on http://localhost:${port}`); }); } - -// Webpack will replace 'require' with '__webpack_require__' -// '__non_webpack_require__' is a proxy to Node 'require' -// The below code is to ensure that the server is run only when not requiring the bundle. -declare const __non_webpack_require__: NodeRequire; -const mainModule = __non_webpack_require__.main; -const moduleFilename = (mainModule && mainModule.filename) || ''; -if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { - run(); -} - -export default bootstrap; diff --git a/packages/ngx-fast-icon-demo/src/app/app.component.html b/packages/ngx-fast-icon-demo/src/app/app.component.html deleted file mode 100644 index 0a41645..0000000 --- a/packages/ngx-fast-icon-demo/src/app/app.component.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
- -
- -
-
-
diff --git a/packages/ngx-fast-icon-demo/src/app/app.component.scss b/packages/ngx-fast-icon-demo/src/app/app.component.scss deleted file mode 100644 index f4b92b2..0000000 --- a/packages/ngx-fast-icon-demo/src/app/app.component.scss +++ /dev/null @@ -1,186 +0,0 @@ -.header { - position: relative; - z-index: 1090; - border-right: 3px solid; - height: 100%; - transition: border-color 0.2s ease-in-out; -} - -.link { - padding: 16px; - display: block; - transition: background-color 0.2s ease-in-out; - text-decoration: none; - color: #fff; - font-weight: bold; - text-transform: uppercase; - background: none !important; - - &.active { - &.description { - background-color: var(--description-border-color) !important; - } - &.angular { - background-color: var(--angular-border-color) !important; - } - &.ant { - background-color: var(--ant-border-color) !important; - } - &.ionic { - background-color: var(--ionic-border-color) !important; - } - &.font-awesome { - background-color: var(--font-awesome-border-color) !important; - } - &.fast-svg { - background-color: var(--pb-border-color) !important; - } - &.material { - background-color: var(--material-border-color) !important; - } - } -} - -.row { - display: flex; - flex-wrap: wrap; - width: 100%; - height: 100%; -} - -.sidebar { - width: 320px; - height: 100%; -} - -.content { - width: calc(100% - 320px); - height: 100%; - overflow: auto; - padding: 0 16px; -} - -:host::ng-deep { - .angular { - background-color: var(--angular-color); - - button { - background-color: var(--angular-border-color); - - &.active { - background: transparent; - border: 2px solid var(--angular-border-color); - } - } - } - .description { - background-color: var(--description-color); - } - .ant { - background-color: var(--ant-color); - - button { - background-color: var(--ant-border-color); - - &.active { - background: transparent; - border: 2px solid var(--ant-border-color); - } - } - } - .ionic { - background-color: var(--ionic-color); - - button { - background-color: var(--ionic-border-color); - - &.active { - background: transparent; - border: 2px solid var(--ionic-border-color); - } - } - } - .font-awesome { - background-color: var(--font-awesome-color); - - button { - background-color: var(--font-awesome-border-color); - - &.active { - background: transparent; - border: 2px solid var(--font-awesome-border-color); - } - } - } - .fast-svg { - background-color: var(--pb-color); - - button { - background-color: var(--pb-border-color); - - &.active { - background: transparent; - border: 2px solid var(--pb-border-color); - } - } - } - .material { - background-color: var(--material-color); - - button { - background-color: var(--material-border-color); - - &.active { - background: transparent; - border: 2px solid var(--material-border-color); - } - } - } -} - -button { - border: 2px solid transparent; -} - -:host::ng-deep .root { - height: 100%; - overflow: auto; - width: 100%; - transition: background-color 0.2s ease-in-out; - - &.angular { - .header { - border-right-color: var(--angular-border-color); - } - } - &.description { - .header { - border-right-color: var(--description-border-color); - } - } - &.ant { - .header { - border-right-color: var(--ant-border-color); - } - } - &.ionic { - .header { - border-right-color: var(--ionic-border-color); - } - } - &.font-awesome { - .header { - border-right-color: var(--font-awesome-border-color); - } - } - &.fast-svg { - .header { - border-right-color: var(--pb-border-color); - } - } - &.material { - .header { - border-right-color: var(--material-border-color); - } - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/app.component.ts b/packages/ngx-fast-icon-demo/src/app/app.component.ts index 9a66ba8..ce29423 100644 --- a/packages/ngx-fast-icon-demo/src/app/app.component.ts +++ b/packages/ngx-fast-icon-demo/src/app/app.component.ts @@ -1,15 +1,42 @@ -import { Component } from '@angular/core'; -import {ActivatedRoute, NavigationEnd, Router} from '@angular/router'; +import { Component, inject } from '@angular/core'; +import { ActivatedRoute, NavigationEnd, Router, RouterOutlet } from '@angular/router'; -import { filter, map, startWith } from 'rxjs'; +import { filter, map } from 'rxjs'; +import {MediaMatcher} from '@angular/cdk/layout'; +import { ShellComponent } from './misc/shell.component'; +import { AsyncPipe } from '@angular/common'; @Component({ selector: 'ngx-fast-icon-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], + standalone: true, + template: ` + + + + `, + imports: [ + ShellComponent, + AsyncPipe, + RouterOutlet + ] }) export class AppComponent { - links = [ + private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); + + readonly queryParams$ = this.route.queryParams; + readonly isMobile = inject(MediaMatcher).matchMedia('(max-width: 600px)').matches; + readonly rootClass$ = this.router.events.pipe( + filter((e): e is NavigationEnd => e instanceof NavigationEnd), + map((e) => e.urlAfterRedirects.split('?')[0].replace('/', '')) + ) + + readonly links = [ 'description', 'fast-svg', 'material', @@ -18,43 +45,4 @@ export class AppComponent { 'angular', 'ant', ]; - readonly queryParams = this.activatedRoute.queryParams; - - navClass$ = this.router.events.pipe( - filter((e) => e instanceof NavigationEnd), - startWith({ urlAfterRedirects: this.router.url }), - map((e) => this.getClassFromUrl((e as NavigationEnd).urlAfterRedirects)) - ); - constructor(private router: Router, private activatedRoute: ActivatedRoute) {} - - getClassFromUrl(url: string): string { - if (url.includes('angular')) { - return 'angular'; - } - - if (url.includes('material')) { - return 'material'; - } - - if (url.includes('ant')) { - return 'ant'; - } - if (url.includes('fast-svg')) { - return 'fast-svg'; - } - - if (url.includes('font-awesome')) { - return 'font-awesome'; - } - - if (url.includes('ionic')) { - return 'ionic'; - } - - if (url.includes('description')) { - return 'description'; - } - - return ''; - } } diff --git a/packages/ngx-fast-icon-demo/src/app/app.config.server.ts b/packages/ngx-fast-icon-demo/src/app/app.config.server.ts new file mode 100644 index 0000000..de92dc7 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/app.config.server.ts @@ -0,0 +1,17 @@ +import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; +import { provideServerRendering } from '@angular/platform-server'; +import { appConfig } from './app.config'; +import { SvgLoadStrategySsr } from './ngx-fast-icon-ssr/icon-load.ssr.strategy'; +import { provideFastSVG } from '@push-based/ngx-fast-svg'; + +const serverConfig: ApplicationConfig = { + providers: [ + provideServerRendering(), + provideFastSVG({ + svgLoadStrategy: SvgLoadStrategySsr, + url: (name: string) => `assets/svg-icons/${name}.svg`, + }), + ], +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/packages/ngx-fast-icon-demo/src/app/app.config.ts b/packages/ngx-fast-icon-demo/src/app/app.config.ts new file mode 100644 index 0000000..14e631f --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/app.config.ts @@ -0,0 +1,25 @@ +import { ApplicationConfig } from '@angular/core'; +import { provideRouter, withRouterConfig } from '@angular/router'; +import { provideHttpClient, withFetch } from '@angular/common/http'; +import { provideClientHydration } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; + +import { provideFastSVG } from '@push-based/ngx-fast-svg'; +import { provideAngularSvgIcon } from 'angular-svg-icon'; +import { provideIonicAngular } from '@ionic/angular/standalone'; + +import { appRoutes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideAnimations(), + provideClientHydration(), + provideHttpClient(withFetch()), + provideRouter(appRoutes, withRouterConfig({ urlUpdateStrategy: 'eager' })), + provideAngularSvgIcon(), + provideIonicAngular(), + provideFastSVG({ + url: (name: string) => `assets/svg-icons/${name}.svg`, + }), +], +}; diff --git a/packages/ngx-fast-icon-demo/src/app/app.module.ts b/packages/ngx-fast-icon-demo/src/app/app.module.ts index af41800..9d47d0e 100644 --- a/packages/ngx-fast-icon-demo/src/app/app.module.ts +++ b/packages/ngx-fast-icon-demo/src/app/app.module.ts @@ -1,98 +1,86 @@ import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; -import { RouterModule } from '@angular/router'; +import { + provideRouter, + RouterLink, + RouterLinkActive, + RouterOutlet, + withRouterConfig +} from '@angular/router'; import { HttpClientModule } from '@angular/common/http'; -import { DescriptionComponent } from './routes/description/description.component'; -import { CommonModule } from '@angular/common'; -import { IonicModule } from '@ionic/angular'; -import { BrowserModule, provideClientHydration } from '@angular/platform-browser'; -import { provideFastSVG } from '@push-based/ngx-fast-svg'; +import { IonicModule, } from '@ionic/angular'; +import { BrowserModule } from '@angular/platform-browser'; +import { FastSvgComponent, provideFastSVG } from '@push-based/ngx-fast-svg'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatDividerModule} from '@angular/material/divider'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import { provideAngularSvgIcon } from 'angular-svg-icon'; +import { ShellComponent } from './misc/shell.component'; @NgModule({ - declarations: [AppComponent], imports: [ - CommonModule, + BrowserAnimationsModule, + MatToolbarModule, + MatSidenavModule, + MatButtonModule, + MatIconModule, + MatDividerModule, HttpClientModule, BrowserModule, IonicModule.forRoot(), - RouterModule.forRoot( - [ - { - path: '', - pathMatch: 'full', - redirectTo: 'description', - }, - { - path: 'ngx-fast-icon', - loadChildren: () => - import('./misc/ngx-fast-svg/fast-svg-list.module').then( - (m) => m.FastSvgListModule - ), - }, - { - path: 'icon', - loadChildren: () => - import('./misc/angular-svg-icon/angular-svg-icon-list.module').then( - (m) => m.AngularSvgIconListModule - ), - }, - { - path: 'description', - component: DescriptionComponent, - }, - { - path: 'angular', - loadChildren: () => - import('./comparison/angular/angular.module').then( - (m) => m.AngularModule - ), - }, - { - path: 'material', - loadChildren: () => - import('./comparison/material/material.module').then( - (m) => m.MaterialComponentModule - ), - }, - { - path: 'ant', - loadChildren: () => - import('./comparison/ant/ant.module').then((m) => m.AntModule), - }, - { - path: 'ionic', - loadChildren: () => - import('./comparison/ionic/ionic.module').then( - (m) => m.IonicComponentModule - ), - }, - { - path: 'font-awesome', - loadChildren: () => - import('./comparison/font-awesome/font-awesome.module').then( - (m) => m.FontAwesomeRouteModule - ), - }, - { - path: 'fast-svg', - loadChildren: () => - import('./comparison/fast-icon/fast-icon.module').then( - (m) => m.FastIconRouteModule - ), - }, - /* { - path:'angular-material-icon', - loadChildren: () => import('./angular-material-icons-list/angular-material-icons-list.module').then(m => m.AngularMaterialIconListModule) - },*/ - ], - { initialNavigation: 'enabledBlocking' } - ), + RouterOutlet, + RouterLink, + RouterLinkActive, + FastSvgComponent, + ShellComponent, + AppComponent ], providers: [ provideFastSVG({ url: (name: string) => `assets/svg-icons/${name}.svg`, }), - // provideClientHydration(), + provideAngularSvgIcon(), + provideRouter( + [ + { + path: '', + pathMatch: 'full', + redirectTo: 'description' + }, + { + path: 'description', + loadComponent: () => import('./misc/description.component').then((c) => c.DescriptionComponent) + }, + { + path: 'angular', + loadComponent: () => import('./comparison/angular.component').then((c) => c.AngularComponent) + }, + { + path: 'material', + loadComponent: () => import('./comparison/material.component').then((c) => c.MaterialComponent) + }, + { + path: 'ant', + loadComponent: () => import('./comparison/ant.component').then((c) => c.AntComponent) + }, + { + path: 'ionic', + loadComponent: () => import('./comparison/ionic.component').then((c) => c.IonicComponent) + }, + { + path: 'font-awesome', + loadComponent: () => import('./comparison/font-awesome.component').then((c) => c.FontAwesomeComponent) + }, + { + path: 'fast-svg', + loadComponent: () => import('./comparison/fast-icon.component').then((c) => c.FastIconRouteComponent) + } + ], + withRouterConfig({ urlUpdateStrategy: 'eager' }) + ) ], bootstrap: [AppComponent], }) diff --git a/packages/ngx-fast-icon-demo/src/app/app.routes.ts b/packages/ngx-fast-icon-demo/src/app/app.routes.ts new file mode 100644 index 0000000..e98bd81 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/app.routes.ts @@ -0,0 +1,37 @@ +import { Route } from '@angular/router'; + +export const appRoutes: Route[] = [ + { + path: '', + pathMatch: 'full', + redirectTo: 'description' + }, + { + path: 'description', + loadComponent: () => import('./misc/description.component').then((c) => c.DescriptionComponent) + }, + { + path: 'angular', + loadComponent: () => import('./comparison/angular.component').then((c) => c.AngularComponent) + }, + { + path: 'material', + loadComponent: () => import('./comparison/material.component').then((c) => c.MaterialComponent) + }, + { + path: 'ant', + loadComponent: () => import('./comparison/ant.component').then((c) => c.AntComponent) + }, + { + path: 'ionic', + loadComponent: () => import('./comparison/ionic.component').then((c) => c.IonicComponent) + }, + { + path: 'font-awesome', + loadComponent: () => import('./comparison/font-awesome.component').then((c) => c.FontAwesomeComponent) + }, + { + path: 'fast-svg', + loadComponent: () => import('./comparison/fast-icon.component').then((c) => c.FastIconRouteComponent) + } +]; diff --git a/packages/ngx-fast-icon-demo/src/app/app.server.module.ts b/packages/ngx-fast-icon-demo/src/app/app.server.module.ts deleted file mode 100644 index c487566..0000000 --- a/packages/ngx-fast-icon-demo/src/app/app.server.module.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NgModule } from '@angular/core'; -import { - ServerModule, - ServerTransferStateModule, -} from '@angular/platform-server'; -import { AppModule } from './app.module'; -import { AppComponent } from './app.component'; -import { provideFastSVG } from '@push-based/ngx-fast-svg'; -import { SvgLoadStrategySsr } from './ngx-fast-icon-ssr/icon-load.ssr.strategy'; - -@NgModule({ - declarations: [], - imports: [ - AppModule, - /** - * **🚀 Perf Tip for LCP, CLS:** - * - * Setup SSR to increase LCP by shipping rendered HTML on first load. - */ - ServerModule, - ServerTransferStateModule, - ], - providers: [ - provideFastSVG({ - svgLoadStrategy: SvgLoadStrategySsr, - url: (name: string) => `assets/svg-icons/${name}.svg`, - }), - ], - bootstrap: [AppComponent], -}) -export class AppServerModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/angular.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/angular.component.ts new file mode 100644 index 0000000..5ee0866 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/comparison/angular.component.ts @@ -0,0 +1,49 @@ +import { Component } from '@angular/core'; +import { SUPPORTED_ICONS } from '../icon-data'; +import { IconTester } from '../misc/icon-tester.service'; +import { ControllerComponent } from '../misc/controller.component'; +import { AsyncPipe, NgClass } from '@angular/common'; +import { SvgIconComponent } from 'angular-svg-icon'; +import { FastSvgComponent } from '@push-based/ngx-fast-svg'; + +@Component({ + standalone: true, + template: ` + +
+ @for (list of (tester.lists | async); track $index) { +
    + @for (icon of list; track $index) { +
  • + +
  • + } +
+ } +
+ `, + styles: [` + .group { + list-style: none; + display: flex; + flex-wrap: wrap; + } + `], + imports: [ + ControllerComponent, + AsyncPipe, + NgClass, + SvgIconComponent, + FastSvgComponent + ] +}) +export class AngularComponent { + constructor(public tester: IconTester) { + this.tester.defineSet( + SUPPORTED_ICONS.map((i) => `assets/svg-icons/${i}.svg`) + ); + } +} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.html b/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.html deleted file mode 100644 index 51807d3..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.html +++ /dev/null @@ -1,28 +0,0 @@ -

Angular svg icon demo

-

Layout setting

-
- -
-

Content controls

-
- - - -
- -
-
    -
  • - -
  • -
-
diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.scss b/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.scss deleted file mode 100644 index 113da94..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -.group { - list-style: none; - display: flex; - flex-wrap: wrap; -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.ts deleted file mode 100644 index d2cdacb..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; -import { SUPPORTED_ICONS } from '../../icon-data'; -import { IconTester } from '../../misc/icons-tester/icon-tester.service'; - -@Component({ - templateUrl: './angular.component.html', - styleUrls: ['./angular.component.scss'], -}) -export class AngularComponent { - constructor(public tester: IconTester) { - this.tester.defineSet( - SUPPORTED_ICONS.map((i) => `assets/svg-icons/${i}.svg`) - ); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.module.ts b/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.module.ts deleted file mode 100644 index c8eae54..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/angular/angular.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { AngularSvgIconModule } from 'angular-svg-icon'; -import { AngularComponent } from './angular.component'; - -@NgModule({ - declarations: [AngularComponent], - imports: [ - CommonModule, - AngularSvgIconModule.forRoot(), - RouterModule.forChild([ - { - path: '', - component: AngularComponent, - }, - ]), - ], -}) -export class AngularModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ant/icons.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ant-icons.ts similarity index 100% rename from packages/ngx-fast-icon-demo/src/app/comparison/ant/icons.ts rename to packages/ngx-fast-icon-demo/src/app/comparison/ant-icons.ts diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ant.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ant.component.ts new file mode 100644 index 0000000..2793178 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/comparison/ant.component.ts @@ -0,0 +1,52 @@ +import { Component } from '@angular/core'; +import { IconModule, IconService as AntIconService } from '@ant-design/icons-angular'; +import { AccountBookFill } from '@ant-design/icons-angular/icons'; +import { SUPPORTED_ICONS } from '../icon-data'; +import { IconTester } from '../misc/icon-tester.service'; +import { ControllerComponent } from '../misc/controller.component'; +import { AsyncPipe, NgClass } from '@angular/common'; +import { IonicModule } from '@ionic/angular'; +import { AllIcons } from './ant-icons'; + +@Component({ + standalone: true, + template: ` + +
+ @for (list of (tester.lists | async); track $index) { +
    + @for (icon of list; track $index) { +
  • + +
  • + } +
+ } +
+ `, + styles: [` + .group { + list-style: none; + display: flex; + flex-wrap: wrap; + } + + i { + font-size: 30px; + } + `], + imports: [ + NgClass, + ControllerComponent, + IconModule, + AsyncPipe, + IonicModule + ] +}) +export class AntComponent { + constructor(private _iconService: AntIconService, public tester: IconTester) { + this.tester.defineSet(SUPPORTED_ICONS); + console.log(AccountBookFill); + this._iconService.addIcon(...(AllIcons as any)); + } +} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.html b/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.html deleted file mode 100644 index c0a6749..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.html +++ /dev/null @@ -1,25 +0,0 @@ -

Ant design icon demo

-

Layout setting

-
- -
-

Content controls

-
- - - -
- -
-
    -
  • - -
  • -
-
diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.scss b/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.scss deleted file mode 100644 index 17b6696..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.scss +++ /dev/null @@ -1,9 +0,0 @@ -.group { - list-style: none; - display: flex; - flex-wrap: wrap; -} - -i { - font-size: 30px; -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.ts deleted file mode 100644 index fc5288a..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Component } from '@angular/core'; -import { IconService as AntIconService } from '@ant-design/icons-angular'; -import { AccountBookFill } from '@ant-design/icons-angular/icons'; -import { SUPPORTED_ICONS } from '../../icon-data'; -import { IconTester } from '../../misc/icons-tester/icon-tester.service'; -import { AllIcons } from './icons'; -@Component({ - templateUrl: './ant.component.html', - styleUrls: ['./ant.component.scss'], -}) -export class AntComponent { - constructor(private _iconService: AntIconService, public tester: IconTester) { - this.tester.defineSet(SUPPORTED_ICONS); - console.log(AccountBookFill); - this._iconService.addIcon(...(AllIcons as any)); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.module.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.module.ts deleted file mode 100644 index 15169de..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ant/ant.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { AntComponent } from './ant.component'; -import { IconModule as AntIconsModule } from '@ant-design/icons-angular'; - -@NgModule({ - declarations: [AntComponent], - imports: [ - CommonModule, - AntIconsModule, - RouterModule.forChild([ - { - path: '', - component: AntComponent, - }, - ]), - ], -}) -export class AntModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon.component.ts new file mode 100644 index 0000000..4bd4ec5 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon.component.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core'; +import { SUPPORTED_ICONS } from '../icon-data'; +import { IconTester } from '../misc/icon-tester.service'; +import { ControllerComponent } from '../misc/controller.component'; +import { AsyncPipe, NgClass } from '@angular/common'; +import { FastSvgComponent } from '@push-based/ngx-fast-svg'; +@Component({ + standalone: true, + template: ` + +
+ @for (list of (tester.lists | async); track $index) { +
    + @for (icon of list; track $index) { +
  • + +
  • + } +
+ } +
+ `, + styles: [` + .group { + list-style: none; + display: flex; + flex-wrap: wrap; + } + `], + imports: [ + ControllerComponent, + NgClass, + AsyncPipe, + FastSvgComponent + ] +}) +export class FastIconRouteComponent { + constructor(public tester: IconTester) { + this.tester.defineSet(SUPPORTED_ICONS); + } +} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.html b/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.html deleted file mode 100644 index 44e8ab4..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.html +++ /dev/null @@ -1,25 +0,0 @@ -

Fast svg demo

-

Layout setting

-
- -
-

Content controls

-
- - - -
- -
-
    -
  • - -
  • -
-
diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.scss b/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.scss deleted file mode 100644 index 113da94..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -.group { - list-style: none; - display: flex; - flex-wrap: wrap; -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.ts deleted file mode 100644 index 0709f68..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; -import { SUPPORTED_ICONS } from '../../icon-data'; -import { IconTester } from '../../misc/icons-tester/icon-tester.service'; -@Component({ - templateUrl: './fast-icon.component.html', - styleUrls: ['./fast-icon.component.scss'], -}) -export class FastIconRouteComponent { - constructor(public tester: IconTester) { - this.tester.defineSet(SUPPORTED_ICONS); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.module.ts b/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.module.ts deleted file mode 100644 index 3d8b475..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/fast-icon/fast-icon.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { FastSvgComponent } from '@push-based/ngx-fast-svg'; -import { FastIconRouteComponent } from './fast-icon.component'; - -@NgModule({ - declarations: [FastIconRouteComponent], - imports: [ - RouterModule.forChild([ - { - path: '', - component: FastIconRouteComponent, - }, - ]), - CommonModule, - FastSvgComponent, - ], -}) -export class FastIconRouteModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome.component.ts new file mode 100644 index 0000000..60f459b --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome.component.ts @@ -0,0 +1,61 @@ +import { Component } from '@angular/core'; +import { faCircleUser } from '@fortawesome/free-solid-svg-icons'; +import { IconTester } from '../misc/icon-tester.service'; +import { ControllerComponent } from '../misc/controller.component'; +import { AsyncPipe, NgClass } from '@angular/common'; +import { FaIconComponent } from '@fortawesome/angular-fontawesome'; + +@Component({ + standalone: true, + template: ` + +
+ @for (list of (tester.lists | async); track $index) { +
    + @for (icon of list; track $index) { +
  • + +
  • + } +
+ } +
+ `, + styles: [` + .group { + list-style: none; + display: flex; + flex-wrap: wrap; + } + + li { + width: 30px; + height: 30px; + } + `], + imports: [ + ControllerComponent, + AsyncPipe, + NgClass, + FaIconComponent + ] +}) +export class FontAwesomeComponent { + constructor(public tester: IconTester) { + console.log(faCircleUser); + this.tester.defineSet([ + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + faCircleUser, + ]); + } +} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.html b/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.html deleted file mode 100644 index 2494077..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.html +++ /dev/null @@ -1,25 +0,0 @@ -

Font awesome icon demo

-

Layout setting

-
- -
-

Content controls

-
- - - -
- -
-
    -
  • - -
  • -
-
diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.scss b/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.scss deleted file mode 100644 index 7564456..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.scss +++ /dev/null @@ -1,10 +0,0 @@ -.group { - list-style: none; - display: flex; - flex-wrap: wrap; -} - -li { - width: 30px; - height: 30px; -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.ts deleted file mode 100644 index 0c7f249..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.component.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Component } from '@angular/core'; -import { faCircleUser } from '@fortawesome/free-solid-svg-icons'; -import { IconTester } from '../../misc/icons-tester/icon-tester.service'; - -@Component({ - templateUrl: './font-awesome.component.html', - styleUrls: ['./font-awesome.component.scss'], -}) -export class FontAwesomeComponent { - constructor(public tester: IconTester) { - console.log(faCircleUser); - this.tester.defineSet([ - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - faCircleUser, - ]); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.module.ts b/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.module.ts deleted file mode 100644 index 6abb749..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/font-awesome/font-awesome.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -import { FontAwesomeComponent } from './font-awesome.component'; - -@NgModule({ - declarations: [FontAwesomeComponent], - imports: [ - CommonModule, - FontAwesomeModule, - RouterModule.forChild([ - { - path: '', - component: FontAwesomeComponent, - }, - ]), - ], -}) -export class FontAwesomeRouteModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ionic.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ionic.component.ts new file mode 100644 index 0000000..e25768a --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/comparison/ionic.component.ts @@ -0,0 +1,44 @@ +import { Component } from '@angular/core'; +import { SUPPORTED_ICONS } from '../icon-data'; +import { IconTester } from '../misc/icon-tester.service'; +import { AsyncPipe, NgClass } from '@angular/common'; +import { IonicModule } from '@ionic/angular'; +import { ControllerComponent } from '../misc/controller.component'; + +@Component({ + standalone: true, + imports: [ + NgClass, + AsyncPipe, + IonicModule, + ControllerComponent + ], + template: ` + +
+ @for (list of (tester.lists | async); track $index) { +
    + @for (icon of list; track $index) { +
  • + +
  • + } +
+ } +
+ `, + styles: [` + .group { + list-style: none; + display: flex; + flex-wrap: wrap; + } + `] +}) +export class IonicComponent { + constructor(public tester: IconTester) { + this.tester.defineSet( + SUPPORTED_ICONS.map((i) => `assets/svg-icons/${i}.svg`) + ); + } +} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.html b/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.html deleted file mode 100644 index 710975f..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.html +++ /dev/null @@ -1,25 +0,0 @@ -

Ionic icon demo

-

Layout setting

-
- -
-

Content controls

-
- - - -
- -
-
    -
  • - -
  • -
-
diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.scss b/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.scss deleted file mode 100644 index 113da94..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -.group { - list-style: none; - display: flex; - flex-wrap: wrap; -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.ts deleted file mode 100644 index c102d98..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; -import { SUPPORTED_ICONS } from '../../icon-data'; -import { IconTester } from '../../misc/icons-tester/icon-tester.service'; - -@Component({ - templateUrl: './ionic.component.html', - styleUrls: ['./ionic.component.scss'], -}) -export class IonicComponent { - constructor(public tester: IconTester) { - this.tester.defineSet( - SUPPORTED_ICONS.map((i) => `assets/svg-icons/${i}.svg`) - ); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.module.ts b/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.module.ts deleted file mode 100644 index 692f46d..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/ionic/ionic.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { IonicModule } from '@ionic/angular'; -import { IonicComponent } from './ionic.component'; - -@NgModule({ - declarations: [IonicComponent], - imports: [ - CommonModule, - IonicModule, - RouterModule.forChild([ - { - path: '', - component: IonicComponent, - }, - ]), - ], -}) -export class IonicComponentModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/material.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/material.component.ts new file mode 100644 index 0000000..6199ab9 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/comparison/material.component.ts @@ -0,0 +1,62 @@ +import { Component } from '@angular/core'; +import { MatIconModule, MatIconRegistry } from '@angular/material/icon'; +import { DomSanitizer } from '@angular/platform-browser'; +import { SUPPORTED_ICONS } from '../icon-data'; +import { IconTester } from '../misc/icon-tester.service'; +import { AsyncPipe, NgClass } from '@angular/common'; +import { IonicModule } from '@ionic/angular'; +import { ControllerComponent } from '../misc/controller.component'; + +@Component({ + template: ` + +
+ @for (list of (tester.lists | async); track $index) { +
    + @for (icon of list; track $index) { +
  • + +
  • + } +
+ } +
+ `, + styles: [` + .group { + list-style: none; + display: flex; + flex-wrap: wrap; + } + + .mat-icon { + width: 30px; + height: 30px; + } + `], + imports: [ + NgClass, + AsyncPipe, + MatIconModule, + IonicModule, + ControllerComponent + ], + standalone: true +}) +export class MaterialComponent { + constructor( + private domSanitizer: DomSanitizer, + private matIconRegistry: MatIconRegistry, + public tester: IconTester + ) { + this.tester.defineSet(SUPPORTED_ICONS); + SUPPORTED_ICONS.forEach((i) => { + this.matIconRegistry.addSvgIcon( + i, + this.domSanitizer.bypassSecurityTrustResourceUrl( + `assets/svg-icons/${i}.svg` + ) + ); + }); + } +} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.html b/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.html deleted file mode 100644 index 68977e0..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.html +++ /dev/null @@ -1,25 +0,0 @@ -

Material icon demo

-

Layout setting

-
- -
-

Content controls

-
- - - -
- -
-
    -
  • - -
  • -
-
diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.scss b/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.scss deleted file mode 100644 index 0443c0c..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.scss +++ /dev/null @@ -1,10 +0,0 @@ -.group { - list-style: none; - display: flex; - flex-wrap: wrap; -} - -.mat-icon { - width: 30px; - height: 30px; -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.ts b/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.ts deleted file mode 100644 index 69f5f5f..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import { MatIconRegistry } from '@angular/material/icon'; -import { DomSanitizer } from '@angular/platform-browser'; -import { SUPPORTED_ICONS } from '../../icon-data'; -import { IconTester } from '../../misc/icons-tester/icon-tester.service'; - -@Component({ - templateUrl: './material.component.html', - styleUrls: ['./material.component.scss'], -}) -export class MaterialComponent { - iconUrl = this.domSanitizer.bypassSecurityTrustResourceUrl( - 'assets/svg-icons/account.svg' - ); - constructor( - private domSanitizer: DomSanitizer, - private matIconRegistry: MatIconRegistry, - public tester: IconTester - ) { - this.tester.defineSet(SUPPORTED_ICONS); - SUPPORTED_ICONS.forEach((i) => { - this.matIconRegistry.addSvgIcon( - i, - this.domSanitizer.bypassSecurityTrustResourceUrl( - `assets/svg-icons/${i}.svg` - ) - ); - }); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.module.ts b/packages/ngx-fast-icon-demo/src/app/comparison/material/material.module.ts deleted file mode 100644 index 41198db..0000000 --- a/packages/ngx-fast-icon-demo/src/app/comparison/material/material.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { MatIconModule } from '@angular/material/icon'; -import { RouterModule } from '@angular/router'; -import { MaterialComponent } from './material.component'; - -@NgModule({ - declarations: [MaterialComponent], - imports: [ - CommonModule, - MatIconModule, - RouterModule.forChild([ - { - path: '', - component: MaterialComponent, - }, - ]), - ], -}) -export class MaterialComponentModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/angular-material-icons-list/angular-material-icon-list.component.ts b/packages/ngx-fast-icon-demo/src/app/misc/angular-material-icons-list/angular-material-icon-list.component.ts deleted file mode 100644 index 21a680e..0000000 --- a/packages/ngx-fast-icon-demo/src/app/misc/angular-material-icons-list/angular-material-icon-list.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { SUPPORTED_ICONS } from '../../icon-data'; - -@Component({ - selector: 'angular-material-icon', - template: ` -

angular-material-icon

-

- -

-
    -
  • - {{icon}} -
  • -
- `, - encapsulation: ViewEncapsulation.None -}) -export class AngularMaterialIconListComponent { - readonly icons: string[] = [...SUPPORTED_ICONS]; - lists: string[][] = []; - - add() { - this.lists.push(this.icons); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/angular-material-icons-list/angular-material-icon-list.module.ts b/packages/ngx-fast-icon-demo/src/app/misc/angular-material-icons-list/angular-material-icon-list.module.ts deleted file mode 100644 index b15f3df..0000000 --- a/packages/ngx-fast-icon-demo/src/app/misc/angular-material-icons-list/angular-material-icon-list.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { AngularMaterialIconListComponent } from './angular-material-icon-list.component'; -import { MatIconModule } from '@angular/material/icon'; -import { CommonModule } from '@angular/common'; - -@NgModule({ - declarations: [AngularMaterialIconListComponent], - imports: [ - CommonModule, - MatIconModule, - RouterModule.forChild([ - { - path: '', - component: AngularMaterialIconListComponent - } - ]) - ] -}) -export class AngularMaterialIconListModule { - -} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/angular-svg-icon/angular-svg-icon-list.component.ts b/packages/ngx-fast-icon-demo/src/app/misc/angular-svg-icon/angular-svg-icon-list.component.ts deleted file mode 100644 index 1d3bc42..0000000 --- a/packages/ngx-fast-icon-demo/src/app/misc/angular-svg-icon/angular-svg-icon-list.component.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { SUPPORTED_ICONS } from '../../icon-data'; - -@Component({ - selector: 'angular-svg-icon-list', - template: ` -

angular-svg-icon

-

- -

-
    -
  • - -
  • -
- `, - encapsulation: ViewEncapsulation.None -}) -export class AngularSvgIconListComponent { - readonly icons: string[] = [...SUPPORTED_ICONS]; - lists: string[][] = []; - - add() { - this.lists.push(this.icons); - } -} - diff --git a/packages/ngx-fast-icon-demo/src/app/misc/angular-svg-icon/angular-svg-icon-list.module.ts b/packages/ngx-fast-icon-demo/src/app/misc/angular-svg-icon/angular-svg-icon-list.module.ts deleted file mode 100644 index 72c4af2..0000000 --- a/packages/ngx-fast-icon-demo/src/app/misc/angular-svg-icon/angular-svg-icon-list.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { AngularSvgIconListComponent } from './angular-svg-icon-list.component'; -import { AngularSvgIconModule } from 'angular-svg-icon'; -import { CommonModule } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; - -@NgModule({ - declarations: [AngularSvgIconListComponent], - imports: [ - CommonModule, - HttpClientModule, - AngularSvgIconModule.forRoot(), - RouterModule.forChild([ - { - path: '', - component: AngularSvgIconListComponent - } - ]) - ] -}) -export class AngularSvgIconListModule { - -} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/controller.component.ts b/packages/ngx-fast-icon-demo/src/app/misc/controller.component.ts new file mode 100644 index 0000000..12a5a5b --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/misc/controller.component.ts @@ -0,0 +1,35 @@ +import { Component, Input } from '@angular/core'; +import { IconTester } from './icon-tester.service'; +import { AsyncPipe, NgClass } from '@angular/common'; + +@Component({ + standalone: true, + selector: 'app-controller', + imports: [ + AsyncPipe, + NgClass + ], + template: ` +

{{demoLib}} demo

+

Layout setting

+
+ @for (button of tester.buttons; track $index) { + + } +
+

Content controls

+
+ + + +
+ ` +}) +export class ControllerComponent { + @Input({required: true}) demoLib!: string; + @Input({required: true}) tester!: IconTester; +} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/description.component.ts b/packages/ngx-fast-icon-demo/src/app/misc/description.component.ts new file mode 100644 index 0000000..bfe7c9a --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/misc/description.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; + +@Component({ + standalone: true, + selector: 'app-desc', + template: ` +

Performance comparison of different svg-icons solutions in Angular

+
    +
  1. Select library on the left
  2. +
  3. Start performance recording
  4. +
  5. Click "Add" button
  6. +
+ `, +}) +export class DescriptionComponent {} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/icons-tester/icon-tester.service.ts b/packages/ngx-fast-icon-demo/src/app/misc/icon-tester.service.ts similarity index 100% rename from packages/ngx-fast-icon-demo/src/app/misc/icons-tester/icon-tester.service.ts rename to packages/ngx-fast-icon-demo/src/app/misc/icon-tester.service.ts diff --git a/packages/ngx-fast-icon-demo/src/app/misc/ngx-fast-svg/fast-svg-list.component.ts b/packages/ngx-fast-icon-demo/src/app/misc/ngx-fast-svg/fast-svg-list.component.ts deleted file mode 100644 index f6afa21..0000000 --- a/packages/ngx-fast-icon-demo/src/app/misc/ngx-fast-svg/fast-svg-list.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component, ViewEncapsulation } from '@angular/core'; -import { SUPPORTED_ICONS } from '../../icon-data'; - -@Component({ - selector: 'fast-svg-list', - template: ` -

ngx-fast-svg

-

- -

-
    -
  • - -
  • -
- `, - encapsulation: ViewEncapsulation.None, -}) -export class FastSvgListComponent { - readonly icons: string[] = [...SUPPORTED_ICONS]; - lists: string[][] = []; - - add() { - this.lists.push(this.icons); - } -} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/ngx-fast-svg/fast-svg-list.module.ts b/packages/ngx-fast-icon-demo/src/app/misc/ngx-fast-svg/fast-svg-list.module.ts deleted file mode 100644 index 4198f07..0000000 --- a/packages/ngx-fast-icon-demo/src/app/misc/ngx-fast-svg/fast-svg-list.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { FastSvgListComponent } from './fast-svg-list.component'; -import { FastSvgModule } from '@push-based/ngx-fast-svg'; -import { CommonModule } from '@angular/common'; - -@NgModule({ - declarations: [FastSvgListComponent], - imports: [ - CommonModule, - FastSvgModule.forRoot({ - url: (name: string) => `assets/svg-icons/${name}.svg`, - }), - RouterModule.forChild([ - { - path: '', - component: FastSvgListComponent, - }, - ]), - ], -}) -export class FastSvgListModule {} diff --git a/packages/ngx-fast-icon-demo/src/app/misc/shell.component.ts b/packages/ngx-fast-icon-demo/src/app/misc/shell.component.ts new file mode 100644 index 0000000..e7a3d8d --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/app/misc/shell.component.ts @@ -0,0 +1,275 @@ +import { Component, Input, ViewChild } from '@angular/core'; +import { AsyncPipe } from '@angular/common'; +import { FastSvgComponent } from '@push-based/ngx-fast-svg'; +import { IonicModule } from '@ionic/angular'; +import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { Params, RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router'; +import { MatDividerModule } from '@angular/material/divider'; + +@Component({ + selector: 'app-shell', + template: ` +
+ + + + +

ngx-fast-svg

+
+
+ + + + + +
+ +
+
+
+
+
+ `, + styles: [` + .title { + margin: auto; + font-size: x-large; + } + + .header { + position: relative; + z-index: 1090; + border-right: 3px solid; + height: 100%; + transition: border-color 0.2s ease-in-out; + } + + .header-toolbar { + border-bottom: 3px solid rgba(128, 128, 128, 0.3); + } + + .header-is-mobile.header-toolbar { + position: fixed; + z-index: 2; + background: inherit; + } + + .mat-drawer-container { + width: 100%; + } + + .link { + padding: 16px; + display: block; + transition: background-color 0.2s ease-in-out; + text-decoration: none; + color: #fff; + font-weight: bold; + text-transform: uppercase; + background: none !important; + + &.active { + &.description { + background-color: var(--description-border-color) !important; + } + &.angular { + background-color: var(--angular-border-color) !important; + } + &.ant { + background-color: var(--ant-border-color) !important; + } + &.ionic { + background-color: var(--ionic-border-color) !important; + } + &.font-awesome { + background-color: var(--font-awesome-border-color) !important; + } + &.fast-svg { + background-color: var(--pb-border-color) !important; + } + &.material { + background-color: var(--material-border-color) !important; + } + } + } + + .row { + display: flex; + flex-wrap: wrap; + width: 100%; + height: 100%; + } + + .sidebar { + width: 175px; + height: 100%; + } + + .content { + height: 100%; + overflow: auto; + padding: 0 16px; + } + + :host::ng-deep { + .angular { + background-color: var(--angular-color); + + button { + background-color: var(--angular-border-color); + + &.active { + background: transparent; + border: 2px solid var(--angular-border-color); + } + } + } + .description { + background-color: var(--description-color); + } + .ant { + background-color: var(--ant-color); + + button { + background-color: var(--ant-border-color); + + &.active { + background: transparent; + border: 2px solid var(--ant-border-color); + } + } + } + .ionic { + background-color: var(--ionic-color); + + button { + background-color: var(--ionic-border-color); + + &.active { + background: transparent; + border: 2px solid var(--ionic-border-color); + } + } + } + .font-awesome { + background-color: var(--font-awesome-color); + + button { + background-color: var(--font-awesome-border-color); + + &.active { + background: transparent; + border: 2px solid var(--font-awesome-border-color); + } + } + } + .fast-svg { + background-color: var(--pb-color); + + button { + background-color: var(--pb-border-color); + + &.active { + background: transparent; + border: 2px solid var(--pb-border-color); + } + } + } + #nav-icon > .fast-svg { + background-color: transparent; + margin-top: 10px; + } + .material { + background-color: var(--material-color); + + button { + background-color: var(--material-border-color); + + &.active { + background: transparent; + border: 2px solid var(--material-border-color); + } + } + } + } + + button { + border: 2px solid transparent; + } + + :host::ng-deep .root { + height: 100%; + overflow: auto; + width: 100%; + transition: background-color 0.2s ease-in-out; + + &.angular { + .header { + border-right-color: var(--angular-border-color); + } + } + &.description { + .header { + border-right-color: var(--description-border-color); + } + } + &.ant { + .header { + border-right-color: var(--ant-border-color); + } + } + &.ionic { + .header { + border-right-color: var(--ionic-border-color); + } + } + &.font-awesome { + .header { + border-right-color: var(--font-awesome-border-color); + } + } + &.fast-svg { + .header { + border-right-color: var(--pb-border-color); + } + } + &.material { + .header { + border-right-color: var(--material-border-color); + } + } + } + `], + standalone: true, + imports: [ + AsyncPipe, + FastSvgComponent, + IonicModule, + MatSidenavModule, + MatToolbarModule, + RouterOutlet, + RouterLink, + RouterLinkActive, + MatDividerModule + ] +}) +export class ShellComponent { + @Input({required: true}) rootClass!: string; + @Input({required: true}) isMobile!: boolean; + @Input({required: true}) links!: string[]; + @Input({required: true}) queryParams!: Params; + @ViewChild(MatSidenav) sideNav!: MatSidenav; +} diff --git a/packages/ngx-fast-icon-demo/src/app/ngx-fast-icon-ssr/icon-load.ssr.strategy.ts b/packages/ngx-fast-icon-demo/src/app/ngx-fast-icon-ssr/icon-load.ssr.strategy.ts index 381f4d3..2c6fe9e 100644 --- a/packages/ngx-fast-icon-demo/src/app/ngx-fast-icon-ssr/icon-load.ssr.strategy.ts +++ b/packages/ngx-fast-icon-demo/src/app/ngx-fast-icon-ssr/icon-load.ssr.strategy.ts @@ -1,16 +1,17 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { SvgLoadStrategy } from '@push-based/ngx-fast-svg'; -import { join } from 'path'; +import { join } from 'node:path'; import { readFileSync } from 'fs'; + @Injectable() export class SvgLoadStrategySsr implements SvgLoadStrategy { load(url: string): Observable { const iconPath = join( process.cwd(), - 'dist', + 'packages', 'ngx-fast-icon-demo', - 'browser', + 'src', url ); const iconSVG = readFileSync(iconPath, 'utf8'); diff --git a/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.html b/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.html deleted file mode 100644 index efd5ccf..0000000 --- a/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.html +++ /dev/null @@ -1,6 +0,0 @@ -

Performance comparison of different svg-icons solutions in Angular

-
    -
  1. Select library on the left
  2. -
  3. Start performance recording
  4. -
  5. Click "Add" button
  6. -
diff --git a/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.scss b/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.ts b/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.ts deleted file mode 100644 index 40ee6e0..0000000 --- a/packages/ngx-fast-icon-demo/src/app/routes/description/description.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - templateUrl: './description.component.html', - styleUrls: ['./description.component.scss'], -}) -export class DescriptionComponent {} diff --git a/packages/ngx-fast-icon-demo/src/assets/svg-icons/menu.svg b/packages/ngx-fast-icon-demo/src/assets/svg-icons/menu.svg new file mode 100644 index 0000000..c813e57 --- /dev/null +++ b/packages/ngx-fast-icon-demo/src/assets/svg-icons/menu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/ngx-fast-icon-demo/src/environments/environment.prod.ts b/packages/ngx-fast-icon-demo/src/environments/environment.prod.ts deleted file mode 100644 index c966979..0000000 --- a/packages/ngx-fast-icon-demo/src/environments/environment.prod.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const environment = { - production: true, -}; diff --git a/packages/ngx-fast-icon-demo/src/environments/environment.ts b/packages/ngx-fast-icon-demo/src/environments/environment.ts deleted file mode 100644 index 66998ae..0000000 --- a/packages/ngx-fast-icon-demo/src/environments/environment.ts +++ /dev/null @@ -1,16 +0,0 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false, -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/packages/ngx-fast-icon-demo/src/index.html b/packages/ngx-fast-icon-demo/src/index.html index 27cadce..2450ec3 100644 --- a/packages/ngx-fast-icon-demo/src/index.html +++ b/packages/ngx-fast-icon-demo/src/index.html @@ -11,6 +11,128 @@ /> + diff --git a/packages/ngx-fast-icon-demo/src/main.server.ts b/packages/ngx-fast-icon-demo/src/main.server.ts index e1f95b5..4b9d4d1 100644 --- a/packages/ngx-fast-icon-demo/src/main.server.ts +++ b/packages/ngx-fast-icon-demo/src/main.server.ts @@ -1,18 +1,7 @@ -/*************************************************************************************************** - * Initialize the server environment - for example, adding DOM built-in types to the global scope. - * - * NOTE: - * This import must come before any imports (direct or transitive) that rely on DOM built-ins being - * available, such as `@angular/elements`. - */ -import '@angular/platform-server/init'; +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { config } from './app/app.config.server'; -import { enableProdMode } from '@angular/core'; +const bootstrap = () => bootstrapApplication(AppComponent, config); -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -export { AppServerModule } from './app/app.server.module'; +export default bootstrap; diff --git a/packages/ngx-fast-icon-demo/src/main.ts b/packages/ngx-fast-icon-demo/src/main.ts index 46feec7..514c89a 100644 --- a/packages/ngx-fast-icon-demo/src/main.ts +++ b/packages/ngx-fast-icon-demo/src/main.ts @@ -1,19 +1,7 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -document.addEventListener('DOMContentLoaded', () => { - platformBrowserDynamic() - .bootstrapModule(AppModule) - .catch((err) => console.log(err)); -}); - -// platformBrowserDynamic() -// .bootstrapModule(AppModule) -// .catch((err) => console.error(err)); +bootstrapApplication(AppComponent, appConfig).catch((err) => + console.error(err) +); diff --git a/packages/ngx-fast-icon-demo/src/polyfills.ts b/packages/ngx-fast-icon-demo/src/polyfills.ts deleted file mode 100644 index e4555ed..0000000 --- a/packages/ngx-fast-icon-demo/src/polyfills.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/packages/ngx-fast-icon-demo/src/server.ts.bak b/packages/ngx-fast-icon-demo/src/server.ts.bak deleted file mode 100644 index 4c5947b..0000000 --- a/packages/ngx-fast-icon-demo/src/server.ts.bak +++ /dev/null @@ -1,88 +0,0 @@ -import 'zone.js/dist/zone-node'; - -import { ngExpressEngine } from '@angular/ssr'; -import * as express from 'express'; -import { join } from 'path'; -import * as compressionModule from 'compression'; - -import { AppServerModule } from './main.server'; -import { APP_BASE_HREF } from '@angular/common'; -import { existsSync } from 'fs'; - -// The Express app is exported so that it can be used by serverless Functions. -export function app(): express.Express { - const server = express(); - - const distFolder = join(process.cwd(), 'dist/ngx-fast-icon-demo/browser'); - const indexHtml = existsSync(join(distFolder, 'index.original.html')) - ? 'index.original.html' - : 'index.html'; - - // patchWindow(indexHtml); - - // **🚀 Perf Tip:** - // Serve gzip for faster load - server.use(compressionModule()); - - // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine) - server.engine( - 'html', - ngExpressEngine({ - bootstrap: AppServerModule, - }) - ); - - server.set('view engine', 'html'); - server.set('views', distFolder); - - // Example Express Rest API endpoints - // server.get('/api/**', (req, res) => { }); - // Serve static files from /browser - server.get( - '*.*', - express.static(distFolder, { - maxAge: '1y', - - // missing assets results in 404 instead of continuing to next route handler (and rendering route) - fallthrough: false, - }) - ); - - // All regular routes use the Universal engine - server.get('*', (req, res) => { - // return rendered HTML including Angular generated DOM - res.render(indexHtml, { - req, - providers: [ - { - provide: APP_BASE_HREF, - useValue: req.baseUrl, - }, - ], - }); - }); - - return server; -} - -function run(): void { - const port = process.env['PORT'] || 4000; - - // Start up the Node server - const server = app(); - server.listen(port, () => { - console.log(`Node Express server listening on http://localhost:${port}`); - }); -} - -// Webpack will replace 'require' with '__webpack_require__' -// '__non_webpack_require__' is a proxy to Node 'require' -// The below code is to ensure that the server is run only when not requiring the bundle. -declare const __non_webpack_require__: NodeRequire; -const mainModule = __non_webpack_require__.main; -const moduleFilename = (mainModule && mainModule.filename) || ''; -if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { - run(); -} - -export * from './main.server'; diff --git a/packages/ngx-fast-icon-demo/src/styles.scss b/packages/ngx-fast-icon-demo/src/styles.scss index 4f08865..e69de29 100644 --- a/packages/ngx-fast-icon-demo/src/styles.scss +++ b/packages/ngx-fast-icon-demo/src/styles.scss @@ -1,120 +0,0 @@ -:root { - --angular-color: #e14a2b; - --angular-border-color: #b43b22; - --ionic-color: #3579f2; - --ionic-border-color: #2a60c1; - --font-awesome-color: #59a483; - --font-awesome-border-color: #478368; - --material-color: #eb8400; - --material-border-color: #bc6900; - --ant-color: #e44f50; - --ant-border-color: #b63f40; - --pb-color: #2b0163; - --pb-border-color: #22004f; - --description-color: #864bd3; - --description-border-color: #6b3ca8; - --row-margin-top: 32px; - --group-margin: 0; -} - -html, -body { - font-family: 'Mulish', 'Tahoma', sans-serif; - color: #fff; - margin: 0; - height: 100%; -} - -* { - box-sizing: border-box; -} - -ul.loading-demo { - width: 10px; - float: left; - list-style: none; -} -ul.loading-demo li { - margin-bottom: 400px; - text-decoration: none; -} - -/* All Work -Changing width does trigger geometry changes and therefore layout. -Changing color does trigger paint. -*/ -.animation { - width: 300px; - background-color: transparent; -} -.animation:hover { - animation: a 500ms infinite alternate; -} - -button { - background: none; - border: none; - color: #fff; - padding: 16px; - font-weight: bold; - text-transform: uppercase; - transition: background-color 0.2s ease-in-out; - cursor: pointer; - border-radius: 4px; - min-width: 200px; - font-size: 16px; - margin-right: 16px; -} - -.buttons-wrapper { - display: flex; - flex-wrap: wrap; -} - -@keyframes a { - 0% { - background-color: red; - width: 300px; - } - 100% { - background-color: blue; - width: 100px; - } -} - -ol { - font-size: 1.5em; -} - -.row { - display: flex; - flex-wrap: wrap; -} - -.on-screen { - .group, li { - margin: 0; - } - .row &.icons { - margin-top: 32px; - } -} - -.off-screen { - .group, li { - margin: 0; - } - .row &.icons { - margin-top: 100vh; - } -} - -.distributed { - .group, li { - margin: 14%; - } - .row &.icons { - margin-top: 32px; - } - -} diff --git a/packages/ngx-fast-icon-demo/src/test-setup.ts b/packages/ngx-fast-icon-demo/src/test-setup.ts deleted file mode 100644 index 1100b3e..0000000 --- a/packages/ngx-fast-icon-demo/src/test-setup.ts +++ /dev/null @@ -1 +0,0 @@ -import 'jest-preset-angular/setup-jest'; diff --git a/packages/ngx-fast-icon-demo/tsconfig.app.json b/packages/ngx-fast-icon-demo/tsconfig.app.json index 0956258..453194e 100644 --- a/packages/ngx-fast-icon-demo/tsconfig.app.json +++ b/packages/ngx-fast-icon-demo/tsconfig.app.json @@ -2,11 +2,9 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "../../dist/out-tsc", - "types": [], - "target": "ES2022", - "useDefineForClassFields": false + "types": ["node"] }, - "files": ["src/main.ts", "src/polyfills.ts"], + "files": ["src/main.ts", "src/main.server.ts", "server.ts"], "include": ["src/**/*.d.ts"], - "exclude": ["**/*.test.ts", "**/*.spec.ts", "jest.config.ts"] + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/packages/ngx-fast-icon-demo/tsconfig.editor.json b/packages/ngx-fast-icon-demo/tsconfig.editor.json index 1bf3c0a..b927bb6 100644 --- a/packages/ngx-fast-icon-demo/tsconfig.editor.json +++ b/packages/ngx-fast-icon-demo/tsconfig.editor.json @@ -1,8 +1,7 @@ { "extends": "./tsconfig.json", - "include": ["**/*.ts"], + "include": ["src/**/*.ts"], "compilerOptions": { - "types": ["jest", "node"] - }, - "exclude": ["jest.config.ts"] + "types": ["node"] + } } diff --git a/packages/ngx-fast-icon-demo/tsconfig.json b/packages/ngx-fast-icon-demo/tsconfig.json index 7e68646..cd3727d 100644 --- a/packages/ngx-fast-icon-demo/tsconfig.json +++ b/packages/ngx-fast-icon-demo/tsconfig.json @@ -1,28 +1,28 @@ { - "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, "files": [], "include": [], "references": [ { "path": "./tsconfig.app.json" }, - { - "path": "./tsconfig.spec.json" - }, { "path": "./tsconfig.editor.json" } ], - "compilerOptions": { - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "target": "es2020" - }, + "extends": "../../tsconfig.base.json", "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, "strictInputAccessModifiers": true, "strictTemplates": true diff --git a/packages/ngx-fast-icon-demo/tsconfig.server.json b/packages/ngx-fast-icon-demo/tsconfig.server.json deleted file mode 100644 index 367fd9e..0000000 --- a/packages/ngx-fast-icon-demo/tsconfig.server.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.app.json", - "compilerOptions": { - "outDir": "../out-tsc/server", - "target": "ES2022", - "types": ["node"], - "useDefineForClassFields": false - }, - "files": ["src/main.server.ts", "src/server.ts"], - "angularCompilerOptions": { - "entryModule": "./src/app/app.server.module#AppServerModule" - } -} diff --git a/packages/ngx-fast-icon-demo/tsconfig.spec.json b/packages/ngx-fast-icon-demo/tsconfig.spec.json deleted file mode 100644 index b2cc608..0000000 --- a/packages/ngx-fast-icon-demo/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "files": ["src/test-setup.ts"], - "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] -}