From 7cdf8ec3c2ca4651b611e47b3fc2c6dbc0f2705e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 Nov 2026 21:25:35 -0800 Subject: [PATCH] Chore: ditch the abandoned ngx-bootstrap-icons, roll our own (#14665) --- src-ui/angular.json | 3 + .../e2e/document-list/document-list.spec.ts | 2 +- src-ui/jest.config.js | 2 +- src-ui/package.json | 2 +- src-ui/pnpm-lock.yaml | 24 +- src-ui/src/app/app.component.spec.ts | 2 - .../admin/config/config.component.html | 6 +- .../admin/config/config.component.spec.ts | 2 - .../admin/config/config.component.ts | 4 +- .../admin/logs/logs.component.spec.ts | 2 - .../admin/settings/settings.component.html | 18 +- .../admin/settings/settings.component.spec.ts | 2 - .../admin/settings/settings.component.ts | 4 +- .../admin/tasks/tasks.component.html | 22 +- .../admin/tasks/tasks.component.spec.ts | 2 - .../components/admin/tasks/tasks.component.ts | 4 +- .../admin/trash/trash.component.html | 16 +- .../admin/trash/trash.component.spec.ts | 2 - .../components/admin/trash/trash.component.ts | 4 +- .../users-groups/users-groups.component.html | 12 +- .../users-groups.component.spec.ts | 2 - .../users-groups/users-groups.component.ts | 4 +- .../app-frame/app-frame.component.html | 72 ++-- .../app-frame/app-frame.component.scss | 16 +- .../app-frame/app-frame.component.spec.ts | 2 - .../app-frame/app-frame.component.ts | 4 +- .../global-search.component.html | 18 +- .../global-search.component.scss | 6 +- .../global-search.component.spec.ts | 2 - .../global-search/global-search.component.ts | 4 +- .../toasts-dropdown.component.html | 6 +- .../toasts-dropdown.component.spec.ts | 6 +- .../toasts-dropdown.component.ts | 4 +- .../components/chat/chat/chat.component.html | 12 +- .../chat/chat/chat.component.spec.ts | 7 +- .../components/chat/chat/chat.component.ts | 4 +- .../bootstrap-icon.component.spec.ts | 61 ++++ .../bootstrap-icon.component.ts | 54 +++ .../components/common/bootstrap-icon/icons.ts | 317 ++++++++++++++++++ .../clearable-badge.component.html | 4 +- .../clearable-badge.component.spec.ts | 6 +- .../clearable-badge.component.ts | 4 +- .../confirm-button.component.html | 2 +- .../confirm-button.component.spec.ts | 7 +- .../confirm-button.component.ts | 4 +- ...-as-versions-confirm-dialog.component.html | 2 +- ...-versions-confirm-dialog.component.spec.ts | 6 +- ...ge-as-versions-confirm-dialog.component.ts | 4 +- .../merge-confirm-dialog.component.html | 2 +- .../merge-confirm-dialog.component.spec.ts | 8 +- .../merge-confirm-dialog.component.ts | 4 +- ...word-removal-confirm-dialog.component.html | 4 +- ...d-removal-confirm-dialog.component.spec.ts | 6 +- ...ssword-removal-confirm-dialog.component.ts | 4 +- .../rotate-confirm-dialog.component.html | 4 +- .../rotate-confirm-dialog.component.spec.ts | 6 +- .../rotate-confirm-dialog.component.ts | 4 +- .../custom-field-display.component.html | 2 +- .../custom-fields-dropdown.component.html | 4 +- .../custom-fields-dropdown.component.spec.ts | 2 - .../custom-fields-dropdown.component.ts | 4 +- ...ustom-fields-query-dropdown.component.html | 16 +- ...om-fields-query-dropdown.component.spec.ts | 2 - .../custom-fields-query-dropdown.component.ts | 4 +- .../dates-dropdown.component.html | 34 +- .../dates-dropdown.component.spec.ts | 2 - .../dates-dropdown.component.ts | 6 +- .../custom-field-edit-dialog.component.html | 2 +- ...custom-field-edit-dialog.component.spec.ts | 2 - .../custom-field-edit-dialog.component.ts | 4 +- .../group-edit-dialog.component.spec.ts | 2 - .../tag-edit-dialog.component.spec.ts | 2 - .../user-edit-dialog.component.spec.ts | 2 - .../workflow-edit-dialog.component.html | 10 +- .../workflow-edit-dialog.component.ts | 4 +- .../email-document-dialog.component.spec.ts | 7 +- .../email-document-dialog.component.ts | 3 +- .../filterable-dropdown.component.html | 8 +- .../filterable-dropdown.component.spec.ts | 3 +- .../filterable-dropdown.component.ts | 4 +- .../toggleable-dropdown-button.component.html | 6 +- .../toggleable-dropdown-button.component.ts | 4 +- .../common/input/check/check.component.html | 2 +- .../common/input/check/check.component.ts | 4 +- .../common/input/color/color.component.html | 2 +- .../input/color/color.component.spec.ts | 2 - .../common/input/color/color.component.ts | 4 +- .../custom-fields-values.component.html | 2 +- .../custom-fields-values.component.ts | 4 +- .../common/input/date/date.component.html | 6 +- .../common/input/date/date.component.spec.ts | 6 +- .../common/input/date/date.component.ts | 4 +- .../document-link.component.html | 8 +- .../document-link.component.scss | 2 +- .../document-link.component.spec.ts | 3 +- .../document-link/document-link.component.ts | 4 +- .../input/entries/entries.component.html | 4 +- .../input/entries/entries.component.spec.ts | 8 +- .../common/input/entries/entries.component.ts | 4 +- .../common/input/file/file.component.html | 4 +- .../input/monetary/monetary.component.html | 2 +- .../input/monetary/monetary.component.ts | 4 +- .../common/input/number/number.component.html | 2 +- .../common/input/number/number.component.ts | 4 +- .../input/password/password.component.html | 2 +- .../input/password/password.component.spec.ts | 8 +- .../input/password/password.component.ts | 4 +- .../common/input/select/select.component.html | 10 +- .../common/input/select/select.component.ts | 4 +- .../common/input/switch/switch.component.html | 6 +- .../common/input/tags/tags.component.html | 10 +- .../common/input/tags/tags.component.spec.ts | 2 - .../common/input/tags/tags.component.ts | 4 +- .../common/input/text/text.component.html | 2 +- .../common/input/text/text.component.ts | 4 +- .../input/textarea/textarea.component.html | 2 +- .../input/textarea/textarea.component.ts | 4 +- .../common/input/url/url.component.html | 4 +- .../common/input/url/url.component.spec.ts | 8 +- .../common/input/url/url.component.ts | 4 +- .../page-header/page-header.component.html | 6 +- .../page-header/page-header.component.spec.ts | 3 +- .../page-header/page-header.component.ts | 4 +- .../pdf-editor/pdf-editor.component.html | 22 +- .../pdf-editor/pdf-editor.component.spec.ts | 3 +- .../common/pdf-editor/pdf-editor.component.ts | 4 +- ...permissions-filter-dropdown.component.html | 16 +- ...missions-filter-dropdown.component.spec.ts | 2 - .../permissions-filter-dropdown.component.ts | 4 +- .../permissions-select.component.html | 4 +- .../permissions-select.component.spec.ts | 6 +- .../permissions-select.component.ts | 4 +- .../preview-popup.component.html | 2 +- .../preview-popup.component.spec.ts | 4 +- .../preview-popup/preview-popup.component.ts | 4 +- .../profile-edit-dialog.component.html | 12 +- .../profile-edit-dialog.component.spec.ts | 2 - .../profile-edit-dialog.component.ts | 4 +- .../share-link-bundle-dialog.component.html | 4 +- ...share-link-bundle-dialog.component.spec.ts | 6 +- .../share-link-bundle-dialog.component.ts | 4 +- .../share-links-dialog.component.html | 10 +- .../share-links-dialog.component.spec.ts | 8 +- .../share-links-dialog.component.ts | 4 +- .../suggestions-dropdown.component.html | 16 +- .../suggestions-dropdown.component.spec.ts | 7 +- .../suggestions-dropdown.component.ts | 4 +- .../system-status-dialog.component.html | 62 ++-- .../system-status-dialog.component.spec.ts | 6 +- .../system-status-dialog.component.ts | 4 +- .../common/toast/toast.component.html | 10 +- .../common/toast/toast.component.spec.ts | 9 +- .../common/toast/toast.component.ts | 4 +- .../common/toasts/toasts.component.spec.ts | 3 +- .../common/toasts/toasts.component.ts | 8 +- .../upload-status-tray.component.html | 6 +- .../upload-status-tray.component.scss | 4 +- .../upload-status-tray.component.spec.ts | 2 - .../upload-status-tray.component.ts | 4 +- .../dashboard/dashboard.component.html | 4 +- .../dashboard/dashboard.component.spec.ts | 2 - .../dashboard/dashboard.component.ts | 4 +- .../saved-view-widget.component.html | 6 +- .../saved-view-widget.component.spec.ts | 2 - .../saved-view-widget.component.ts | 4 +- .../upload-file-widget.component.html | 2 +- .../upload-file-widget.component.scss | 2 +- .../upload-file-widget.component.spec.ts | 2 - .../upload-file-widget.component.ts | 4 +- .../widget-frame/widget-frame.component.html | 4 +- .../widget-frame/widget-frame.component.scss | 2 +- .../widget-frame/widget-frame.component.ts | 4 +- .../document-barcodes.component.html | 4 +- .../document-barcodes.component.spec.ts | 18 +- .../document-barcodes.component.ts | 4 +- .../document-detail.component.html | 36 +- .../document-detail.component.spec.ts | 7 +- .../document-detail.component.ts | 4 +- .../document-history.component.spec.ts | 7 +- .../document-history.component.ts | 2 - .../document-version-dropdown.component.html | 14 +- ...ocument-version-dropdown.component.spec.ts | 8 +- .../document-version-dropdown.component.ts | 4 +- .../metadata-collapse.component.html | 4 +- .../metadata-collapse.component.spec.ts | 6 +- .../metadata-collapse.component.ts | 4 +- .../bulk-editor/bulk-editor.component.html | 24 +- .../bulk-editor/bulk-editor.component.spec.ts | 3 +- .../bulk-editor/bulk-editor.component.ts | 4 +- ...tom-fields-bulk-edit-dialog.component.html | 2 +- ...ustom-fields-bulk-edit-dialog.component.ts | 4 +- .../document-card-large.component.html | 30 +- .../document-card-large.component.spec.ts | 2 - .../document-card-large.component.ts | 4 +- .../document-card-small.component.html | 26 +- .../document-card-small.component.spec.ts | 7 +- .../document-card-small.component.ts | 4 +- .../document-list.component.html | 34 +- .../document-list.component.spec.ts | 7 +- .../document-list/document-list.component.ts | 4 +- .../filter-editor.component.html | 4 +- .../filter-editor.component.spec.ts | 2 - .../filter-editor/filter-editor.component.ts | 4 +- .../document-notes.component.html | 2 +- .../document-notes.component.spec.ts | 2 - .../document-notes.component.ts | 4 +- .../custom-fields.component.html | 8 +- .../custom-fields.component.spec.ts | 2 - .../custom-fields/custom-fields.component.ts | 4 +- .../document-attributes.component.html | 18 +- .../document-attributes.component.spec.ts | 4 +- .../document-attributes.component.ts | 4 +- .../correspondent-list.component.spec.ts | 2 - .../correspondent-list.component.ts | 4 +- .../document-type-list.component.spec.ts | 2 - .../document-type-list.component.ts | 4 +- .../management-list.component.html | 8 +- .../management-list.component.spec.ts | 2 - .../storage-path-list.component.spec.ts | 2 - .../storage-path-list.component.ts | 4 +- .../tag-list/tag-list.component.spec.ts | 2 - .../tag-list/tag-list.component.ts | 4 +- .../manage/mail/mail.component.html | 36 +- .../manage/mail/mail.component.spec.ts | 2 - .../components/manage/mail/mail.component.ts | 4 +- .../processed-mail-dialog.component.html | 10 +- .../processed-mail-dialog.component.spec.ts | 7 +- .../processed-mail-dialog.component.ts | 4 +- .../saved-views/saved-views.component.html | 2 +- .../saved-views/saved-views.component.spec.ts | 2 - .../saved-views/saved-views.component.ts | 8 +- .../share-link-bundle-list.component.html | 8 +- .../share-link-bundle-list.component.spec.ts | 6 +- .../share-link-bundle-list.component.ts | 8 +- .../share-link-list.component.html | 6 +- .../share-link-list.component.spec.ts | 7 +- .../share-link-list.component.ts | 4 +- .../share-links/share-links.component.spec.ts | 8 +- .../manage/workflows/workflows.component.html | 10 +- .../workflows/workflows.component.spec.ts | 2 - .../manage/workflows/workflows.component.ts | 4 +- .../not-found/not-found.component.html | 2 +- .../not-found/not-found.component.spec.ts | 8 +- .../not-found/not-found.component.ts | 4 +- .../app/guards/dirty-saved-view.guard.spec.ts | 7 +- src-ui/src/main.ts | 317 +----------------- src-ui/src/styles.scss | 4 +- src-ui/src/theme.scss | 2 +- src-ui/src/typings.d.ts | 5 + 249 files changed, 1092 insertions(+), 1216 deletions(-) create mode 100644 src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts create mode 100644 src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts create mode 100644 src-ui/src/app/components/common/bootstrap-icon/icons.ts create mode 100644 src-ui/src/typings.d.ts diff --git a/src-ui/angular.json b/src-ui/angular.json index 633be88c5f..c3faf73f26 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -69,6 +69,9 @@ "src/polyfills.ts" ], "tsConfig": "tsconfig.app.json", + "loader": { + ".svg": "text" + }, "localize": true, "assets": [ "src/apple-touch-icon.png", diff --git a/src-ui/e2e/document-list/document-list.spec.ts b/src-ui/e2e/document-list/document-list.spec.ts index 5365b48268..b86ffa873f 100644 --- a/src-ui/e2e/document-list/document-list.spec.ts +++ b/src-ui/e2e/document-list/document-list.spec.ts @@ -123,7 +123,7 @@ test('sorting', async ({ page }) => { await page.getByRole('button', { name: 'Notes' }).click() await expect(page).toHaveURL(/sort=num_notes/) await page.getByRole('button', { name: 'Sort' }).click() - await page.locator('.w-100 > label > i-bs').first().click() + await page.locator('.w-100 > label > pngx-bs-icon').first().click() await expect(page).not.toHaveURL(/reverse=1/) }) diff --git a/src-ui/jest.config.js b/src-ui/jest.config.js index 89a3341307..ffea6ccc21 100644 --- a/src-ui/jest.config.js +++ b/src-ui/jest.config.js @@ -28,7 +28,7 @@ module.exports = { 'abstract-paperless-service', ], transformIgnorePatterns: [ - 'node_modules/(?!.*(\\.mjs$|tslib|lodash-es|normalize-diacritics|marked|@angular/common/locales/.*\\.js$))', + 'node_modules/(?!.*(\\.mjs$|tslib|lodash-es|normalize-diacritics|marked|@angular/common/locales/.*\\.js$|bootstrap-icons/icons/.*\\.svg$))', ], moduleNameMapper: { ...esmPreset.moduleNameMapper, diff --git a/src-ui/package.json b/src-ui/package.json index a1ce49eed4..9255ff139e 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -28,11 +28,11 @@ "@ngneat/dirty-check-forms": "^3.0.3", "@popperjs/core": "^2.11.8", "bootstrap": "^5.3.8", + "bootstrap-icons": "^1.13.2", "file-saver": "^2.0.5", "lodash-es": "^4.18.1", "marked": "~18.1.1", "mime-names": "^1.0.0", - "ngx-bootstrap-icons": "^1.9.3", "ngx-color": "^10.1.0", "ngx-cookie-service": "^22.0.0", "ngx-device-detector": "^12.0.0", diff --git a/src-ui/pnpm-lock.yaml b/src-ui/pnpm-lock.yaml index bcbc11d953..3e743b69ef 100644 --- a/src-ui/pnpm-lock.yaml +++ b/src-ui/pnpm-lock.yaml @@ -51,6 +51,9 @@ importers: bootstrap: specifier: ^5.3.8 version: 5.3.8(@popperjs/core@2.11.8) + bootstrap-icons: + specifier: ^1.13.2 + version: 1.13.2 file-saver: specifier: ^2.0.5 version: 2.0.5 @@ -63,9 +66,6 @@ importers: mime-names: specifier: ^1.0.0 version: 1.0.0 - ngx-bootstrap-icons: - specifier: ^1.9.3 - version: 1.9.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) ngx-color: specifier: ^10.1.0 version: 10.1.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) @@ -2391,6 +2391,9 @@ packages: resolution: {integrity: sha512-DkVaaQHymRhpYEYo9x1oo7Q7B0Y6KJUsjm3c9eTyFDby4MHLBTwZ6ZDWBel5zrYxj1WsZgC5oLpiz+93MluXeA==} engines: {node: '>=20.19.0'} + bootstrap-icons@1.13.2: + resolution: {integrity: sha512-fAU1Ly3dH7hwRg+CB8EZ0Vl0fF80zgXHeUVJyfUOKzoURr+TbwISbCW5tKUoQLERaWYG2emTCybcPbD96hdD1A==} + bootstrap@5.3.8: resolution: {integrity: sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==} peerDependencies: @@ -3421,13 +3424,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - ngx-bootstrap-icons@1.9.3: - resolution: {integrity: sha512-UsFqJ/cn0u5W39hVMIDbm+ze1dCF9fDV839scqeimi70Efcmg41zOx6GgR6i2gWAVFR0OBso1cdqb4E75XhTSw==} - engines: {node: '>= 16.18.1', npm: '>= 8.11.0'} - peerDependencies: - '@angular/common': '>= 13.3.8' - '@angular/core': '>= 13.3.8' - ngx-color@10.1.0: resolution: {integrity: sha512-yuxlE1LfN+PABIO4hv0Gw5ksq8g9XkMJKrGPn2SWbrre/gsH+kkyyn3rwSCurinnLCnw7czqenwQUtnBJm8yww==} peerDependencies: @@ -6411,6 +6407,8 @@ snapshots: boolbase@2.0.0: {} + bootstrap-icons@1.13.2: {} + bootstrap@5.3.8(@popperjs/core@2.11.8): dependencies: '@popperjs/core': 2.11.8 @@ -7648,12 +7646,6 @@ snapshots: neo-async@2.6.2: {} - ngx-bootstrap-icons@1.9.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)): - dependencies: - '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) - tslib: 2.8.1 - ngx-color@10.1.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)): dependencies: '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) diff --git a/src-ui/src/app/app.component.spec.ts b/src-ui/src/app/app.component.spec.ts index d93534d80f..bd81eebaeb 100644 --- a/src-ui/src/app/app.component.spec.ts +++ b/src-ui/src/app/app.component.spec.ts @@ -3,7 +3,6 @@ import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { Router, RouterModule } from '@angular/router' import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { provideUiTour, TourNgBootstrap, @@ -47,7 +46,6 @@ describe('AppComponent', () => { ToastsComponent, FileDropComponent, TourNgBootstrap, - NgxBootstrapIconsModule.pick(allIcons), ], providers: [ PermissionsGuard, diff --git a/src-ui/src/app/components/admin/config/config.component.html b/src-ui/src/app/components/admin/config/config.component.html index 31e9aecfa6..50ecb8ef03 100644 --- a/src-ui/src/app/components/admin/config/config.component.html +++ b/src-ui/src/app/components/admin/config/config.component.html @@ -28,7 +28,7 @@ {{option.title}} - + @if (isExternallyConfigured(option.config_key)) { @if (isSet(option.key)) { @@ -40,11 +40,11 @@ @if (isSet(option.key)) { @if (isExternallyConfigured(option.config_key)) { } @else { } } diff --git a/src-ui/src/app/components/admin/config/config.component.spec.ts b/src-ui/src/app/components/admin/config/config.component.spec.ts index 650761c7dd..0da90f7da7 100644 --- a/src-ui/src/app/components/admin/config/config.component.spec.ts +++ b/src-ui/src/app/components/admin/config/config.component.spec.ts @@ -6,7 +6,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { BrowserModule } from '@angular/platform-browser' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { ConfigCategory, @@ -39,7 +38,6 @@ describe('ConfigComponent', () => { NgSelectModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), ConfigComponent, TextComponent, SelectComponent, diff --git a/src-ui/src/app/components/admin/config/config.component.ts b/src-ui/src/app/components/admin/config/config.component.ts index 6894a50be3..1923677c64 100644 --- a/src-ui/src/app/components/admin/config/config.component.ts +++ b/src-ui/src/app/components/admin/config/config.component.ts @@ -9,7 +9,6 @@ import { } from '@angular/forms' import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap' import { DirtyComponent, dirtyCheck } from '@ngneat/dirty-check-forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { BehaviorSubject, Observable, @@ -17,6 +16,7 @@ import { first, takeUntil, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { ConfigCategory, ConfigOption, @@ -52,7 +52,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading NgbNavModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class ConfigComponent diff --git a/src-ui/src/app/components/admin/logs/logs.component.spec.ts b/src-ui/src/app/components/admin/logs/logs.component.spec.ts index c458804ce8..9f525a1735 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.spec.ts +++ b/src-ui/src/app/components/admin/logs/logs.component.spec.ts @@ -8,7 +8,6 @@ import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { BrowserModule, By } from '@angular/platform-browser' import { NgbModule, NgbNavLink } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { LogService } from 'src/app/services/rest/log.service' import { PageHeaderComponent } from '../../common/page-header/page-header.component' @@ -40,7 +39,6 @@ describe('LogsComponent', () => { imports: [ BrowserModule, NgbModule, - NgxBootstrapIconsModule.pick(allIcons), LogsComponent, PageHeaderComponent, CommonModule, diff --git a/src-ui/src/app/components/admin/settings/settings.component.html b/src-ui/src/app/components/admin/settings/settings.component.html index 89ea62c3e1..c314f1afcc 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.html +++ b/src-ui/src/app/components/admin/settings/settings.component.html @@ -5,7 +5,7 @@ i18n-info > @if (canViewSystemStatus) { @@ -181,7 +181,7 @@

@@ -263,9 +263,9 @@ - + - +

diff --git a/src-ui/src/app/components/admin/settings/settings.component.spec.ts b/src-ui/src/app/components/admin/settings/settings.component.spec.ts index d64ea2a9b3..645b97f10a 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.spec.ts +++ b/src-ui/src/app/components/admin/settings/settings.component.spec.ts @@ -15,7 +15,6 @@ import { NgbNavLink, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { provideUiTour } from 'ngx-ui-tour-ng-bootstrap' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' @@ -133,7 +132,6 @@ describe('SettingsComponent', () => { ReactiveFormsModule, NgbAlertModule, NgSelectModule, - NgxBootstrapIconsModule.pick(allIcons), NgbModalModule, DragDropModule, SettingsComponent, diff --git a/src-ui/src/app/components/admin/settings/settings.component.ts b/src-ui/src/app/components/admin/settings/settings.component.ts index 886e47ad6f..3f65e2cb50 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.ts +++ b/src-ui/src/app/components/admin/settings/settings.component.ts @@ -23,7 +23,6 @@ import { NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' import { DirtyComponent, dirtyCheck } from '@ngneat/dirty-check-forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TourService } from 'ngx-ui-tour-ng-bootstrap' import { BehaviorSubject, @@ -34,6 +33,7 @@ import { takeUntil, tap, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Group } from 'src/app/data/group' import { SystemStatus, @@ -135,7 +135,7 @@ const sidebarItemLabels: Record = { ReactiveFormsModule, NgbNavModule, NgbPopoverModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class SettingsComponent diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.html b/src-ui/src/app/components/admin/tasks/tasks.component.html index 1e89963986..7424668d21 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.html +++ b/src-ui/src/app/components/admin/tasks/tasks.component.html @@ -7,13 +7,13 @@ >
@@ -86,7 +86,7 @@
@if (filterText?.length) { } @@ -98,7 +98,7 @@ @if (isFiltered) { } @@ -125,7 +125,7 @@ @if (hasMore) { {{tasks.length}} of {{count}} tasks } @else { {count, plural, =1 {1 task} other {{{count}} tasks}} @@ -180,7 +180,7 @@ @if (taskShowsSeparateTypeLabel(task)) { {{ task.task_type_display }} } - {{ task.trigger_source_display }} + {{ task.trigger_source_display }}
{{ task.date_created | customDate:'short' }} @@ -197,7 +197,7 @@ } @if (duplicateDocumentId(task)) {
- + {{ duplicateTaskLabel(task) }}
} @@ -213,18 +213,18 @@ }
@if (task.related_document_ids?.[0]) { - Open Document + Open Document } diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts index 026f5c0624..3b2c58f63e 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts @@ -10,7 +10,6 @@ import { By } from '@angular/platform-browser' import { Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' import { NgbModal, NgbModalRef, NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' import { @@ -174,7 +173,6 @@ describe('TasksComponent', () => { imports: [ NgbModule, RouterTestingModule.withRoutes(routes), - NgxBootstrapIconsModule.pick(allIcons), FormsModule, TasksComponent, PageHeaderComponent, diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.ts b/src-ui/src/app/components/admin/tasks/tasks.component.ts index b548703df9..20f3107ca4 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.ts @@ -9,7 +9,6 @@ import { NgbPaginationModule, NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { debounceTime, distinctUntilChanged, @@ -22,6 +21,7 @@ import { takeUntil, timer, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { PaperlessTask, PaperlessTaskStatus, @@ -151,7 +151,7 @@ const TRIGGER_SOURCE_OPTIONS: Array<{ NgbDropdownModule, NgbPaginationModule, NgbPopoverModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class TasksComponent diff --git a/src-ui/src/app/components/admin/trash/trash.component.html b/src-ui/src/app/components/admin/trash/trash.component.html index 8beb2129d1..372735efe3 100644 --- a/src-ui/src/app/components/admin/trash/trash.component.html +++ b/src-ui/src/app/components/admin/trash/trash.component.html @@ -5,16 +5,16 @@ i18n-info infoLink="usage/#document-trash"> @@ -59,7 +59,7 @@ {{ document.title }} - + {{ getDaysRemaining(document) }} days @@ -67,7 +67,7 @@
@@ -77,10 +77,10 @@
diff --git a/src-ui/src/app/components/admin/trash/trash.component.spec.ts b/src-ui/src/app/components/admin/trash/trash.component.spec.ts index 4ad48dd438..abe000de26 100644 --- a/src-ui/src/app/components/admin/trash/trash.component.spec.ts +++ b/src-ui/src/app/components/admin/trash/trash.component.spec.ts @@ -9,7 +9,6 @@ import { NgbPaginationModule, NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { ToastService } from 'src/app/services/toast.service' import { TrashService } from 'src/app/services/trash.service' @@ -48,7 +47,6 @@ describe('TrashComponent', () => { ReactiveFormsModule, NgbPopoverModule, NgbPaginationModule, - NgxBootstrapIconsModule.pick(allIcons), TrashComponent, PageHeaderComponent, ConfirmDialogComponent, diff --git a/src-ui/src/app/components/admin/trash/trash.component.ts b/src-ui/src/app/components/admin/trash/trash.component.ts index 800a7c084f..b407ad7d66 100644 --- a/src-ui/src/app/components/admin/trash/trash.component.ts +++ b/src-ui/src/app/components/admin/trash/trash.component.ts @@ -6,8 +6,8 @@ import { NgbModal, NgbPaginationModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { takeUntil, tap } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { SettingsService } from 'src/app/services/settings.service' @@ -29,7 +29,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading ReactiveFormsModule, NgbDropdownModule, NgbPaginationModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class TrashComponent diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.html b/src-ui/src/app/components/admin/users-groups/users-groups.component.html index cdabad926f..380b0e2c4f 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.html +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.html @@ -11,7 +11,7 @@

Users

    @@ -32,10 +32,10 @@
    @@ -49,7 +49,7 @@

    Groups

      @@ -70,10 +70,10 @@
      diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts b/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts index 8e2551f157..1323ecb7ec 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts @@ -3,7 +3,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { Group } from 'src/app/data/group' import { User } from 'src/app/data/user' @@ -41,7 +40,6 @@ describe('UsersAndGroupsComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [NgxBootstrapIconsModule.pick(allIcons)], providers: [ CustomDatePipe, DatePipe, diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.ts b/src-ui/src/app/components/admin/users-groups/users-groups.component.ts index 406e17398d..791b27a49c 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.ts +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.ts @@ -1,7 +1,7 @@ import { Component, OnDestroy, OnInit, inject, signal } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject, first, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Group } from 'src/app/data/group' import { User } from 'src/app/data/user' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' @@ -29,7 +29,7 @@ import { ComponentWithPermissions } from '../../with-permissions/with-permission imports: [ PageHeaderComponent, IfPermissionsDirective, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class UsersAndGroupsComponent diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index c6d3c1c062..8a9e64a5f5 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -2,7 +2,7 @@ - Settings + Settings - Logout + Logout - Documentation + Documentation
@@ -93,9 +93,9 @@ @if (canSaveSettings) { } @@ -105,7 +105,7 @@ - Dashboard + Dashboard @if (settingsService.organizingSidebarItems()) { @@ -117,7 +117,7 @@ (click)="closeMenu()" ngbPopover="Documents" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Documents + Documents @@ -136,7 +136,7 @@ routerLinkActive="active" (click)="closeMenu()" [ngbPopover]="view.name" [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> -
{{view.name}}
+
{{view.name}}
@if (showSidebarCounts && !slimSidebarEnabled) { {{ savedViewService.getDocumentCount(view) }} } @@ -147,7 +147,7 @@ @if (settingsService.organizingSidebarSavedViews() && canSaveSettings) {
- +
} @@ -174,10 +174,10 @@ routerLinkActive="active" (click)="closeMenu()" [ngbPopover]="d.title | documentTitle" [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - {{d.title | documentTitle}} + {{d.title | documentTitle}} - + @@ -188,7 +188,7 @@ [class.text-truncate]="!slimSidebarEnabled" (click)="closeAll()" ngbPopover="Close all" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Close all + Close all } @@ -207,7 +207,7 @@ [routerLinkActiveOptions]="{ exact: !(slimSidebarEnabled || attributesSectionsCollapsed) }" (click)="closeMenu()" ngbPopover="Attributes" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Attributes + Attributes @if (!slimSidebarEnabled && canSaveSettings) { }
@@ -228,27 +228,27 @@ @@ -259,7 +259,7 @@ - Saved Views + Saved Views @if (settingsService.organizingSidebarItems()) { @@ -270,7 +270,7 @@ - Share links + Share links @if (settingsService.organizingSidebarItems()) { @@ -283,7 +283,7 @@ - Workflows + Workflows @if (settingsService.organizingSidebarItems()) { @@ -294,7 +294,7 @@ - Mail + Mail @if (settingsService.organizingSidebarItems()) { @@ -304,7 +304,7 @@ - Trash + Trash @@ -320,21 +320,21 @@ - Settings + Settings } @@ -366,7 +366,7 @@ target="_blank" rel="noopener noreferrer" href="https://docs.paperless-ngx.com" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Documentation + Documentation @if (settingsService.organizingSidebarItems()) { @@ -408,7 +408,7 @@ href="https://github.com/paperless-ngx/paperless-ngx/releases" [ngbPopover]="updateAvailablePopContent" popoverClass="shadow" triggers="mouseenter:mouseleave" container="body"> - + @if (appRemoteVersion()?.update_available) { Update available } @@ -418,7 +418,7 @@ - + }
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 933dd93743..57e605eae1 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -142,7 +142,7 @@ main { padding-left: 0; padding-right: 0; - i-bs { + pngx-bs-icon { margin-right: 0 !important; } } @@ -268,7 +268,7 @@ main { } } - i-bs { + pngx-bs-icon { position: relative; top: -1px; } @@ -279,7 +279,7 @@ main { align-items: center; min-width: 0; - > i-bs { + > pngx-bs-icon { flex: 0 0 auto; } @@ -373,11 +373,11 @@ main { width: 1.8rem; height: 100%; - i-bs { + pngx-bs-icon { opacity: 0.5; } - &:hover i-bs { + &:hover pngx-bs-icon { opacity: 1; } } @@ -392,7 +392,7 @@ main { text-decoration: underline; } - i-bs { + pngx-bs-icon { margin-bottom: 2px; } } @@ -665,7 +665,7 @@ main { .navbar .dropdown-menu { font-size: 0.875rem; // body size - a i-bs, button i-bs { + a pngx-bs-icon, button pngx-bs-icon { opacity: 0.6; } } @@ -693,7 +693,7 @@ main { cursor: move; } -::ng-deep .navItemDrag .position-absolute i-bs { +::ng-deep .navItemDrag .position-absolute pngx-bs-icon { display: none; } diff --git a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts index 83cebd8890..2b4c3d63a7 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts @@ -10,7 +10,6 @@ import { BrowserModule, By } from '@angular/platform-browser' import { ActivatedRoute, Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' import { NgbModal, NgbModalModule, NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { provideUiTour } from 'ngx-ui-tour-ng-bootstrap' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' @@ -108,7 +107,6 @@ describe('AppFrameComponent', () => { ReactiveFormsModule, DragDropModule, NgbModalModule, - NgxBootstrapIconsModule.pick(allIcons), AppFrameComponent, IfPermissionsDirective, GlobalSearchComponent, diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 4f9a02f6ec..54caff0582 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -23,10 +23,10 @@ import { NgbNavModule, NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TourNgBootstrap } from 'ngx-ui-tour-ng-bootstrap' import { Observable } from 'rxjs' import { first } from 'rxjs/operators' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { SavedView } from 'src/app/data/saved-view' import { @@ -89,7 +89,7 @@ const SCROLL_THRESHOLD = 16 NgbPopoverModule, NgbCollapseModule, NgbNavModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, DragDropModule, TourNgBootstrap, FormsModule, diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.html b/src-ui/src/app/components/app-frame/global-search/global-search.component.html index e2748709e0..8b8a4b7f42 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.html +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.html @@ -1,7 +1,7 @@
- +
Search } - + }
@@ -35,7 +35,7 @@
- +
{{item[nameProp]}} @if (date) { @@ -49,13 +49,13 @@ [disabled]="disablePrimaryButton(type, item)" (mouseenter)="onButtonHover($event)"> @if (type === DataType.Document) { - Open + Open } @else if (type === DataType.SavedView) { - Open + Open } @else if (type === DataType.Workflow || type === DataType.CustomField || type === DataType.Group || type === DataType.User || type === DataType.MailAccount || type === DataType.MailRule) { - Open + Open } @else { - Filter documents + Filter documents } @if (type !== DataType.SavedView && type !== DataType.Workflow && type !== DataType.CustomField && type !== DataType.Group && type !== DataType.User && type !== DataType.MailAccount && type !== DataType.MailRule) { @@ -65,9 +65,9 @@ [disabled]="disableSecondaryButton(type, item)" (mouseenter)="onButtonHover($event)"> @if (type === DataType.Document) { - Download + Download } @else { - Open + Open } } diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.scss b/src-ui/src/app/components/app-frame/global-search/global-search.component.scss index 0576a81db5..5e862fce0a 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.scss +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.scss @@ -1,7 +1,7 @@ form { position: relative; - > i-bs[name="search"] { + > pngx-bs-icon[name="search"] { position: absolute; left: 0.6rem; top: .25rem; @@ -14,7 +14,7 @@ form { } &:focus-within { - i-bs[name="search"], + pngx-bs-icon[name="search"], .badge { display: none !important; } @@ -72,7 +72,7 @@ form { .dropdown.show { // Hide the search icon when the dropdown is shown - i-bs[name="search"] { + pngx-bs-icon[name="search"] { display: none !important; } diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts b/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts index 015984b401..d1786da92f 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts @@ -10,7 +10,6 @@ import { NgbModalModule, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DataType } from 'src/app/data/datatype' import { @@ -138,7 +137,6 @@ describe('GlobalSearchComponent', () => { NgbDropdownModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), GlobalSearchComponent, ], providers: [ diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.ts b/src-ui/src/app/components/app-frame/global-search/global-search.component.ts index 80f9ce8c20..1cc3597bd6 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.ts +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.ts @@ -17,8 +17,8 @@ import { NgbModal, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject, debounceTime, distinctUntilChanged, filter } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DataType } from 'src/app/data/datatype' import { FILTER_FULLTEXT_QUERY, @@ -65,7 +65,7 @@ import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-e CustomDatePipe, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, NgTemplateOutlet, ], diff --git a/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html b/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html index 53b28e15da..597690d157 100644 --- a/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html +++ b/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html @@ -4,7 +4,7 @@ {{ unread().length }} } diff --git a/src-ui/src/app/components/chat/chat/chat.component.spec.ts b/src-ui/src/app/components/chat/chat/chat.component.spec.ts index 7bf4129a9c..b38cef7efa 100644 --- a/src-ui/src/app/components/chat/chat/chat.component.spec.ts +++ b/src-ui/src/app/components/chat/chat/chat.component.spec.ts @@ -4,7 +4,6 @@ import { ElementRef } from '@angular/core' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NavigationEnd, Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject } from 'rxjs' import { CHAT_METADATA_DELIMITER, @@ -22,11 +21,7 @@ describe('ChatComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - RouterTestingModule, - ChatComponent, - ], + imports: [RouterTestingModule, ChatComponent], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/chat/chat/chat.component.ts b/src-ui/src/app/components/chat/chat/chat.component.ts index a69a735c43..f4fbaafb0f 100644 --- a/src-ui/src/app/components/chat/chat/chat.component.ts +++ b/src-ui/src/app/components/chat/chat/chat.component.ts @@ -9,8 +9,8 @@ import { import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NavigationEnd, Router, RouterModule } from '@angular/router' import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { filter, map, Subscription } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { MarkdownPipe } from 'src/app/pipes/markdown.pipe' import { ChatMessage, @@ -27,7 +27,7 @@ const SLOW_RESPONSE_DELAY_MS = 8000 FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, MarkdownPipe, ], diff --git a/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts new file mode 100644 index 0000000000..2846565e75 --- /dev/null +++ b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts @@ -0,0 +1,61 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { BootstrapIconComponent } from './bootstrap-icon.component' + +describe('BootstrapIconComponent', () => { + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [BootstrapIconComponent], + }) + fixture = TestBed.createComponent(BootstrapIconComponent) + }) + + it('should render the named icon as inline svg', () => { + fixture.componentRef.setInput('name', 'arrow-down-up') + fixture.detectChanges() + const svg: SVGElement = fixture.nativeElement.querySelector('svg') + expect(svg.classList).toContain('bi-arrow-down-up') + expect(svg.getAttribute('width')).toEqual('16') + expect(svg.getAttribute('height')).toEqual('16') + }) + + it('should apply width and height', () => { + fixture.componentRef.setInput('name', 'x-lg') + fixture.componentRef.setInput('width', '1.2em') + fixture.componentRef.setInput('height', 2) + fixture.detectChanges() + const svg: SVGElement = fixture.nativeElement.querySelector('svg') + expect(svg.getAttribute('width')).toEqual('1.2em') + expect(svg.getAttribute('height')).toEqual('2') + }) + + it('should not allow width or height to inject attributes', () => { + fixture.componentRef.setInput('name', 'x-lg') + fixture.componentRef.setInput('width', '1" onload="alert(1)') + fixture.componentRef.setInput('height', '1" onclick="alert(1)') + fixture.detectChanges() + const svg: SVGElement = fixture.nativeElement.querySelector('svg') + expect(svg.hasAttribute('onload')).toBe(false) + expect(svg.hasAttribute('onclick')).toBe(false) + expect(svg.getAttribute('width')).toEqual('1" onload="alert(1)') + }) + + it('should update when the name changes', () => { + fixture.componentRef.setInput('name', 'x-lg') + fixture.detectChanges() + fixture.componentRef.setInput('name', 'sliders2-vertical') + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('svg').classList).toContain( + 'bi-sliders2-vertical' + ) + }) + + it('should render nothing and warn for an unregistered icon', () => { + const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}) + fixture.componentRef.setInput('name', 'not-an-icon') + fixture.detectChanges() + expect(fixture.nativeElement.innerHTML).toEqual('') + expect(warnSpy).toHaveBeenCalledWith('Icon not found: not-an-icon') + }) +}) diff --git a/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts new file mode 100644 index 0000000000..a67d064cc8 --- /dev/null +++ b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts @@ -0,0 +1,54 @@ +import { + ChangeDetectionStrategy, + Component, + effect, + ElementRef, + inject, + input, +} from '@angular/core' +import { icons } from './icons' + +/** Converts icon name e.g. `arrow-down-up` to its registry key. */ +const toKey = (name: string) => + name.trim().replace(/-(.)/g, (_, char: string) => char.toUpperCase()) + +/** + * Renders an icon from the official bootstrap-icons package as inline SVG. + * Icons must be registered in `./icons.ts`. + */ +@Component({ + selector: 'pngx-bs-icon', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BootstrapIconComponent { + private readonly elementRef = inject(ElementRef) + + readonly name = input() + readonly width = input() + readonly height = input() + + constructor() { + effect(() => { + const element = this.elementRef.nativeElement + element.innerHTML = this.svg() + const svg = element.firstElementChild + if (!svg) return + const width = this.width() + const height = this.height() + if (width) svg.setAttribute('width', String(width)) + if (height) svg.setAttribute('height', String(height)) + }) + } + + private svg(): string { + const name = this.name() + if (!name) return '' + const svg = icons[toKey(name)] + if (!svg) { + console.warn(`Icon not found: ${name}`) + return '' + } + return svg + } +} diff --git a/src-ui/src/app/components/common/bootstrap-icon/icons.ts b/src-ui/src/app/components/common/bootstrap-icon/icons.ts new file mode 100644 index 0000000000..b3086aafef --- /dev/null +++ b/src-ui/src/app/components/common/bootstrap-icon/icons.ts @@ -0,0 +1,317 @@ +import airplane from 'bootstrap-icons/icons/airplane.svg' +import archive from 'bootstrap-icons/icons/archive.svg' +import arrowClockwise from 'bootstrap-icons/icons/arrow-clockwise.svg' +import arrowCounterclockwise from 'bootstrap-icons/icons/arrow-counterclockwise.svg' +import arrowDownUp from 'bootstrap-icons/icons/arrow-down-up.svg' +import arrowDown from 'bootstrap-icons/icons/arrow-down.svg' +import arrowLeft from 'bootstrap-icons/icons/arrow-left.svg' +import arrowRepeat from 'bootstrap-icons/icons/arrow-repeat.svg' +import arrowReturnLeft from 'bootstrap-icons/icons/arrow-return-left.svg' +import arrowRightShort from 'bootstrap-icons/icons/arrow-right-short.svg' +import arrowRight from 'bootstrap-icons/icons/arrow-right.svg' +import arrowUpRight from 'bootstrap-icons/icons/arrow-up-right.svg' +import asterisk from 'bootstrap-icons/icons/asterisk.svg' +import bank from 'bootstrap-icons/icons/bank.svg' +import basket from 'bootstrap-icons/icons/basket.svg' +import bell from 'bootstrap-icons/icons/bell.svg' +import bodyText from 'bootstrap-icons/icons/body-text.svg' +import bookmark from 'bootstrap-icons/icons/bookmark.svg' +import boxArrowInRight from 'bootstrap-icons/icons/box-arrow-in-right.svg' +import boxArrowUpRight from 'bootstrap-icons/icons/box-arrow-up-right.svg' +import boxArrowUp from 'bootstrap-icons/icons/box-arrow-up.svg' +import boxes from 'bootstrap-icons/icons/boxes.svg' +import braces from 'bootstrap-icons/icons/braces.svg' +import briefcase from 'bootstrap-icons/icons/briefcase.svg' +import building from 'bootstrap-icons/icons/building.svg' +import calculator from 'bootstrap-icons/icons/calculator.svg' +import calendarEventFill from 'bootstrap-icons/icons/calendar-event-fill.svg' +import calendarEvent from 'bootstrap-icons/icons/calendar-event.svg' +import calendar from 'bootstrap-icons/icons/calendar.svg' +import camera from 'bootstrap-icons/icons/camera.svg' +import cardChecklist from 'bootstrap-icons/icons/card-checklist.svg' +import cardHeading from 'bootstrap-icons/icons/card-heading.svg' +import caretDown from 'bootstrap-icons/icons/caret-down.svg' +import caretUp from 'bootstrap-icons/icons/caret-up.svg' +import cash from 'bootstrap-icons/icons/cash.svg' +import chatLeftText from 'bootstrap-icons/icons/chat-left-text.svg' +import chatSquareDots from 'bootstrap-icons/icons/chat-square-dots.svg' +import checkAll from 'bootstrap-icons/icons/check-all.svg' +import checkCircleFill from 'bootstrap-icons/icons/check-circle-fill.svg' +import checkCircle from 'bootstrap-icons/icons/check-circle.svg' +import checkLg from 'bootstrap-icons/icons/check-lg.svg' +import check from 'bootstrap-icons/icons/check.svg' +import check2All from 'bootstrap-icons/icons/check2-all.svg' +import chevronDoubleLeft from 'bootstrap-icons/icons/chevron-double-left.svg' +import chevronDoubleRight from 'bootstrap-icons/icons/chevron-double-right.svg' +import chevronDown from 'bootstrap-icons/icons/chevron-down.svg' +import chevronRight from 'bootstrap-icons/icons/chevron-right.svg' +import chevronUp from 'bootstrap-icons/icons/chevron-up.svg' +import circle from 'bootstrap-icons/icons/circle.svg' +import clipboardCheckFill from 'bootstrap-icons/icons/clipboard-check-fill.svg' +import clipboardCheck from 'bootstrap-icons/icons/clipboard-check.svg' +import clipboardFill from 'bootstrap-icons/icons/clipboard-fill.svg' +import clipboard from 'bootstrap-icons/icons/clipboard.svg' +import clockHistory from 'bootstrap-icons/icons/clock-history.svg' +import cpu from 'bootstrap-icons/icons/cpu.svg' +import creditCard from 'bootstrap-icons/icons/credit-card.svg' +import dashCircle from 'bootstrap-icons/icons/dash-circle.svg' +import dash from 'bootstrap-icons/icons/dash.svg' +import diagram3 from 'bootstrap-icons/icons/diagram-3.svg' +import dice5 from 'bootstrap-icons/icons/dice-5.svg' +import doorOpen from 'bootstrap-icons/icons/door-open.svg' +import download from 'bootstrap-icons/icons/download.svg' +import envelopeAtFill from 'bootstrap-icons/icons/envelope-at-fill.svg' +import envelopeAt from 'bootstrap-icons/icons/envelope-at.svg' +import envelope from 'bootstrap-icons/icons/envelope.svg' +import exclamationCircleFill from 'bootstrap-icons/icons/exclamation-circle-fill.svg' +import exclamationTriangleFill from 'bootstrap-icons/icons/exclamation-triangle-fill.svg' +import exclamationTriangle from 'bootstrap-icons/icons/exclamation-triangle.svg' +import eye from 'bootstrap-icons/icons/eye.svg' +import fileEarmarkArrowUp from 'bootstrap-icons/icons/file-earmark-arrow-up.svg' +import fileEarmarkCheck from 'bootstrap-icons/icons/file-earmark-check.svg' +import fileEarmarkDiff from 'bootstrap-icons/icons/file-earmark-diff.svg' +import fileEarmarkFill from 'bootstrap-icons/icons/file-earmark-fill.svg' +import fileEarmarkLock from 'bootstrap-icons/icons/file-earmark-lock.svg' +import fileEarmarkMedical from 'bootstrap-icons/icons/file-earmark-medical.svg' +import fileEarmarkMinus from 'bootstrap-icons/icons/file-earmark-minus.svg' +import fileEarmarkPerson from 'bootstrap-icons/icons/file-earmark-person.svg' +import fileEarmarkPlus from 'bootstrap-icons/icons/file-earmark-plus.svg' +import fileEarmarkRichtext from 'bootstrap-icons/icons/file-earmark-richtext.svg' +import fileEarmarkSpreadsheet from 'bootstrap-icons/icons/file-earmark-spreadsheet.svg' +import fileEarmark from 'bootstrap-icons/icons/file-earmark.svg' +import fileText from 'bootstrap-icons/icons/file-text.svg' +import files from 'bootstrap-icons/icons/files.svg' +import filter from 'bootstrap-icons/icons/filter.svg' +import floppy from 'bootstrap-icons/icons/floppy.svg' +import folderFill from 'bootstrap-icons/icons/folder-fill.svg' +import folder from 'bootstrap-icons/icons/folder.svg' +import funnel from 'bootstrap-icons/icons/funnel.svg' +import gear from 'bootstrap-icons/icons/gear.svg' +import globe2 from 'bootstrap-icons/icons/globe2.svg' +import google from 'bootstrap-icons/icons/google.svg' +import grid from 'bootstrap-icons/icons/grid.svg' +import gripVertical from 'bootstrap-icons/icons/grip-vertical.svg' +import hash from 'bootstrap-icons/icons/hash.svg' +import hddStack from 'bootstrap-icons/icons/hdd-stack.svg' +import heart from 'bootstrap-icons/icons/heart.svg' +import house from 'bootstrap-icons/icons/house.svg' +import inbox from 'bootstrap-icons/icons/inbox.svg' +import infoCircle from 'bootstrap-icons/icons/info-circle.svg' +import journalBookmarkFill from 'bootstrap-icons/icons/journal-bookmark-fill.svg' +import journals from 'bootstrap-icons/icons/journals.svg' +import lightbulb from 'bootstrap-icons/icons/lightbulb.svg' +import link from 'bootstrap-icons/icons/link.svg' +import listNested from 'bootstrap-icons/icons/list-nested.svg' +import listTask from 'bootstrap-icons/icons/list-task.svg' +import listUl from 'bootstrap-icons/icons/list-ul.svg' +import list from 'bootstrap-icons/icons/list.svg' +import microsoft from 'bootstrap-icons/icons/microsoft.svg' +import newspaper from 'bootstrap-icons/icons/newspaper.svg' +import nodePlus from 'bootstrap-icons/icons/node-plus.svg' +import paperclip from 'bootstrap-icons/icons/paperclip.svg' +import pencil from 'bootstrap-icons/icons/pencil.svg' +import peopleFill from 'bootstrap-icons/icons/people-fill.svg' +import people from 'bootstrap-icons/icons/people.svg' +import personCircle from 'bootstrap-icons/icons/person-circle.svg' +import personFillLock from 'bootstrap-icons/icons/person-fill-lock.svg' +import personFill from 'bootstrap-icons/icons/person-fill.svg' +import personLock from 'bootstrap-icons/icons/person-lock.svg' +import personSquare from 'bootstrap-icons/icons/person-square.svg' +import person from 'bootstrap-icons/icons/person.svg' +import playFill from 'bootstrap-icons/icons/play-fill.svg' +import plusCircle from 'bootstrap-icons/icons/plus-circle.svg' +import plus from 'bootstrap-icons/icons/plus.svg' +import printer from 'bootstrap-icons/icons/printer.svg' +import questionCircle from 'bootstrap-icons/icons/question-circle.svg' +import receipt from 'bootstrap-icons/icons/receipt.svg' +import safe from 'bootstrap-icons/icons/safe.svg' +import scissors from 'bootstrap-icons/icons/scissors.svg' +import search from 'bootstrap-icons/icons/search.svg' +import send from 'bootstrap-icons/icons/send.svg' +import shop from 'bootstrap-icons/icons/shop.svg' +import slashCircle from 'bootstrap-icons/icons/slash-circle.svg' +import sliders2Vertical from 'bootstrap-icons/icons/sliders2-vertical.svg' +import sortAlphaDown from 'bootstrap-icons/icons/sort-alpha-down.svg' +import sortAlphaUpAlt from 'bootstrap-icons/icons/sort-alpha-up-alt.svg' +import stack from 'bootstrap-icons/icons/stack.svg' +import stars from 'bootstrap-icons/icons/stars.svg' +import tagFill from 'bootstrap-icons/icons/tag-fill.svg' +import tag from 'bootstrap-icons/icons/tag.svg' +import tags from 'bootstrap-icons/icons/tags.svg' +import telephone from 'bootstrap-icons/icons/telephone.svg' +import textIndentLeft from 'bootstrap-icons/icons/text-indent-left.svg' +import textLeft from 'bootstrap-icons/icons/text-left.svg' +import threeDotsVertical from 'bootstrap-icons/icons/three-dots-vertical.svg' +import threeDots from 'bootstrap-icons/icons/three-dots.svg' +import trash from 'bootstrap-icons/icons/trash.svg' +import truck from 'bootstrap-icons/icons/truck.svg' +import uiRadios from 'bootstrap-icons/icons/ui-radios.svg' +import unlock from 'bootstrap-icons/icons/unlock.svg' +import upcScan from 'bootstrap-icons/icons/upc-scan.svg' +import wallet2 from 'bootstrap-icons/icons/wallet2.svg' +import windowStack from 'bootstrap-icons/icons/window-stack.svg' +import xCircle from 'bootstrap-icons/icons/x-circle.svg' +import xLg from 'bootstrap-icons/icons/x-lg.svg' +import x from 'bootstrap-icons/icons/x.svg' + +/** + * ``. Only icons registered here are bundled but can add + * new ones (any icon from the bootstrap-icons package) as needed. + */ +export const icons: Record = { + airplane, + archive, + arrowClockwise, + arrowCounterclockwise, + arrowDown, + arrowDownUp, + arrowLeft, + arrowRepeat, + arrowReturnLeft, + arrowRight, + arrowRightShort, + arrowUpRight, + asterisk, + bank, + basket, + bell, + braces, + bodyText, + bookmark, + boxArrowInRight, + boxArrowUp, + boxArrowUpRight, + boxes, + briefcase, + building, + calculator, + calendar, + calendarEvent, + calendarEventFill, + camera, + cardChecklist, + cardHeading, + caretDown, + caretUp, + chatLeftText, + chatSquareDots, + check, + check2All, + checkAll, + checkCircle, + checkCircleFill, + checkLg, + chevronDoubleLeft, + chevronDoubleRight, + chevronDown, + chevronRight, + chevronUp, + circle, + clipboard, + clipboardCheck, + clipboardCheckFill, + clipboardFill, + clockHistory, + cpu, + cash, + creditCard, + dash, + dashCircle, + diagram3, + dice5, + doorOpen, + download, + envelope, + envelopeAt, + envelopeAtFill, + exclamationCircleFill, + exclamationTriangle, + exclamationTriangleFill, + eye, + fileEarmark, + fileEarmarkArrowUp, + fileEarmarkCheck, + fileEarmarkDiff, + fileEarmarkFill, + fileEarmarkLock, + fileEarmarkMedical, + fileEarmarkMinus, + fileEarmarkPerson, + fileEarmarkPlus, + fileEarmarkRichtext, + fileEarmarkSpreadsheet, + files, + fileText, + filter, + floppy, + folder, + folderFill, + funnel, + gear, + globe2, + google, + grid, + gripVertical, + hash, + hddStack, + heart, + house, + inbox, + infoCircle, + journalBookmarkFill, + journals, + lightbulb, + link, + list, + listNested, + listTask, + listUl, + microsoft, + newspaper, + nodePlus, + pencil, + paperclip, + people, + peopleFill, + person, + personCircle, + personFill, + personFillLock, + personLock, + personSquare, + playFill, + plus, + plusCircle, + printer, + questionCircle, + receipt, + safe, + scissors, + search, + send, + slashCircle, + shop, + sliders2Vertical, + sortAlphaDown, + sortAlphaUpAlt, + stack, + stars, + tagFill, + tag, + tags, + textIndentLeft, + textLeft, + telephone, + threeDots, + threeDotsVertical, + trash, + truck, + uiRadios, + unlock, + upcScan, + wallet2, + windowStack, + x, + xCircle, + xLg, +} diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html index 7292ba8eaa..f4ade86cc0 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html @@ -1,11 +1,11 @@ @if (active()) { } diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts index 50cb5c3bb7..eec6651564 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts @@ -1,5 +1,4 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { ClearableBadgeComponent } from './clearable-badge.component' describe('ClearableBadgeComponent', () => { @@ -8,10 +7,7 @@ describe('ClearableBadgeComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - ClearableBadgeComponent, - ], + imports: [ClearableBadgeComponent], }).compileComponents() fixture = TestBed.createComponent(ClearableBadgeComponent) diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts index 0ee3661106..36775674b1 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts @@ -1,11 +1,11 @@ import { Component, computed, EventEmitter, input, Output } from '@angular/core' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' @Component({ selector: 'pngx-clearable-badge', templateUrl: './clearable-badge.component.html', styleUrls: ['./clearable-badge.component.scss'], - imports: [NgxBootstrapIconsModule], + imports: [BootstrapIconComponent], }) export class ClearableBadgeComponent { readonly number = input(undefined) diff --git a/src-ui/src/app/components/common/confirm-button/confirm-button.component.html b/src-ui/src/app/components/common/confirm-button/confirm-button.component.html index f046941231..46617e4bcd 100644 --- a/src-ui/src/app/components/common/confirm-button/confirm-button.component.html +++ b/src-ui/src/app/components/common/confirm-button/confirm-button.component.html @@ -10,7 +10,7 @@ popoverClass="popover-slim" > @if (iconName) { - + } {{label}} diff --git a/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts b/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts index 6f9d3819ca..3076a30d3e 100644 --- a/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts @@ -1,7 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { ConfirmButtonComponent } from './confirm-button.component' describe('ConfirmButtonComponent', () => { @@ -10,11 +9,7 @@ describe('ConfirmButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgbPopoverModule, - NgxBootstrapIconsModule.pick(allIcons), - ConfirmButtonComponent, - ], + imports: [NgbPopoverModule, ConfirmButtonComponent], }).compileComponents() fixture = TestBed.createComponent(ConfirmButtonComponent) diff --git a/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts b/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts index 7ed79308bb..be32b44458 100644 --- a/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts +++ b/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts @@ -6,13 +6,13 @@ import { ViewChild, } from '@angular/core' import { NgbPopover, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' @Component({ selector: 'pngx-confirm-button', templateUrl: './confirm-button.component.html', styleUrl: './confirm-button.component.scss', - imports: [NgbPopoverModule, NgxBootstrapIconsModule], + imports: [NgbPopoverModule, BootstrapIconComponent], }) export class ConfirmButtonComponent { @Input() diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html index 283a85bf17..ecd37ce56d 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html @@ -22,7 +22,7 @@ @let document = getDocument(documentID); @if (document) {
  • - +
    @if (document.correspondent) { diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts index 939eaa31de..6d4074d52d 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts @@ -2,7 +2,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DocumentService } from 'src/app/services/rest/document.service' import { MergeAsVersionsConfirmDialogComponent } from './merge-as-versions-confirm-dialog.component' @@ -14,10 +13,7 @@ describe('MergeAsVersionsConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - MergeAsVersionsConfirmDialogComponent, - ], + imports: [MergeAsVersionsConfirmDialogComponent], providers: [ NgbActiveModal, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts index a05e3ab1b2..fc2526c4fb 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts @@ -6,8 +6,8 @@ import { import { AsyncPipe } from '@angular/common' import { Component, OnInit, computed, inject, signal } from '@angular/core' import { FormsModule } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { CorrespondentNamePipe } from 'src/app/pipes/correspondent-name.pipe' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' @@ -24,7 +24,7 @@ import { ConfirmDialogComponent } from '../confirm-dialog.component' CustomDatePipe, DragDropModule, FormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class MergeAsVersionsConfirmDialogComponent diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html index a55e63d320..bc30485f61 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html @@ -15,7 +15,7 @@ @let document = getDocument(documentID); @if (document) {
  • - +
    @if (document.correspondent) { diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts index e9b99763a6..49774449ac 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts @@ -3,7 +3,6 @@ import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DocumentService } from 'src/app/services/rest/document.service' import { MergeConfirmDialogComponent } from './merge-confirm-dialog.component' @@ -15,12 +14,7 @@ describe('MergeConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - ReactiveFormsModule, - FormsModule, - MergeConfirmDialogComponent, - ], + imports: [ReactiveFormsModule, FormsModule, MergeConfirmDialogComponent], providers: [ NgbActiveModal, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts index e852e5a933..d924d3ee80 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts @@ -6,8 +6,8 @@ import { import { AsyncPipe } from '@angular/common' import { Component, OnInit, inject, signal } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { CorrespondentNamePipe } from 'src/app/pipes/correspondent-name.pipe' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' @@ -26,7 +26,7 @@ import { ConfirmDialogComponent } from '../confirm-dialog.component' DragDropModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class MergeConfirmDialogComponent diff --git a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html index 56bf87433f..d351112f52 100644 --- a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html @@ -18,7 +18,7 @@ (ngModelChange)="onUpdateDocumentChange($event)" />
    diff --git a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts index a1449511b0..217663b55c 100644 --- a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts @@ -1,7 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { By } from '@angular/platform-browser' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { PasswordRemovalConfirmDialogComponent } from './password-removal-confirm-dialog.component' describe('PasswordRemovalConfirmDialogComponent', () => { @@ -11,10 +10,7 @@ describe('PasswordRemovalConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ providers: [NgbActiveModal], - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - PasswordRemovalConfirmDialogComponent, - ], + imports: [PasswordRemovalConfirmDialogComponent], }).compileComponents() fixture = TestBed.createComponent(PasswordRemovalConfirmDialogComponent) diff --git a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts index 28e78fc881..cdfd973fcc 100644 --- a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts @@ -1,13 +1,13 @@ import { Component } from '@angular/core' import { FormsModule } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { ConfirmDialogComponent } from '../confirm-dialog.component' @Component({ selector: 'pngx-password-removal-confirm-dialog', templateUrl: './password-removal-confirm-dialog.component.html', styleUrls: ['./password-removal-confirm-dialog.component.scss'], - imports: [FormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, BootstrapIconComponent], }) export class PasswordRemovalConfirmDialogComponent extends ConfirmDialogComponent { updateDocument: boolean = true diff --git a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html index bba27b1b60..3cf427f565 100644 --- a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html @@ -7,7 +7,7 @@
    @@ -17,7 +17,7 @@
    diff --git a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts index 6e0bca287d..91aa7a9804 100644 --- a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts @@ -2,7 +2,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { RotateConfirmDialogComponent } from './rotate-confirm-dialog.component' describe('RotateConfirmDialogComponent', () => { @@ -11,10 +10,7 @@ describe('RotateConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - RotateConfirmDialogComponent, - ], + imports: [RotateConfirmDialogComponent], providers: [ NgbActiveModal, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts index 18d844ef92..395d0aa517 100644 --- a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts @@ -1,6 +1,6 @@ import { NgStyle } from '@angular/common' import { Component, inject, signal } from '@angular/core' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DocumentService } from 'src/app/services/rest/document.service' import { ConfirmDialogComponent } from '../confirm-dialog.component' @@ -8,7 +8,7 @@ import { ConfirmDialogComponent } from '../confirm-dialog.component' selector: 'pngx-rotate-confirm-dialog', templateUrl: './rotate-confirm-dialog.component.html', styleUrl: './rotate-confirm-dialog.component.scss', - imports: [NgStyle, NgxBootstrapIconsModule], + imports: [NgStyle, BootstrapIconComponent], }) export class RotateConfirmDialogComponent extends ConfirmDialogComponent { documentService = inject(DocumentService) diff --git a/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html b/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html index 656cae3392..3506b5ea28 100644 --- a/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html +++ b/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html @@ -20,7 +20,7 @@ @for (docId of value; track docId) { @if (getDocumentTitle(docId)) { - {{ getDocumentTitle(docId) }} + {{ getDocumentTitle(docId) }} } } diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html index 2adeaad9b0..11a5b56aae 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html @@ -1,6 +1,6 @@
    @@ -16,7 +16,7 @@ } @if (!filterText?.length || filteredFields.length === 0) { }
    diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts index e00a6e0d14..57fcd798e0 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts @@ -10,7 +10,6 @@ import { NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' @@ -49,7 +48,6 @@ describe('CustomFieldsDropdownComponent', () => { ReactiveFormsModule, NgbModalModule, NgbDropdownModule, - NgxBootstrapIconsModule.pick(allIcons), CustomFieldsDropdownComponent, SelectComponent, ], diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts index 6d920742ab..d822bb373e 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts @@ -12,8 +12,8 @@ import { } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbDropdownModule, NgbModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { CustomField, DATA_TYPE_LABELS } from 'src/app/data/custom-field' import { CustomFieldInstance } from 'src/app/data/custom-field-instance' import { @@ -34,7 +34,7 @@ import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit styleUrls: ['./custom-fields-dropdown.component.scss'], imports: [ NgbDropdownModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, FormsModule, ReactiveFormsModule, ], diff --git a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html index b04b207adf..51b21b18d2 100644 --- a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html +++ b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html @@ -1,7 +1,7 @@ @if (useDropdown) {
    @@ -187,7 +187,7 @@ }
    @@ -221,14 +221,14 @@
    @if (expression.depth > 0) { }
    diff --git a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts index 7062be77ad..5439af84b3 100644 --- a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts @@ -5,7 +5,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbDateAdapter, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { @@ -67,7 +66,6 @@ describe('CustomFieldsQueryDropdownComponent', () => { await TestBed.configureTestingModule({ imports: [ NgbDropdownModule, - NgxBootstrapIconsModule.pick(allIcons), NgSelectModule, FormsModule, ReactiveFormsModule, diff --git a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts index 874655e11d..b93f119c7a 100644 --- a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts +++ b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts @@ -24,8 +24,8 @@ import { NgbDropdownModule, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first, Subject, Subscription, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { CUSTOM_FIELD_QUERY_MAX_ATOMS, @@ -235,7 +235,7 @@ export class CustomFieldQueriesModel { NgClass, NgTemplateOutlet, NgSelectModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, ], }) diff --git a/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html b/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html index cb540316f4..76e883fc18 100644 --- a/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html +++ b/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html @@ -1,6 +1,6 @@
  • diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts index a89c87cf92..4a89b22778 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts @@ -15,8 +15,8 @@ import { ReactiveFormsModule, } from '@angular/forms' import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subscription, catchError, map, of, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Correspondent } from 'src/app/data/correspondent' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { DocumentType } from 'src/app/data/document-type' @@ -496,7 +496,7 @@ const FILTER_HANDLERS: Record = { NgbAccordionModule, NgTemplateOutlet, DragDropModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class WorkflowEditDialogComponent diff --git a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts index ca078bab6a..5302fcddc6 100644 --- a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts @@ -3,7 +3,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { PermissionsService } from 'src/app/services/permissions.service' @@ -20,11 +19,7 @@ describe('EmailDocumentDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - EmailDocumentDialogComponent, - IfPermissionsDirective, - NgxBootstrapIconsModule.pick(allIcons), - ], + imports: [EmailDocumentDialogComponent, IfPermissionsDirective], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts index c97d8be0f5..2c16f1fb40 100644 --- a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts +++ b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts @@ -1,7 +1,6 @@ import { Component, effect, inject, signal } from '@angular/core' import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { DocumentService } from 'src/app/services/rest/document.service' import { ToastService } from 'src/app/services/toast.service' import { LoadingComponentWithPermissions } from '../../loading-component/loading.component' @@ -10,7 +9,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading selector: 'pngx-email-document-dialog', templateUrl: './email-document-dialog.component.html', styleUrl: './email-document-dialog.component.scss', - imports: [FormsModule, NgxBootstrapIconsModule], + imports: [FormsModule], }) export class EmailDocumentDialogComponent extends LoadingComponentWithPermissions { private activeModal = inject(NgbActiveModal) diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html index 939ab6ba2a..ee27dc3454 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html @@ -1,6 +1,6 @@
    } @if (filteredItems.length > 0) { } } @if (extraButtonTitle && (showExtraButtonIfEmpty || filteredItems?.length > 0)) { } @if (!editing && manyToOne) { diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts index 7cf2083aa0..7eb75026a0 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts @@ -2,7 +2,6 @@ import { ScrollingModule } from '@angular/cdk/scrolling' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { NEVER, Subject } from 'rxjs' import { NEGATIVE_NULL_FILTER_VALUE } from 'src/app/data/filter-rule-type' import { @@ -63,7 +62,7 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), ], - imports: [NgxBootstrapIconsModule.pick(allIcons), ScrollingModule], + imports: [ScrollingModule], }).compileComponents() hotkeyService = TestBed.inject(HotKeyService) diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts index fdebc7003a..8463cb0d36 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts @@ -20,8 +20,8 @@ import { NgbDropdownModule, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject, filter, first, merge, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { NEGATIVE_NULL_FILTER_VALUE } from 'src/app/data/filter-rule-type' import { MatchingModel } from 'src/app/data/matching-model' import { ObjectWithPermissions } from 'src/app/data/object-with-permissions' @@ -706,7 +706,7 @@ export class FilterableDropdownSelectionModel { ToggleableDropdownButtonComponent, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, NgClass, ScrollingModule, diff --git a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html index a940ac7335..f9da7f8ccc 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html @@ -6,13 +6,13 @@ [disabled]="disabled">
    @if (isChecked()) { - + } @if (isPartiallyChecked()) { - + } @if (isExcluded()) { - + }
    diff --git a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts index 4d202580c8..8c4cc02f9b 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { MatchingModel } from 'src/app/data/matching-model' import { Tag } from 'src/app/data/tag' import { TagComponent } from '../../tag/tag.component' @@ -15,7 +15,7 @@ export enum ToggleableItemState { selector: 'pngx-toggleable-dropdown-button', templateUrl: './toggleable-dropdown-button.component.html', styleUrls: ['./toggleable-dropdown-button.component.scss'], - imports: [TagComponent, NgxBootstrapIconsModule], + imports: [TagComponent, BootstrapIconComponent], }) export class ToggleableDropdownButtonComponent { @Input() diff --git a/src-ui/src/app/components/common/input/check/check.component.html b/src-ui/src/app/components/common/input/check/check.component.html index e3dab36eae..3aa2c8927c 100644 --- a/src-ui/src/app/components/common/input/check/check.component.html +++ b/src-ui/src/app/components/common/input/check/check.component.html @@ -5,7 +5,7 @@ @if (removable) { }
    diff --git a/src-ui/src/app/components/common/input/check/check.component.ts b/src-ui/src/app/components/common/input/check/check.component.ts index 82e2667243..53f995a081 100644 --- a/src-ui/src/app/components/common/input/check/check.component.ts +++ b/src-ui/src/app/components/common/input/check/check.component.ts @@ -5,7 +5,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -19,7 +19,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-check', templateUrl: './check.component.html', styleUrls: ['./check.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgClass, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, NgClass, BootstrapIconComponent], }) export class CheckComponent extends AbstractInputComponent { constructor() { diff --git a/src-ui/src/app/components/common/input/color/color.component.html b/src-ui/src/app/components/common/input/color/color.component.html index 90e5c3ebf9..8a513a6f6c 100644 --- a/src-ui/src/app/components/common/input/color/color.component.html +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -15,7 +15,7 @@
    diff --git a/src-ui/src/app/components/common/input/color/color.component.spec.ts b/src-ui/src/app/components/common/input/color/color.component.spec.ts index 427a878734..8727870101 100644 --- a/src-ui/src/app/components/common/input/color/color.component.spec.ts +++ b/src-ui/src/app/components/common/input/color/color.component.spec.ts @@ -5,7 +5,6 @@ import { ReactiveFormsModule, } from '@angular/forms' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { ColorSliderModule } from 'ngx-color/slider' import { ColorComponent } from './color.component' @@ -22,7 +21,6 @@ describe('ColorComponent', () => { ReactiveFormsModule, NgbPopoverModule, ColorSliderModule, - NgxBootstrapIconsModule.pick(allIcons), ColorComponent, ], }).compileComponents() diff --git a/src-ui/src/app/components/common/input/color/color.component.ts b/src-ui/src/app/components/common/input/color/color.component.ts index 5f83d593f4..f31721f712 100644 --- a/src-ui/src/app/components/common/input/color/color.component.ts +++ b/src-ui/src/app/components/common/input/color/color.component.ts @@ -5,8 +5,8 @@ import { ReactiveFormsModule, } from '@angular/forms' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { ColorSliderModule } from 'ngx-color/slider' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { randomColor } from 'src/app/utils/color' import { AbstractInputComponent } from '../abstract-input' @@ -22,7 +22,7 @@ import { AbstractInputComponent } from '../abstract-input' templateUrl: './color.component.html', styleUrls: ['./color.component.scss'], imports: [ - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbPopoverModule, FormsModule, ReactiveFormsModule, diff --git a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html index 46dd4f5ab1..056ad0515c 100644 --- a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html +++ b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html @@ -75,7 +75,7 @@ } }
    } diff --git a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts index 65a2bea8a6..76832c33bb 100644 --- a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts +++ b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts @@ -14,7 +14,7 @@ import { } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' import { AbstractInputComponent } from '../abstract-input' @@ -52,7 +52,7 @@ import { UrlComponent } from '../url/url.component' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, TextAreaComponent, ], }) diff --git a/src-ui/src/app/components/common/input/date/date.component.html b/src-ui/src/app/components/common/input/date/date.component.html index a60cbf8baf..9eb7fb0d2c 100644 --- a/src-ui/src/app/components/common/input/date/date.component.html +++ b/src-ui/src/app/components/common/input/date/date.component.html @@ -4,7 +4,7 @@ @if (removable) { }
    @@ -14,7 +14,7 @@ (dateSelect)="onChange(value)" (change)="onChange(value)" (keypress)="onKeyPress($event)" (paste)="onPaste($event)" name="dp" [(ngModel)]="value" [ngModelOptions]="{standalone: true}" ngbDatepicker #datePicker="ngbDatepicker" #datePickerContent="ngModel" [disabled]="disabled" [footerTemplate]="datePickerFooterTemplate">
    @@ -24,7 +24,7 @@ @if (showFilter) { }
    diff --git a/src-ui/src/app/components/common/input/date/date.component.spec.ts b/src-ui/src/app/components/common/input/date/date.component.spec.ts index c8bf9b2e21..ca98d38494 100644 --- a/src-ui/src/app/components/common/input/date/date.component.spec.ts +++ b/src-ui/src/app/components/common/input/date/date.component.spec.ts @@ -4,7 +4,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { NG_VALUE_ACCESSOR } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { routes } from 'src/app/app-routing.module' import { LocalizedDateParserFormatter } from 'src/app/utils/ngb-date-parser-formatter' import { DateComponent } from './date.component' @@ -16,10 +15,7 @@ describe('DateComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - RouterModule.forRoot(routes), - ], + imports: [RouterModule.forRoot(routes)], providers: [ { provide: NgbDateParserFormatter, diff --git a/src-ui/src/app/components/common/input/date/date.component.ts b/src-ui/src/app/components/common/input/date/date.component.ts index 5a10cce188..94979760ae 100644 --- a/src-ui/src/app/components/common/input/date/date.component.ts +++ b/src-ui/src/app/components/common/input/date/date.component.ts @@ -19,7 +19,7 @@ import { NgbDatepickerModule, NgbDateStruct, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { SettingsService } from 'src/app/services/settings.service' import { AbstractInputComponent } from '../abstract-input' @@ -39,7 +39,7 @@ import { AbstractInputComponent } from '../abstract-input' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class DateComponent diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.html b/src-ui/src/app/components/common/input/document-link/document-link.component.html index 4630422a96..39a84ac5c3 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.html +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.html @@ -9,7 +9,7 @@ } @if (removable) { }
    @@ -41,15 +41,15 @@
    @if (!disabled) { - + } @if (document.title) { - {{document.title}} + {{document.title}} } @else { - Unavailable + Unavailable }
    diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.scss b/src-ui/src/app/components/common/input/document-link/document-link.component.scss index c838868444..e42769c71a 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.scss +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.scss @@ -19,7 +19,7 @@ } } -i-bs { +pngx-bs-icon { cursor: pointer; } diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts b/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts index be479f2a4f..630e9d050b 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts @@ -5,7 +5,6 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms' import { By } from '@angular/platform-browser' import { provideRouter } from '@angular/router' import { NgSelectComponent } from '@ng-select/ng-select' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { of, Subject, throwError } from 'rxjs' import { FILTER_SIMPLE_TITLE } from 'src/app/data/filter-rule-type' import { DocumentService } from 'src/app/services/rest/document.service' @@ -37,7 +36,7 @@ describe('DocumentLinkComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [DocumentLinkComponent, NgxBootstrapIconsModule.pick(allIcons)], + imports: [DocumentLinkComponent], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.ts b/src-ui/src/app/components/common/input/document-link/document-link.component.ts index fb8106d1db..cec2f158ea 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.ts +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.ts @@ -15,7 +15,6 @@ import { } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { catchError, concat, @@ -28,6 +27,7 @@ import { takeUntil, tap, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { FILTER_SIMPLE_TITLE } from 'src/app/data/filter-rule-type' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' @@ -53,7 +53,7 @@ import { AbstractInputComponent } from '../abstract-input' RouterModule, NgTemplateOutlet, NgSelectModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class DocumentLinkComponent diff --git a/src-ui/src/app/components/common/input/entries/entries.component.html b/src-ui/src/app/components/common/input/entries/entries.component.html index ed69d87781..6e92ce202d 100644 --- a/src-ui/src/app/components/common/input/entries/entries.component.html +++ b/src-ui/src/app/components/common/input/entries/entries.component.html @@ -5,7 +5,7 @@ }
    @@ -14,7 +14,7 @@
    } diff --git a/src-ui/src/app/components/common/input/entries/entries.component.spec.ts b/src-ui/src/app/components/common/input/entries/entries.component.spec.ts index 692b9c0b87..9b8f946cfc 100644 --- a/src-ui/src/app/components/common/input/entries/entries.component.spec.ts +++ b/src-ui/src/app/components/common/input/entries/entries.component.spec.ts @@ -4,7 +4,6 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { EntriesComponent } from './entries.component' describe('EntriesComponent', () => { @@ -13,12 +12,7 @@ describe('EntriesComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - FormsModule, - ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), - EntriesComponent, - ], + imports: [FormsModule, ReactiveFormsModule, EntriesComponent], }).compileComponents() }) diff --git a/src-ui/src/app/components/common/input/entries/entries.component.ts b/src-ui/src/app/components/common/input/entries/entries.component.ts index cbf5de1d4e..6af3196363 100644 --- a/src-ui/src/app/components/common/input/entries/entries.component.ts +++ b/src-ui/src/app/components/common/input/entries/entries.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-entries', templateUrl: './entries.component.html', styleUrl: './entries.component.scss', - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class EntriesComponent extends AbstractInputComponent { entries = [] diff --git a/src-ui/src/app/components/common/input/file/file.component.html b/src-ui/src/app/components/common/input/file/file.component.html index c23f31ef6a..bfbbab4ad4 100644 --- a/src-ui/src/app/components/common/input/file/file.component.html +++ b/src-ui/src/app/components/common/input/file/file.component.html @@ -6,7 +6,7 @@ } @if (removable) { } @@ -18,7 +18,7 @@
    {{filename}}
    } diff --git a/src-ui/src/app/components/common/input/monetary/monetary.component.html b/src-ui/src/app/components/common/input/monetary/monetary.component.html index be23eadaaf..a94cb1d73e 100644 --- a/src-ui/src/app/components/common/input/monetary/monetary.component.html +++ b/src-ui/src/app/components/common/input/monetary/monetary.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/monetary/monetary.component.ts b/src-ui/src/app/components/common/input/monetary/monetary.component.ts index b0d6c5b09e..8f6a7c84f6 100644 --- a/src-ui/src/app/components/common/input/monetary/monetary.component.ts +++ b/src-ui/src/app/components/common/input/monetary/monetary.component.ts @@ -5,7 +5,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -23,7 +23,7 @@ import { AbstractInputComponent } from '../abstract-input' CurrencyPipe, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class MonetaryComponent extends AbstractInputComponent { diff --git a/src-ui/src/app/components/common/input/number/number.component.html b/src-ui/src/app/components/common/input/number/number.component.html index 3066d100ea..bbbf6fb576 100644 --- a/src-ui/src/app/components/common/input/number/number.component.html +++ b/src-ui/src/app/components/common/input/number/number.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/number/number.component.ts b/src-ui/src/app/components/common/input/number/number.component.ts index ee701a5042..a6253905c7 100644 --- a/src-ui/src/app/components/common/input/number/number.component.ts +++ b/src-ui/src/app/components/common/input/number/number.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DocumentService } from 'src/app/services/rest/document.service' import { AbstractInputComponent } from '../abstract-input' @@ -19,7 +19,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-number', templateUrl: './number.component.html', styleUrls: ['./number.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class NumberComponent extends AbstractInputComponent { private documentService = inject(DocumentService) diff --git a/src-ui/src/app/components/common/input/password/password.component.html b/src-ui/src/app/components/common/input/password/password.component.html index 6d7266619e..a9335c3322 100644 --- a/src-ui/src/app/components/common/input/password/password.component.html +++ b/src-ui/src/app/components/common/input/password/password.component.html @@ -10,7 +10,7 @@ @if (showReveal) { } diff --git a/src-ui/src/app/components/common/input/password/password.component.spec.ts b/src-ui/src/app/components/common/input/password/password.component.spec.ts index 3343e6ac5a..d0a4a89bcb 100644 --- a/src-ui/src/app/components/common/input/password/password.component.spec.ts +++ b/src-ui/src/app/components/common/input/password/password.component.spec.ts @@ -5,7 +5,6 @@ import { ReactiveFormsModule, } from '@angular/forms' import { By } from '@angular/platform-browser' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { PasswordComponent } from './password.component' describe('PasswordComponent', () => { @@ -16,12 +15,7 @@ describe('PasswordComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [], - imports: [ - FormsModule, - ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), - PasswordComponent, - ], + imports: [FormsModule, ReactiveFormsModule, PasswordComponent], }).compileComponents() fixture = TestBed.createComponent(PasswordComponent) diff --git a/src-ui/src/app/components/common/input/password/password.component.ts b/src-ui/src/app/components/common/input/password/password.component.ts index 3af5d66739..35f0ab054c 100644 --- a/src-ui/src/app/components/common/input/password/password.component.ts +++ b/src-ui/src/app/components/common/input/password/password.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-password', templateUrl: './password.component.html', styleUrls: ['./password.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class PasswordComponent extends AbstractInputComponent { @Input() diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 13f862b241..83d54618ca 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -7,7 +7,7 @@ } @if (removable) { } @@ -42,26 +42,26 @@ } @if (iconField && item[iconField]) { - + } {{item[bindLabel]}} @if (iconField && item[iconField]) { - + } {{item[bindLabel]}} @if (allowCreateNew && !hideAddButton) { } @if (showFilter) { } diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 888d3b5ed8..1fd2db3b7b 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -12,7 +12,7 @@ import { } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { matchesSearchText } from 'src/app/utils/text-search' import { AbstractInputComponent } from '../abstract-input' @@ -32,7 +32,7 @@ import { AbstractInputComponent } from '../abstract-input' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class SelectComponent extends AbstractInputComponent { diff --git a/src-ui/src/app/components/common/input/switch/switch.component.html b/src-ui/src/app/components/common/input/switch/switch.component.html index 636356d644..4eafff201f 100644 --- a/src-ui/src/app/components/common/input/switch/switch.component.html +++ b/src-ui/src/app/components/common/input/switch/switch.component.html @@ -5,12 +5,12 @@ @if (removable) { } @@ -22,7 +22,7 @@ } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 85cf05f1bb..4254b0dca7 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -22,7 +22,7 @@ } @if (showFilter) { } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.spec.ts b/src-ui/src/app/components/common/input/tags/tags.component.spec.ts index 728713dd7a..184a6284a8 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.spec.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.spec.ts @@ -15,7 +15,6 @@ import { NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DEFAULT_MATCHING_ALGORITHM, @@ -71,7 +70,6 @@ describe('TagsComponent', () => { NgbModalModule, NgbAccordionModule, NgbPopoverModule, - NgxBootstrapIconsModule.pick(allIcons), TagsComponent, TagEditDialogComponent, TextComponent, diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 1410db99b8..b0db1f3d3a 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -18,8 +18,8 @@ import { import { RouterModule } from '@angular/router' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first, firstValueFrom, tap } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Tag } from 'src/app/data/tag' import { TagService } from 'src/app/services/rest/tag.service' import { matchesSearchText } from 'src/app/utils/text-search' @@ -44,7 +44,7 @@ import { TagComponent } from '../../tag/tag.component' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class TagsComponent implements OnInit, ControlValueAccessor { diff --git a/src-ui/src/app/components/common/input/text/text.component.html b/src-ui/src/app/components/common/input/text/text.component.html index 95d4ad4da0..5c7c5742e4 100644 --- a/src-ui/src/app/components/common/input/text/text.component.html +++ b/src-ui/src/app/components/common/input/text/text.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/text/text.component.ts b/src-ui/src/app/components/common/input/text/text.component.ts index 8572547a77..cd648229ca 100644 --- a/src-ui/src/app/components/common/input/text/text.component.ts +++ b/src-ui/src/app/components/common/input/text/text.component.ts @@ -5,7 +5,7 @@ import { ReactiveFormsModule, } from '@angular/forms' import { RouterLink } from '@angular/router' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -22,7 +22,7 @@ import { AbstractInputComponent } from '../abstract-input' imports: [ FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, RouterLink, ], }) diff --git a/src-ui/src/app/components/common/input/textarea/textarea.component.html b/src-ui/src/app/components/common/input/textarea/textarea.component.html index eb6d7e3245..36e8a01ff9 100644 --- a/src-ui/src/app/components/common/input/textarea/textarea.component.html +++ b/src-ui/src/app/components/common/input/textarea/textarea.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/textarea/textarea.component.ts b/src-ui/src/app/components/common/input/textarea/textarea.component.ts index 527afda925..f67c917086 100644 --- a/src-ui/src/app/components/common/input/textarea/textarea.component.ts +++ b/src-ui/src/app/components/common/input/textarea/textarea.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-textarea', templateUrl: './textarea.component.html', styleUrls: ['./textarea.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class TextAreaComponent extends AbstractInputComponent { @Input() diff --git a/src-ui/src/app/components/common/input/url/url.component.html b/src-ui/src/app/components/common/input/url/url.component.html index b6d4b995d8..85a9074522 100644 --- a/src-ui/src/app/components/common/input/url/url.component.html +++ b/src-ui/src/app/components/common/input/url/url.component.html @@ -4,7 +4,7 @@ @if (removable) { } @@ -12,7 +12,7 @@
    - +
    {{error}} diff --git a/src-ui/src/app/components/common/input/url/url.component.spec.ts b/src-ui/src/app/components/common/input/url/url.component.spec.ts index 73feb11480..2e919b4be6 100644 --- a/src-ui/src/app/components/common/input/url/url.component.spec.ts +++ b/src-ui/src/app/components/common/input/url/url.component.spec.ts @@ -4,7 +4,6 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { UrlComponent } from './url.component' describe('TextComponent', () => { @@ -15,12 +14,7 @@ describe('TextComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [], - imports: [ - FormsModule, - ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), - UrlComponent, - ], + imports: [FormsModule, ReactiveFormsModule, UrlComponent], }).compileComponents() fixture = TestBed.createComponent(UrlComponent) diff --git a/src-ui/src/app/components/common/input/url/url.component.ts b/src-ui/src/app/components/common/input/url/url.component.ts index ac28e2d0ab..84fce47cc1 100644 --- a/src-ui/src/app/components/common/input/url/url.component.ts +++ b/src-ui/src/app/components/common/input/url/url.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-url', templateUrl: './url.component.html', styleUrls: ['./url.component.scss'], - imports: [NgxBootstrapIconsModule, FormsModule, ReactiveFormsModule], + imports: [BootstrapIconComponent, FormsModule, ReactiveFormsModule], }) export class UrlComponent extends AbstractInputComponent { constructor() { diff --git a/src-ui/src/app/components/common/page-header/page-header.component.html b/src-ui/src/app/components/common/page-header/page-header.component.html index 3be16747f4..cd573a6987 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.html +++ b/src-ui/src/app/components/common/page-header/page-header.component.html @@ -5,7 +5,7 @@ @if (id()) {

    @if (infoLink()) { Read more - + }
    } diff --git a/src-ui/src/app/components/common/page-header/page-header.component.spec.ts b/src-ui/src/app/components/common/page-header/page-header.component.spec.ts index 603dcd028f..57f3b58394 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.spec.ts +++ b/src-ui/src/app/components/common/page-header/page-header.component.spec.ts @@ -1,7 +1,6 @@ import { Clipboard } from '@angular/cdk/clipboard' import { ComponentFixture, TestBed } from '@angular/core/testing' import { Title } from '@angular/platform-browser' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { environment } from 'src/environments/environment' import { PageHeaderComponent } from './page-header.component' @@ -14,7 +13,7 @@ describe('PageHeaderComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [], - imports: [NgxBootstrapIconsModule.pick(allIcons), PageHeaderComponent], + imports: [PageHeaderComponent], }).compileComponents() titleService = TestBed.inject(Title) diff --git a/src-ui/src/app/components/common/page-header/page-header.component.ts b/src-ui/src/app/components/common/page-header/page-header.component.ts index a0a1cc3645..578bc7a65a 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.ts +++ b/src-ui/src/app/components/common/page-header/page-header.component.ts @@ -2,15 +2,15 @@ import { Clipboard } from '@angular/cdk/clipboard' import { Component, effect, inject, input, signal } from '@angular/core' import { Title } from '@angular/platform-browser' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TourNgBootstrap } from 'ngx-ui-tour-ng-bootstrap' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { environment } from 'src/environments/environment' @Component({ selector: 'pngx-page-header', templateUrl: './page-header.component.html', styleUrls: ['./page-header.component.scss'], - imports: [NgbPopoverModule, NgxBootstrapIconsModule, TourNgBootstrap], + imports: [NgbPopoverModule, BootstrapIconComponent, TourNgBootstrap], }) export class PageHeaderComponent { private titleService = inject(Title) diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html index 436ef5c44e..8d97f04c71 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html @@ -7,21 +7,21 @@
    @@ -31,18 +31,18 @@
    @@ -78,12 +78,12 @@
    diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts index 41fee5a7e3..95005c1ba6 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts @@ -2,7 +2,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { DocumentService } from 'src/app/services/rest/document.service' import { PDFEditorComponent } from './pdf-editor.component' @@ -12,7 +11,7 @@ describe('PDFEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [PDFEditorComponent, NgxBootstrapIconsModule.pick(allIcons)], + imports: [PDFEditorComponent], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts index 8ba4580625..5088486f36 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts @@ -6,7 +6,7 @@ import { import { Component, inject, signal } from '@angular/core' import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { DocumentService } from 'src/app/services/rest/document.service' import { SettingsService } from 'src/app/services/settings.service' @@ -33,7 +33,7 @@ interface PageOperation { imports: [ DragDropModule, FormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, PngxPdfViewerComponent, ], }) diff --git a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html index dc62d2e11d..28de73b665 100644 --- a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html +++ b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html @@ -1,6 +1,6 @@
    Copied! @@ -60,7 +60,7 @@
    } @if (!loading()) { - + } Create diff --git a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts index 3e6be2e94d..c4da477f15 100644 --- a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts @@ -8,7 +8,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { By } from '@angular/platform-browser' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { FileVersion, ShareLink } from 'src/app/data/share-link' import { ShareLinkService } from 'src/app/services/rest/share-link.service' @@ -26,12 +25,7 @@ describe('ShareLinksDialogComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ - ShareLinksDialogComponent, - NgxBootstrapIconsModule.pick(allIcons), - FormsModule, - ReactiveFormsModule, - ], + imports: [ShareLinksDialogComponent, FormsModule, ReactiveFormsModule], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts index f3d4b8f271..18c4c6e8dc 100644 --- a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts +++ b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts @@ -2,8 +2,8 @@ import { Clipboard } from '@angular/cdk/clipboard' import { Component, OnInit, effect, inject, input, signal } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { FileVersion, SHARE_LINK_EXPIRATION_OPTIONS, @@ -17,7 +17,7 @@ import { environment } from 'src/environments/environment' selector: 'pngx-share-links-dialog', templateUrl: './share-links-dialog.component.html', styleUrls: ['./share-links-dialog.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class ShareLinksDialogComponent implements OnInit { private activeModal = inject(NgbActiveModal) diff --git a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html index 87411b8c51..3e66e8cf5f 100644 --- a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html +++ b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html @@ -4,9 +4,9 @@ @if (loading()) {
    } @else if (noSuggestions) { - + } @else { - + } @if (noSuggestions) { No suggestions @@ -31,19 +31,19 @@
    } @if (suggestions()?.suggested_tags?.length > 0) { - Tags + Tags @for (tag of suggestions().suggested_tags; track tag) { } } @if (suggestions()?.suggested_document_types?.length > 0) { -
    Document Types
    +
    Document Types
    @for (type of suggestions().suggested_document_types; track type) { } } @if (suggestions()?.suggested_correspondents?.length > 0) { -
    Correspondents
    +
    Correspondents
    @for (correspondent of suggestions().suggested_correspondents; track correspondent) { } @@ -61,7 +61,7 @@ @if (aiEnabled()) {
    diff --git a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts index 6cc7cb1733..122b669480 100644 --- a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts @@ -1,6 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { SuggestionSource } from 'src/app/data/ui-settings' import { SuggestionsDropdownComponent } from './suggestions-dropdown.component' @@ -10,11 +9,7 @@ describe('SuggestionsDropdownComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ - NgbDropdownModule, - NgxBootstrapIconsModule.pick(allIcons), - SuggestionsDropdownComponent, - ], + imports: [NgbDropdownModule, SuggestionsDropdownComponent], providers: [], }) fixture = TestBed.createComponent(SuggestionsDropdownComponent) diff --git a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts index 73086ab12c..6dcfb467d1 100644 --- a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts +++ b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts @@ -6,14 +6,14 @@ import { input, } from '@angular/core' import { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DocumentSuggestions } from 'src/app/data/document-suggestions' import { SuggestionSource } from 'src/app/data/ui-settings' import { pngxPopperOptions } from 'src/app/utils/popper-options' @Component({ selector: 'pngx-suggestions-dropdown', - imports: [NgbDropdownModule, NgxBootstrapIconsModule], + imports: [NgbDropdownModule, BootstrapIconComponent], templateUrl: './suggestions-dropdown.component.html', styleUrl: './suggestions-dropdown.component.scss', }) diff --git a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html index 3724ee788c..fa69904465 100644 --- a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html +++ b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html @@ -24,7 +24,7 @@ {{status().pngx_version}} @if (versionMismatch()) { } @@ -60,9 +60,9 @@ @@ -77,9 +77,9 @@
    @@ -129,11 +129,11 @@ @@ -186,9 +186,9 @@
    @@ -205,14 +205,14 @@ {{status().tasks.classifier_status}} @if (status().tasks.classifier_status === 'OK') { @if (isStale(status().tasks.classifier_last_trained)) { - + } @else { - + } } @else { - + [class.text-warning]="status().tasks.classifier_status === SystemStatusItemStatus.WARNING"> } @if (currentUserIsSuperUser) { @@ -220,7 +220,7 @@
    } @else { } @@ -239,14 +239,14 @@ {{status().tasks.sanity_check_status}} @if (status().tasks.sanity_check_status === 'OK') { @if (isStale(status().tasks.sanity_check_last_run)) { - + } @else { - + } } @else { - + [class.text-warning]="status().tasks.sanity_check_status === SystemStatusItemStatus.WARNING"> } @if (currentUserIsSuperUser) { @@ -254,7 +254,7 @@
    } @else { } @@ -272,10 +272,10 @@ @if (status().websocket_connected === 'OK') { OK - + } @else { Error - + } @@ -286,15 +286,15 @@ {{status().tasks.llmindex_status}} @if (status().tasks.llmindex_status === 'OK') { @if (isStale(status().tasks.llmindex_last_modified)) { - + } @else { - + } } @else { - + [class.text-muted]="status().tasks.llmindex_status === SystemStatusItemStatus.DISABLED"> } @if (currentUserIsSuperUser) { @@ -302,7 +302,7 @@
    } @else { } @@ -326,10 +326,10 @@