@mintplayer/ng-bootstrap 16.6.0 → 16.6.1

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.
Files changed (57) hide show
  1. package/color-picker/color-picker.module.d.ts +15 -0
  2. package/color-picker/components/alpha-strip/alpha-strip.component.d.ts +23 -0
  3. package/color-picker/components/color-picker/color-picker.component.d.ts +24 -0
  4. package/color-picker/components/color-wheel/color-wheel.component.d.ts +53 -0
  5. package/color-picker/components/index.d.ts +5 -0
  6. package/color-picker/components/luminosity-strip/luminosity-strip.component.d.ts +20 -0
  7. package/color-picker/components/slider/slider.component.d.ts +35 -0
  8. package/color-picker/directives/color-picker-value-accessor/color-picker-value-accessor.directive.d.ts +28 -0
  9. package/color-picker/directives/index.d.ts +1 -0
  10. package/color-picker/index.d.ts +5 -0
  11. package/color-picker/interfaces/hs.d.ts +4 -0
  12. package/color-picker/interfaces/hsl-color.d.ts +5 -0
  13. package/color-picker/interfaces/index.d.ts +3 -0
  14. package/color-picker/interfaces/rgb-color.d.ts +5 -0
  15. package/color-picker/types/html-color.d.ts +1 -0
  16. package/color-picker/types/index.d.ts +1 -0
  17. package/container/index.d.ts +1 -0
  18. package/container/src/container/container.component.d.ts +5 -0
  19. package/container/src/container.module.d.ts +8 -0
  20. package/container/src/index.d.ts +2 -0
  21. package/esm2022/color-picker/color-picker.module.mjs +65 -0
  22. package/esm2022/color-picker/components/alpha-strip/alpha-strip.component.mjs +80 -0
  23. package/esm2022/color-picker/components/color-picker/color-picker.component.mjs +60 -0
  24. package/esm2022/color-picker/components/color-wheel/color-wheel.component.mjs +321 -0
  25. package/esm2022/color-picker/components/index.mjs +6 -0
  26. package/esm2022/color-picker/components/luminosity-strip/luminosity-strip.component.mjs +72 -0
  27. package/esm2022/color-picker/components/slider/slider.component.mjs +125 -0
  28. package/esm2022/color-picker/directives/color-picker-value-accessor/color-picker-value-accessor.directive.mjs +130 -0
  29. package/esm2022/color-picker/directives/index.mjs +2 -0
  30. package/esm2022/color-picker/index.mjs +6 -0
  31. package/esm2022/color-picker/interfaces/hs.mjs +2 -0
  32. package/esm2022/color-picker/interfaces/hsl-color.mjs +2 -0
  33. package/esm2022/color-picker/interfaces/index.mjs +4 -0
  34. package/esm2022/color-picker/interfaces/rgb-color.mjs +2 -0
  35. package/esm2022/color-picker/mintplayer-ng-bootstrap-color-picker.mjs +5 -0
  36. package/esm2022/color-picker/types/html-color.mjs +2 -0
  37. package/esm2022/color-picker/types/index.mjs +2 -0
  38. package/esm2022/container/index.mjs +2 -0
  39. package/esm2022/container/mintplayer-ng-bootstrap-container.mjs +5 -0
  40. package/esm2022/container/src/container/container.component.mjs +11 -0
  41. package/esm2022/container/src/container.module.mjs +18 -0
  42. package/esm2022/container/src/index.mjs +3 -0
  43. package/esm2022/grid/src/component/grid.component.mjs +5 -4
  44. package/esm2022/grid/src/grid.module.mjs +5 -4
  45. package/esm2022/navbar/src/navbar/navbar.component.mjs +6 -5
  46. package/esm2022/navbar/src/navbar.module.mjs +6 -2
  47. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +819 -0
  48. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -0
  49. package/fesm2022/mintplayer-ng-bootstrap-container.mjs +33 -0
  50. package/fesm2022/mintplayer-ng-bootstrap-container.mjs.map +1 -0
  51. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +8 -6
  52. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
  53. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +12 -7
  54. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
  55. package/grid/src/grid.module.d.ts +2 -1
  56. package/navbar/src/navbar.module.d.ts +6 -5
  57. package/package.json +13 -1
