diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index fd6d69538..54c99b1b3 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -2035,6 +2035,11 @@ "to-fast-properties": "^2.0.0" } }, + "@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" + }, "@istanbuljs/schema": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", @@ -7895,6 +7900,11 @@ "object-visit": "^1.0.0" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -8333,6 +8343,16 @@ } } }, + "ngx-color": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-6.2.0.tgz", + "integrity": "sha512-n04tcMnCpOgmI24egST94YwHmnSoAxK8O1T2t3nGrTwWbvw5XBRJvImNFnoNrriBXzc4Gx4hFehH5MU8CZxp1w==", + "requires": { + "@ctrl/tinycolor": "^3.1.6", + "material-colors": "^1.2.6", + "tslib": "^2.0.0" + } + }, "ngx-cookie-service": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-10.1.1.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index a4d014284..595228501 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -26,6 +26,7 @@ "file-saver": "^2.0.5", "ng-bootstrap": "^1.6.3", "ng2-pdf-viewer": "^6.3.2", + "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^10.0.0", "ngx-infinite-scroll": "^9.1.0", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 0cc42292b..cb3698187 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -63,6 +63,8 @@ import { DateComponent } from './components/common/input/date/date.component'; import { ISODateTimeAdapter } from './utils/ngb-iso-date-time-adapter'; import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'; import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'; +import { ColorSliderModule } from 'ngx-color/slider'; +import { ColorComponent } from './components/common/input/color/color.component'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; @@ -125,7 +127,8 @@ registerLocaleData(localeEnGb) NumberComponent, SafePipe, CustomDatePipe, - DateComponent + DateComponent, + ColorComponent ], imports: [ BrowserModule, @@ -137,7 +140,8 @@ registerLocaleData(localeEnGb) NgxFileDropModule, InfiniteScrollModule, PdfViewerModule, - NgSelectModule + NgSelectModule, + ColorSliderModule ], providers: [ DatePipe, 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 new file mode 100644 index 000000000..c39c41d8f --- /dev/null +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -0,0 +1,33 @@ +
+ + +
+
+     +
+ + +
+ +
+ +
+ + + +
+ +
+ + {{hint}} +
+ {{error}} +
+
+ +
\ No newline at end of file diff --git a/src-ui/src/app/components/common/input/color/color.component.scss b/src-ui/src/app/components/common/input/color/color.component.scss new file mode 100644 index 000000000..e69de29bb 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 new file mode 100644 index 000000000..7c5d0d270 --- /dev/null +++ b/src-ui/src/app/components/common/input/color/color.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ColorComponent } from './color.component'; + +describe('ColorComponent', () => { + let component: ColorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ColorComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ColorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); 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 new file mode 100644 index 000000000..e75bbee16 --- /dev/null +++ b/src-ui/src/app/components/common/input/color/color.component.ts @@ -0,0 +1,27 @@ +import { Component, forwardRef } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { AbstractInputComponent } from '../abstract-input'; + +@Component({ + providers: [{ + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ColorComponent), + multi: true + }], + selector: 'app-input-color', + templateUrl: './color.component.html', + styleUrls: ['./color.component.scss'] +}) +export class ColorComponent extends AbstractInputComponent { + + constructor() { + super() + } + + randomize() { + } + + colorChanged(value) { + this.value = value.color.hex + } +} diff --git a/src-ui/src/app/components/common/tag/tag.component.html b/src-ui/src/app/components/common/tag/tag.component.html index 29c554142..fc8b9ef65 100644 --- a/src-ui/src/app/components/common/tag/tag.component.html +++ b/src-ui/src/app/components/common/tag/tag.component.html @@ -1,2 +1,2 @@ -{{tag.name}} -{{tag.name}} \ No newline at end of file +{{tag.name}} +{{tag.name}} \ No newline at end of file diff --git a/src-ui/src/app/components/common/tag/tag.component.ts b/src-ui/src/app/components/common/tag/tag.component.ts index a3c558182..e552ade9c 100644 --- a/src-ui/src/app/components/common/tag/tag.component.ts +++ b/src-ui/src/app/components/common/tag/tag.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { TAG_COLOURS, PaperlessTag } from 'src/app/data/paperless-tag'; +import { PaperlessTag } from 'src/app/data/paperless-tag'; @Component({ selector: 'app-tag', @@ -22,12 +22,4 @@ export class TagComponent implements OnInit { ngOnInit(): void { } - getColour() { - var color = TAG_COLOURS.find(c => c.id == this.tag.colour) - if (color) { - return color - } - return { id: this.tag.colour, name: this.tag.colour, textColor: "#ffffff" } - } - } diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html index 0d2f6a1c7..d9db9283a 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html @@ -8,15 +8,7 @@