From 3ca5dae3db80a369965eabc3686a26835938d9ba Mon Sep 17 00:00:00 2001
From: pIvan
Date: Thu, 24 Aug 2023 23:45:37 +0200
Subject: [PATCH] Fix #52 - Added support for adding content before and after
all other elements within the color picker.
---
projects/iplab/ngx-color-picker/package.json | 2 +-
.../chrome-picker.component.html | 6 ++-
.../compact-picker.component.html | 6 ++-
.../github-picker.component.html | 6 ++-
.../sketch-picker.component.html | 6 ++-
.../swatches-picker.component.html | 6 ++-
src/app/app.component.html | 35 ++++++++++++---
.../chrome-wrapper.component.css | 26 -----------
.../chrome-wrapper.component.html | 10 ++++-
.../chrome-wrapper.component.scss | 43 +++++++++++++++++++
.../chrome-picker/chrome-wrapper.component.ts | 12 ++++--
11 files changed, 115 insertions(+), 43 deletions(-)
delete mode 100644 src/app/wrap-examples/chrome-picker/chrome-wrapper.component.css
create mode 100644 src/app/wrap-examples/chrome-picker/chrome-wrapper.component.scss
diff --git a/projects/iplab/ngx-color-picker/package.json b/projects/iplab/ngx-color-picker/package.json
index dca0170..db26e03 100644
--- a/projects/iplab/ngx-color-picker/package.json
+++ b/projects/iplab/ngx-color-picker/package.json
@@ -3,7 +3,7 @@
"description": "",
"homepage": "https://github.com/pIvan/ngx-color-picker",
"bugs": "https://github.com/pIvan/ngx-color-picker/issues",
- "version": "16.0.0",
+ "version": "16.1.0",
"author": "Ivan Pintar",
"license": "MIT",
"readmeFilename": "README.md",
diff --git a/projects/iplab/ngx-color-picker/src/lib/components/chrome-picker/chrome-picker.component.html b/projects/iplab/ngx-color-picker/src/lib/components/chrome-picker/chrome-picker.component.html
index d7509ef..612eacf 100644
--- a/projects/iplab/ngx-color-picker/src/lib/components/chrome-picker/chrome-picker.component.html
+++ b/projects/iplab/ngx-color-picker/src/lib/components/chrome-picker/chrome-picker.component.html
@@ -1,3 +1,5 @@
+
+
@@ -22,4 +24,6 @@
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/projects/iplab/ngx-color-picker/src/lib/components/compact-picker/compact-picker.component.html b/projects/iplab/ngx-color-picker/src/lib/components/compact-picker/compact-picker.component.html
index 4f614d4..90430a0 100644
--- a/projects/iplab/ngx-color-picker/src/lib/components/compact-picker/compact-picker.component.html
+++ b/projects/iplab/ngx-color-picker/src/lib/components/compact-picker/compact-picker.component.html
@@ -1,3 +1,5 @@
+
+
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/projects/iplab/ngx-color-picker/src/lib/components/github-picker/github-picker.component.html b/projects/iplab/ngx-color-picker/src/lib/components/github-picker/github-picker.component.html
index 1b9a282..6029e1b 100644
--- a/projects/iplab/ngx-color-picker/src/lib/components/github-picker/github-picker.component.html
+++ b/projects/iplab/ngx-color-picker/src/lib/components/github-picker/github-picker.component.html
@@ -1,5 +1,9 @@
+
+
\ No newline at end of file
+ [colorPresets]="control.presets">
+
+
\ No newline at end of file
diff --git a/projects/iplab/ngx-color-picker/src/lib/components/sketch-picker/sketch-picker.component.html b/projects/iplab/ngx-color-picker/src/lib/components/sketch-picker/sketch-picker.component.html
index 5c7319d..01fde05 100644
--- a/projects/iplab/ngx-color-picker/src/lib/components/sketch-picker/sketch-picker.component.html
+++ b/projects/iplab/ngx-color-picker/src/lib/components/sketch-picker/sketch-picker.component.html
@@ -1,3 +1,5 @@
+
+
@@ -20,4 +22,6 @@
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/projects/iplab/ngx-color-picker/src/lib/components/swatches-picker/swatches-picker.component.html b/projects/iplab/ngx-color-picker/src/lib/components/swatches-picker/swatches-picker.component.html
index 89b67ec..4d9b1c4 100644
--- a/projects/iplab/ngx-color-picker/src/lib/components/swatches-picker/swatches-picker.component.html
+++ b/projects/iplab/ngx-color-picker/src/lib/components/swatches-picker/swatches-picker.component.html
@@ -1,3 +1,5 @@
+
+
\ No newline at end of file
+ [colorPresets]="childControl.presets">
+
+
\ No newline at end of file
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 704d637..13ce251 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -111,6 +111,21 @@ [control] attribute
Examples:
<chrome-picker [control]="ColorPickerControl"></chrome-picker>
+
+
+ Custom content before and after a color picker.
+ All components support this functionality; that is, all components project content to specified locations.
+ Examples:
+ <chrome-picker [control]="ColorPickerControl">
+ <div before>
+ This content goes insede color picker before any other elements.
+ </div>
+ <div>
+ This content goes insede color picker after all other elements.
+ </div>
+</chrome-picker>
+ An example of implementing content afterward is shown here.
+
color indicator
Color indicator is not only indicator, but click also allows copying component color to clipboard.
@@ -435,12 +450,20 @@
attributes explanation
...
selector: 'chrome-wrapper',
template: '
-<chrome-picker *ngIf="isVisible" [control]="colorControl"></chrome-picker>
-<div *ngIf="isVisible" class="overlay" (click)="overlayClick($event)"></div>
+<div class="picker" *ngIf="isVisible">
+ <chrome-picker [control]="colorControl">
+ <div class="buttons">
+ <button type="button" class="btn btn-primary" (click)="applyClick($event)">Apply</button>
+ </div>
+ </chrome-picker>
+ <div class="overlay"></div>
+</div>
'
})
export class ChromeWrapperComponent {
+ private _color: Color = null;
+
public colorControl = new ColorPickerControl();
public isVisible: boolean = false;
@@ -448,6 +471,7 @@ attributes explanation
@Input()
public set color(color: string) {
this.colorControl.setValueFrom(color);
+ this._color = this.colorControl.value;
}
@Output()
@@ -455,11 +479,10 @@ attributes explanation
@HostBinding('style.background-color')
public get background(): string {
- return this.colorControl.value.toHexString();
+ return this._color ? this._color.toHexString() : null;
}
public ngOnInit() {
- this.colorControl.valueChanges.subscribe((value: Color) => this.colorChange.emit(value.toHexString()));
}
@HostListener('click', ['$event'])
@@ -471,10 +494,12 @@ attributes explanation
this.isVisible = !this.isVisible;
}
- public overlayClick(event: MouseEvent): void {
+ public applyClick(event: MouseEvent): void {
event.preventDefault();
event.stopPropagation();
this.isVisible = false;
+ this._color = this.colorControl.value;
+ this.colorChange.emit(this.colorControl.value.toHexString());
}
}
diff --git a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.css b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.css
deleted file mode 100644
index 814d0e9..0000000
--- a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.css
+++ /dev/null
@@ -1,26 +0,0 @@
-:host {
- border: 1px solid #333;
- border-radius: 35px;
- cursor: pointer;
- display: inline-block;
- height: 35px;
- position: relative;
- width: 35px;
-}
-
-chrome-picker {
- left: 100%;
- position: absolute;
- top: 100%;
- z-index: 2;
-}
-
-.overlay {
- background: transparent;
- left: 0;
- position: fixed;
- top: 0;
- height: 100%;
- width: 100%;
- z-index: 1;
-}
\ No newline at end of file
diff --git a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.html b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.html
index 8947d5b..ef5a786 100644
--- a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.html
+++ b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.html
@@ -1,2 +1,8 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.scss b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.scss
new file mode 100644
index 0000000..ec7496f
--- /dev/null
+++ b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.scss
@@ -0,0 +1,43 @@
+:host {
+ border: 1px solid #333;
+ border-radius: 35px;
+ cursor: pointer;
+ display: inline-block;
+ height: 35px;
+ position: relative;
+ width: 35px;
+}
+
+.picker {
+ left: 100%;
+ position: absolute;
+ top: 100%;
+ z-index: 2;
+
+ chrome-picker {
+ left: 100%;
+ position: absolute;
+ top: 100%;
+ z-index: 2;
+ }
+
+ .buttons {
+ padding: 0 12px 12px;
+ text-align: center;
+
+ button {
+ padding: .2rem 1rem;
+ }
+ }
+
+ .overlay {
+ background: transparent;
+ left: 0;
+ position: fixed;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 1;
+ }
+}
+
diff --git a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.ts b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.ts
index 51d7f76..7388046 100644
--- a/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.ts
+++ b/src/app/wrap-examples/chrome-picker/chrome-wrapper.component.ts
@@ -4,10 +4,12 @@ import { ColorPickerControl, Color } from '@iplab/ngx-color-picker';
@Component({
selector: 'chrome-wrapper',
templateUrl: './chrome-wrapper.component.html',
- styleUrls: ['./chrome-wrapper.component.css']
+ styleUrls: ['./chrome-wrapper.component.scss']
})
export class ChromeWrapperComponent implements OnInit {
+ private _color: Color = null;
+
public colorControl = new ColorPickerControl();
public isVisible: boolean = false;
@@ -15,6 +17,7 @@ export class ChromeWrapperComponent implements OnInit {
@Input()
public set color(color: string) {
this.colorControl.setValueFrom(color);
+ this._color = this.colorControl.value;
}
@Output()
@@ -22,11 +25,10 @@ export class ChromeWrapperComponent implements OnInit {
@HostBinding('style.background-color')
public get background(): string {
- return this.colorControl.value.toHexString();
+ return this._color ? this._color.toHexString() : null;
}
ngOnInit() {
- this.colorControl.valueChanges.subscribe((value: Color) => this.colorChange.emit(value.toHexString()));
}
@HostListener('click', ['$event'])
@@ -38,10 +40,12 @@ export class ChromeWrapperComponent implements OnInit {
this.isVisible = !this.isVisible;
}
- public overlayClick(event: MouseEvent): void {
+ public applyClick(event: MouseEvent): void {
event.preventDefault();
event.stopPropagation();
this.isVisible = false;
+ this._color = this.colorControl.value;
+ this.colorChange.emit(this.colorControl.value.toHexString());
}
}