@@ -0,0 +1,15 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./components/color-picker/color-picker.component";
3
+ import * as i2 from "./directives/color-picker-value-accessor/color-picker-value-accessor.directive";
4
+ import * as i3 from "./components/color-wheel/color-wheel.component";
5
+ import * as i4 from "./components/luminosity-strip/luminosity-strip.component";
6
+ import * as i5 from "./components/slider/slider.component";
7
+ import * as i6 from "./components/alpha-strip/alpha-strip.component";
8
+ import * as i7 from "@angular/common";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "@mintplayer/ng-bootstrap/let";
11
+ export declare class BsColorPickerModule {
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsColorPickerModule, never>;
13
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BsColorPickerModule, [typeof i1.BsColorPickerComponent, typeof i2.BsColorPickerValueAccessor, typeof i3.BsColorWheelComponent, typeof i4.BsLuminosityStripComponent, typeof i5.BsSliderComponent, typeof i5.BsThumbDirective, typeof i5.BsTrackDirective, typeof i6.BsAlphaStripComponent], [typeof i7.CommonModule, typeof i8.FormsModule, typeof i9.BsLetModule], [typeof i1.BsColorPickerComponent, typeof i2.BsColorPickerValueAccessor, typeof i3.BsColorWheelComponent, typeof i4.BsLuminosityStripComponent, typeof i5.BsSliderComponent, typeof i5.BsThumbDirective, typeof i5.BsTrackDirective, typeof i6.BsAlphaStripComponent]>;
14
+ static ɵinj: i0.ɵɵInjectorDeclaration<BsColorPickerModule>;
15
+ }
@@ -0,0 +1,23 @@
1
+ import { EventEmitter, AfterViewInit, ElementRef } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import { HS } from '../../interfaces/hs';
4
+ import * as i0 from "@angular/core";
5
+ export declare class BsAlphaStripComponent implements AfterViewInit {
6
+ constructor();
7
+ hs$: BehaviorSubject<HS>;
8
+ get hs(): HS;
9
+ set hs(value: HS);
10
+ luminosity$: BehaviorSubject<number>;
11
+ get luminosity(): number;
12
+ set luminosity(value: number);
13
+ alpha$: BehaviorSubject<number>;
14
+ alphaChange: EventEmitter<number>;
15
+ get alpha(): number;
16
+ set alpha(value: number);
17
+ private canvasContext;
18
+ canvas: ElementRef<HTMLCanvasElement>;
19
+ ngAfterViewInit(): void;
20
+ resultBackground$: Observable<string>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsAlphaStripComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<BsAlphaStripComponent, "bs-alpha-strip", never, { "hs": { "alias": "hs"; "required": false; }; "luminosity": { "alias": "luminosity"; "required": false; }; "alpha": { "alias": "alpha"; "required": false; }; }, { "alphaChange": "alphaChange"; }, never, never, false, never>;
23
+ }
@@ -0,0 +1,24 @@
1
+ import { EventEmitter } from "@angular/core";
2
+ import { BehaviorSubject } from "rxjs";
3
+ import { HS } from "../../interfaces/hs";
4
+ import { BsColorWheelComponent } from "../color-wheel/color-wheel.component";
5
+ import * as i0 from "@angular/core";
6
+ export declare class BsColorPickerComponent {
7
+ constructor();
8
+ colorWheel: BsColorWheelComponent;
9
+ set width(value: number);
10
+ set height(value: number);
11
+ set allowAlpha(value: boolean);
12
+ width$: BehaviorSubject<number>;
13
+ height$: BehaviorSubject<number>;
14
+ disabled$: BehaviorSubject<boolean>;
15
+ allowAlpha$: BehaviorSubject<boolean>;
16
+ hs$: BehaviorSubject<HS>;
17
+ luminosity$: BehaviorSubject<number>;
18
+ alpha$: BehaviorSubject<number>;
19
+ alphaChange: EventEmitter<number>;
20
+ get alpha(): number;
21
+ set alpha(value: number);
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsColorPickerComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<BsColorPickerComponent, "bs-color-picker", never, { "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "allowAlpha": { "alias": "allowAlpha"; "required": false; }; "alpha": { "alias": "alpha"; "required": false; }; }, { "alphaChange": "alphaChange"; }, never, never, false, never>;
24
+ }
@@ -0,0 +1,53 @@
1
+ import { AfterViewInit, ElementRef, EventEmitter } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import { HS } from '../../interfaces/hs';
4
+ import * as i0 from "@angular/core";
5
+ export declare class BsColorWheelComponent implements AfterViewInit {
6
+ private element;
7
+ constructor(element: ElementRef<HTMLElement>);
8
+ positionRelative: boolean;
9
+ set diameterRatio(value: number);
10
+ set width(value: number);
11
+ set height(value: number);
12
+ canvas: ElementRef<HTMLCanvasElement>;
13
+ hs$: BehaviorSubject<HS>;
14
+ hsChange: EventEmitter<HS>;
15
+ get hs(): HS;
16
+ set hs(value: HS);
17
+ luminosity$: BehaviorSubject<number>;
18
+ get luminosity(): number;
19
+ set luminosity(value: number);
20
+ private canvasContext;
21
+ private isPointerDown;
22
+ width$: BehaviorSubject<number>;
23
+ height$: BehaviorSubject<number>;
24
+ diameterRatio$: BehaviorSubject<number>;
25
+ squareSize$: Observable<number | null>;
26
+ shiftX$: Observable<number | null>;
27
+ shiftY$: Observable<number | null>;
28
+ innerRadius$: Observable<number | null>;
29
+ outerRadius$: Observable<number | null>;
30
+ markerPosition$: Observable<{
31
+ x: number;
32
+ y: number;
33
+ }>;
34
+ disabled$: BehaviorSubject<boolean>;
35
+ viewInited$: BehaviorSubject<boolean>;
36
+ ngAfterViewInit(): void;
37
+ onPointerDown(ev: MouseEvent | TouchEvent): void;
38
+ onPointerMove(ev: MouseEvent | TouchEvent): void;
39
+ onMouseMove(ev: MouseEvent): void;
40
+ onPointerUp(ev: MouseEvent | TouchEvent): void;
41
+ private updateColor;
42
+ private isInsideCircle;
43
+ private position2color;
44
+ private color2position;
45
+ private rgb2Hsl;
46
+ /**
47
+ * Divide 1 to n, handling floating point errors.
48
+ * Ensures that the value is in between 0 and 1.
49
+ **/
50
+ private bound01;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsColorWheelComponent, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<BsColorWheelComponent, "bs-color-wheel", never, { "diameterRatio": { "alias": "diameterRatio"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "hs": { "alias": "hs"; "required": false; }; "luminosity": { "alias": "luminosity"; "required": false; }; }, { "hsChange": "hsChange"; }, never, never, false, never>;
53
+ }
@@ -0,0 +1,5 @@
1
+ export * from './alpha-strip/alpha-strip.component';
2
+ export * from './color-picker/color-picker.component';
3
+ export * from './color-wheel/color-wheel.component';
4
+ export * from './luminosity-strip/luminosity-strip.component';
5
+ export * from './slider/slider.component';
@@ -0,0 +1,20 @@
1
+ import { EventEmitter, AfterViewInit, ElementRef } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import { HS } from '../../interfaces/hs';
4
+ import * as i0 from "@angular/core";
5
+ export declare class BsLuminosityStripComponent implements AfterViewInit {
6
+ constructor();
7
+ hs$: BehaviorSubject<HS>;
8
+ get hs(): HS;
9
+ set hs(value: HS);
10
+ luminosity$: BehaviorSubject<number>;
11
+ luminosityChange: EventEmitter<number>;
12
+ get luminosity(): number;
13
+ set luminosity(value: number);
14
+ private canvasContext;
15
+ canvas: ElementRef<HTMLCanvasElement>;
16
+ ngAfterViewInit(): void;
17
+ resultBackground$: Observable<string>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsLuminosityStripComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<BsLuminosityStripComponent, "bs-luminosity-strip", never, { "hs": { "alias": "hs"; "required": false; }; "luminosity": { "alias": "luminosity"; "required": false; }; }, { "luminosityChange": "luminosityChange"; }, never, never, false, never>;
20
+ }
@@ -0,0 +1,35 @@
1
+ import { ElementRef, EventEmitter, NgZone } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export declare class BsSliderComponent {
5
+ private element;
6
+ private zone;
7
+ constructor(element: ElementRef<HTMLElement>, zone: NgZone);
8
+ dBlock: boolean;
9
+ positionRelative: boolean;
10
+ thumbMarginLeft$: Observable<number>;
11
+ track: ElementRef<HTMLDivElement>;
12
+ thumb: ElementRef<HTMLDivElement>;
13
+ value$: BehaviorSubject<number>;
14
+ valueChange: EventEmitter<number>;
15
+ get value(): number;
16
+ set value(value: number);
17
+ private isPointerDown$;
18
+ cursorClass$: Observable<string>;
19
+ onPointerDown(ev: MouseEvent | TouchEvent): void;
20
+ onPointerMove(ev: MouseEvent | TouchEvent): void;
21
+ onPointerUp(ev: MouseEvent | TouchEvent): void;
22
+ private updateColor;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsSliderComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<BsSliderComponent, "bs-slider", never, { "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, ["[bsTrack]", "[bsThumb]"], false, never>;
25
+ }
26
+ export declare class BsThumbDirective {
27
+ thumbClass: boolean;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsThumbDirective, never>;
29
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BsThumbDirective, "[bsThumb]", never, {}, {}, never, never, false, never>;
30
+ }
31
+ export declare class BsTrackDirective {
32
+ trackClass: boolean;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsTrackDirective, never>;
34
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BsTrackDirective, "[bsTrack]", never, {}, {}, never, never, false, never>;
35
+ }
@@ -0,0 +1,28 @@
1
+ import { AfterViewInit, DestroyRef } from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { BsColorPickerComponent } from '../../components/color-picker/color-picker.component';
4
+ import { RgbColor } from '../../interfaces/rgb-color';
5
+ import * as i0 from "@angular/core";
6
+ export declare class BsColorPickerValueAccessor implements AfterViewInit, ControlValueAccessor {
7
+ private host;
8
+ private destroy;
9
+ constructor(host: BsColorPickerComponent, destroy: DestroyRef);
10
+ ngAfterViewInit(): void;
11
+ hsl2rgb(h: number, s: number, l: number): RgbColor;
12
+ onValueChange?: (value: string) => void;
13
+ onTouched?: () => void;
14
+ registerOnChange(fn: (_: any) => void): void;
15
+ registerOnTouched(fn: () => void): void;
16
+ writeValue(value: string | null): void;
17
+ setDisabledState(isDisabled: boolean): void;
18
+ private rgb2hex;
19
+ private hex2rgb;
20
+ /**
21
+ * Divide 1 to n, handling floating point errors.
22
+ * Ensures that the value is in between 0 and 1.
23
+ **/
24
+ private bound01;
25
+ private rgb2Hsl;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsColorPickerValueAccessor, never>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BsColorPickerValueAccessor, "bs-color-picker", ["bsColorPicker"], {}, {}, never, never, false, never>;
28
+ }
@@ -0,0 +1 @@
1
+ export * from './color-picker-value-accessor/color-picker-value-accessor.directive';
@@ -0,0 +1,5 @@
1
+ export * from './color-picker.module';
2
+ export * from './components';
3
+ export * from './directives';
4
+ export * from './interfaces';
5
+ export * from './types';
@@ -0,0 +1,4 @@
1
+ export interface HS {
2
+ hue: number;
3
+ saturation: number;
4
+ }
@@ -0,0 +1,5 @@
1
+ export interface HslColor {
2
+ hue: number;
3
+ saturation: number;
4
+ luminosity: number;
5
+ }
@@ -0,0 +1,3 @@
1
+ export * from './rgb-color';
2
+ export * from './hsl-color';
3
+ export * from './hs';
@@ -0,0 +1,5 @@
1
+ export interface RgbColor {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ }
@@ -0,0 +1 @@
1
+ export type HtmlColor = `#${string}`;
@@ -0,0 +1 @@
1
+ export * from './html-color';
@@ -0,0 +1 @@
1
+ export * from './src';
@@ -0,0 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class BsContainerComponent {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsContainerComponent, never>;
4
+ static ɵcmp: i0.ɵɵComponentDeclaration<BsContainerComponent, "bs-container", never, {}, {}, never, ["*"], false, never>;
5
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./container/container.component";
3
+ import * as i2 from "@angular/common";
4
+ export declare class BsContainerModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<BsContainerModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BsContainerModule, [typeof i1.BsContainerComponent], [typeof i2.CommonModule], [typeof i1.BsContainerComponent]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<BsContainerModule>;
8
+ }
@@ -0,0 +1,2 @@
1
+ export * from './container/container.component';
2
+ export * from './container.module';
@@ -0,0 +1,65 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { CommonModule } from '@angular/common';
4
+ import { BsLetModule } from '@mintplayer/ng-bootstrap/let';
5
+ import { BsColorPickerValueAccessor } from './directives/color-picker-value-accessor/color-picker-value-accessor.directive';
6
+ import { BsColorPickerComponent } from './components/color-picker/color-picker.component';
7
+ import { BsColorWheelComponent } from './components/color-wheel/color-wheel.component';
8
+ import { BsLuminosityStripComponent } from './components/luminosity-strip/luminosity-strip.component';
9
+ import { BsSliderComponent, BsThumbDirective, BsTrackDirective } from './components/slider/slider.component';
10
+ import { BsAlphaStripComponent } from './components/alpha-strip/alpha-strip.component';
11
+ import * as i0 from "@angular/core";
12
+ export class BsColorPickerModule {
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: BsColorPickerModule, declarations: [BsColorPickerComponent,
15
+ BsColorPickerValueAccessor,
16
+ BsColorWheelComponent,
17
+ BsLuminosityStripComponent,
18
+ BsSliderComponent,
19
+ BsThumbDirective,
20
+ BsTrackDirective,
21
+ BsAlphaStripComponent], imports: [CommonModule,
22
+ FormsModule,
23
+ BsLetModule], exports: [BsColorPickerComponent,
24
+ BsColorPickerValueAccessor,
25
+ BsColorWheelComponent,
26
+ BsLuminosityStripComponent,
27
+ BsSliderComponent,
28
+ BsThumbDirective,
29
+ BsTrackDirective,
30
+ BsAlphaStripComponent] }); }
31
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorPickerModule, imports: [CommonModule,
32
+ FormsModule,
33
+ BsLetModule] }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorPickerModule, decorators: [{
36
+ type: NgModule,
37
+ args: [{
38
+ declarations: [
39
+ BsColorPickerComponent,
40
+ BsColorPickerValueAccessor,
41
+ BsColorWheelComponent,
42
+ BsLuminosityStripComponent,
43
+ BsSliderComponent,
44
+ BsThumbDirective,
45
+ BsTrackDirective,
46
+ BsAlphaStripComponent
47
+ ],
48
+ imports: [
49
+ CommonModule,
50
+ FormsModule,
51
+ BsLetModule
52
+ ],
53
+ exports: [
54
+ BsColorPickerComponent,
55
+ BsColorPickerValueAccessor,
56
+ BsColorWheelComponent,
57
+ BsLuminosityStripComponent,
58
+ BsSliderComponent,
59
+ BsThumbDirective,
60
+ BsTrackDirective,
61
+ BsAlphaStripComponent
62
+ ]
63
+ }]
64
+ }] });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUM1SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7QUE2QnZGLE1BQU0sT0FBTyxtQkFBbUI7OEdBQW5CLG1CQUFtQjsrR0FBbkIsbUJBQW1CLGlCQXpCNUIsc0JBQXNCO1lBQ3RCLDBCQUEwQjtZQUMxQixxQkFBcUI7WUFDckIsMEJBQTBCO1lBQzFCLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLHFCQUFxQixhQUdyQixZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVcsYUFHWCxzQkFBc0I7WUFDdEIsMEJBQTBCO1lBQzFCLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIscUJBQXFCOytHQUdaLG1CQUFtQixZQWY1QixZQUFZO1lBQ1osV0FBVztZQUNYLFdBQVc7OzJGQWFGLG1CQUFtQjtrQkEzQi9CLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLHNCQUFzQjt3QkFDdEIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIscUJBQXFCO3FCQUN0QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFdBQVc7cUJBQ1o7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLHNCQUFzQjt3QkFDdEIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIscUJBQXFCO3FCQUN0QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCc0xldE1vZHVsZSB9IGZyb20gJ0BtaW50cGxheWVyL25nLWJvb3RzdHJhcC9sZXQnO1xuaW1wb3J0IHsgQnNDb2xvclBpY2tlclZhbHVlQWNjZXNzb3IgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY29sb3ItcGlja2VyLXZhbHVlLWFjY2Vzc29yL2NvbG9yLXBpY2tlci12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQnNDb2xvclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc0NvbG9yV2hlZWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sb3Itd2hlZWwvY29sb3Itd2hlZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEJzTHVtaW5vc2l0eVN0cmlwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2x1bWlub3NpdHktc3RyaXAvbHVtaW5vc2l0eS1zdHJpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNTbGlkZXJDb21wb25lbnQsIEJzVGh1bWJEaXJlY3RpdmUsIEJzVHJhY2tEaXJlY3RpdmUgfSBmcm9tICcuL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNBbHBoYVN0cmlwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FscGhhLXN0cmlwL2FscGhhLXN0cmlwLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJzQ29sb3JQaWNrZXJDb21wb25lbnQsXG4gICAgQnNDb2xvclBpY2tlclZhbHVlQWNjZXNzb3IsXG4gICAgQnNDb2xvcldoZWVsQ29tcG9uZW50LFxuICAgIEJzTHVtaW5vc2l0eVN0cmlwQ29tcG9uZW50LFxuICAgIEJzU2xpZGVyQ29tcG9uZW50LFxuICAgIEJzVGh1bWJEaXJlY3RpdmUsXG4gICAgQnNUcmFja0RpcmVjdGl2ZSxcbiAgICBCc0FscGhhU3RyaXBDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBCc0xldE1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQnNDb2xvclBpY2tlckNvbXBvbmVudCxcbiAgICBCc0NvbG9yUGlja2VyVmFsdWVBY2Nlc3NvcixcbiAgICBCc0NvbG9yV2hlZWxDb21wb25lbnQsXG4gICAgQnNMdW1pbm9zaXR5U3RyaXBDb21wb25lbnQsXG4gICAgQnNTbGlkZXJDb21wb25lbnQsXG4gICAgQnNUaHVtYkRpcmVjdGl2ZSxcbiAgICBCc1RyYWNrRGlyZWN0aXZlLFxuICAgIEJzQWxwaGFTdHJpcENvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJzQ29sb3JQaWNrZXJNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,80 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, ElementRef } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, map } from 'rxjs';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../slider/slider.component";
6
+ import * as i2 from "@angular/common";
7
+ export class BsAlphaStripComponent {
8
+ constructor() {
9
+ //#region HS
10
+ this.hs$ = new BehaviorSubject({ hue: 0, saturation: 0 });
11
+ //#endregion
12
+ //#region Luminosity
13
+ this.luminosity$ = new BehaviorSubject(0.5);
14
+ //#endregion
15
+ //#region Alpha
16
+ this.alpha$ = new BehaviorSubject(1);
17
+ this.alphaChange = new EventEmitter();
18
+ //#endregion
19
+ this.canvasContext = null;
20
+ combineLatest([this.hs$, this.luminosity$]).pipe(takeUntilDestroyed()).subscribe(([hs, luminosity]) => {
21
+ setTimeout(() => {
22
+ if (this.canvasContext) {
23
+ const width = this.canvas.nativeElement.width, height = this.canvas.nativeElement.height;
24
+ this.canvasContext.clearRect(0, 0, width, height);
25
+ this.canvasContext.save();
26
+ const gradient = this.canvasContext.createLinearGradient(0, 0, width, 0);
27
+ gradient.addColorStop(0, `hsla(${hs.hue}, ${hs.saturation * 100}%, ${luminosity * 100}%, 0)`);
28
+ gradient.addColorStop(1, `hsla(${hs.hue}, ${hs.saturation * 100}%, ${luminosity * 100}%, 1)`);
29
+ this.canvasContext.fillStyle = gradient;
30
+ this.canvasContext.fillRect(0, 0, width, height);
31
+ }
32
+ });
33
+ });
34
+ this.resultBackground$ = combineLatest([this.hs$, this.luminosity$, this.alpha$])
35
+ .pipe(map(([hs, luminosity, alpha]) => {
36
+ return `hsla(${hs.hue}, ${hs.saturation * 100}%, ${luminosity * 100}%, ${alpha})`;
37
+ }));
38
+ this.alpha$.pipe(takeUntilDestroyed())
39
+ .subscribe((alpha) => this.alphaChange.emit(alpha));
40
+ }
41
+ get hs() {
42
+ return this.hs$.value;
43
+ }
44
+ set hs(value) {
45
+ this.hs$.next(value);
46
+ }
47
+ get luminosity() {
48
+ return this.luminosity$.value;
49
+ }
50
+ set luminosity(value) {
51
+ this.luminosity$.next(value);
52
+ }
53
+ get alpha() {
54
+ return this.alpha$.value;
55
+ }
56
+ set alpha(value) {
57
+ this.alpha$.next(value);
58
+ }
59
+ ngAfterViewInit() {
60
+ this.canvasContext = this.canvas.nativeElement.getContext('2d', { willReadFrequently: true });
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsAlphaStripComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: BsAlphaStripComponent, selector: "bs-alpha-strip", inputs: { hs: "hs", luminosity: "luminosity", alpha: "alpha" }, outputs: { alphaChange: "alphaChange" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["track"], descendants: true }], ngImport: i0, template: "<bs-slider [value]=\"(alpha$ | async)!\" (valueChange)=\"alphaChange.emit($event)\">\n <canvas bsTrack class=\" track position-absolute w-100\" #track></canvas>\n\n <!-- [style.background]=\"resultBackground$ | async\" -->\n <div bsThumb [style.background]=\"resultBackground$ | async\"></div>\n</bs-slider>", styles: [".track{background-image:linear-gradient(45deg,#C0C0C0 25%,transparent 25%),linear-gradient(-45deg,#C0C0C0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#C0C0C0 75%),linear-gradient(-45deg,transparent 75%,#C0C0C0 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0px}\n"], dependencies: [{ kind: "component", type: i1.BsSliderComponent, selector: "bs-slider", inputs: ["value"], outputs: ["valueChange"] }, { kind: "directive", type: i1.BsThumbDirective, selector: "[bsThumb]" }, { kind: "directive", type: i1.BsTrackDirective, selector: "[bsTrack]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsAlphaStripComponent, decorators: [{
66
+ type: Component,
67
+ args: [{ selector: 'bs-alpha-strip', template: "<bs-slider [value]=\"(alpha$ | async)!\" (valueChange)=\"alphaChange.emit($event)\">\n <canvas bsTrack class=\" track position-absolute w-100\" #track></canvas>\n\n <!-- [style.background]=\"resultBackground$ | async\" -->\n <div bsThumb [style.background]=\"resultBackground$ | async\"></div>\n</bs-slider>", styles: [".track{background-image:linear-gradient(45deg,#C0C0C0 25%,transparent 25%),linear-gradient(-45deg,#C0C0C0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#C0C0C0 75%),linear-gradient(-45deg,transparent 75%,#C0C0C0 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0px}\n"] }]
68
+ }], ctorParameters: function () { return []; }, propDecorators: { hs: [{
69
+ type: Input
70
+ }], luminosity: [{
71
+ type: Input
72
+ }], alphaChange: [{
73
+ type: Output
74
+ }], alpha: [{
75
+ type: Input
76
+ }], canvas: [{
77
+ type: ViewChild,
78
+ args: ['track']
79
+ }] } });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxwaGEtc3RyaXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9jb2xvci1waWNrZXIvY29tcG9uZW50cy9hbHBoYS1zdHJpcC9hbHBoYS1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL2FscGhhLXN0cmlwL2FscGhhLXN0cmlwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBT2hFLE1BQU0sT0FBTyxxQkFBcUI7SUFFaEM7UUEwQkEsWUFBWTtRQUNaLFFBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFPekQsWUFBWTtRQUNaLG9CQUFvQjtRQUNwQixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLEdBQUcsQ0FBQyxDQUFDO1FBTy9DLFlBQVk7UUFDWixlQUFlO1FBQ2YsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQU9uRCxZQUFZO1FBRUosa0JBQWEsR0FBb0MsSUFBSSxDQUFDO1FBdEQ1RCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxF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QUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBS0QsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEcsQ0FBQzs4R0E3RFUscUJBQXFCO2tHQUFyQixxQkFBcUIsZ1FDVmxDLDhUQUtZOzsyRkRLQyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsZ0JBQWdCOzBFQXFDTixFQUFFO3NCQUFyQixLQUFLO2dCQVNjLFVBQVU7c0JBQTdCLEtBQUs7Z0JBTUksV0FBVztzQkFBcEIsTUFBTTtnQkFJYSxLQUFLO3NCQUF4QixLQUFLO2dCQU1jLE1BQU07c0JBQXpCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIUyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaHMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicy1hbHBoYS1zdHJpcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbHBoYS1zdHJpcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FscGhhLXN0cmlwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQnNBbHBoYVN0cmlwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5ocyQsIHRoaXMubHVtaW5vc2l0eSRdKS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKFtocywgbHVtaW5vc2l0eV0pID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXNDb250ZXh0KSB7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoLCBoZWlnaHQgPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodDtcbiAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZ3JhZGllbnQgPSB0aGlzLmNhbnZhc0NvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgd2lkdGgsIDApO1xuICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCBgaHNsYSgke2hzLmh1ZX0sICR7aHMuc2F0dXJhdGlvbiAqIDEwMH0lLCAke2x1bWlub3NpdHkgKiAxMDB9JSwgMClgKTtcbiAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSwgYGhzbGEoJHtocy5odWV9LCAke2hzLnNhdHVyYXRpb24gKiAxMDB9JSwgJHtsdW1pbm9zaXR5ICogMTAwfSUsIDEpYCk7XG4gICAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9IGdyYWRpZW50O1xuICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc3VsdEJhY2tncm91bmQkID0gY29tYmluZUxhdGVzdChbdGhpcy5ocyQsIHRoaXMubHVtaW5vc2l0eSQsIHRoaXMuYWxwaGEkXSlcbiAgICAgIC5waXBlKG1hcCgoW2hzLCBsdW1pbm9zaXR5LCBhbHBoYV0pID0+IHtcbiAgICAgICAgcmV0dXJuIGBoc2xhKCR7aHMuaHVlfSwgJHtocy5zYXR1cmF0aW9uICogMTAwfSUsICR7bHVtaW5vc2l0eSAqIDEwMH0lLCAke2FscGhhfSlgO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5hbHBoYSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGFscGhhKSA9PiB0aGlzLmFscGhhQ2hhbmdlLmVtaXQoYWxwaGEpKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBIU1xuICBocyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhTPih7IGh1ZTogMCwgc2F0dXJhdGlvbjogMCB9KTtcbiAgcHVibGljIGdldCBocygpIHtcbiAgICByZXR1cm4gdGhpcy5ocyQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBocyh2YWx1ZTogSFMpIHtcbiAgICB0aGlzLmhzJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIEx1bWlub3NpdHlcbiAgbHVtaW5vc2l0eSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMC41KTtcbiAgcHVibGljIGdldCBsdW1pbm9zaXR5KCkge1xuICAgIHJldHVybiB0aGlzLmx1bWlub3NpdHkkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbHVtaW5vc2l0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5sdW1pbm9zaXR5JC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIEFscGhhXG4gIGFscGhhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcbiAgQE91dHB1dCgpIGFscGhhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIHB1YmxpYyBnZXQgYWxwaGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxwaGEkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgYWxwaGEodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuYWxwaGEkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICBcbiAgcHJpdmF0ZSBjYW52YXNDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgndHJhY2snKSBjYW52YXMhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FudmFzQ29udGV4dCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc3VsdEJhY2tncm91bmQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG59XG4iLCI8YnMtc2xpZGVyIFt2YWx1ZV09XCIoYWxwaGEkIHwgYXN5bmMpIVwiICh2YWx1ZUNoYW5nZSk9XCJhbHBoYUNoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICA8Y2FudmFzIGJzVHJhY2sgY2xhc3M9XCIgdHJhY2sgcG9zaXRpb24tYWJzb2x1dGUgdy0xMDBcIiAjdHJhY2s+PC9jYW52YXM+XG5cbiAgICA8IS0tIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInJlc3VsdEJhY2tncm91bmQkIHwgYXN5bmNcIiAtLT5cbiAgICA8ZGl2IGJzVGh1bWIgW3N0eWxlLmJhY2tncm91bmRdPVwicmVzdWx0QmFja2dyb3VuZCQgfCBhc3luY1wiPjwvZGl2PlxuPC9icy1zbGlkZXI+Il19
@@ -0,0 +1,60 @@
1
+ import { Component, Input, ViewChild, EventEmitter, Output } from "@angular/core";
2
+ import { BehaviorSubject } from "rxjs";
3
+ import { BsColorWheelComponent } from "../color-wheel/color-wheel.component";
4
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@mintplayer/ng-bootstrap/let";
8
+ import * as i3 from "../color-wheel/color-wheel.component";
9
+ import * as i4 from "../luminosity-strip/luminosity-strip.component";
10
+ import * as i5 from "../alpha-strip/alpha-strip.component";
11
+ export class BsColorPickerComponent {
12
+ constructor() {
13
+ this.width$ = new BehaviorSubject(150);
14
+ this.height$ = new BehaviorSubject(150);
15
+ this.disabled$ = new BehaviorSubject(false);
16
+ this.allowAlpha$ = new BehaviorSubject(true);
17
+ this.hs$ = new BehaviorSubject({ hue: 0, saturation: 0 });
18
+ this.luminosity$ = new BehaviorSubject(0);
19
+ //#region Alpha
20
+ this.alpha$ = new BehaviorSubject(1);
21
+ this.alphaChange = new EventEmitter();
22
+ this.alpha$.pipe(takeUntilDestroyed())
23
+ .subscribe((alpha) => this.alphaChange.emit(alpha));
24
+ }
25
+ set width(value) {
26
+ this.width$.next(value);
27
+ }
28
+ set height(value) {
29
+ this.height$.next(value);
30
+ }
31
+ set allowAlpha(value) {
32
+ this.allowAlpha$.next(value);
33
+ }
34
+ get alpha() {
35
+ return this.alpha$.value;
36
+ }
37
+ set alpha(value) {
38
+ this.alpha$.next(value);
39
+ }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
41
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: BsColorPickerComponent, selector: "bs-color-picker", inputs: { width: "width", height: "height", allowAlpha: "allowAlpha", alpha: "alpha" }, outputs: { alphaChange: "alphaChange" }, viewQueries: [{ propertyName: "colorWheel", first: true, predicate: ["wheel"], descendants: true }], ngImport: i0, template: "<ng-container *bsLet=\"(disabled$ | async)!; let letDisabled\">\n <ng-container *bsLet=\"(hs$ | async)!; let letHS\">\n <ng-container *bsLet=\"(luminosity$ | async)!; let letLuminosity\">\n <ng-container *bsLet=\"(alpha$ | async)!; let letAlpha\">\n <bs-color-wheel [hs]=\"letHS\" (hsChange)=\"hs$.next($event)\" [luminosity]=\"letLuminosity\" #wheel></bs-color-wheel>\n <bs-luminosity-strip [hs]=\"letHS\" [luminosity]=\"letLuminosity\" (luminosityChange)=\"luminosity$.next($event)\" class=\"d-block mt-2\" #strip></bs-luminosity-strip>\n <bs-alpha-strip *ngIf=\"allowAlpha$ | async\" [hs]=\"letHS\" [luminosity]=\"letLuminosity\" [alpha]=\"letAlpha\" (alphaChange)=\"alpha$.next($event)\" class=\"d-block mt-2\" #alpha></bs-alpha-strip>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.BsLetDirective, selector: "[bsLet]", inputs: ["bsLet"] }, { kind: "component", type: i3.BsColorWheelComponent, selector: "bs-color-wheel", inputs: ["diameterRatio", "width", "height", "hs", "luminosity"], outputs: ["hsChange"] }, { kind: "component", type: i4.BsLuminosityStripComponent, selector: "bs-luminosity-strip", inputs: ["hs", "luminosity"], outputs: ["luminosityChange"] }, { kind: "component", type: i5.BsAlphaStripComponent, selector: "bs-alpha-strip", inputs: ["hs", "luminosity", "alpha"], outputs: ["alphaChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorPickerComponent, decorators: [{
44
+ type: Component,
45
+ args: [{ selector: 'bs-color-picker', template: "<ng-container *bsLet=\"(disabled$ | async)!; let letDisabled\">\n <ng-container *bsLet=\"(hs$ | async)!; let letHS\">\n <ng-container *bsLet=\"(luminosity$ | async)!; let letLuminosity\">\n <ng-container *bsLet=\"(alpha$ | async)!; let letAlpha\">\n <bs-color-wheel [hs]=\"letHS\" (hsChange)=\"hs$.next($event)\" [luminosity]=\"letLuminosity\" #wheel></bs-color-wheel>\n <bs-luminosity-strip [hs]=\"letHS\" [luminosity]=\"letLuminosity\" (luminosityChange)=\"luminosity$.next($event)\" class=\"d-block mt-2\" #strip></bs-luminosity-strip>\n <bs-alpha-strip *ngIf=\"allowAlpha$ | async\" [hs]=\"letHS\" [luminosity]=\"letLuminosity\" [alpha]=\"letAlpha\" (alphaChange)=\"alpha$.next($event)\" class=\"d-block mt-2\" #alpha></bs-alpha-strip>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>" }]
46
+ }], ctorParameters: function () { return []; }, propDecorators: { colorWheel: [{
47
+ type: ViewChild,
48
+ args: ['wheel']
49
+ }], width: [{
50
+ type: Input
51
+ }], height: [{
52
+ type: Input
53
+ }], allowAlpha: [{
54
+ type: Input
55
+ }], alphaChange: [{
56
+ type: Output
57
+ }], alpha: [{
58
+ type: Input
59
+ }] } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvY29sb3ItcGlja2VyL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQU9oRSxNQUFNLE9BQU8sc0JBQXNCO0lBRWpDO1FBZ0JBLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVMsR0FBRyxDQUFDLENBQUM7UUFDM0MsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFakQsUUFBRyxHQUFHLElBQUksZUFBZSxDQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTdDLGVBQWU7UUFDZixXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBekJqRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBR0QsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBYSxNQUFNLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBYSxVQUFVLENBQUMsS0FBYztRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBYUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDOzhHQWxDVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiw2UkNYbkMsbTRCQVVlOzsyRkRDRixzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsaUJBQWlCOzBFQVdQLFVBQVU7c0JBQTdCLFNBQVM7dUJBQUMsT0FBTztnQkFDTCxLQUFLO3NCQUFqQixLQUFLO2dCQUdPLE1BQU07c0JBQWxCLEtBQUs7Z0JBR08sVUFBVTtzQkFBdEIsS0FBSztnQkFjSSxXQUFXO3NCQUFwQixNQUFNO2dCQUlNLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBIUyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2hzXCI7XG5pbXBvcnQgeyBCc0NvbG9yV2hlZWxDb21wb25lbnQgfSBmcm9tIFwiLi4vY29sb3Itd2hlZWwvY29sb3Itd2hlZWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtY29sb3ItcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJzQ29sb3JQaWNrZXJDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYWxwaGEkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChhbHBoYSkgPT4gdGhpcy5hbHBoYUNoYW5nZS5lbWl0KGFscGhhKSk7XG4gIH1cblxuICBAVmlld0NoaWxkKCd3aGVlbCcpIGNvbG9yV2hlZWwhOiBCc0NvbG9yV2hlZWxDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHNldCB3aWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWlnaHQkLm5leHQodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBhbGxvd0FscGhhKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5hbGxvd0FscGhhJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBcbiAgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDE1MCk7XG4gIGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMTUwKTtcbiAgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGFsbG93QWxwaGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBocyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhTPih7IGh1ZTogMCwgc2F0dXJhdGlvbjogMCB9KTtcbiAgbHVtaW5vc2l0eSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgLy8jcmVnaW9uIEFscGhhXG4gIGFscGhhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcbiAgQE91dHB1dCgpIGFscGhhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIGdldCBhbHBoYSgpIHtcbiAgICByZXR1cm4gdGhpcy5hbHBoYSQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2V0IGFscGhhKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmFscGhhJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiIsIjxuZy1jb250YWluZXIgKmJzTGV0PVwiKGRpc2FibGVkJCB8IGFzeW5jKSE7IGxldCBsZXREaXNhYmxlZFwiPlxuICAgIDxuZy1jb250YWluZXIgKmJzTGV0PVwiKGhzJCB8IGFzeW5jKSE7IGxldCBsZXRIU1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpic0xldD1cIihsdW1pbm9zaXR5JCB8IGFzeW5jKSE7IGxldCBsZXRMdW1pbm9zaXR5XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpic0xldD1cIihhbHBoYSQgfCBhc3luYykhOyBsZXQgbGV0QWxwaGFcIj5cbiAgICAgICAgICAgICAgICA8YnMtY29sb3Itd2hlZWwgW2hzXT1cImxldEhTXCIgKGhzQ2hhbmdlKT1cImhzJC5uZXh0KCRldmVudClcIiBbbHVtaW5vc2l0eV09XCJsZXRMdW1pbm9zaXR5XCIgI3doZWVsPjwvYnMtY29sb3Itd2hlZWw+XG4gICAgICAgICAgICAgICAgPGJzLWx1bWlub3NpdHktc3RyaXAgW2hzXT1cImxldEhTXCIgW2x1bWlub3NpdHldPVwibGV0THVtaW5vc2l0eVwiIChsdW1pbm9zaXR5Q2hhbmdlKT1cImx1bWlub3NpdHkkLm5leHQoJGV2ZW50KVwiIGNsYXNzPVwiZC1ibG9jayBtdC0yXCIgI3N0cmlwPjwvYnMtbHVtaW5vc2l0eS1zdHJpcD5cbiAgICAgICAgICAgICAgICA8YnMtYWxwaGEtc3RyaXAgKm5nSWY9XCJhbGxvd0FscGhhJCB8IGFzeW5jXCIgW2hzXT1cImxldEhTXCIgW2x1bWlub3NpdHldPVwibGV0THVtaW5vc2l0eVwiIFthbHBoYV09XCJsZXRBbHBoYVwiIChhbHBoYUNoYW5nZSk9XCJhbHBoYSQubmV4dCgkZXZlbnQpXCIgY2xhc3M9XCJkLWJsb2NrIG10LTJcIiAjYWxwaGE+PC9icy1hbHBoYS1zdHJpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPiJdfQ==