@bravobit/bb-foundation 0.51.2 → 0.51.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/elements/lib/color-picker/color-picker.component.d.ts +18 -0
- package/elements/lib/color-slider/color-slider.component.d.ts +24 -0
- package/elements/lib/directives/color-picker.directive.d.ts +27 -0
- package/elements/lib/elements.module.d.ts +22 -19
- package/elements/public_api.d.ts +3 -0
- package/fesm2022/bravobit-bb-foundation-elements.mjs +269 -9
- package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation.mjs +110 -2
- package/fesm2022/bravobit-bb-foundation.mjs.map +1 -1
- package/lib/core/colors/hex-hsv.d.ts +7 -0
- package/lib/core/colors/rgb-hex.d.ts +7 -0
- package/lib/core/colors/rgb-hsv.d.ts +12 -0
- package/lib/core/functions/utils.d.ts +1 -0
- package/localize/lib/transforms/interpolate.transform.d.ts +1 -1
- package/localize/lib/transforms/plural.transform.d.ts +1 -1
- package/localize/lib/transforms/reference.transform.d.ts +1 -1
- package/package.json +5 -5
- package/public_api.d.ts +4 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class BbColorPicker {
|
|
4
|
+
showAlpha: boolean;
|
|
5
|
+
set color(value: string);
|
|
6
|
+
get color(): string;
|
|
7
|
+
colorChange: EventEmitter<string>;
|
|
8
|
+
hueOffset: number;
|
|
9
|
+
saturationOffset: number;
|
|
10
|
+
valueOffset: number;
|
|
11
|
+
opacityOffset: number;
|
|
12
|
+
private _color;
|
|
13
|
+
setColor(): void;
|
|
14
|
+
private setUIVariables;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BbColorPicker, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BbColorPicker, "bb-color-picker", never, { "showAlpha": { "alias": "showAlpha"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, { "colorChange": "colorChange"; }, never, never, true, never>;
|
|
17
|
+
static ngAcceptInputType_showAlpha: unknown;
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class BbColorSlider implements OnInit, OnDestroy {
|
|
4
|
+
private readonly _elementRef;
|
|
5
|
+
private readonly _document;
|
|
6
|
+
xOffset: number;
|
|
7
|
+
yOffset: number;
|
|
8
|
+
size: number;
|
|
9
|
+
xOffsetChange: EventEmitter<number>;
|
|
10
|
+
yOffsetChange: EventEmitter<number>;
|
|
11
|
+
private _subscription;
|
|
12
|
+
get x(): number;
|
|
13
|
+
get y(): number;
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
ngOnDestroy(): void;
|
|
16
|
+
private updateValue;
|
|
17
|
+
private setOffsets;
|
|
18
|
+
private calculate;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BbColorSlider, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BbColorSlider, "bb-color-slider", never, { "xOffset": { "alias": "xOffset"; "required": false; }; "yOffset": { "alias": "yOffset"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "xOffsetChange": "xOffsetChange"; "yOffsetChange": "yOffsetChange"; }, never, never, true, never>;
|
|
21
|
+
static ngAcceptInputType_xOffset: unknown;
|
|
22
|
+
static ngAcceptInputType_yOffset: unknown;
|
|
23
|
+
static ngAcceptInputType_size: unknown;
|
|
24
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ColorPickerDirective implements OnInit, OnDestroy {
|
|
4
|
+
private readonly _overlay;
|
|
5
|
+
private readonly _viewContainerRef;
|
|
6
|
+
private readonly _elementRef;
|
|
7
|
+
private readonly _environmentInjector;
|
|
8
|
+
bbColorPicker: string;
|
|
9
|
+
bbColorPickerShowAlpha: boolean;
|
|
10
|
+
bbColorPickerDisabled: boolean;
|
|
11
|
+
bbColorPickerChange: EventEmitter<string>;
|
|
12
|
+
private _overlayRef;
|
|
13
|
+
private _subscription;
|
|
14
|
+
showColorPicker(): void;
|
|
15
|
+
hideColorPicker(): void;
|
|
16
|
+
ngOnInit(): void;
|
|
17
|
+
ngOnDestroy(): void;
|
|
18
|
+
private attachColorPicker;
|
|
19
|
+
private getPositionStrategy;
|
|
20
|
+
private handleOverlayEvents;
|
|
21
|
+
private createOverlay;
|
|
22
|
+
private getPositions;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ColorPickerDirective, never>;
|
|
24
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ColorPickerDirective, "[bbColorPicker]", never, { "bbColorPicker": { "alias": "bbColorPicker"; "required": true; }; "bbColorPickerShowAlpha": { "alias": "bbColorPickerShowAlpha"; "required": false; }; "bbColorPickerDisabled": { "alias": "bbColorPickerDisabled"; "required": false; }; }, { "bbColorPickerChange": "bbColorPickerChange"; }, never, never, true, never>;
|
|
25
|
+
static ngAcceptInputType_bbColorPickerShowAlpha: unknown;
|
|
26
|
+
static ngAcceptInputType_bbColorPickerDisabled: unknown;
|
|
27
|
+
}
|
|
@@ -8,27 +8,30 @@ import * as i4 from "./directives/input.directive";
|
|
|
8
8
|
import * as i5 from "./directives/image-upload.directive";
|
|
9
9
|
import * as i6 from "./directives/extra-error-controls.directive";
|
|
10
10
|
import * as i7 from "./directives/file-drop.directive";
|
|
11
|
-
import * as i8 from "./
|
|
12
|
-
import * as i9 from "./pipes/file-
|
|
13
|
-
import * as i10 from "./pipes/
|
|
14
|
-
import * as i11 from "./pipes/
|
|
15
|
-
import * as i12 from "./
|
|
16
|
-
import * as i13 from "./
|
|
17
|
-
import * as i14 from "./
|
|
18
|
-
import * as i15 from "./
|
|
19
|
-
import * as i16 from "./form-
|
|
20
|
-
import * as i17 from "./
|
|
21
|
-
import * as i18 from "./checkbox
|
|
22
|
-
import * as i19 from "./
|
|
23
|
-
import * as i20 from "./radio-
|
|
24
|
-
import * as i21 from "./
|
|
25
|
-
import * as i22 from "./
|
|
26
|
-
import * as i23 from "./file-
|
|
27
|
-
import * as i24 from "./
|
|
28
|
-
import * as i25 from "./
|
|
11
|
+
import * as i8 from "./directives/color-picker.directive";
|
|
12
|
+
import * as i9 from "./pipes/file-size.pipe";
|
|
13
|
+
import * as i10 from "./pipes/file-image.pipe";
|
|
14
|
+
import * as i11 from "./pipes/relative-time.pipe";
|
|
15
|
+
import * as i12 from "./pipes/date.pipe";
|
|
16
|
+
import * as i13 from "./button/button.component";
|
|
17
|
+
import * as i14 from "./spinner/spinner.component";
|
|
18
|
+
import * as i15 from "./icon/icon.component";
|
|
19
|
+
import * as i16 from "./form-control/form-control.component";
|
|
20
|
+
import * as i17 from "./form-group/form-group.component";
|
|
21
|
+
import * as i18 from "./checkbox/checkbox.component";
|
|
22
|
+
import * as i19 from "./checkbox-group/checkbox-group.component";
|
|
23
|
+
import * as i20 from "./radio-group/radio-group.component";
|
|
24
|
+
import * as i21 from "./radio-button/radio-button.component";
|
|
25
|
+
import * as i22 from "./avatar/avatar.component";
|
|
26
|
+
import * as i23 from "./multi-file-control/multi-file-control.component";
|
|
27
|
+
import * as i24 from "./file-picker/file-picker.component";
|
|
28
|
+
import * as i25 from "./image-picker/image-picker.component";
|
|
29
|
+
import * as i26 from "./date-picker/date-picker.component";
|
|
30
|
+
import * as i27 from "./color-slider/color-slider.component";
|
|
31
|
+
import * as i28 from "./color-picker/color-picker.component";
|
|
29
32
|
export declare class ElementsModule {
|
|
30
33
|
static forRoot(config?: ElementsConfig): ModuleWithProviders<ElementsModule>;
|
|
31
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElementsModule, never>;
|
|
32
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ElementsModule, never, [typeof i1.BbFormError, typeof i2.BbFormSubmit, typeof i3.BbFormSubmitter, typeof i4.BbInput, typeof i5.BbImageUpload, typeof i6.BbExtraErrorControls, typeof i7.BbFileDrop, typeof i8.
|
|
35
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ElementsModule, never, [typeof i1.BbFormError, typeof i2.BbFormSubmit, typeof i3.BbFormSubmitter, typeof i4.BbInput, typeof i5.BbImageUpload, typeof i6.BbExtraErrorControls, typeof i7.BbFileDrop, typeof i8.ColorPickerDirective, typeof i9.BbFileSize, typeof i10.BbFileImage, typeof i11.BbRelativeTime, typeof i12.BbDate, typeof i13.BbButton, typeof i13.BbAnchor, typeof i14.BbSpinner, typeof i15.BbIcon, typeof i16.BbFormControl, typeof i17.BbFormGroup, typeof i18.BbCheckbox, typeof i19.BbCheckboxGroup, typeof i20.BbRadioGroup, typeof i21.BbRadioButton, typeof i22.BbAvatar, typeof i23.BbMultiFileControl, typeof i24.BbFilePicker, typeof i25.BbImagePicker, typeof i26.BbDatePicker, typeof i27.BbColorSlider, typeof i28.BbColorPicker], [typeof i1.BbFormError, typeof i2.BbFormSubmit, typeof i3.BbFormSubmitter, typeof i4.BbInput, typeof i5.BbImageUpload, typeof i6.BbExtraErrorControls, typeof i7.BbFileDrop, typeof i8.ColorPickerDirective, typeof i9.BbFileSize, typeof i10.BbFileImage, typeof i11.BbRelativeTime, typeof i12.BbDate, typeof i13.BbButton, typeof i13.BbAnchor, typeof i14.BbSpinner, typeof i15.BbIcon, typeof i16.BbFormControl, typeof i17.BbFormGroup, typeof i18.BbCheckbox, typeof i19.BbCheckboxGroup, typeof i20.BbRadioGroup, typeof i21.BbRadioButton, typeof i22.BbAvatar, typeof i23.BbMultiFileControl, typeof i24.BbFilePicker, typeof i25.BbImagePicker, typeof i26.BbDatePicker, typeof i27.BbColorSlider, typeof i28.BbColorPicker]>;
|
|
33
36
|
static ɵinj: i0.ɵɵInjectorDeclaration<ElementsModule>;
|
|
34
37
|
}
|
package/elements/public_api.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './lib/directives/input.directive';
|
|
|
4
4
|
export * from './lib/directives/image-upload.directive';
|
|
5
5
|
export * from './lib/directives/extra-error-controls.directive';
|
|
6
6
|
export * from './lib/directives/file-drop.directive';
|
|
7
|
+
export * from './lib/directives/color-picker.directive';
|
|
7
8
|
export * from './lib/pipes/file-size.pipe';
|
|
8
9
|
export * from './lib/pipes/file-image.pipe';
|
|
9
10
|
export * from './lib/pipes/relative-time.pipe';
|
|
@@ -23,6 +24,8 @@ export * from './lib/multi-file-control/multi-file-control.component';
|
|
|
23
24
|
export * from './lib/file-picker/file-picker.component';
|
|
24
25
|
export * from './lib/image-picker/image-picker.component';
|
|
25
26
|
export * from './lib/date-picker/date-picker.component';
|
|
27
|
+
export * from './lib/color-slider/color-slider.component';
|
|
28
|
+
export * from './lib/color-picker/color-picker.component';
|
|
26
29
|
export * from './lib/elements.interfaces';
|
|
27
30
|
export * from './lib/elements.config';
|
|
28
31
|
export * from './lib/elements.module';
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { map, startWith, distinctUntilChanged, shareReplay, tap, delay } from 'rxjs/operators';
|
|
1
|
+
import { map, startWith, distinctUntilChanged, shareReplay, tap, delay, switchMap } from 'rxjs/operators';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Directive, Optional, Self, InjectionToken, Input, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Output, booleanAttribute, ContentChild, Host, HostBinding, numberAttribute, HostListener, Pipe, LOCALE_ID,
|
|
3
|
+
import { Directive, Optional, Self, InjectionToken, Input, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Output, booleanAttribute, ContentChild, Host, HostBinding, numberAttribute, HostListener, inject, ElementRef, ViewContainerRef, EnvironmentInjector, Pipe, LOCALE_ID, forwardRef, ViewChild, makeEnvironmentProviders, NgModule } from '@angular/core';
|
|
4
4
|
import * as i2$1 from 'rxjs';
|
|
5
|
-
import { fromEvent, merge, EMPTY, BehaviorSubject, combineLatest, of, Subscription } from 'rxjs';
|
|
5
|
+
import { fromEvent, merge, EMPTY, BehaviorSubject, combineLatest, of, Subscription, takeUntil } from 'rxjs';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
7
|
import { NgControl, Validators, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
8
8
|
import * as i1$2 from '@bravobit/bb-foundation/localize';
|
|
9
9
|
import { BbLocalize, Localize, BbLocalizeTemplate, BbLocalizeString, LOCALIZE_ID } from '@bravobit/bb-foundation/localize';
|
|
10
|
-
import { AsyncPipe, formatDate, NgTemplateOutlet } from '@angular/common';
|
|
10
|
+
import { AsyncPipe, DOCUMENT, formatDate, NgTemplateOutlet } from '@angular/common';
|
|
11
11
|
import { BbTemplate } from '@bravobit/bb-foundation/utils';
|
|
12
12
|
import * as i1$1 from '@bravobit/bb-foundation';
|
|
13
|
-
import { parseDate } from '@bravobit/bb-foundation';
|
|
13
|
+
import { clamp, hsvToHex, hexToHsv, parseDate } from '@bravobit/bb-foundation';
|
|
14
14
|
import * as i2 from '@angular/cdk/platform';
|
|
15
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
16
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
15
17
|
import * as i3 from '@angular/platform-browser';
|
|
16
18
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
17
19
|
|
|
@@ -500,6 +502,255 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
500
502
|
args: ['drop', ['$event']]
|
|
501
503
|
}] } });
|
|
502
504
|
|
|
505
|
+
class BbColorSlider {
|
|
506
|
+
// Dependencies.
|
|
507
|
+
_elementRef = inject(ElementRef);
|
|
508
|
+
_document = inject(DOCUMENT);
|
|
509
|
+
// Inputs.
|
|
510
|
+
xOffset = 0;
|
|
511
|
+
yOffset = 0;
|
|
512
|
+
size = 1;
|
|
513
|
+
// Outputs.
|
|
514
|
+
xOffsetChange = new EventEmitter();
|
|
515
|
+
yOffsetChange = new EventEmitter();
|
|
516
|
+
// Subscriptions.
|
|
517
|
+
_subscription = new Subscription();
|
|
518
|
+
get x() {
|
|
519
|
+
return clamp(this.xOffset, 0, 1);
|
|
520
|
+
}
|
|
521
|
+
get y() {
|
|
522
|
+
return clamp(this.yOffset, 0, 1);
|
|
523
|
+
}
|
|
524
|
+
ngOnInit() {
|
|
525
|
+
this.setOffsets();
|
|
526
|
+
}
|
|
527
|
+
ngOnDestroy() {
|
|
528
|
+
this._subscription?.unsubscribe();
|
|
529
|
+
}
|
|
530
|
+
updateValue(value) {
|
|
531
|
+
this.xOffset = value?.x;
|
|
532
|
+
this.yOffset = value?.y;
|
|
533
|
+
this.xOffsetChange.emit(this.xOffset);
|
|
534
|
+
this.yOffsetChange.emit(this.yOffset);
|
|
535
|
+
}
|
|
536
|
+
setOffsets() {
|
|
537
|
+
const element = this._elementRef?.nativeElement ?? null;
|
|
538
|
+
const offsets$ = fromEvent(element, 'pointerdown').pipe(switchMap(pointerDownEvent => {
|
|
539
|
+
const rect = element.getBoundingClientRect();
|
|
540
|
+
return fromEvent(this._document, 'pointermove').pipe(map(pointerMoveEvent => this.calculate(pointerMoveEvent, rect)), startWith(this.calculate(pointerDownEvent, rect)), takeUntil(fromEvent(this._document, 'pointerup')));
|
|
541
|
+
}), tap(value => this.updateValue(value)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
542
|
+
const subscription = offsets$.subscribe();
|
|
543
|
+
this._subscription.add(subscription);
|
|
544
|
+
}
|
|
545
|
+
calculate(event, rect) {
|
|
546
|
+
const x = clamp(event.clientX - rect.left, 0, rect.width);
|
|
547
|
+
const y = clamp(event.clientY - rect.top, 0, rect.height);
|
|
548
|
+
return {
|
|
549
|
+
x: x / rect.width,
|
|
550
|
+
y: y / rect.height
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BbColorSlider, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
554
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.5", type: BbColorSlider, isStandalone: true, selector: "bb-color-slider", inputs: { xOffset: ["xOffset", "xOffset", numberAttribute], yOffset: ["yOffset", "yOffset", numberAttribute], size: ["size", "size", numberAttribute] }, outputs: { xOffsetChange: "xOffsetChange", yOffsetChange: "yOffsetChange" }, host: { classAttribute: "bb-color-slider" }, ngImport: i0, template: "<div\n [style.left]=\"'clamp(calc(0% + ' + (size / 2) + 'rem), ' + (x * 100) + '%, calc(100% - ' + (size / 2) + 'rem))'\"\n [style.top]=\"'clamp(calc(0% + ' + (size / 2) + 'rem), ' + (y * 100) + '%, calc(100% - ' + (size / 2) + 'rem))'\"\n [style.width.rem]=\"size\"\n [style.height.rem]=\"size\"\n class=\"bb-color-slider-control\"></div>\n", styles: [".bb-color-slider{width:100%;display:block;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;border-radius:.25rem}.bb-color-slider-control{position:absolute;border-radius:.25rem;transform:translate(-50%,-50%);box-shadow:0 0 0 .125rem #fff inset,0 0 0 .25rem #00000040 inset,0 0 0 .0625rem #00000040}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
555
|
+
}
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BbColorSlider, decorators: [{
|
|
557
|
+
type: Component,
|
|
558
|
+
args: [{ selector: 'bb-color-slider', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-color-slider' }, template: "<div\n [style.left]=\"'clamp(calc(0% + ' + (size / 2) + 'rem), ' + (x * 100) + '%, calc(100% - ' + (size / 2) + 'rem))'\"\n [style.top]=\"'clamp(calc(0% + ' + (size / 2) + 'rem), ' + (y * 100) + '%, calc(100% - ' + (size / 2) + 'rem))'\"\n [style.width.rem]=\"size\"\n [style.height.rem]=\"size\"\n class=\"bb-color-slider-control\"></div>\n", styles: [".bb-color-slider{width:100%;display:block;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;border-radius:.25rem}.bb-color-slider-control{position:absolute;border-radius:.25rem;transform:translate(-50%,-50%);box-shadow:0 0 0 .125rem #fff inset,0 0 0 .25rem #00000040 inset,0 0 0 .0625rem #00000040}\n"] }]
|
|
559
|
+
}], propDecorators: { xOffset: [{
|
|
560
|
+
type: Input,
|
|
561
|
+
args: [{ transform: numberAttribute }]
|
|
562
|
+
}], yOffset: [{
|
|
563
|
+
type: Input,
|
|
564
|
+
args: [{ transform: numberAttribute }]
|
|
565
|
+
}], size: [{
|
|
566
|
+
type: Input,
|
|
567
|
+
args: [{ transform: numberAttribute }]
|
|
568
|
+
}], xOffsetChange: [{
|
|
569
|
+
type: Output
|
|
570
|
+
}], yOffsetChange: [{
|
|
571
|
+
type: Output
|
|
572
|
+
}] } });
|
|
573
|
+
|
|
574
|
+
class BbColorPicker {
|
|
575
|
+
// Inputs.
|
|
576
|
+
showAlpha = false;
|
|
577
|
+
set color(value) {
|
|
578
|
+
if (this._color === value) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
this._color = value;
|
|
582
|
+
this.setUIVariables();
|
|
583
|
+
}
|
|
584
|
+
get color() {
|
|
585
|
+
return this._color;
|
|
586
|
+
}
|
|
587
|
+
// Outputs.
|
|
588
|
+
colorChange = new EventEmitter();
|
|
589
|
+
// UI variables.
|
|
590
|
+
hueOffset = 0;
|
|
591
|
+
saturationOffset = 0;
|
|
592
|
+
valueOffset = 0;
|
|
593
|
+
opacityOffset = 1;
|
|
594
|
+
// State.
|
|
595
|
+
_color = null;
|
|
596
|
+
setColor() {
|
|
597
|
+
try {
|
|
598
|
+
const hue = this.hueOffset * 360;
|
|
599
|
+
const saturation = clamp(this.saturationOffset * 100, 0, 100);
|
|
600
|
+
const value = clamp((1 - this.valueOffset) * 100, 0, 100);
|
|
601
|
+
const opacity = this.showAlpha ? clamp(this.opacityOffset, 0, 1) : 1;
|
|
602
|
+
const newColor = hsvToHex(hue, saturation, value, opacity);
|
|
603
|
+
if (newColor === this._color) {
|
|
604
|
+
return;
|
|
605
|
+
}
|
|
606
|
+
this._color = newColor;
|
|
607
|
+
this.colorChange.emit(this._color);
|
|
608
|
+
}
|
|
609
|
+
catch {
|
|
610
|
+
// do nothing.
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
setUIVariables() {
|
|
614
|
+
if (this._color === null || this._color === undefined) {
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
try {
|
|
618
|
+
const { hue, saturation, value, alpha } = hexToHsv(this._color);
|
|
619
|
+
this.hueOffset = hue / 360;
|
|
620
|
+
this.saturationOffset = saturation / 100;
|
|
621
|
+
this.valueOffset = 1 - (value / 100);
|
|
622
|
+
this.opacityOffset = this.showAlpha ? alpha : 1;
|
|
623
|
+
}
|
|
624
|
+
catch {
|
|
625
|
+
this.hueOffset = 0;
|
|
626
|
+
this.saturationOffset = 0;
|
|
627
|
+
this.valueOffset = 0;
|
|
628
|
+
this.opacityOffset = 1;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BbColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
632
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: BbColorPicker, isStandalone: true, selector: "bb-color-picker", inputs: { showAlpha: ["showAlpha", "showAlpha", booleanAttribute], color: "color" }, outputs: { colorChange: "colorChange" }, host: { classAttribute: "bb-color-picker" }, ngImport: i0, template: "<bb-color-slider [(xOffset)]=\"saturationOffset\"\n [(yOffset)]=\"valueOffset\"\n [style.background-color]=\"'hsl(' + (hueOffset * 360) + ', 100%, 50%)'\"\n (xOffsetChange)=\"setColor()\"\n size=\"1.5\"\n class=\"bb-color-picker-saturation\">\n</bb-color-slider>\n\n<bb-color-slider [(xOffset)]=\"hueOffset\"\n (xOffsetChange)=\"setColor()\"\n size=\"1.5\"\n class=\"bb-color-picker-hue\">\n</bb-color-slider>\n\n@if (showAlpha) {\n <bb-color-slider [(xOffset)]=\"opacityOffset\"\n [style.background-image]=\"'linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.2) 75%, rgba(255, 255, 255, 0.2)), linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.2) 75%, rgba(255, 255, 255, 0.2)), linear-gradient(to right, hsla(' + (hueOffset * 360) + ',100%,50%,0), hsla(' + (hueOffset * 360) + ',100%,50%,1))'\"\n (xOffsetChange)=\"setColor()\"\n size=\"1.5\"\n class=\"bb-color-picker-alpha\">\n </bb-color-slider>\n}\n", styles: [".bb-color-picker{gap:.75rem;width:100%;display:flex;padding:.75rem;border-radius:.5rem;flex-direction:column;background-color:#fff;box-shadow:0 0 .5rem .5rem #00000020;border:1px solid var(--bb-form-control-border-color)}.bb-color-picker-saturation{height:10rem;background-size:cover;background-repeat:no-repeat;background-position:center center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOYAAACCCAYAAABSD7T3AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwksPWR6lgAAIABJREFUeNrtnVuT47gRrAHN+P//Or/61Y5wONZ7mZ1u3XAeLMjJZGZVgdKsfc5xR3S0RIIUW+CHzCpc2McYo7XGv3ex7UiZd57rjyzzv+v+33X/R/+3r/f7vR386Y+TvKNcf/wdhTLPcv9qU2wZd74uth0t1821jkIZLPcsI/6nWa4XvutquU0Z85mnx80S/ZzgpnLnOtHNt7/ofx1TKXcSNzN/7qbMQ3ju7rNQmMYYd/4s2j9aa+P+gGaMcZrb1M/tdrvf7/d2v99P9/t93O/3cbvdxu12G9frdVwul3E+n8c///nP+2+//Xb66aefxl//+tfx5z//2YK5Al2rgvf4UsbpdGrB52bAvArXpuzjmiqAVSGz5eDmGYXzhbAZmCrnmzddpUU+8Y1dAOYeXCtDUwVwV7YCGH6uAmyMcZ9l5vkUaBPGMUZ7/J5w/792/fvv9Xq93263dr/fTxPECeME8nK5jM/Pz/HTTz/dv337dvrll1/GP/7xj/G3v/1t/OUvfwkVswongjdOp9PzH3U3D3zmWGnZVXn4jCqs7wC2BKP4/8tAzkZsoWx6XrqeHZymvp4ABCBJhTQwKfDT8gzrZCIqi5AhiACjBfEB2rP8/X63MM7f6/V6v9/v7Xa7bYC83W7jcrlsVHIq5ffv30+//fbb+OWXX8ZPP/00/v73v4+ff/75JSvbeu+bL2WMMaFbAlpBNM85QX+ct6qoSqkPAwuQlBVKqGNFSUOAA3Bmu7gC5hNOd15nSwvAOUW7C4giUCV8Sgn5L9hNFIqTsp0GxI0ysioyjAjkY/tGJVEpz+fz+OWXX+7fv38//f777+Pbt2/j119/HT///PP49ddfx8fHRwrmTjV779EXu2px2xhjwtdJZQcAWQIPLPISsMJaSwiD8gzIKrwSyATE5j5nAbR5c1dBUwBlsEWW0h6LqiYsqFPAQxCyRZ3wOSARxmlXMX5k64pQfvv27f75+dk+Pj5OHx8f4/v37+Pbt2/jt99+G9++fRsfHx/jcrmUFLO31gYDWblxRIs/TqfT7ousxJsAxXA2Gc7TA9XdgfdoHbFsj76X2+1WArgI1ageGwA3qupqoHsmcbI6Fu93quggFa9d7LeDtgKfAFHBJ+NEByIkcJ5KervdTmhhGcgJJSZ5vn//fj+fz+18Pp8+Pz/H5+fnmGD+/vvv4/v37+Pj42N8fn6O2+1Ws7JjjP6wraMI5E4RZ8x2vV5TSwkquotV7/d7Tz6HFWsD/qNcdw0CQ3q/321c686TwDVIdbuy73zNldhSHb8I2klZznm+InBS4U6n0302aBFsLhHDAKJVJVglfI9jhvu53W53sLANYNxAiDA6MCeUHx8f9+v12i6XS7tcLqcZW57P5yeY8/fz83Ocz+fnsSmYUyknWEG85WBst9stzSLyMdfr9Qi08iY15UZ0LlDGLhR3o5zK2j7OPUTD0E+nU3tk7Xb/16NFbhloAMuY1zjLUOO3BKeIDe+Z8s3/J4gFo4TM5jPmuRg28foUKKVSwo16TgA5npywcWLHgYl/Pz8/73/605/ab7/91m63W7tcLie0sZj4mao5gTyfz88E0f1+j8EcYzwTPEG2cqjyfHNF0M8fuqEiaOVnRzZZQNh5fwQyHg/HDGfJo89Q1zb/quu5XC6773I2XKfTqd/v9+d3wuqWva/YTdUdEV3fhIv/Viyps6YE3x3r43K5bJQS66zaxVGFsvd+//j4aF+/fm3fv39vt9utff36tf3+++/tdrudvn37ZuNLBaaCMgUzC+rZRiFowxUuJI8YMqcCp9Opq5vagaYU6lGJA1XQqejchw6Cj0Gw5nYBrGw01A2O206n04BGouNNyTfp/FwElhUey6nXrIKw7QQWddxuN2ldL5fL839gSPF8ahu/JvBO48CPSuqMf8Vp9/P53L58+dLu93s7n8/tfr8/39/v9/b5+TkhPJ3P56mQ436/j+/fv+/iSgbzer0+AZx/5+88bv6OMda6S5z6kd21fYC9dxv7cIJJ2d9AOS30fPMzyHiTM8B4DF6XUlYHp4KQW3W+1t77MNB1vGHxWq7Xa7vf78+y5/N5A+H1et29xuP5dbYtyaRu4AksbPq6936fjRzXRxBbPr/b+b18+fKljTHaBBBfn8/n0/1+H1++fBnn8zm0sB8fH5u4cr5GuBhMVk0EEn9RsctgVhM+ixlJtMA23R8B6yysAstBOgFXIKKCMIgToMqNEu2fYMH7ztc732dQKkCj1ytAZtY0Kx8pIr8GGJ+AT3V+2Hirhl++fBmXy2Wz73w+b17P8p+fn8/tUwGVleVkTyUb68DkfayWY4zxNRihU4EpLJPZVrK+u7J4/mgfKqeLW9X2REWlItL1diynbDDb3+jXgYjQqn0rrxWc+NkILP7F7xIbMvx7vV53x40xnlbWJF12ZSag/N0pW6t+ZzmOMzHjajKwDfond78zYTdfq18up97zr2q8v3IioBprRtBl0EZ9og5WBRGOdOHjIjXF7UotFbgOWnXzIJyzYvjG5IYgsmMOxHkz8OsMSrVNWeq5T8DaOcbEv1Od5rbs9aO7YvMet63EkF++fMExq+MRl4/L5bLZN/+ez+fnZ6KazuMqXSQVO5spJXflHAIzes/xJseckRJiDMog9d6VfRrqXMr6KpVV27jRwJacGovOAM1zMdQMnwK1AubK63kdCChvI1C7g0z9nf/D+Xze2Vj8H7Gx4P9duQlsYCrqyN8XqG3Hm/10Oj3jw/n+crlstuM+jPmmxT2dTuPz83Pzt2pn1XsEHX/bnPaVqVmh0xwOt0o6XLLAHePUU203wHfcrspCwmV3TryB5s0Mseeg97x/BwzCjBlbB+pRAPla0BVQuT6V6QHdBlj3d0KG147b+DqxQeUymDO43W4dQar+TIjwmAd0z8/h65vf0/yLv3Pb5XLpru/ydDo9s7ET0I+Pj6dKK9VUEIeKWQWPAOrJ8LKd4vE+t91Y3e7UFlWatg2VwJnb+HPmtvm/sfK59/OaWF3x/eP1UPHvA5DDYDpYXfb0drv1V2DkBkxtw/tEWVVlXWdC9pFYs5/jfh9dS/16vW7s6lTG+TfqsxSJHxkXXq/Xdr1eu4LsfD6P3vsT3N77DkL+zPm5jSdKL4zR3AxQd6rHkLkYlSowsrq7znzu6wSwdsMJOXmA5fBcjxtgMGBYHlr5zokhtsMCTgXLQOW4XC6dEyEMprL8mAQzXRgduix2yZzorxkYsDn3hB1VeMLGsXsVtgl2pW8S3svk0vw7R4hNaHvv4cACl5HFzwIH0Kc6zu4XjDPR/jpAVxWzO1Xk2DDb3vTcxeGU1iWZHkmIDWziWKvirCJ4Dravs6IJ/GG6cTqWdXDy+fArQDVVkLqkVjAoZIITdmmIqXwqa95N3+MGYoZQdRVNO53Y1xRkhO16vY7eu507Ca9lJnbGpxOemQhSw/AQsmmp5zU9BiU8G6wvX76M6/U6Pj4+do0Bz4CpgiknTUeDqwlKBmg3u4OVjrZ1A+rAcgaejWq6eJCvCYFDONSwOgHX4EQRw8lxbzDOdEK6gZ3Hk1b+8g2o1JFtKXyv/fEdTXuWjWXdAZiBp6ADeDrCFiim7B6ZFneeI7Gvm/PMkUDX67W7xI8b0D7/v8dA9qfN5oaCf74WZjH0mf1cmfY1Y0JUFmVrTWu8uzkNcLtEj7u5FXBTkfC6GOA5q8YMxO8KVvF6sAVGdcrUbsKODcQKkLMOMdmlxum642YrPm26AlhZW1YB1R+rrGswE8TaYAWeUMxdf+WjwSvZ2Ef3ytOyfn5+PpVPAaqOn43MtNBqvmjjxbjM4lZjZY4gqNMI5ktaW/sYKNwS+9lFQzGihmMCKPa7+Z0V6Eb0GRmobtpX8JljWu5FMLN5ja6hG9kwQgZqf5+1NH5UxzkFReCdWhJ8XdlGUkxO7HRlYRm4mVO43W7ter12TPJEw/rmEN3L5SKHIWZg9mz+pUoKOYq5bJTJdX2gme1UcxMZQFaEQIlHct32M+Y1BzGkGuzfiyAN9z+ugplZ1symCrDCYYkGxDTpI9RzBy0rHyeDUC1nWaeUaD9n4xkNyYMBDZtzZ3B++fJlY21XFDOcARJlabOyiS3uCpLI9jrZjCDkaVvcCCjwognKShWdzXZWlZMvVTgD8LpqlCLrqgbcB+qYwrgKYpT0ccCqbKyCValkEabn/FynogCrPKfqf51xJ7sGB2ZXcZmxoSOztjx300DZi7a0/2AIR0UlBag9SuDw6KcAzlaB7vHZvWpjK90dyrq6bKyDUZQbR0B05biLQkHIcSUmgIK+SwuqgHCnoio2RQU1yj+BnBy9pphVKLGyC7ZzFK1pxWK+E8IhVCWLN/uLtnUU4ayoYLoaANz8FdtaSvY4pV0BEW2ls61czqllBKpTyKgMAhrZ1cdc1RROtPmvWNkdcKZ7ZKxaWjiPLJMpp7OZKxA+rqG/oJLjxf0pnJlqLoDZo3gyU0mKGys2taKecj/d1C+rJSplBqlTyAqgR+D8KjKlmRL2gtUcAdCtsL+ijCNT1oqqqkH2OHEbG5sDFnUg5Aa+yLou2VU1ptj1S2ZQqv1ORZN9IWzRfgaRBxKoBE8UWyqlJFtrIc0AxNjSjed99CTY/XDfSzCz5M0IZoVEsWnPFNTsl8ooVC1TzbGgqFZNDSgVwKK+1sGDMKqxZCWGVMDysiEr1jVSQJUYwj5iHOlThdHt44SQg9CN+nl8D90NMIgAdgr46JqRiR9I8vRdFvbr17m/yxUMKjNLMiVUADwu2CWGhhi+F55TWM9M9cogzms1dnM4uOF/LAEYWdcqnM7yFmyq3IfwmOROd7Y1iFWtOjoY8To41mTV5IysgFFuRzsbWFGbNIIJCDv1dOo4lZG7jWBwRFtVTKuWyeCByJKOan8oZ3ep9XddNl0tDuaywLz9cXPYeDAA0SpkBO9sbVcTOVWldPv4uyzEkzxHtjvonHoSkFEWNoo1d8DhcQputd2ppNon4BzoAiJ1hBFQg0dVtdbGHHDQWushmNEQukLM2QO1G2Y8bgTXqFhcBJj7EjPgcPts8US8qPpPB/dXznOh5Z438tzH5ec6QgrOKrRRfKmysBmUDB+PhYabMlVPER+GCSITTzr7am2tArH3bgcEzPJm+cr5jJ4NnHNFDVrFXcI5Le9k5Jnw+bedbV+FfRzZIHaOOaOsLY0/7UGs58DjrGwKMIMFIGzOEW1/jGsdAtCN6hEAI4hBe9YXeRROBSVPAVPAqvIM5bx5hVKWAMP6zBRy3iescridVdFBinBxXDnG2GRY2XbCvp1lhvGtO9Bxu5h908XQu42lnSArMFdizMim8uwRCxPGnnOS8lwpnbOiDqTAjsrRN/PcoAScCbaACqVM40ylnjjTBs+bwWlAG23/UKbdkiwKWIQPGzWaczpoSlxPEj822cNWkpS7FyzsDrqpfgpG3jahw2vgbaSQAxuLWZYt7JzyNe8JoZpNAcvDFOdw0wqYT9AK1rZz/DdbSlLPp0ryIxgQJlK9AZlEq7IOXpohg9PIhrCng88JsOxiV4ZWAYfg4sikx/8ky2Z9l862uqwrfscIH8+ugTmVGyiddeVYUgEMn4GZzg14EwIsh9sx2cKKiWXReuOE5gzGOQgdlRKVVdlevqb279Xq0Qnsts2VDaBO0coezsruWtHApu6sKG4IBhN0aGU2kLrMKGRTN3HmbCDwKV14zvkMEDG4QfZVspVlaNU2mhc5TEZ3N1h/zqTheuLpW05ZWTGVjb3dbnNmxKZBnN8JqidaVLKAOyARNLS+MB54Z2+VaqoMLKroVBlngefnTPAcoHNWCSvlfA8CI0HEmBNBnBlXyMrzU7A7WVm94PPqQ2gmqKx+WDGsnvilmcSOBJqOK1nYyAIzuAyesq3UdSK3KfWcYKD95HmfYOU3qser2CtYEUA+FpfqdNvgPBZUBhDrGONRVlQsh8rLcaUCykHG0OOUwTlLBrsh5soEMGezi1E4HRVt1icp5wZEFXdibCkG8Y8vX75sbO4E0iom9z+hjSiOfy3DhpXItpVhE+UGQdvoWjtChmrGHf4YAzKgBNnGtuJxFCeGdhUAfQLLK8kBYAP6gvFJZajMG3Xkycy8KuC0q4Eyymwtwdxdv2M0mIBtK0LKnf640j00Auq4gUkdWGlhs22qJc6dZCsL19oxnlTJG4SYVRIGpD8TPFBuM6OElbS1pldid4mGAyN6ZIupbC5bXJN9fdpbThSxLUaI8IG1XIYBxW3Tjs6KQosKcxfxcQmdnwRGM10GnFcCy2XYunLMyAkdgk4mePiczsLygthcBut6goOqS7YVFXADLjaosB6s6ofcZWAZSIRYqSUkizYwttYab3vUOQ9w2HRxIIg8WwRVeE68xi4UtL3zRphxplzwuZrcqYCq1I3jPI5dnJIygEohMbPqVJSzrwzxBJTs5zN+ReUSgxikPQVF3JVBeNQxbHENrEMNvEdFZVV9lH9+ORGEsNZQpyTNc4C3AG7XF4ngzq+DrO2zbuaaOXgdaFcdkEotoSFBVX2qJ0C8OWZeG4KGlpghA0XfTOPCqV2qqwQ26QWfF2PMLhI2w1lVAa2aPsYd0za25MQRwgcZN6uQDCi+ZxiD4XEM2kZxOT41FnZnaRlcpZouzlRqqdbQVWopQoSB58RV50lBNrHi/AwXS5LrwDVlpY3Fc3ByiYGc52Trist6kOXdwInAQtJpp5QchyaquYOV7Su+fxVMaV3dc0RE2S6mUY0gLt2pMcYqrKIQ9w2l1gpQUMtQYcmmbt5DTNxdhnUCjQqtbK9SUSzvrC0mmhhE1e2FS2+oxypy/ZASutkmtjx3vcBC24PX65nbqkBCRhfjS9kIYPnee8cMagVOhI/3T1fAmdtAWZsCswTJCkQVNa0qWKSKPOpHAUhD9DrbVcyoYkwqhvh17vYAayXLQyKGYdxlUDFp494rBXRjYgO17DDYetNIUj/ezp6S0lnlpEwsWmJMkOwsKXeZKEAjIHn0EQJISaRBcO6UMINz7p/bEjjnw4ft+xmDvksxX4G2rIris7qaeKwAFMP2Oi7n4criuZwtpSUwpfLxSnORSrIqusc5ZFaXysqRWjiZ2DyAWEIL35tVSoQElFACjOeGGSE7AHEQgdo/LSvCOgGBvkxsmDbvlS3Fp5vhaB2TAGqRKrKKMrhLVpaGzEVjZ0OQxDhaCTA+QyRR1d15aQzrJntL3RibsipjG6jlgL4yqbS0sNYg1e84vhbBVrElK64CUcWYXDfKxhpIuxiVJZUxsbMy/uRBKTNRQ4kQ3LdRYLS0rJjRPlTPqY6gdJsEDc+aQXAn+HgsNUCbRuF0Oj0zwnA7bWDkbhO5Ens00qeQhS1laBMl5M/cAaxsLF8rKyql+Tf7ELLEGu/ixiimdCvo0TjfpjKwaggen4eh5v7LokLKbLuyvHhcZG8dhGrEDx7Hg93ZppJF7qBqO3iVveXEDQNInzeoe8Yq6ePaZBZ2JviM3W2UAGotekRCAGq4EkF1X3DOnR11yRsBL1tRa0PVcZiNFXZ2c34FskvomInQQ6lzpJoZbJxk43NwKJFBquJSsrByHydxKOnTxQASBmS3j+JMnsHSla3Ec6K9VWoJVn9zfjwOM7hqYAAqJQwE2a3nA48J2QGegRkpZNivSY+ys3EkKd4oJIwsvIHl3cWgLt5k4NH6OmtLWdpurOkwEMupYc7eMtDRhOcI2ui5JhVIzXzLyto/GAPuZoyo8wkoduVgJglCt7OhGbgID4Mq4si+63zUS1FuFFXFlqyaj2emHlLMcBqYu0FMuR28BbB7lOxRMSiCQXFhCKuwkhZ+pYDiGSgbsKKV8MiSRsuHSIWM9rklRiIlZZuqXjsQK8ooYJMgq3JKWVkhHbhsVxFUzthOWPkYijcbx54IKsSdT+uLr3crGKyoYgFiGR9iBk4kfloUX+JIlQRQqabmpgnhqtpQpb6RVQ1WH5DnrS4hEoGZqaerQ2dhFbz8XePxShmDbo70eISjoorO2vK8SJXI4SUmEU4zWKDzUDtWTYw7xXlbSTEj4FRg7zKnKoGRALv0Gs9Tgc1BpCywGZRQAtqVz2xrBcAMzEpfZwFSa2G5W0QBFjSMapWAEFa3HcGN7CxDzECyIkJ97qwrqWNTWVo876PPsjPkj2wvgroM5lLZKMETKVql/CvnWVFiFa/SzJUQwkoZsr67Y6vlSRV3/2tmNTOY3vnaxYwMuoPKqdzR1w7IqHymlPxaAThfU7Ko2ZXYj4AYJHL+kNdKwRQYESTRa5fsUZ/rVC1TMTyWVyYoqNtuzaHsMyv2tvoarxdfqwYgU1axFo/cnql1FGsqK+uAROV8BX4GU8WcZTATi2q7Qcyi0O0V+GhWBMNRUkn8H1SsWVE5By3Gi0ECqUeJoBfAtDa4amkdXG37AGP5Ggeb84p7UazpoKRzdFzeQ8HkoHGxprKy/Hpm5t12p47J6xTYDEz7uINEXSuxYXvFskYAc+ySxH9sf5ftKzU6IbwVBcUGg5e5FMCEXSErZR0wGayV19woM9guPjTqJdVTqR4uE4nJnLldWVkECCZLd2VLF+xtamex7IpiriSDUpvrpn9lrwGMCHyppMH+ps6LILsuFGUj1XEOXiqbqSHPUKnClpWV68kqtURVNDY4TNaocykoYeTU5ngGEQa/S1DnnE4AeXMcKjHPAmFVjCBENaeyLVNHfr3px8xUstJ94hIpfH4HKE/eDaArK6lSyVVFbdt1gxTIVk3pppVlFXi4pEhVBTObquohU85MLXn1iahvUkHJjSCMc01tLFveVVBx0DodM6jftCu7DOtIzYxrc0qp1JGP2ayYFz2Gb6HvMrO8cnGtV6Gjm3uImSfD2GpWK6uowbZGMxFKQCo1pOMtcMXFpRst+hXGoAomF3sSTBGgTglbBKWwsQ3tZqaYSp0Z1CimRDWFcCJUPYJ00BI5FkKYNoifuQxmN88SWVXWLMaUqqqgC0BmQJR6sk3u9NCf6jYLXxAfqsYEgVLAhRY2AtgtflZNFmFyhxdrLkAdWlk4D88M2ixHyepIdhMHrG/iR1ZGtq0MGpbDbRPYOXeSY1M6Ny4ZstvGSktK+XbFPATj2D371saPEsAMXhXrsZ0km/XStkhhMyBfsa6uXFZe2VCe+YMr1+GKgwrQyNYq1VRrB+EizAow6NsdNKcyVEkYeM73ys6q4kAHp6BiFklTkIrVC5oYV7uzwOGCz4UJ0Stq2lWMJy4wtb+RetL6tZFicnJmBw5UjCvXXMZVJX2MQkbf+XN5EWd78Vz8/JEsMZTBiKNzsm1inLRUQ74H4NidaqI68j5sAFgxcRveC7ieLJXfQYxjZZ2CsiWFewZXJmBIlZ1tdtrX4hSuateKso/RZOtOKW2nmq1oTzeK6dRWAWu2NRVb4hq0SXm1GvtugHrbr5IXqmSktg5CuDE2MSlPwsY5kNE2Wp3AqiZbWVLAxiBF+2iBZbuNj6MB6rsMLC7FyasaYDyo7KkoPyEtw3pEMXfPvxAJi2jAQQgjrz0rLIZSWZlIoNhwd5xK4AR9mYNjWAaLrnuImJeBVN9zBORObVvbr+mTTfFSEJLSRnHo7hEJoIi8MFqjxmvgmF5URZz4zLFgZZ8Ctu2X7ggVccKm9gVxIsOHqxXgNMKnFWZYnf1dBnOhayXq17QwFlWW09eNKyVJFmXqaONGA5aCegMbJ3UUkGY1ic3nKWgjq8qfVYGQG1gRt6rs62a6HiqqUOqdesK5NmX4nGofJoiE1d0dF9lVVkvT1/kEEaaCoYOwFpcVcoLM+7669PxC9rWqktH0sWUYld0VCpuBZ/stVRcGgy9WX2+U1Qthi9SzAqSxzZsy+OiFzBYnySGV6Gku44rD8BCOZBV3BvD5+AKRHNwMEsB6EzHnJpkTAeiUlEGkcECeB6GDZTp5YEJTlvdrknxYjTllMkfNtXwDjM7uVjK5JXUUn43rrqpK2jytaxHW0M5G8DC8rtHMYs7KSgduVQMGTYFqFvVS6rkD3sDJ46afdYFwoq11AOKCBLhvwoUgc8IGANycR6knZrdJPdsuxnyjfd3FovTlRMdEdtOl5CMV5EHsXQBis7TOwvIDZaGj2Vnpbh7cpK63VwYEMLwqbjzyl699sawFFkF1yqjUU31HfC6sW1ZFVFuXVXVgz9keEaw0ys1lWfm+azQAQSWA+hKYVfsZjPncAcUB9oIayy/UZXRNckDGji77GsWbvBo6tPrWPqOyVkBUq+INeqpzNdYs/u0ifh5qmpqIW+33JVSUcwY70KL4U9lYdU6ljtSls7lmfi9g3YzeQfVkaGFaV3ODCnaD2N8wsEDFklE3RzM3ZghdYkWHsszq70FIecnKkVkt8ezMzRq9bkGuKojRLBVSod3Y1yPqKgYW7JRQTPVyy5xIYLjOgxgT52RKJUY1dOrIiRd4futQx/A5AcSmEjz0vFWrkLzvbWAu9HOWbGgxFk1VNTpnBKk6TgwisI/HcxYXP1uAWO72ULFlBTq+aSu2VTUs6hrxM2CF+hEor1VIA9ZmFUaab1lSSgZsVs4sxzHlVLoJHr9H4DhONTkI1XC0/wiY2NoWAG5RlnHFnq6oLccpQddMuJ/O17JVA5OHLi0BqCztq7Y1++ucCd98qLI8MIHBV/cKjxQTme3hFBS3MyCqnDsuym2o80HjvFFTtrURmNaGJsmVahImjTsUXKtQZTAVs7Mvv8/+fzUrZAXcLJ6M4koe6XP0b6SmWWNDzyUpQ8bl+LtWx4tuqZ36cRYV3yuVxPNwvIiqiQCSmu7srgTzR6nkyhpCarXwFy1vGd5iP2cY06lFr5Njhhg1Y6+NB28ftbK83s8rf7kLJbKwDFPbLg25a0AdZJEiqr5phixKMDlRUtcssq1hriLqGoH+zeNgVm9OemjsETV8JdF0NHnkIFxWY1OB4Yrp7rtWJ7NgAAAPXklEQVQ3oNs5nplyVf8u2FoLu1JrHveaZWQjqAkshtFa2gzsSG3Zpkbvg3HafF9slPPlldjFlK80Gysm8Mr4MPhneNWENPGjAIpmilTPATdTRTXlCBYHYAQuPwA36xIpWtGN4q3Y2MhiGsUpuSSnlEJRD8PorC7CFYVw+F51qThgabxsTxWzCGY0ZSsb3lfqAy0OPNjNy8xiQQKsHYFQ2HBZVvVbBuq3m1oWKajqaonsM6uZUr6CjXWNZ0l5E3h3jURma6kP3MJIiy1Lm+kahQq41N2iZja5sjtlLYNZHZrH6qUGm4vMbDp6Rw2CFmvuyFkrBcCyMtFqBaECmsHoK9BZ2LA/lJcRqSaDqnaWbrZdGaz3DLgIvBln4woGztbyJGqslwxkhhHrTjTYFXCtOoKS8uLdofVdAbOylGU6nlYpXWZts4nXBq6WxJitMNokHUJnbnJplQm+aGpY2a5GMV2QD1hRubBPFKdumf5OHkLHz0F9luE5kjBjRa0nFE5CUGqHw32MmjZ6xkgINVnSnZ1VZStK2qKlRaLlQgK7uTq7JFXJwM+3SOEKyhZNI+tJ0I5qMYy9k2qJD7dVWdqKXa0CKNR0Ccjg+B2IYu2fcBZJZkMFgM11r0X92wilghFGgzVnexlqB7xL9mS29SiYUVY2nXOZjNBRsyDsQPRWW5hrZ4XcdC4HVWRbjgJr4sFofK5SzjQ7rhI1UebdPdEbj6sqIvTZQZ5va08rABsAW0UxeWytAk7A2KJ9ZpxzCioB24XFtYAeXYxr6anSqhLgppEqWbGwLunTgrV+IjWlL29ljaAl4EQMGsErp4apeZiquwRXLXAqOCeru32mmydc6oWTSWpFAGdzeTB8RTHVMEtlM90CbbQCYhPjq3egYr1FGdYIQjiuDGZ5zZ/AzobKGOyLxti6c4Rwtv2anyWlLICnlLhxJRXt6A5ebDBWFNONbxWZ2d02mnu4S9YECpeppV1zSWRBWxHYzVIv1CXSouwqqX3jBBBDZdYQbpTQW4ZQlS8r5kH4suSRmg2++3JN10x1PaAmEkmtYlEdeGpJEM6kOuCqCR22oSujj5IV2HdT0zj5prLKTjXFAPjdQlyq7xIBxAQP5yMczG4VxAKw0n6ilZ2QBce2pLulkuxxqnoIzFfgqyqjil9S1VNwBrFmeyeops8yOjZUybZdfS8CuaTIJumzs5tODaNtLpFDQ/PcJGweLhmeL1nB0KqiUDScsiUVD89Di3HtrKtSULw3RLiygZD+7sF8JTObgYsrGvDNUFRGl1iy0Ll1YkUc2aJYMog920I8qW6YDCg1Mqk0JHJFKXkbgbRreI+qpYNOZHrVcDUba7pjsphSJNtK6upgRNAVoOS0mugBeN4bIZgHhuPZ/s1ENaX6KsVr+YNrh1Nb7ipR0PE5zbNRegCbrHRUw6Yf07dLBJl1f8KB9as2V1nNqAsl62LBBhehwalerkHmB1JFIEZKSEusdl5JQj1nJlHXSCF342gJ9CYGrXelknJIXqVP8sD+qtplCR3XH2qfKq0ygMp+KnVkKxNlZ8m2YkIlVMiCnXUwl7qznBKSvQz3m3Pt6oQbXO5b5FixCh/fHxUQW/AEcK6zCNqKQnL9sywqmKuwvqSYzT/aPVNNpVyhvRW21aqciCsjdWvBwILUvh5VyCzbWoC1pJjJ680CWsl+udKB6T5RwG1mlohnlpbg47iz5U9ha0FGtmRLFYBtO99y97Ap0z+ZDTAog6kSLZsMHg/IFkkgp6CpvU2U0cYVSdnmkjwBdOmXbxTWNWzuIbipMioVxEckZEoahSOiy2M3K0jcC1LhVDwaqG0ZvkcWqCnrG4GIxykrqlbWdw6LQyBaZR8HmLRIhQWsHswD42ZXVLNkf9l+FlW0HVQ2lwFsC/Z1FdzlQR0KaPfo+Fdfu+/dwVRICu1CGR7AEIiAhc+AZUF0kOBaPxmUqg4i64vQnU4nFDYJ9Nz+1fVXveH9qmr+kPILx8oKcRV/BFbxbE0JMT0kSD4w6L/lNY8ocsqagVdU3A3MjxhxcGuqzsPH4irpaow1q6OyrVjvp9Npc59E91LldboYVzJWdimWfAW2SNEKcDaX2FmBLLA/uKxlmhh613Is1URQApbKfttwxL02q6Onx5pQxSbPojAg+v5hAnN6LHVRDXIsvKtRjiS0qJUyZTAXVbAK82ElFJWaQdVoqUC1Unt7BVaTQudM6SuqexjQJN4+0icaxv/utbKv83ETbT8H8gjcOKxOJmbUa6OOVXht3dFY6rHv9XoNzFLceEA1o8+pKm0LAHPHZ2rYKjFq0hfZFixsqHJgD3eD5n+U0kb1mFjXkn2lvMSSOsNE/CdIAKF0Sytq6urOHUN5gwg4GZosgbmggM5ucra2qrS2Ig1cbiBBcxYzgzUDNLCvL8GbZXNp6ORy3LmS+Kk83zRIAK6A1ioKa2I9NapIuiUFdfC9766PFZUtqUr6KbWk+zZU1a/ZrIXEztrjTOfz7hwKziCeXIaraHtbZIMz+2pGgazCmw4qWAFvEdhodYp0Xq0pV7G1YWYWbO4qhGq42+Z8BYtrLWvluNPpZAeaFFS1vubPgbgxsqcpnAaszBovKaFoDQ8BGtjfUOl4NAG2nmQV04feJgumvX2fsrQEWZghL0JnVdYkn3DOZIeRN86RqPWCmsvGVqEMRnwxQAxwS8EMYo3IzmY2+BCcLp4MKiuyuhImamlbZFcNoNl7tp+RHd18ZjQIRKyXdFRhN98/hyKqwXWNo7O1wiaXoHN108REZZWEq6grnIfjzeg8jdRf1XEL4kkXa5bBjKxoKaljBjeHlVxQ4GaycpW4lDOAKtnTxHAtOfzOtZwHAM7sqVXkV6yu6kap1nHkXKqWF/4XHqjenNKqBjpR3l1ch3Ejg1+EsgdQhsdG0B4FM9sWAVWpuAyiwTPleZxt9VyZVS2qXfReWqTAilpr9ApoWTjxymit7NwV4JTriZyOA9B0k7HFfULourmKYHVnRQvqGL5HMHdqFcR2qWpmcK6eTwx2dipWrviDilr+fKWq3OWRWdHKwA4eu8wjchbeRzFilqjjZN3ufCpfkJ0/scVpnYk6L0PI77lxdWCZ87WiWm7B/AGquQSnujGKsB8CJmiJq8q1pKIVWyqOiTK66r18BN8r74/AE71fdC3yPS2MxdOpnE1tlVxD9JmVOoggN+r4PjAXVFPa3Eg5jVJGFVUGNolH20GVrUB7BOySWq6WqYQdWR92pcFMYMwckbSgCKCqD67DiiWu1g8MQC9ByfcFqW1L+jL714qNCuznoSxt0da2gtWN1G8F0BK0NN0nuimelUF9dIdAfjO44UT3CjQLoUeLHJFTO3gmpRuIIOvwBQCbqNeo3qtZ9iF6xVK13GRlo4zqimq+CGdTiR1uRY8oqgE02hZBa79kZXPMquxRHKla2saZWN4mRqZUj0vLCKhkjKnqOQHNuSZVJoKvAqS1wpEquvWDC1B2ypwrCPsRMEPVTODMLJMDv6qeKXwi2JYV5Sq4qKyvgGsHCLiuj2jR59V8gMqSJ2FJZRXEHVRHj3sFPrct6OpqlW1GpatQdt0GvwfM6n63InsGVFhJGaBqgqqIV6IsXllZgySPq4R3bnt3wi5cv+cN2yqQLW1T95KYVsWWtKk4cB9W53WQQflQYR6Wl4HaJZjvVE0D5yvq+RKgZCs5qdBEP5sD94cAvQLlSgNaSMAtHx88BuNQ41zdFsX30zKbcs0MLD/ihkpQzl0wiTqKLTfbKmCmyYICnK0IbaieC4CG9iSyLQ7cIMGQwau6TKoq60Apl3WN40LZpca1CKKK9VQyyIEn8w0F8F6CL2h8o3ixGwC7s7EWzCOqmcApYxYD4jsAzVS0sl2t98pA7vrKophCVSonbYpgH6mvSn24pTBV4sdtV3BtMq5k82y+IADvUJ0uAlkCVTxIaPm+UNu/qkV4F1TzHXCGrXIAqItBKypqK99VtAOVs64O4ObX7pHLVCpYHcRmwvLR7TvYAKBBN58LGVzDuFz+hQbWgncQyCZAk+VbsPSouf93261iZgmfCpwRbAvqmSqriU2PwhjaoOyYqtIegVXViTsmyta6bGySpY3gyRrpIyAeaWDDxtpsXwKyalMDKNP7YBXMqEskUsi2uC8FNAPxAKTVfT1o6VzM0E0jF+1rWcUuHvdyg7vgoFplX8HpvHpMCOMRUPHzZkInsqlFKNX/EIO52E0SxSzOwob2VmRLW5D1XIU0rbgM1AzWgyC7fe8G7xUAK/taEBat7luqtyP7EmsaJQOj5F+mrnZfCuYCfBUAWwShyd6pMY/vAHG1UqOYpbI/gy5T0CMKm+UO3gFuC85dgfDVeguPDfITrIBLsLrcgdh3CFgFZjaKJ4Iv3F8ANEqvuxR1tVKOgLoCa1jxboBAkj6v7j/icFbA7f4rfRnQDLRViG13i0vqBQrYVqBbADZT0ZpiHoSzvQpopKIFS3sE1HfBWlHXd0H7LnArqvougMtljHBgZnh3Eoz/BKjLML4Z2Aq0+hEJr9jaVUBbvNzCIUiroC7AWmmFw4o5AK3MtB5VypZMSFgs05JyGVwlwBqsEGAAa2ZU1CjUexXGsE4rKriilBvFzOKKo3AuAroE6QFQU3u8YpNXwS5k+1TZt5UrwouN4KiUEw+k3ZWDp1RXHNRqXb21Ts39945yZSg3VnZFNQ9CF3XeZyr5DgBXKiwCMa2MxeTDYXgP1Fsf9QNKZc0k81RJk3r6EQ3rCmBVyLL75EjZ1pIVDHoFtiOAHoB0BdTVylqBsKKKS+AeBXJVLY+CXASuGvO/Auq7GuEjDfGKg1oKa1z/dmmi9I9SUGNhl0AtfulHAawoYrnSkmNXAVuGEhrEVXvUF+A5Ct2PqNOjDetyna4CmeUolmeXLN4Aq7C5Sj10Q7yjgl+t6CNxSRHmI5X+CpwreYB3Qfdqna4q21KdBuc4GoZsn49ZOOiVinwHqK9WzjvgeweEh2AU5+vtxZ9Cd9Wqkh49V18E5oj6vVyn0RStAyGIO5edXRKd5B0VGVXq2yr3xYp+5Ut+C4QJ4P1N339pQMjRejj4vb/Dcr6rQc3O/0rjmtZpeYCBiCHfCemRbNhbK/pNUPc3wfKy5f2D7OlL3/uPhve/oU4T0F8f+VNM2vyoiv0jK+KHQfdHq+0bncz4oz73/+Y6LbKw1o/5B7eOf1Rl/0du9B9tn/9bvrf/j+v0h6ttn2tp/r/4819y4/zv5391uvzzfwDifz6phT1MPgAAAABJRU5ErkJggg==);box-shadow:#ffffff4d 0 1px 1px inset,#00000070 0 0 0 1px}.bb-color-picker-hue{height:1.5rem;box-shadow:#ffffff4d 0 1px 1px inset,#00000070 0 0 0 1px;background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.bb-color-picker-alpha{height:1.5rem;background-color:#000;background-size:1rem 1rem,1rem 1rem,auto;background-position:0 0,.5rem .5rem,center center;box-shadow:#ffffff4d 0 1px 1px inset,#00000070 0 0 0 1px}\n"], dependencies: [{ kind: "component", type: BbColorSlider, selector: "bb-color-slider", inputs: ["xOffset", "yOffset", "size"], outputs: ["xOffsetChange", "yOffsetChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
633
|
+
}
|
|
634
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BbColorPicker, decorators: [{
|
|
635
|
+
type: Component,
|
|
636
|
+
args: [{ selector: 'bb-color-picker', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-color-picker' }, imports: [BbColorSlider], template: "<bb-color-slider [(xOffset)]=\"saturationOffset\"\n [(yOffset)]=\"valueOffset\"\n [style.background-color]=\"'hsl(' + (hueOffset * 360) + ', 100%, 50%)'\"\n (xOffsetChange)=\"setColor()\"\n size=\"1.5\"\n class=\"bb-color-picker-saturation\">\n</bb-color-slider>\n\n<bb-color-slider [(xOffset)]=\"hueOffset\"\n (xOffsetChange)=\"setColor()\"\n size=\"1.5\"\n class=\"bb-color-picker-hue\">\n</bb-color-slider>\n\n@if (showAlpha) {\n <bb-color-slider [(xOffset)]=\"opacityOffset\"\n [style.background-image]=\"'linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.2) 75%, rgba(255, 255, 255, 0.2)), linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.2) 75%, rgba(255, 255, 255, 0.2)), linear-gradient(to right, hsla(' + (hueOffset * 360) + ',100%,50%,0), hsla(' + (hueOffset * 360) + ',100%,50%,1))'\"\n (xOffsetChange)=\"setColor()\"\n size=\"1.5\"\n class=\"bb-color-picker-alpha\">\n </bb-color-slider>\n}\n", styles: [".bb-color-picker{gap:.75rem;width:100%;display:flex;padding:.75rem;border-radius:.5rem;flex-direction:column;background-color:#fff;box-shadow:0 0 .5rem .5rem #00000020;border:1px solid var(--bb-form-control-border-color)}.bb-color-picker-saturation{height:10rem;background-size:cover;background-repeat:no-repeat;background-position:center center;background-image:url(data:image/png;base64,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);box-shadow:#ffffff4d 0 1px 1px inset,#00000070 0 0 0 1px}.bb-color-picker-hue{height:1.5rem;box-shadow:#ffffff4d 0 1px 1px inset,#00000070 0 0 0 1px;background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.bb-color-picker-alpha{height:1.5rem;background-color:#000;background-size:1rem 1rem,1rem 1rem,auto;background-position:0 0,.5rem .5rem,center center;box-shadow:#ffffff4d 0 1px 1px inset,#00000070 0 0 0 1px}\n"] }]
|
|
637
|
+
}], propDecorators: { showAlpha: [{
|
|
638
|
+
type: Input,
|
|
639
|
+
args: [{ transform: booleanAttribute }]
|
|
640
|
+
}], color: [{
|
|
641
|
+
type: Input
|
|
642
|
+
}], colorChange: [{
|
|
643
|
+
type: Output
|
|
644
|
+
}] } });
|
|
645
|
+
|
|
646
|
+
class ColorPickerDirective {
|
|
647
|
+
// Dependencies.
|
|
648
|
+
_overlay = inject(Overlay);
|
|
649
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
650
|
+
_elementRef = inject((ElementRef));
|
|
651
|
+
_environmentInjector = inject(EnvironmentInjector);
|
|
652
|
+
// Inputs.
|
|
653
|
+
bbColorPicker;
|
|
654
|
+
bbColorPickerShowAlpha = false;
|
|
655
|
+
bbColorPickerDisabled = false;
|
|
656
|
+
// Outputs.
|
|
657
|
+
bbColorPickerChange = new EventEmitter();
|
|
658
|
+
// State.
|
|
659
|
+
_overlayRef = null;
|
|
660
|
+
// Subscriptions.
|
|
661
|
+
_subscription = new Subscription();
|
|
662
|
+
showColorPicker() {
|
|
663
|
+
if (this._overlayRef?.hasAttached() || this.bbColorPickerDisabled) {
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
666
|
+
this.attachColorPicker();
|
|
667
|
+
}
|
|
668
|
+
hideColorPicker() {
|
|
669
|
+
if (!this._overlayRef?.hasAttached()) {
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
this._overlayRef?.detach();
|
|
673
|
+
}
|
|
674
|
+
ngOnInit() {
|
|
675
|
+
this.createOverlay();
|
|
676
|
+
this.handleOverlayEvents();
|
|
677
|
+
}
|
|
678
|
+
ngOnDestroy() {
|
|
679
|
+
this._subscription?.unsubscribe();
|
|
680
|
+
this._overlayRef?.dispose();
|
|
681
|
+
}
|
|
682
|
+
attachColorPicker() {
|
|
683
|
+
const component = new ComponentPortal(BbColorPicker, this._viewContainerRef, this._environmentInjector);
|
|
684
|
+
const componentRef = this._overlayRef.attach(component);
|
|
685
|
+
componentRef.setInput('color', this.bbColorPicker);
|
|
686
|
+
componentRef.setInput('showAlpha', this.bbColorPickerShowAlpha);
|
|
687
|
+
componentRef.instance.colorChange.subscribe(color => {
|
|
688
|
+
this.bbColorPickerChange.emit(color);
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
getPositionStrategy() {
|
|
692
|
+
const positions = this.getPositions();
|
|
693
|
+
return this._overlay
|
|
694
|
+
.position()
|
|
695
|
+
.flexibleConnectedTo(this._elementRef)
|
|
696
|
+
.withPositions(positions);
|
|
697
|
+
}
|
|
698
|
+
handleOverlayEvents() {
|
|
699
|
+
if (!this._overlayRef) {
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
const backdropClick$ = this._overlayRef.backdropClick();
|
|
703
|
+
const outside$ = this._overlayRef.outsidePointerEvents();
|
|
704
|
+
const detachments$ = this._overlayRef.detachments();
|
|
705
|
+
const subscription = merge(backdropClick$, outside$, detachments$).subscribe(() => {
|
|
706
|
+
this.hideColorPicker();
|
|
707
|
+
});
|
|
708
|
+
this._subscription.add(subscription);
|
|
709
|
+
}
|
|
710
|
+
createOverlay() {
|
|
711
|
+
const positionStrategy = this.getPositionStrategy();
|
|
712
|
+
const scrollStrategy = this._overlay.scrollStrategies.block();
|
|
713
|
+
this._overlayRef = this._overlay.create({
|
|
714
|
+
positionStrategy,
|
|
715
|
+
scrollStrategy,
|
|
716
|
+
minHeight: 200,
|
|
717
|
+
disposeOnNavigation: true,
|
|
718
|
+
width: '100%',
|
|
719
|
+
maxWidth: '20rem'
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
getPositions() {
|
|
723
|
+
return [
|
|
724
|
+
{ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 10 },
|
|
725
|
+
{ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -10 },
|
|
726
|
+
{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -10 },
|
|
727
|
+
{ originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 10 }
|
|
728
|
+
];
|
|
729
|
+
}
|
|
730
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ColorPickerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
731
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.5", type: ColorPickerDirective, isStandalone: true, selector: "[bbColorPicker]", inputs: { bbColorPicker: "bbColorPicker", bbColorPickerShowAlpha: ["bbColorPickerShowAlpha", "bbColorPickerShowAlpha", booleanAttribute], bbColorPickerDisabled: ["bbColorPickerDisabled", "bbColorPickerDisabled", booleanAttribute] }, outputs: { bbColorPickerChange: "bbColorPickerChange" }, host: { listeners: { "click": "showColorPicker()" } }, ngImport: i0 });
|
|
732
|
+
}
|
|
733
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ColorPickerDirective, decorators: [{
|
|
734
|
+
type: Directive,
|
|
735
|
+
args: [{
|
|
736
|
+
selector: '[bbColorPicker]'
|
|
737
|
+
}]
|
|
738
|
+
}], propDecorators: { bbColorPicker: [{
|
|
739
|
+
type: Input,
|
|
740
|
+
args: [{ required: true }]
|
|
741
|
+
}], bbColorPickerShowAlpha: [{
|
|
742
|
+
type: Input,
|
|
743
|
+
args: [{ transform: booleanAttribute }]
|
|
744
|
+
}], bbColorPickerDisabled: [{
|
|
745
|
+
type: Input,
|
|
746
|
+
args: [{ transform: booleanAttribute }]
|
|
747
|
+
}], bbColorPickerChange: [{
|
|
748
|
+
type: Output
|
|
749
|
+
}], showColorPicker: [{
|
|
750
|
+
type: HostListener,
|
|
751
|
+
args: ['click']
|
|
752
|
+
}] } });
|
|
753
|
+
|
|
503
754
|
class BbFileSize {
|
|
504
755
|
transform(value) {
|
|
505
756
|
return this.format(value);
|
|
@@ -2195,6 +2446,7 @@ const IMPORTS_EXPORTS = [
|
|
|
2195
2446
|
BbImageUpload,
|
|
2196
2447
|
BbExtraErrorControls,
|
|
2197
2448
|
BbFileDrop,
|
|
2449
|
+
ColorPickerDirective,
|
|
2198
2450
|
// Pipes.
|
|
2199
2451
|
BbFileSize,
|
|
2200
2452
|
BbFileImage,
|
|
@@ -2215,7 +2467,9 @@ const IMPORTS_EXPORTS = [
|
|
|
2215
2467
|
BbMultiFileControl,
|
|
2216
2468
|
BbFilePicker,
|
|
2217
2469
|
BbImagePicker,
|
|
2218
|
-
BbDatePicker
|
|
2470
|
+
BbDatePicker,
|
|
2471
|
+
BbColorSlider,
|
|
2472
|
+
BbColorPicker
|
|
2219
2473
|
];
|
|
2220
2474
|
class ElementsModule {
|
|
2221
2475
|
static forRoot(config) {
|
|
@@ -2236,6 +2490,7 @@ class ElementsModule {
|
|
|
2236
2490
|
BbImageUpload,
|
|
2237
2491
|
BbExtraErrorControls,
|
|
2238
2492
|
BbFileDrop,
|
|
2493
|
+
ColorPickerDirective,
|
|
2239
2494
|
// Pipes.
|
|
2240
2495
|
BbFileSize,
|
|
2241
2496
|
BbFileImage,
|
|
@@ -2256,7 +2511,9 @@ class ElementsModule {
|
|
|
2256
2511
|
BbMultiFileControl,
|
|
2257
2512
|
BbFilePicker,
|
|
2258
2513
|
BbImagePicker,
|
|
2259
|
-
BbDatePicker
|
|
2514
|
+
BbDatePicker,
|
|
2515
|
+
BbColorSlider,
|
|
2516
|
+
BbColorPicker], exports: [
|
|
2260
2517
|
// Directives.
|
|
2261
2518
|
BbFormError,
|
|
2262
2519
|
BbFormSubmit,
|
|
@@ -2265,6 +2522,7 @@ class ElementsModule {
|
|
|
2265
2522
|
BbImageUpload,
|
|
2266
2523
|
BbExtraErrorControls,
|
|
2267
2524
|
BbFileDrop,
|
|
2525
|
+
ColorPickerDirective,
|
|
2268
2526
|
// Pipes.
|
|
2269
2527
|
BbFileSize,
|
|
2270
2528
|
BbFileImage,
|
|
@@ -2285,7 +2543,9 @@ class ElementsModule {
|
|
|
2285
2543
|
BbMultiFileControl,
|
|
2286
2544
|
BbFilePicker,
|
|
2287
2545
|
BbImagePicker,
|
|
2288
|
-
BbDatePicker
|
|
2546
|
+
BbDatePicker,
|
|
2547
|
+
BbColorSlider,
|
|
2548
|
+
BbColorPicker] });
|
|
2289
2549
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ElementsModule, imports: [BbMultiFileControl,
|
|
2290
2550
|
BbDatePicker] });
|
|
2291
2551
|
}
|
|
@@ -2301,5 +2561,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2301
2561
|
* Generated bundle index. Do not edit.
|
|
2302
2562
|
*/
|
|
2303
2563
|
|
|
2304
|
-
export { BbAnchor, BbAvatar, BbButton, BbCheckbox, BbCheckboxGroup, BbDate, BbDatePicker, BbExtraErrorControls, BbFileDrop, BbFileImage, BbFilePicker, BbFileSize, BbFormControl, BbFormError, BbFormGroup, BbFormSubmit, BbFormSubmitter, BbIcon, BbImagePicker, BbImageUpload, BbInput, BbMultiFileControl, BbRadioButton, BbRadioGroup, BbRelativeTime, BbSpinner, ELEMENTS_CONFIG, ELEMENTS_ERRORS, ELEMENTS_ICONS, ElementsModule, provideElementsConfig };
|
|
2564
|
+
export { BbAnchor, BbAvatar, BbButton, BbCheckbox, BbCheckboxGroup, BbColorPicker, BbColorSlider, BbDate, BbDatePicker, BbExtraErrorControls, BbFileDrop, BbFileImage, BbFilePicker, BbFileSize, BbFormControl, BbFormError, BbFormGroup, BbFormSubmit, BbFormSubmitter, BbIcon, BbImagePicker, BbImageUpload, BbInput, BbMultiFileControl, BbRadioButton, BbRadioGroup, BbRelativeTime, BbSpinner, ColorPickerDirective, ELEMENTS_CONFIG, ELEMENTS_ERRORS, ELEMENTS_ICONS, ElementsModule, provideElementsConfig };
|
|
2305
2565
|
//# sourceMappingURL=bravobit-bb-foundation-elements.mjs.map
|