@3dsource/source-ui 0.0.6 → 0.0.7
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/fesm2022/3dsource-source-ui.mjs +438 -6
- package/fesm2022/3dsource-source-ui.mjs.map +1 -1
- package/lib/components/source-color-picker/components/color-palette/color-palette.component.d.ts +31 -0
- package/lib/components/source-color-picker/components/color-slider/color-slider.component.d.ts +34 -0
- package/lib/components/source-color-picker/components/container/source-color-picker.component.d.ts +19 -0
- package/lib/components/source-color-picker/components/index.d.ts +3 -0
- package/lib/components/source-color-picker/helpers/RGBtoHEX.d.ts +1 -0
- package/lib/components/source-color-picker/helpers/RGBtoHSV.d.ts +19 -0
- package/lib/components/source-color-picker/helpers/calculatePosition.d.ts +5 -0
- package/lib/components/source-color-picker/helpers/clampf.d.ts +1 -0
- package/lib/components/source-color-picker/helpers/drawGradient.d.ts +2 -0
- package/lib/components/source-color-picker/helpers/drawPaletteGradient.d.ts +1 -0
- package/lib/components/source-color-picker/helpers/randomUUID.d.ts +1 -0
- package/lib/components/source-color-picker/index.d.ts +2 -0
- package/lib/components/source-color-picker/interfaces/source-color-picker.interface.d.ts +5 -0
- package/lib/components/source-popover/services/sourcePopover.service.d.ts +0 -1
- package/lib/components/source-slider-group/components/source-slider-group.component.d.ts +24 -0
- package/lib/components/source-slider-group/index.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/styles/material/autocomplete.scss +9 -0
- package/styles/source.ui.scss +1 -0
|
@@ -2,7 +2,7 @@ import { DialogRef, DIALOG_DATA } from '@angular/cdk/dialog';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, signal, ChangeDetectionStrategy, ViewEncapsulation, Component, InjectionToken, DestroyRef, Injector, Injectable, TemplateRef, viewChild, input, output, ViewContainerRef, effect, linkedSignal, computed, untracked, CUSTOM_ELEMENTS_SCHEMA, ElementRef, HostListener, Directive } from '@angular/core';
|
|
4
4
|
import { NgClass, NgTemplateOutlet } from '@angular/common';
|
|
5
|
-
import { defaultSourceButtonConfig, SourceIconButtonComponent, SourceButtonComponent } from '@3dsource/source-ui-native';
|
|
5
|
+
import { defaultSourceButtonConfig, SourceIconButtonComponent, SourceButtonComponent, SourceSliderComponent } from '@3dsource/source-ui-native';
|
|
6
6
|
import * as i1 from 'ngx-scrollbar';
|
|
7
7
|
import { NgScrollbarModule } from 'ngx-scrollbar';
|
|
8
8
|
import { Overlay, OverlayConfig, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
@@ -11,6 +11,7 @@ import { BreakpointObserver } from '@angular/cdk/layout';
|
|
|
11
11
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
12
12
|
import { first } from 'rxjs';
|
|
13
13
|
import { register } from 'swiper/element/bundle';
|
|
14
|
+
import { FormsModule } from '@angular/forms';
|
|
14
15
|
|
|
15
16
|
class SourceModalComponent {
|
|
16
17
|
constructor() {
|
|
@@ -150,9 +151,6 @@ class SourcePopoverService {
|
|
|
150
151
|
closePopover(overlayRef) {
|
|
151
152
|
overlayRef.dispose();
|
|
152
153
|
}
|
|
153
|
-
emitBackAction(menuRef) {
|
|
154
|
-
this.backButtonClicked.set(menuRef);
|
|
155
|
-
}
|
|
156
154
|
getUpdatedConfig(override) {
|
|
157
155
|
return {
|
|
158
156
|
srcPopoverTpl: override?.srcPopoverTpl,
|
|
@@ -197,7 +195,7 @@ class SourcePopoverComponent {
|
|
|
197
195
|
this.#sourcePopoverService.closePopover(this.data.overlayRef);
|
|
198
196
|
}
|
|
199
197
|
emitBackAction() {
|
|
200
|
-
this.#sourcePopoverService.
|
|
198
|
+
this.#sourcePopoverService.closePopover(this.data.overlayRef);
|
|
201
199
|
}
|
|
202
200
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SourcePopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
203
201
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: SourcePopoverComponent, isStandalone: true, selector: "src-popover", ngImport: i0, template: "<div\n class=\"src-popover\"\n [style.maxHeight]=\"data.popoverMaxHeight\"\n [attr.data-testid]=\"testID()\"\n>\n @if (\n data['hasBackButton'] ||\n data['hasCloseButton'] ||\n (data['headerTitle'] && data['headerTitle'] !== '')\n ) {\n <div class=\"src-popover__header\">\n @if (data['hasBackButton']) {\n <src-icon-button\n class=\"src-popover__back\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-back'\"\n (onClick)=\"emitBackAction()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n >\n <path\n d=\"m438-480 164 164q11 11 11 25.5T602-265q-11 11-25.5 11t-25.84-11.34L361-455q-5-5.4-7.5-11.7-2.5-6.3-2.5-13.5t2.5-13.5Q356-500 361-505l189.66-189.66Q562-706 576.5-706t25.5 11q11 11 11 25.5T602-644L438-480Z\"\n />\n </svg>\n </src-icon-button>\n }\n\n <div\n class=\"src-popover__title\"\n [attr.data-testid]=\"testID() + '-header-title'\"\n >\n {{ data.headerTitle }}\n </div>\n\n @if (data['hasCloseButton']) {\n <src-icon-button\n class=\"src-popover__close\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-close'\"\n (click)=\"close()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M10.0001 11.229L6.68618 14.5429C6.51951 14.7096 6.31818 14.7896 6.08218 14.7829C5.84618 14.7756 5.64485 14.6886 5.47818 14.5219C5.31151 14.3553 5.22818 14.1506 5.22818 13.9079C5.22818 13.6646 5.31151 13.4596 5.47818 13.2929L8.77107 10L5.45718 6.68615C5.29051 6.51949 5.21051 6.31482 5.21718 6.07215C5.22451 5.82882 5.31151 5.62382 5.47818 5.45715C5.64485 5.29049 5.84951 5.20715 6.09218 5.20715C6.33551 5.20715 6.54051 5.29049 6.70718 5.45715L10.0001 8.77105L13.314 5.45715C13.4806 5.29049 13.6853 5.20715 13.928 5.20715C14.1713 5.20715 14.3763 5.29049 14.543 5.45715C14.7096 5.62382 14.793 5.82882 14.793 6.07215C14.793 6.31482 14.7096 6.51949 14.543 6.68615L11.2291 10L14.543 13.3139C14.7096 13.4806 14.793 13.6819 14.793 13.9179C14.793 14.1539 14.7096 14.3553 14.543 14.5219C14.3763 14.6886 14.1713 14.7719 13.928 14.7719C13.6853 14.7719 13.4806 14.6886 13.314 14.5219L10.0001 11.229Z\"\n fill=\"currentColor\"\n />\n </svg>\n </src-icon-button>\n }\n </div>\n }\n\n <div class=\"src-popover__body\">\n @if (template()) {\n <ng-template [ngTemplateOutlet]=\"template()\"></ng-template>\n }\n </div>\n</div>\n", styles: ["src-popover{width:100%;display:block;max-height:90vh}.src-popover-backdrop{background-color:#0000}.src-popover-backdrop--mobile{background-color:#00000052}.src-popover-panel{--srcPopoverBg: var(--src-color-bg-default, #fff);--srcPopoverWidth: 320px}.src-popover-panel--mobile{--srcPopoverWidth: 100%}.src-popover{border-radius:var(--src-br-medium);box-shadow:var(--src-shadow-large);background-color:var(--srcPopoverBg)}.src-popover__header{display:flex;padding:12px;width:100%;border-bottom:1px solid var(--src-color-border-default, #e5e7eb)}.src-popover__body{padding:8px 0;width:var(--srcPopoverWidth)}.src-popover__body .src-list src-list-item:last-child{margin-bottom:0}.src-popover__title{font-size:var(--src-fs-medium);font-weight:var(--src-fw-semibold, 600);line-height:var(--src-lh-medium);color:var(--src-color-text-default);padding:0 4px;word-break:break-word}.src-popover__back{margin-right:8px}.src-popover__close{margin-left:auto}.src-popover__back svg,.src-popover__close svg{width:20px;height:20px;fill:var(--src-color-icon-default)}\n"], dependencies: [{ kind: "component", type: SourceIconButtonComponent, selector: "src-icon-button", inputs: ["name", "type", "size", "shape", "counter", "isActive", "isDisabled", "data-testid"], outputs: ["onClick"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
@@ -573,9 +571,443 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
573
571
|
args: ['blur']
|
|
574
572
|
}] } });
|
|
575
573
|
|
|
574
|
+
function drawPaletteGradient(ctx, rectWidth, rectHeight) {
|
|
575
|
+
const whiteGrad = ctx.createLinearGradient(0, 0, rectWidth, 0);
|
|
576
|
+
whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');
|
|
577
|
+
whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');
|
|
578
|
+
ctx.fillStyle = whiteGrad;
|
|
579
|
+
ctx.fillRect(0, 0, rectWidth, rectHeight);
|
|
580
|
+
const blackGrad = ctx.createLinearGradient(0, 0, 0, rectHeight);
|
|
581
|
+
blackGrad.addColorStop(0, 'rgba(0,0,0,0)');
|
|
582
|
+
blackGrad.addColorStop(1, 'rgba(0,0,0,1)');
|
|
583
|
+
ctx.fillStyle = blackGrad;
|
|
584
|
+
ctx.fillRect(0, 0, rectWidth, rectHeight);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* RGB from the respective figures, HSV sequences in terms of returns.
|
|
589
|
+
* RGB values are as follows.
|
|
590
|
+
* R - a number from 0 to 255
|
|
591
|
+
* G - a number from 0 to 255
|
|
592
|
+
* B - a number from 0 to 255
|
|
593
|
+
*
|
|
594
|
+
* HSV values are as follows.
|
|
595
|
+
* H - a number between 360-0
|
|
596
|
+
* S - number between 0 and 1.0
|
|
597
|
+
* V - number between 0 and 1.0
|
|
598
|
+
*
|
|
599
|
+
* Cannot compute, including alpha.
|
|
600
|
+
* @ Param r the red (R) indicating the number (0x00 to 0xFF to)
|
|
601
|
+
* @ Param g green (G) indicates the number (0x00 to 0xFF to)
|
|
602
|
+
* @ Param b blue (B) shows the number (0x00 to 0xFF to)
|
|
603
|
+
* @ Return HSV values into an any[] of [H, S, V]
|
|
604
|
+
**/
|
|
605
|
+
function RGBtoHSV(r, g, b) {
|
|
606
|
+
r /= 255;
|
|
607
|
+
g /= 255;
|
|
608
|
+
b /= 255;
|
|
609
|
+
let h = 0, s = 0, v = 0;
|
|
610
|
+
let x, y;
|
|
611
|
+
if (r >= g)
|
|
612
|
+
x = r;
|
|
613
|
+
else
|
|
614
|
+
x = g;
|
|
615
|
+
if (b > x)
|
|
616
|
+
x = b;
|
|
617
|
+
if (r <= g)
|
|
618
|
+
y = r;
|
|
619
|
+
else
|
|
620
|
+
y = g;
|
|
621
|
+
if (b < y)
|
|
622
|
+
y = b;
|
|
623
|
+
v = x;
|
|
624
|
+
const c = x - y;
|
|
625
|
+
if (x == 0)
|
|
626
|
+
s = 0;
|
|
627
|
+
else
|
|
628
|
+
s = c / x;
|
|
629
|
+
if (s != 0) {
|
|
630
|
+
if (r == x) {
|
|
631
|
+
h = (g - b) / c;
|
|
632
|
+
}
|
|
633
|
+
else {
|
|
634
|
+
if (g == x) {
|
|
635
|
+
h = 2 + (b - r) / c;
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
if (b == x) {
|
|
639
|
+
h = 4 + (r - g) / c;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
h = h * 60;
|
|
644
|
+
if (h < 0)
|
|
645
|
+
h = h + 360;
|
|
646
|
+
}
|
|
647
|
+
return [h, s, v];
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
function calculatePosition(width, height, color, orientation) {
|
|
651
|
+
const [r, g, b] = color
|
|
652
|
+
.slice(1)
|
|
653
|
+
.match(/.{1,2}/g)
|
|
654
|
+
.map((x) => parseInt(x, 16));
|
|
655
|
+
const [h, s, l] = RGBtoHSV(r, g, b);
|
|
656
|
+
if (orientation === undefined) {
|
|
657
|
+
return { x: width * s, y: height * (1 - l) };
|
|
658
|
+
}
|
|
659
|
+
return orientation === 'horizontal'
|
|
660
|
+
? { x: (width * h) / 360, y: height / 2 }
|
|
661
|
+
: { x: width / 2, y: (height * h) / 360 };
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
function clampf(min, max, value) {
|
|
665
|
+
return Math.min(max, Math.max(min, value));
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
function RGBtoHEX(r, g, b) {
|
|
669
|
+
let _r = r.toString(16);
|
|
670
|
+
let _g = g.toString(16);
|
|
671
|
+
let _b = b.toString(16);
|
|
672
|
+
if (_r.length === 1) {
|
|
673
|
+
_r = '0' + _r;
|
|
674
|
+
}
|
|
675
|
+
if (_g.length === 1) {
|
|
676
|
+
_g = '0' + _g;
|
|
677
|
+
}
|
|
678
|
+
if (_b.length === 1) {
|
|
679
|
+
_b = '0' + _b;
|
|
680
|
+
}
|
|
681
|
+
return (_r + _g + _b).toUpperCase();
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
class ColorPaletteComponent {
|
|
685
|
+
constructor() {
|
|
686
|
+
this.paletteContainer = viewChild('paletteContainer');
|
|
687
|
+
this.canvas = viewChild('paletteCanvas');
|
|
688
|
+
this.indicator = viewChild('indicator');
|
|
689
|
+
this.selectedHex = input.required();
|
|
690
|
+
this.isNeedUpdatePalette = input.required();
|
|
691
|
+
this.paletteColorUpdate = output();
|
|
692
|
+
this.selectedPosition = signal({ x: 0, y: 0 });
|
|
693
|
+
this.ctx = signal(null);
|
|
694
|
+
this.width = signal(0);
|
|
695
|
+
this.height = signal(0);
|
|
696
|
+
this._ = effect(() => {
|
|
697
|
+
const container = this.paletteContainer();
|
|
698
|
+
const canvas = this.canvas();
|
|
699
|
+
untracked(() => {
|
|
700
|
+
if (container?.nativeElement && canvas?.nativeElement) {
|
|
701
|
+
this.width.set(container.nativeElement.offsetWidth);
|
|
702
|
+
this.height.set(container.nativeElement.offsetHeight);
|
|
703
|
+
requestAnimationFrame(() => this.redraw());
|
|
704
|
+
}
|
|
705
|
+
});
|
|
706
|
+
});
|
|
707
|
+
this._isNeedUpdatePalette = effect(() => {
|
|
708
|
+
const isNeedUpdatePalette = this.isNeedUpdatePalette();
|
|
709
|
+
untracked(() => {
|
|
710
|
+
if (isNeedUpdatePalette) {
|
|
711
|
+
this.redraw();
|
|
712
|
+
}
|
|
713
|
+
});
|
|
714
|
+
});
|
|
715
|
+
this.#mousedown = false;
|
|
716
|
+
}
|
|
717
|
+
#mousedown;
|
|
718
|
+
redraw() {
|
|
719
|
+
this.calcPosition();
|
|
720
|
+
this.drawPalette();
|
|
721
|
+
this.drawIndicator();
|
|
722
|
+
}
|
|
723
|
+
onMouseUp() {
|
|
724
|
+
this.#mousedown = false;
|
|
725
|
+
}
|
|
726
|
+
onMouseDown(event) {
|
|
727
|
+
this.#mousedown = true;
|
|
728
|
+
this.updatePosition(event);
|
|
729
|
+
}
|
|
730
|
+
onMouseMove(event) {
|
|
731
|
+
if (this.#mousedown) {
|
|
732
|
+
this.updatePosition(event);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
calcPosition() {
|
|
736
|
+
if (this.width() === undefined || this.height() === undefined) {
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
this.selectedPosition.set(calculatePosition(this.width(), this.height(), this.selectedHex()));
|
|
740
|
+
}
|
|
741
|
+
updatePosition(event) {
|
|
742
|
+
if (this.width() === undefined || this.height() === undefined) {
|
|
743
|
+
return;
|
|
744
|
+
}
|
|
745
|
+
this.selectedPosition.set({
|
|
746
|
+
x: clampf(0, this.width() - 1, event.offsetX),
|
|
747
|
+
y: clampf(0, this.height() - 1, event.offsetY),
|
|
748
|
+
});
|
|
749
|
+
this.drawIndicator();
|
|
750
|
+
this.updateColor();
|
|
751
|
+
}
|
|
752
|
+
drawPalette() {
|
|
753
|
+
this.ctx.set(this.canvas()?.nativeElement.getContext('2d', {
|
|
754
|
+
willReadFrequently: true,
|
|
755
|
+
}));
|
|
756
|
+
const ctx = this.ctx();
|
|
757
|
+
if (!ctx) {
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
ctx.fillStyle = this.selectedHex() || 'rgba(255,255,255,1)';
|
|
761
|
+
ctx.fillRect(0, 0, this.width(), this.height());
|
|
762
|
+
drawPaletteGradient(ctx, this.width(), this.height());
|
|
763
|
+
}
|
|
764
|
+
drawIndicator() {
|
|
765
|
+
const indicator = this.indicator()?.nativeElement;
|
|
766
|
+
if (!indicator) {
|
|
767
|
+
return;
|
|
768
|
+
}
|
|
769
|
+
indicator.style.left = this.selectedPosition().x + 'px';
|
|
770
|
+
indicator.style.top = this.selectedPosition().y + 'px';
|
|
771
|
+
}
|
|
772
|
+
updateColor() {
|
|
773
|
+
const imageData = this.ctx().getImageData(this.selectedPosition().x, this.selectedPosition().y, 1, 1).data;
|
|
774
|
+
this.paletteColorUpdate.emit(`#${RGBtoHEX(imageData[0], imageData[1], imageData[2])}`);
|
|
775
|
+
}
|
|
776
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ColorPaletteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
777
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.8", type: ColorPaletteComponent, isStandalone: true, selector: "app-color-palette", inputs: { selectedHex: { classPropertyName: "selectedHex", publicName: "selectedHex", isSignal: true, isRequired: true, transformFunction: null }, isNeedUpdatePalette: { classPropertyName: "isNeedUpdatePalette", publicName: "isNeedUpdatePalette", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { paletteColorUpdate: "paletteColorUpdate" }, host: { listeners: { "window:mouseup": "onMouseUp($event)" } }, viewQueries: [{ propertyName: "paletteContainer", first: true, predicate: ["paletteContainer"], descendants: true, isSignal: true }, { propertyName: "canvas", first: true, predicate: ["paletteCanvas"], descendants: true, isSignal: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #paletteContainer class=\"src-color-palette\">\n <canvas\n #paletteCanvas\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n [height]=\"height()\"\n [width]=\"width()\"\n class=\"src-color-palette__canvas\"\n >\n </canvas>\n</div>\n<span #indicator class=\"src-color-picker-indicator\"></span>\n", styles: [":host{position:relative}.src-color-palette{position:relative;width:100%;height:100%;min-height:0;border-radius:var(--srcColorPickerBorderRadius);overflow:hidden;display:block;box-sizing:border-box}.src-color-palette__canvas{display:block;line-height:1;width:100%;height:100%;min-height:0;box-sizing:border-box;cursor:pointer}.src-color-picker-indicator{position:absolute;width:var(--srcColorPickerIndicatorWidth);height:var(--srcColorPickerIndicatorHeight);background-color:transparent;border-radius:var(--srcColorPickerIndicatorBorderRadius);box-shadow:var(--srcColorPickerIndicatorShadow);pointer-events:none;margin:calc(var(--srcColorPickerIndicatorHeight) / -2) 0 0 calc(var(--srcColorPickerIndicatorWidth) / -2);border:var(--srcColorPickerIndicatorBorderWidth) solid var(--srcColorPickerIndicatorBorderColor)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
778
|
+
}
|
|
779
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ColorPaletteComponent, decorators: [{
|
|
780
|
+
type: Component,
|
|
781
|
+
args: [{ standalone: true, selector: 'app-color-palette', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #paletteContainer class=\"src-color-palette\">\n <canvas\n #paletteCanvas\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n [height]=\"height()\"\n [width]=\"width()\"\n class=\"src-color-palette__canvas\"\n >\n </canvas>\n</div>\n<span #indicator class=\"src-color-picker-indicator\"></span>\n", styles: [":host{position:relative}.src-color-palette{position:relative;width:100%;height:100%;min-height:0;border-radius:var(--srcColorPickerBorderRadius);overflow:hidden;display:block;box-sizing:border-box}.src-color-palette__canvas{display:block;line-height:1;width:100%;height:100%;min-height:0;box-sizing:border-box;cursor:pointer}.src-color-picker-indicator{position:absolute;width:var(--srcColorPickerIndicatorWidth);height:var(--srcColorPickerIndicatorHeight);background-color:transparent;border-radius:var(--srcColorPickerIndicatorBorderRadius);box-shadow:var(--srcColorPickerIndicatorShadow);pointer-events:none;margin:calc(var(--srcColorPickerIndicatorHeight) / -2) 0 0 calc(var(--srcColorPickerIndicatorWidth) / -2);border:var(--srcColorPickerIndicatorBorderWidth) solid var(--srcColorPickerIndicatorBorderColor)}\n"] }]
|
|
782
|
+
}], propDecorators: { onMouseUp: [{
|
|
783
|
+
type: HostListener,
|
|
784
|
+
args: ['window:mouseup', ['$event']]
|
|
785
|
+
}] } });
|
|
786
|
+
|
|
787
|
+
function drawGradient(ctx, rectWidth, rectHeight, orientation) {
|
|
788
|
+
const gradient = orientation === 'horizontal'
|
|
789
|
+
? ctx.createLinearGradient(0, 0, rectWidth, 0)
|
|
790
|
+
: ctx.createLinearGradient(0, 0, 0, rectHeight);
|
|
791
|
+
gradient.addColorStop(0, 'red');
|
|
792
|
+
gradient.addColorStop(1 / 6, 'yellow');
|
|
793
|
+
gradient.addColorStop(2 / 6, 'lime');
|
|
794
|
+
gradient.addColorStop(3 / 6, 'cyan');
|
|
795
|
+
gradient.addColorStop(4 / 6, 'blue');
|
|
796
|
+
gradient.addColorStop(5 / 6, 'magenta');
|
|
797
|
+
gradient.addColorStop(1, 'red');
|
|
798
|
+
ctx.fillStyle = gradient;
|
|
799
|
+
ctx.fillRect(0, 0, rectWidth, rectHeight);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
class ColorSliderComponent {
|
|
803
|
+
constructor() {
|
|
804
|
+
this.sliderContainer = viewChild('sliderContainer');
|
|
805
|
+
this.canvas = viewChild('canvas');
|
|
806
|
+
this.indicator = viewChild('indicator');
|
|
807
|
+
this.selectedHex = input.required();
|
|
808
|
+
this.orientation = input.required();
|
|
809
|
+
this.sliderThickness = input.required();
|
|
810
|
+
this.isNeedUpdateSlider = input.required();
|
|
811
|
+
this.sliderColorUpdate = output();
|
|
812
|
+
this.selectedPosition = signal({ x: 0, y: 0 });
|
|
813
|
+
this.width = signal(0);
|
|
814
|
+
this.height = signal(0);
|
|
815
|
+
this.ctx = signal(null);
|
|
816
|
+
this._ = effect(() => {
|
|
817
|
+
const container = this.sliderContainer();
|
|
818
|
+
const canvas = this.canvas();
|
|
819
|
+
untracked(() => {
|
|
820
|
+
if (container?.nativeElement && canvas?.nativeElement) {
|
|
821
|
+
this.width.set(this.orientation() === 'horizontal'
|
|
822
|
+
? container.nativeElement.clientWidth
|
|
823
|
+
: this.sliderThickness());
|
|
824
|
+
this.height.set(this.orientation() === 'horizontal'
|
|
825
|
+
? this.sliderThickness()
|
|
826
|
+
: container.nativeElement.clientHeight);
|
|
827
|
+
requestAnimationFrame(() => this.redraw());
|
|
828
|
+
}
|
|
829
|
+
});
|
|
830
|
+
});
|
|
831
|
+
this._isNeedUpdateSlider = effect(() => {
|
|
832
|
+
const isNeedUpdateSlider = this.isNeedUpdateSlider();
|
|
833
|
+
untracked(() => {
|
|
834
|
+
if (isNeedUpdateSlider) {
|
|
835
|
+
this.redraw();
|
|
836
|
+
}
|
|
837
|
+
});
|
|
838
|
+
});
|
|
839
|
+
this.#mousedown = false;
|
|
840
|
+
}
|
|
841
|
+
#mousedown;
|
|
842
|
+
redraw() {
|
|
843
|
+
this.calcPosition();
|
|
844
|
+
this.drawSlider();
|
|
845
|
+
this.drawIndicator();
|
|
846
|
+
}
|
|
847
|
+
onMouseUp() {
|
|
848
|
+
this.#mousedown = false;
|
|
849
|
+
}
|
|
850
|
+
onMouseDown(event) {
|
|
851
|
+
this.#mousedown = true;
|
|
852
|
+
this.updatePosition(event);
|
|
853
|
+
}
|
|
854
|
+
onMouseMove(event) {
|
|
855
|
+
if (this.#mousedown) {
|
|
856
|
+
this.updatePosition(event);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
calcPosition() {
|
|
860
|
+
if (this.width() === undefined || this.height() === undefined) {
|
|
861
|
+
return;
|
|
862
|
+
}
|
|
863
|
+
this.selectedPosition.set(calculatePosition(this.width(), this.height(), this.selectedHex(), this.orientation()));
|
|
864
|
+
}
|
|
865
|
+
updatePosition(event) {
|
|
866
|
+
if (this.width() === undefined || this.height() === undefined) {
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
this.selectedPosition.set(this.orientation() === 'horizontal'
|
|
870
|
+
? {
|
|
871
|
+
x: clampf(0, this.width() - 1, event.offsetX),
|
|
872
|
+
y: this.height() / 2,
|
|
873
|
+
}
|
|
874
|
+
: {
|
|
875
|
+
x: this.width() / 2,
|
|
876
|
+
y: clampf(0, this.height() - 1, event.offsetY),
|
|
877
|
+
});
|
|
878
|
+
this.drawIndicator();
|
|
879
|
+
this.updateColor();
|
|
880
|
+
}
|
|
881
|
+
drawSlider() {
|
|
882
|
+
this.ctx.set(this.canvas()?.nativeElement.getContext('2d', {
|
|
883
|
+
willReadFrequently: true,
|
|
884
|
+
}));
|
|
885
|
+
const ctx = this.ctx();
|
|
886
|
+
if (!ctx) {
|
|
887
|
+
return;
|
|
888
|
+
}
|
|
889
|
+
ctx.fillRect(0, 0, this.width(), this.height());
|
|
890
|
+
drawGradient(ctx, this.width(), this.height(), this.orientation());
|
|
891
|
+
}
|
|
892
|
+
drawIndicator() {
|
|
893
|
+
const indicator = this.indicator()?.nativeElement;
|
|
894
|
+
if (!indicator) {
|
|
895
|
+
return;
|
|
896
|
+
}
|
|
897
|
+
indicator.style.left = this.selectedPosition().x + 'px';
|
|
898
|
+
indicator.style.top = this.selectedPosition().y + 'px';
|
|
899
|
+
}
|
|
900
|
+
updateColor() {
|
|
901
|
+
const imageData = this.ctx().getImageData(this.selectedPosition().x, this.selectedPosition().y, 1, 1).data;
|
|
902
|
+
this.sliderColorUpdate.emit(`#${RGBtoHEX(imageData[0], imageData[1], imageData[2])}`);
|
|
903
|
+
}
|
|
904
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ColorSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
905
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.8", type: ColorSliderComponent, isStandalone: true, selector: "app-color-slider", inputs: { selectedHex: { classPropertyName: "selectedHex", publicName: "selectedHex", isSignal: true, isRequired: true, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: true, transformFunction: null }, sliderThickness: { classPropertyName: "sliderThickness", publicName: "sliderThickness", isSignal: true, isRequired: true, transformFunction: null }, isNeedUpdateSlider: { classPropertyName: "isNeedUpdateSlider", publicName: "isNeedUpdateSlider", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { sliderColorUpdate: "sliderColorUpdate" }, host: { listeners: { "window:mouseup": "onMouseUp($event)" } }, viewQueries: [{ propertyName: "sliderContainer", first: true, predicate: ["sliderContainer"], descendants: true, isSignal: true }, { propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true, isSignal: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #sliderContainer class=\"src-color-slider\">\n <canvas\n #canvas\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n [height]=\"height()\"\n [width]=\"width()\"\n class=\"src-color-slider__canvas\"\n >\n </canvas>\n <span #indicator class=\"src-color-picker-indicator\"></span>\n</div>\n", styles: [".src-color-slider{width:100%;height:100%;position:relative}.src-color-slider__canvas{display:block;border-radius:var(--srcColorPickerBorderRadius);overflow:hidden;cursor:pointer}.src-color-picker-indicator{position:absolute;width:var(--srcColorPickerIndicatorWidth);height:var(--srcColorPickerIndicatorHeight);background-color:transparent;border-radius:var(--srcColorPickerIndicatorBorderRadius);box-shadow:var(--srcColorPickerIndicatorShadow);pointer-events:none;margin:calc(var(--srcColorPickerIndicatorHeight) / -2) 0 0 calc(var(--srcColorPickerIndicatorWidth) / -2);border:var(--srcColorPickerIndicatorBorderWidth) solid var(--srcColorPickerIndicatorBorderColor)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
906
|
+
}
|
|
907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ColorSliderComponent, decorators: [{
|
|
908
|
+
type: Component,
|
|
909
|
+
args: [{ standalone: true, selector: 'app-color-slider', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #sliderContainer class=\"src-color-slider\">\n <canvas\n #canvas\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n [height]=\"height()\"\n [width]=\"width()\"\n class=\"src-color-slider__canvas\"\n >\n </canvas>\n <span #indicator class=\"src-color-picker-indicator\"></span>\n</div>\n", styles: [".src-color-slider{width:100%;height:100%;position:relative}.src-color-slider__canvas{display:block;border-radius:var(--srcColorPickerBorderRadius);overflow:hidden;cursor:pointer}.src-color-picker-indicator{position:absolute;width:var(--srcColorPickerIndicatorWidth);height:var(--srcColorPickerIndicatorHeight);background-color:transparent;border-radius:var(--srcColorPickerIndicatorBorderRadius);box-shadow:var(--srcColorPickerIndicatorShadow);pointer-events:none;margin:calc(var(--srcColorPickerIndicatorHeight) / -2) 0 0 calc(var(--srcColorPickerIndicatorWidth) / -2);border:var(--srcColorPickerIndicatorBorderWidth) solid var(--srcColorPickerIndicatorBorderColor)}\n"] }]
|
|
910
|
+
}], propDecorators: { onMouseUp: [{
|
|
911
|
+
type: HostListener,
|
|
912
|
+
args: ['window:mouseup', ['$event']]
|
|
913
|
+
}] } });
|
|
914
|
+
|
|
915
|
+
const randomUUID = () => crypto.randomUUID();
|
|
916
|
+
|
|
917
|
+
const matchRegexp = /^#[0-9a-f]{6}$/i;
|
|
918
|
+
class SourceColorPickerComponent {
|
|
919
|
+
constructor() {
|
|
920
|
+
this.selectedColor = input.required();
|
|
921
|
+
this.isCompact = input(false);
|
|
922
|
+
this.orientation = input('horizontal');
|
|
923
|
+
this.hasInput = input(true);
|
|
924
|
+
this.sliderThickness = input(28);
|
|
925
|
+
this.colorUpdate = output();
|
|
926
|
+
this.selectedHex = linkedSignal(() => this.selectedColor());
|
|
927
|
+
this.isNeedUpdatePalette = signal(null);
|
|
928
|
+
this.isNeedUpdateSlider = signal(null);
|
|
929
|
+
}
|
|
930
|
+
paletteColorUpdate(color) {
|
|
931
|
+
this.update(color);
|
|
932
|
+
}
|
|
933
|
+
sliderColorUpdate(color) {
|
|
934
|
+
this.update(color);
|
|
935
|
+
this.isNeedUpdatePalette.set(randomUUID());
|
|
936
|
+
}
|
|
937
|
+
inputUpdate(event) {
|
|
938
|
+
const input = event.target;
|
|
939
|
+
this.update(input.value);
|
|
940
|
+
this.isNeedUpdatePalette.set(randomUUID());
|
|
941
|
+
this.isNeedUpdateSlider.set(randomUUID());
|
|
942
|
+
}
|
|
943
|
+
update(color) {
|
|
944
|
+
if (!color.match(matchRegexp)) {
|
|
945
|
+
return;
|
|
946
|
+
}
|
|
947
|
+
this.selectedHex.set(color);
|
|
948
|
+
this.colorUpdate.emit(color);
|
|
949
|
+
}
|
|
950
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SourceColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
951
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: SourceColorPickerComponent, isStandalone: true, selector: "src-color-picker", inputs: { selectedColor: { classPropertyName: "selectedColor", publicName: "selectedColor", isSignal: true, isRequired: true, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, hasInput: { classPropertyName: "hasInput", publicName: "hasInput", isSignal: true, isRequired: false, transformFunction: null }, sliderThickness: { classPropertyName: "sliderThickness", publicName: "sliderThickness", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { colorUpdate: "colorUpdate" }, ngImport: i0, template: "<div\n [class.src-color-picker--compact]=\"isCompact()\"\n [class.src-color-picker--horizontal]=\"orientation() === 'horizontal'\"\n [class.src-color-picker--vertical]=\"orientation() === 'vertical'\"\n [style.--srcColorPickerSliderThickness]=\"sliderThickness() + 'px'\"\n class=\"src-color-picker\"\n>\n <div class=\"src-color-picker__wrapper\">\n <app-color-palette\n (paletteColorUpdate)=\"paletteColorUpdate($event)\"\n [isNeedUpdatePalette]=\"isNeedUpdatePalette()\"\n [selectedHex]=\"selectedHex()\"\n ></app-color-palette>\n <app-color-slider\n (sliderColorUpdate)=\"sliderColorUpdate($event)\"\n [isNeedUpdateSlider]=\"isNeedUpdateSlider()\"\n [orientation]=\"orientation()\"\n [selectedHex]=\"selectedHex()\"\n [sliderThickness]=\"sliderThickness()\"\n ></app-color-slider>\n </div>\n @if (hasInput()) {\n <div class=\"src-color-picker__input-row\">\n <input\n class=\"src-color-picker__input\"\n type=\"text\"\n [value]=\"selectedHex()\"\n (input)=\"inputUpdate($event)\"\n />\n <div\n class=\"src-color-picker__swatch\"\n [style.background-color]=\"selectedHex() || 'white'\"\n ></div>\n </div>\n }\n</div>\n", styles: [".src-color-picker{--srcColorPickerWidth: 360px;--srcColorPickerHeight: 340px;--srcColorPickerBorderRadius: 4px;--srcColorPickerBorderColor: var(--color-border-strong);--srcColorPickerCanvasesGap: 8px;--srcColorPickerInputsGap: 12px;--srcColorPickerIndicatorWidth: 32px;--srcColorPickerIndicatorHeight: 32px;--srcColorPickerIndicatorBorderRadius: 50%;--srcColorPickerIndicatorBorderWidth: 5px;--srcColorPickerIndicatorBorderColor: #fff;--srcColorPickerIndicatorShadow: 0px 0px 2px 0px #0000007a, 0px 0px 3px 0px #00000033;width:var(--srcColorPickerWidth);height:var(--srcColorPickerHeight)}.src-color-picker--compact{--srcColorPickerWidth: 200px;--srcColorPickerHeight: 220px}.src-color-picker--horizontal{display:grid;grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);gap:var(--srcColorPickerInputsGap)}.src-color-picker--horizontal .src-color-picker__wrapper{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) var(--srcColorPickerSliderThickness)}.src-color-picker--vertical{display:grid;grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);gap:var(--srcColorPickerInputsGap)}.src-color-picker--vertical .src-color-picker__wrapper{grid-template-columns:minmax(0,1fr) var(--srcColorPickerSliderThickness);grid-template-rows:minmax(0,1fr)}.src-color-picker__wrapper{display:grid;width:100%;height:100%;gap:var(--srcColorPickerCanvasesGap)}.src-color-picker__input-row{width:100%;display:flex;align-items:center;gap:8px}.src-color-picker__input{flex-grow:1;font-weight:400;font-size:14px;line-height:20px;height:36px;min-width:1px;padding:8px 12px;border:1px solid var(--srcColorPickerBorderColor);border-radius:var(--srcColorPickerBorderRadius)}.src-color-picker__swatch{width:64px;height:36px;flex-shrink:0;border:1px solid var(--srcColorPickerBorderColor);border-radius:var(--srcColorPickerBorderRadius)}\n"], dependencies: [{ kind: "component", type: ColorSliderComponent, selector: "app-color-slider", inputs: ["selectedHex", "orientation", "sliderThickness", "isNeedUpdateSlider"], outputs: ["sliderColorUpdate"] }, { kind: "component", type: ColorPaletteComponent, selector: "app-color-palette", inputs: ["selectedHex", "isNeedUpdatePalette"], outputs: ["paletteColorUpdate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
952
|
+
}
|
|
953
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SourceColorPickerComponent, decorators: [{
|
|
954
|
+
type: Component,
|
|
955
|
+
args: [{ selector: 'src-color-picker', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ColorSliderComponent, ColorPaletteComponent], template: "<div\n [class.src-color-picker--compact]=\"isCompact()\"\n [class.src-color-picker--horizontal]=\"orientation() === 'horizontal'\"\n [class.src-color-picker--vertical]=\"orientation() === 'vertical'\"\n [style.--srcColorPickerSliderThickness]=\"sliderThickness() + 'px'\"\n class=\"src-color-picker\"\n>\n <div class=\"src-color-picker__wrapper\">\n <app-color-palette\n (paletteColorUpdate)=\"paletteColorUpdate($event)\"\n [isNeedUpdatePalette]=\"isNeedUpdatePalette()\"\n [selectedHex]=\"selectedHex()\"\n ></app-color-palette>\n <app-color-slider\n (sliderColorUpdate)=\"sliderColorUpdate($event)\"\n [isNeedUpdateSlider]=\"isNeedUpdateSlider()\"\n [orientation]=\"orientation()\"\n [selectedHex]=\"selectedHex()\"\n [sliderThickness]=\"sliderThickness()\"\n ></app-color-slider>\n </div>\n @if (hasInput()) {\n <div class=\"src-color-picker__input-row\">\n <input\n class=\"src-color-picker__input\"\n type=\"text\"\n [value]=\"selectedHex()\"\n (input)=\"inputUpdate($event)\"\n />\n <div\n class=\"src-color-picker__swatch\"\n [style.background-color]=\"selectedHex() || 'white'\"\n ></div>\n </div>\n }\n</div>\n", styles: [".src-color-picker{--srcColorPickerWidth: 360px;--srcColorPickerHeight: 340px;--srcColorPickerBorderRadius: 4px;--srcColorPickerBorderColor: var(--color-border-strong);--srcColorPickerCanvasesGap: 8px;--srcColorPickerInputsGap: 12px;--srcColorPickerIndicatorWidth: 32px;--srcColorPickerIndicatorHeight: 32px;--srcColorPickerIndicatorBorderRadius: 50%;--srcColorPickerIndicatorBorderWidth: 5px;--srcColorPickerIndicatorBorderColor: #fff;--srcColorPickerIndicatorShadow: 0px 0px 2px 0px #0000007a, 0px 0px 3px 0px #00000033;width:var(--srcColorPickerWidth);height:var(--srcColorPickerHeight)}.src-color-picker--compact{--srcColorPickerWidth: 200px;--srcColorPickerHeight: 220px}.src-color-picker--horizontal{display:grid;grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);gap:var(--srcColorPickerInputsGap)}.src-color-picker--horizontal .src-color-picker__wrapper{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) var(--srcColorPickerSliderThickness)}.src-color-picker--vertical{display:grid;grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);gap:var(--srcColorPickerInputsGap)}.src-color-picker--vertical .src-color-picker__wrapper{grid-template-columns:minmax(0,1fr) var(--srcColorPickerSliderThickness);grid-template-rows:minmax(0,1fr)}.src-color-picker__wrapper{display:grid;width:100%;height:100%;gap:var(--srcColorPickerCanvasesGap)}.src-color-picker__input-row{width:100%;display:flex;align-items:center;gap:8px}.src-color-picker__input{flex-grow:1;font-weight:400;font-size:14px;line-height:20px;height:36px;min-width:1px;padding:8px 12px;border:1px solid var(--srcColorPickerBorderColor);border-radius:var(--srcColorPickerBorderRadius)}.src-color-picker__swatch{width:64px;height:36px;flex-shrink:0;border:1px solid var(--srcColorPickerBorderColor);border-radius:var(--srcColorPickerBorderRadius)}\n"] }]
|
|
956
|
+
}] });
|
|
957
|
+
|
|
958
|
+
const SourceColorPickerOrientation = {
|
|
959
|
+
HORIZONTAL: 'horizontal',
|
|
960
|
+
VERTICAL: 'vertical',
|
|
961
|
+
};
|
|
962
|
+
|
|
963
|
+
class SourceSliderGroupComponent {
|
|
964
|
+
constructor() {
|
|
965
|
+
this.min = input.required();
|
|
966
|
+
this.max = input.required();
|
|
967
|
+
this.value = input.required();
|
|
968
|
+
this.label = input('');
|
|
969
|
+
this.id = input('');
|
|
970
|
+
this.step = input(1);
|
|
971
|
+
this.units = input('%');
|
|
972
|
+
this.showTicks = input(false);
|
|
973
|
+
this.showRange = input(false);
|
|
974
|
+
this.isDisabled = input(false);
|
|
975
|
+
this.testID = input('', { alias: 'data-testid' });
|
|
976
|
+
this.groupValueChange = output();
|
|
977
|
+
this.inputValue = linkedSignal(() => this.value());
|
|
978
|
+
this.sliderValue = linkedSignal(() => Math.min(Math.max(this.value(), this.min()), this.max()));
|
|
979
|
+
}
|
|
980
|
+
ngOnInit() {
|
|
981
|
+
this.groupValueChange.emit(this.sliderValue());
|
|
982
|
+
}
|
|
983
|
+
updateSliderValue(event) {
|
|
984
|
+
const value = Math.min(this.max(), Math.max(this.min(), +event));
|
|
985
|
+
this.inputValue.set(value);
|
|
986
|
+
this.sliderValue.set(value);
|
|
987
|
+
this.groupValueChange.emit(value);
|
|
988
|
+
}
|
|
989
|
+
updateSliderValueFromInput(event) {
|
|
990
|
+
const value = Math.min(this.max(), Math.max(this.min(), event.target.valueAsNumber));
|
|
991
|
+
this.inputValue.set(value);
|
|
992
|
+
this.sliderValue.set(value);
|
|
993
|
+
this.groupValueChange.emit(value);
|
|
994
|
+
}
|
|
995
|
+
onEnter(event) {
|
|
996
|
+
event.preventDefault();
|
|
997
|
+
this.updateSliderValueFromInput(event);
|
|
998
|
+
event.target.blur();
|
|
999
|
+
}
|
|
1000
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SourceSliderGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1001
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: SourceSliderGroupComponent, isStandalone: true, selector: "src-slider-group", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: true, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, units: { classPropertyName: "units", publicName: "units", isSignal: true, isRequired: false, transformFunction: null }, showTicks: { classPropertyName: "showTicks", publicName: "showTicks", isSignal: true, isRequired: false, transformFunction: null }, showRange: { classPropertyName: "showRange", publicName: "showRange", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, testID: { classPropertyName: "testID", publicName: "data-testid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { groupValueChange: "groupValueChange" }, ngImport: i0, template: "<div\n [attr.data-testid]=\"testID()\"\n [class.src-slider-group--disabled]=\"isDisabled()\"\n class=\"src-slider-group\"\n>\n <div class=\"src-slider-group__label\">\n <label [attr.data-testid]=\"testID() + '-label'\" [for]=\"id()\">\n {{ label() }}</label\n >\n </div>\n <div class=\"src-slider-group__input\">\n <input\n (change)=\"updateSliderValueFromInput($event)\"\n (keydown.enter)=\"onEnter($event)\"\n [attr.data-testid]=\"testID() + '-input'\"\n [disabled]=\"isDisabled()\"\n [max]=\"max()\"\n [min]=\"min()\"\n [value]=\"inputValue()\"\n class=\"src-slider-group__number\"\n type=\"number\"\n />\n @if (units()) {\n <div class=\"src-slider-group__units\">{{ units() }}</div>\n }\n </div>\n <src-slider\n (onChange)=\"updateSliderValue($event)\"\n [data-testid]=\"testID() + '-slider'\"\n [id]=\"id()\"\n [isDisabled]=\"isDisabled()\"\n [max]=\"max()\"\n [min]=\"min()\"\n [showTicks]=\"showTicks()\"\n [step]=\"step()\"\n [value]=\"sliderValue()\"\n ></src-slider>\n @if (showRange()) {\n <div class=\"src-slider-group__range\">\n <span class=\"src-slider-group__range-min\">{{ min() }}</span>\n <span class=\"src-slider-group__range-max\">{{ max() }}</span>\n </div>\n }\n</div>\n", styles: [":host{display:block;position:relative}.src-slider-group{--srcSliderLabelColor: var(--src-color-text-default, #1f2937);--srcSliderInputColor: var(--src-color-text-default, #1f2937);--srcSliderInputBorder: transparent;position:relative;display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto auto;gap:0 12px}.src-slider-group--disabled{--srcSliderLabelColor: var(--src-color-text-default-disabled, #abb2be);--srcSliderInputColor: var(--src-color-text-default-disabled, #abb2be);--srcSliderInputBorder: transparent}.src-slider-group--disabled .src-slider-group__input:hover{--srcSliderInputBorder: transparent}.src-slider-group__label{grid-column:1/2;grid-row:1/2;padding-bottom:6px}.src-slider-group__label label{padding:2px 0;color:var(--srcSliderLabelColor);font-size:13px;font-style:normal;font-weight:400;line-height:16px}.src-slider-group__input{grid-column:2/-1;grid-row:1/2;display:flex;align-items:center;justify-self:flex-end;position:relative;margin-bottom:6px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--srcSliderInputBorder)}.src-slider-group__input:hover{--srcSliderInputBorder: var(--src-color-border-hover, #d1d5db)}.src-slider-group__input:focus-within{outline:none;--srcSliderInputBorder: var(--src-color-border-primary, #0a8552);box-shadow:inset 0 -2px 0 0 var(--srcSliderInputBorder)}.src-slider-group__units{color:var(--srcSliderInputColor);font-size:13px;font-weight:400;line-height:16px}src-slider{grid-column:1/-1;grid-row:2/-1}.src-slider-group__number{text-align:right;border:none;padding:2px 0;background-color:transparent;min-width:0;width:auto;color:var(--srcSliderInputColor);font-size:13px;font-weight:400;line-height:16px;-moz-appearance:textfield}.src-slider-group__number::-webkit-outer-spin-button,.src-slider-group__number::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.src-slider-group__range{grid-column:1/-1;width:100%;padding-top:6px;display:flex;align-items:center;justify-content:space-between;color:var(--srcSliderInputColor);font-size:13px;font-weight:400;line-height:16px}.src-slider-group__range-max{justify-self:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: SourceSliderComponent, selector: "src-slider", inputs: ["id", "value", "min", "max", "thumbSize", "trackHeight", "step", "showTicks", "isDisabled", "orientation", "data-testid"], outputs: ["onChange", "onInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1002
|
+
}
|
|
1003
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: SourceSliderGroupComponent, decorators: [{
|
|
1004
|
+
type: Component,
|
|
1005
|
+
args: [{ selector: 'src-slider-group', imports: [FormsModule, SourceSliderComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [attr.data-testid]=\"testID()\"\n [class.src-slider-group--disabled]=\"isDisabled()\"\n class=\"src-slider-group\"\n>\n <div class=\"src-slider-group__label\">\n <label [attr.data-testid]=\"testID() + '-label'\" [for]=\"id()\">\n {{ label() }}</label\n >\n </div>\n <div class=\"src-slider-group__input\">\n <input\n (change)=\"updateSliderValueFromInput($event)\"\n (keydown.enter)=\"onEnter($event)\"\n [attr.data-testid]=\"testID() + '-input'\"\n [disabled]=\"isDisabled()\"\n [max]=\"max()\"\n [min]=\"min()\"\n [value]=\"inputValue()\"\n class=\"src-slider-group__number\"\n type=\"number\"\n />\n @if (units()) {\n <div class=\"src-slider-group__units\">{{ units() }}</div>\n }\n </div>\n <src-slider\n (onChange)=\"updateSliderValue($event)\"\n [data-testid]=\"testID() + '-slider'\"\n [id]=\"id()\"\n [isDisabled]=\"isDisabled()\"\n [max]=\"max()\"\n [min]=\"min()\"\n [showTicks]=\"showTicks()\"\n [step]=\"step()\"\n [value]=\"sliderValue()\"\n ></src-slider>\n @if (showRange()) {\n <div class=\"src-slider-group__range\">\n <span class=\"src-slider-group__range-min\">{{ min() }}</span>\n <span class=\"src-slider-group__range-max\">{{ max() }}</span>\n </div>\n }\n</div>\n", styles: [":host{display:block;position:relative}.src-slider-group{--srcSliderLabelColor: var(--src-color-text-default, #1f2937);--srcSliderInputColor: var(--src-color-text-default, #1f2937);--srcSliderInputBorder: transparent;position:relative;display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto auto;gap:0 12px}.src-slider-group--disabled{--srcSliderLabelColor: var(--src-color-text-default-disabled, #abb2be);--srcSliderInputColor: var(--src-color-text-default-disabled, #abb2be);--srcSliderInputBorder: transparent}.src-slider-group--disabled .src-slider-group__input:hover{--srcSliderInputBorder: transparent}.src-slider-group__label{grid-column:1/2;grid-row:1/2;padding-bottom:6px}.src-slider-group__label label{padding:2px 0;color:var(--srcSliderLabelColor);font-size:13px;font-style:normal;font-weight:400;line-height:16px}.src-slider-group__input{grid-column:2/-1;grid-row:1/2;display:flex;align-items:center;justify-self:flex-end;position:relative;margin-bottom:6px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--srcSliderInputBorder)}.src-slider-group__input:hover{--srcSliderInputBorder: var(--src-color-border-hover, #d1d5db)}.src-slider-group__input:focus-within{outline:none;--srcSliderInputBorder: var(--src-color-border-primary, #0a8552);box-shadow:inset 0 -2px 0 0 var(--srcSliderInputBorder)}.src-slider-group__units{color:var(--srcSliderInputColor);font-size:13px;font-weight:400;line-height:16px}src-slider{grid-column:1/-1;grid-row:2/-1}.src-slider-group__number{text-align:right;border:none;padding:2px 0;background-color:transparent;min-width:0;width:auto;color:var(--srcSliderInputColor);font-size:13px;font-weight:400;line-height:16px;-moz-appearance:textfield}.src-slider-group__number::-webkit-outer-spin-button,.src-slider-group__number::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.src-slider-group__range{grid-column:1/-1;width:100%;padding-top:6px;display:flex;align-items:center;justify-content:space-between;color:var(--srcSliderInputColor);font-size:13px;font-weight:400;line-height:16px}.src-slider-group__range-max{justify-self:flex-end}\n"] }]
|
|
1006
|
+
}] });
|
|
1007
|
+
|
|
576
1008
|
/**
|
|
577
1009
|
* Generated bundle index. Do not edit.
|
|
578
1010
|
*/
|
|
579
1011
|
|
|
580
|
-
export { SOURCE_TOOLTIP_DATA, SourceModalComponent, SourceModalSize, SourcePopoverComponent, SourcePopoverService, SourcePopoverTriggerComponent, SourceTabComponent, SourceTabLineComponent, SourceTabsComponent, SourceTooltipComponent, SourceTooltipDirective, SourceTooltipPosition, defaultSourcePopoverConfig };
|
|
1012
|
+
export { ColorPaletteComponent, ColorSliderComponent, SOURCE_TOOLTIP_DATA, SourceColorPickerComponent, SourceColorPickerOrientation, SourceModalComponent, SourceModalSize, SourcePopoverComponent, SourcePopoverService, SourcePopoverTriggerComponent, SourceSliderGroupComponent, SourceTabComponent, SourceTabLineComponent, SourceTabsComponent, SourceTooltipComponent, SourceTooltipDirective, SourceTooltipPosition, defaultSourcePopoverConfig };
|
|
581
1013
|
//# sourceMappingURL=3dsource-source-ui.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3dsource-source-ui.mjs","sources":["../../../../projects/3dsource/source-ui/src/lib/components/source-modal/components/source-modal.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-modal/components/source-modal.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-modal/constants/sourceModalSize.const.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/tokens/sourcePopoverDataToken.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/interfaces/defaultSourcePopover.config.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/services/sourcePopover.service.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover-trigger.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover-trigger.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tab-line/components/source-tab-line.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tab-line/components/source-tab-line.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tabs/source-tabs.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tabs/source-tabs.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tab/source-tab.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tab/source-tab.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/tokens/sourceTooltipDataToken.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/components/source-tooltip.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/components/source-tooltip.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/constants/position.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/interfaces/source-tooltip.interface.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/helpers/index.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/directives/source-tooltip.directive.ts","../../../../projects/3dsource/source-ui/src/3dsource-source-ui.ts"],"sourcesContent":["import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport type { SourceModalSizeKeys } from '../constants/sourceModalSize.const';\nimport {\n defaultSourceButtonConfig,\n SourceButton,\n SourceButtonComponent,\n SourceIconButtonComponent,\n} from '@3dsource/source-ui-native';\nimport type { SourceModalData } from '../interfaces';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\n\n@Component({\n selector: 'src-modal',\n templateUrl: './source-modal.component.html',\n styleUrls: ['./source-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n SourceIconButtonComponent,\n NgScrollbarModule,\n SourceButtonComponent,\n ],\n})\nexport class SourceModalComponent {\n #dialogRef = inject(DialogRef<SourceModalComponent>);\n readonly data: SourceModalData = inject(DIALOG_DATA);\n size = signal<SourceModalSizeKeys>(this.data?.size || 'default');\n testID = signal(this.data?.testID || 'modal');\n stringContent = signal<string | null>(\n typeof this.data.content === 'string' ? this.data.content : null,\n );\n\n close(result?: any) {\n this.#dialogRef.close(result);\n }\n\n goBack() {\n this.#dialogRef.close();\n }\n\n getButtonConfig(\n externalConfig: Partial<SourceButton> | undefined,\n ): SourceButton {\n return {\n ...defaultSourceButtonConfig,\n ...externalConfig,\n };\n }\n}\n","<div\n class=\"src-modal\"\n [attr.data-testid]=\"testID()\"\n [ngClass]=\"{ 'src-modal--small': size() === 'small' }\"\n>\n <div class=\"src-modal__header\">\n @if (data['backButton']) {\n <src-icon-button\n class=\"src-modal__back\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-back'\"\n (onClick)=\"goBack()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n >\n <path\n d=\"m438-480 164 164q11 11 11 25.5T602-265q-11 11-25.5 11t-25.84-11.34L361-455q-5-5.4-7.5-11.7-2.5-6.3-2.5-13.5t2.5-13.5Q356-500 361-505l189.66-189.66Q562-706 576.5-706t25.5 11q11 11 11 25.5T602-644L438-480Z\"\n />\n </svg>\n </src-icon-button>\n }\n\n <div\n class=\"src-modal__title\"\n [attr.data-testid]=\"testID() + '-header-title'\"\n >\n {{ data['headerTitle'] }}\n </div>\n\n @if (data['closeButton']) {\n <src-icon-button\n class=\"src-modal__close\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-close'\"\n (onClick)=\"close()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10.0001 11.229L6.68618 14.5429C6.51951 14.7096 6.31818 14.7896 6.08218 14.7829C5.84618 14.7756 5.64485 14.6886 5.47818 14.5219C5.31151 14.3553 5.22818 14.1506 5.22818 13.9079C5.22818 13.6646 5.31151 13.4596 5.47818 13.2929L8.77107 10L5.45718 6.68615C5.29051 6.51949 5.21051 6.31482 5.21718 6.07215C5.22451 5.82882 5.31151 5.62382 5.47818 5.45715C5.64485 5.29049 5.84951 5.20715 6.09218 5.20715C6.33551 5.20715 6.54051 5.29049 6.70718 5.45715L10.0001 8.77105L13.314 5.45715C13.4806 5.29049 13.6853 5.20715 13.928 5.20715C14.1713 5.20715 14.3763 5.29049 14.543 5.45715C14.7096 5.62382 14.793 5.82882 14.793 6.07215C14.793 6.31482 14.7096 6.51949 14.543 6.68615L11.2291 10L14.543 13.3139C14.7096 13.4806 14.793 13.6819 14.793 13.9179C14.793 14.1539 14.7096 14.3553 14.543 14.5219C14.3763 14.6886 14.1713 14.7719 13.928 14.7719C13.6853 14.7719 13.4806 14.6886 13.314 14.5219L10.0001 11.229Z\"\n fill=\"currentColor\"\n />\n </svg>\n </src-icon-button>\n }\n </div>\n\n <div\n class=\"src-modal__body\"\n [class.src-modal__body--scrollable]=\"scrollbar.isVerticallyScrollable()\"\n >\n <ng-scrollbar #scrollbar class=\"src-modal__scroll-box\">\n @if (stringContent(); as content) {\n <div [innerHTML]=\"content\"></div>\n }\n </ng-scrollbar>\n </div>\n\n @if (data.footerButtons) {\n <div class=\"src-modal__footer\">\n @for (footerButton of data.footerButtons; track footerButton.label) {\n <src-button\n [srcButtonConfig]=\"getButtonConfig(footerButton.srcButtonConfig)\"\n [customClass]=\"footerButton.className\"\n (onClick)=\"close(footerButton.action())\"\n >\n {{ footerButton.label }}</src-button\n >\n }\n </div>\n }\n</div>\n","export const SourceModalSize = {\n SMALL: 'small',\n DEFAULT: 'default',\n};\nexport type SourceModalSizeKeys =\n (typeof SourceModalSize)[keyof typeof SourceModalSize];\n","import { InjectionToken } from '@angular/core';\nimport type { SourcePopoverData } from '../interfaces';\n\nexport const SOURCE_POPOVER_DATA = new InjectionToken<SourcePopoverData>(\n 'SourcePopoverData',\n);\n","import type {\n HorizontalConnectionPos,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport type { SourcePopoverData } from './sourcePopoverData.interface';\n\nexport const defaultSourcePopoverConfig: SourcePopoverData = {\n headerTitle: undefined,\n backButton: false,\n closeButton: true,\n popoverMaxHeight: 'auto',\n panelCustomClass: '',\n breakpointDesktop: '(min-width: 1024px)',\n hasBackdrop: true,\n closeOnBackdropClick: true,\n position: [\n {\n originX: 'start' as HorizontalConnectionPos,\n originY: 'bottom' as VerticalConnectionPos,\n overlayX: 'start' as HorizontalConnectionPos,\n overlayY: 'top' as VerticalConnectionPos,\n offsetY: 4,\n },\n {\n originX: 'start' as HorizontalConnectionPos,\n originY: 'top' as VerticalConnectionPos,\n overlayX: 'start' as HorizontalConnectionPos,\n overlayY: 'bottom' as VerticalConnectionPos,\n offsetY: -8,\n },\n ],\n testID: '',\n};\n","import {\n DestroyRef,\n inject,\n Injectable,\n Injector,\n signal,\n ViewContainerRef,\n} from '@angular/core';\nimport type { SourcePopoverData } from '../interfaces';\nimport { defaultSourcePopoverConfig } from '../interfaces';\nimport {\n CdkOverlayOrigin,\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { SOURCE_POPOVER_DATA } from '../tokens/sourcePopoverDataToken';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SourcePopoverComponent } from '../components/source-popover.component';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable()\nexport class SourcePopoverService {\n #breakpointObserver = inject(BreakpointObserver);\n #overlay = inject(Overlay);\n #destroyRef$ = inject(DestroyRef);\n #defaultSourcePopoverConfig = defaultSourcePopoverConfig;\n #isMobile = signal(false);\n readonly backButtonClicked = signal<OverlayRef | null>(null);\n\n show(\n overlayOrigin: CdkOverlayOrigin,\n viewContainerRef: ViewContainerRef,\n override: Partial<SourcePopoverData>,\n ): OverlayRef {\n const addedPanelClasses = ['src-popover-panel'];\n const backdropClasses = ['src-popover-backdrop'];\n const updatedConfig = this.getUpdatedConfig(override);\n\n if (updatedConfig.panelCustomClass) {\n addedPanelClasses.push(updatedConfig.panelCustomClass);\n }\n this.#breakpointObserver\n .observe(updatedConfig.breakpointDesktop)\n .pipe(takeUntilDestroyed(this.#destroyRef$))\n .subscribe((res) => this.#isMobile.set(!res.matches));\n\n if (this.#isMobile()) {\n addedPanelClasses.push('src-popover-panel--mobile');\n backdropClasses.push('src-popover-backdrop--mobile');\n }\n\n const dropdownPositionStrategy = this.#overlay\n .position()\n .flexibleConnectedTo(overlayOrigin.elementRef)\n .withPositions(updatedConfig.position);\n const drawerPositionStrategy = this.#overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n const scrollStrategy = this.#overlay.scrollStrategies.reposition();\n const config = new OverlayConfig({\n panelClass: addedPanelClasses,\n hasBackdrop: updatedConfig.hasBackdrop,\n backdropClass: backdropClasses,\n positionStrategy: this.#isMobile()\n ? drawerPositionStrategy\n : dropdownPositionStrategy,\n scrollStrategy: scrollStrategy,\n width: this.#isMobile() ? '100%' : 'auto',\n });\n\n const overlayRef = this.#overlay.create(config);\n const injector = Injector.create({\n parent: viewContainerRef.injector,\n providers: [\n {\n provide: SOURCE_POPOVER_DATA,\n useValue: {\n ...updatedConfig,\n overlayRef,\n },\n },\n ],\n });\n const template = new ComponentPortal(\n SourcePopoverComponent,\n viewContainerRef,\n injector,\n );\n overlayRef.attach(template);\n return overlayRef;\n }\n\n closePopover(overlayRef: OverlayRef) {\n overlayRef.dispose();\n }\n\n emitBackAction(menuRef: OverlayRef) {\n this.backButtonClicked.set(menuRef);\n }\n\n getUpdatedConfig(override: Partial<SourcePopoverData>): SourcePopoverData {\n return {\n srcPopoverTpl: override?.srcPopoverTpl,\n headerTitle:\n override?.headerTitle ?? this.#defaultSourcePopoverConfig.headerTitle,\n hasBackButton:\n override?.hasBackButton ??\n this.#defaultSourcePopoverConfig.hasBackButton,\n hasCloseButton:\n override?.hasCloseButton ??\n this.#defaultSourcePopoverConfig.hasCloseButton,\n popoverMaxHeight:\n override?.popoverMaxHeight ??\n this.#defaultSourcePopoverConfig.popoverMaxHeight,\n panelCustomClass:\n override?.panelCustomClass ??\n this.#defaultSourcePopoverConfig.panelCustomClass,\n breakpointDesktop:\n override?.breakpointDesktop ??\n this.#defaultSourcePopoverConfig.breakpointDesktop,\n position: override?.position\n ? override?.position\n : this.#defaultSourcePopoverConfig.position,\n closeOnBackdropClick:\n override?.closeOnBackdropClick ??\n this.#defaultSourcePopoverConfig.closeOnBackdropClick,\n hasBackdrop:\n override?.hasBackdrop ?? this.#defaultSourcePopoverConfig.hasBackdrop,\n testID: override?.testID ?? this.#defaultSourcePopoverConfig.testID,\n };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SOURCE_POPOVER_DATA } from '../tokens/sourcePopoverDataToken';\nimport { SourcePopoverService } from '../services';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SourceIconButtonComponent } from '@3dsource/source-ui-native';\n\n@Component({\n selector: 'src-popover',\n templateUrl: './source-popover.component.html',\n styleUrls: ['./source-popover.component.scss'],\n imports: [SourceIconButtonComponent, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourcePopoverComponent {\n readonly data = inject(SOURCE_POPOVER_DATA);\n template = signal(\n this.data.srcPopoverTpl instanceof TemplateRef\n ? this.data.srcPopoverTpl\n : null,\n );\n testID = signal(this.data.testID || 'popover');\n #sourcePopoverService = inject(SourcePopoverService);\n\n close() {\n this.#sourcePopoverService.closePopover(this.data.overlayRef!);\n }\n\n emitBackAction() {\n this.#sourcePopoverService.emitBackAction(this.data.overlayRef!);\n }\n}\n","<div\n class=\"src-popover\"\n [style.maxHeight]=\"data.popoverMaxHeight\"\n [attr.data-testid]=\"testID()\"\n>\n @if (\n data['hasBackButton'] ||\n data['hasCloseButton'] ||\n (data['headerTitle'] && data['headerTitle'] !== '')\n ) {\n <div class=\"src-popover__header\">\n @if (data['hasBackButton']) {\n <src-icon-button\n class=\"src-popover__back\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-back'\"\n (onClick)=\"emitBackAction()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n >\n <path\n d=\"m438-480 164 164q11 11 11 25.5T602-265q-11 11-25.5 11t-25.84-11.34L361-455q-5-5.4-7.5-11.7-2.5-6.3-2.5-13.5t2.5-13.5Q356-500 361-505l189.66-189.66Q562-706 576.5-706t25.5 11q11 11 11 25.5T602-644L438-480Z\"\n />\n </svg>\n </src-icon-button>\n }\n\n <div\n class=\"src-popover__title\"\n [attr.data-testid]=\"testID() + '-header-title'\"\n >\n {{ data.headerTitle }}\n </div>\n\n @if (data['hasCloseButton']) {\n <src-icon-button\n class=\"src-popover__close\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-close'\"\n (click)=\"close()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M10.0001 11.229L6.68618 14.5429C6.51951 14.7096 6.31818 14.7896 6.08218 14.7829C5.84618 14.7756 5.64485 14.6886 5.47818 14.5219C5.31151 14.3553 5.22818 14.1506 5.22818 13.9079C5.22818 13.6646 5.31151 13.4596 5.47818 13.2929L8.77107 10L5.45718 6.68615C5.29051 6.51949 5.21051 6.31482 5.21718 6.07215C5.22451 5.82882 5.31151 5.62382 5.47818 5.45715C5.64485 5.29049 5.84951 5.20715 6.09218 5.20715C6.33551 5.20715 6.54051 5.29049 6.70718 5.45715L10.0001 8.77105L13.314 5.45715C13.4806 5.29049 13.6853 5.20715 13.928 5.20715C14.1713 5.20715 14.3763 5.29049 14.543 5.45715C14.7096 5.62382 14.793 5.82882 14.793 6.07215C14.793 6.31482 14.7096 6.51949 14.543 6.68615L11.2291 10L14.543 13.3139C14.7096 13.4806 14.793 13.6819 14.793 13.9179C14.793 14.1539 14.7096 14.3553 14.543 14.5219C14.3763 14.6886 14.1713 14.7719 13.928 14.7719C13.6853 14.7719 13.4806 14.6886 13.314 14.5219L10.0001 11.229Z\"\n fill=\"currentColor\"\n />\n </svg>\n </src-icon-button>\n }\n </div>\n }\n\n <div class=\"src-popover__body\">\n @if (template()) {\n <ng-template [ngTemplateOutlet]=\"template()\"></ng-template>\n }\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CdkOverlayOrigin,\n ConnectedPosition,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport type { SourcePopoverData } from '../interfaces';\nimport { SourcePopoverService } from '../services';\nimport { first } from 'rxjs';\n\n@Component({\n selector: 'src-popover-trigger',\n templateUrl: './source-popover-trigger.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [SourcePopoverService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CdkOverlayOrigin],\n})\nexport class SourcePopoverTriggerComponent {\n overlayOrigin = viewChild(CdkOverlayOrigin);\n srcPopoverTpl = input.required<TemplateRef<HTMLElement>>();\n headerTitle = input<string>();\n activeClass = input<string>();\n hasBackButton = input(false);\n hasCloseButton = input(true);\n hasBackdrop = input(true);\n closeOnBackdropClick = input(true);\n popoverMaxHeight = input('auto');\n panelCustomClass = input<string>();\n testID = input('', { alias: 'data-testid' });\n breakpointDesktop = input('(min-width: 1024px)');\n positions = input<ConnectedPosition[]>([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ]);\n\n popoverShown = signal(false);\n onPopoverShown = output<boolean>();\n onBackButtonClick = output<OverlayRef>();\n overlayRef: OverlayRef | null = null;\n #sourcePopoverService = inject(SourcePopoverService, { self: true });\n #viewContainerRef = inject(ViewContainerRef);\n\n _ = effect(() => {\n if (this.#sourcePopoverService.backButtonClicked()) {\n this.onBackButtonClick.emit(this.overlayRef!);\n }\n });\n\n showPopover() {\n const config: Partial<SourcePopoverData> = {\n srcPopoverTpl: this.srcPopoverTpl(),\n overlayOrigin: this.overlayOrigin(),\n headerTitle: this.headerTitle(),\n hasBackButton: this.hasBackButton(),\n hasCloseButton: this.hasCloseButton(),\n popoverMaxHeight: this.popoverMaxHeight(),\n panelCustomClass: this.panelCustomClass(),\n breakpointDesktop: this.breakpointDesktop(),\n position: this.positions(),\n hasBackdrop: this.hasBackdrop(),\n closeOnBackdropClick: this.closeOnBackdropClick(),\n testID: this.testID(),\n };\n\n this.overlayRef = this.#sourcePopoverService.show(\n this.overlayOrigin()!,\n this.#viewContainerRef,\n config,\n );\n\n this.popoverShown.set(true);\n this.onPopoverShown.emit(true);\n\n this.overlayRef\n .detachments()\n .pipe(first())\n .subscribe(() => {\n this.popoverShown.set(false);\n this.onPopoverShown.emit(false);\n this.overlayRef = null;\n });\n\n this.overlayRef\n .backdropClick()\n .pipe(first())\n .subscribe(() => this.overlayRef?.detach());\n }\n}\n","<div\n cdkOverlayOrigin\n [attr.data-testid]=\"testID()\"\n (click)=\"showPopover()\"\n [class]=\"popoverShown() ? activeClass() || 'active' : ''\"\n>\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n input,\n linkedSignal,\n output,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { register } from 'swiper/element/bundle';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\nregister();\n\n@Component({\n selector: 'src-tab-line',\n templateUrl: './source-tab-line.component.html',\n styleUrls: ['./source-tab-line.component.scss'],\n imports: [NgClass, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class SourceTabLineComponent {\n swiperRef = viewChild<ElementRef>('swiperRef');\n tabs = input.required<any[]>();\n label = input.required<string>();\n selectedIndex = input(0);\n isCompact = input(false);\n offsetBefore = input(0);\n offsetAfter = input(0);\n spaceBetween = input(0);\n isFullWidth = input(false);\n isSwiper = input(false);\n testID = input('', { alias: 'data-testid' });\n tabsSelectedIndex = linkedSignal(() => this.selectedIndex());\n onSelectTab = output<number>();\n\n classes = computed(() =>\n this.isFullWidth() ? ['src-tab-line--full-width'] : [],\n );\n variables = computed(\n () =>\n `--srcTabsOffsetBefore: ${this.tabsOffsetBefore()}px; --srcTabsOffsetAfter: ${this.tabsOffsetAfter()}px; --srcTabsSpaceBetween: ${this.spacing()}px;`,\n );\n tabsOffsetBefore = computed(\n () => this.offsetBefore() || (this.isCompact() ? 8 : 16),\n );\n tabsOffsetAfter = computed(\n () => this.offsetAfter() || (this.isCompact() ? 8 : 16),\n );\n spacing = computed(() => this.spaceBetween() || (this.isCompact() ? 0 : 4));\n\n _ = effect(() => {\n const swiperRef = this.swiperRef();\n untracked(() => {\n if (!swiperRef?.nativeElement || !this.isSwiper()) return;\n Object.assign(swiperRef.nativeElement, {\n spaceBetween: this.spacing(),\n slidesOffsetBefore: this.tabsOffsetBefore(),\n slidesOffsetAfter: this.tabsOffsetAfter(),\n slidesPerView: 'auto',\n centeredSlides: false,\n slideToClickedSlide: true,\n });\n swiperRef.nativeElement.initialize();\n });\n });\n\n selectTab(tabIndex: number) {\n this.tabsSelectedIndex.set(tabIndex);\n this.onSelectTab.emit(tabIndex);\n }\n}\n","<div class=\"src-tab-line\" [ngClass]=\"classes()\" [attr.data-testid]=\"testID()\">\n @if (isSwiper()) {\n <div class=\"src-tabs__nav src-tabs__nav--swiper\">\n <swiper-container #swiperRef init=\"false\">\n @for (tab of tabs(); track tab) {\n <swiper-slide\n class=\"src-tabs__nav-slide\"\n [attr.data-testid]=\"testID() + '-slide-' + $index\"\n >\n <ng-container\n [ngTemplateOutlet]=\"slideTemplate\"\n [ngTemplateOutletContext]=\"{ tab: tab, index: $index }\"\n >\n </ng-container>\n </swiper-slide>\n }\n </swiper-container>\n </div>\n } @else {\n <div class=\"src-tabs__nav\" [style]=\"variables()\">\n @for (tab of tabs(); track tab) {\n <div\n class=\"src-tabs__nav-slide\"\n [attr.data-testid]=\"testID() + '-slide-' + $index\"\n >\n <ng-container\n [ngTemplateOutlet]=\"slideTemplate\"\n [ngTemplateOutletContext]=\"{ tab: tab, index: $index }\"\n >\n </ng-container>\n </div>\n }\n </div>\n }\n</div>\n\n<ng-template #slideTemplate let-tab=\"tab\" let-i=\"index\">\n <div\n class=\"src-tabs__nav-item\"\n (click)=\"selectTab(i)\"\n [class.src-tabs__nav-item--active]=\"i === tabsSelectedIndex()\"\n [class.src-disabled]=\"tab.isDisabled\"\n >\n <div class=\"text-label\" [attr.data-testid]=\"testID() + '-tab-label-' + i\">\n {{ tab[label()] }}\n </div>\n </div>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { SourceTabData } from '../../interfaces';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { SwiperOptions } from 'swiper/types';\nimport { SourceTabLineComponent } from '../../../source-tab-line';\n\n@Component({\n selector: 'src-tabs',\n templateUrl: './source-tabs.component.html',\n imports: [NgTemplateOutlet, SourceTabLineComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceTabsComponent {\n label = input.required<string>();\n data = input.required<SourceTabData[]>();\n selectedIndex = input(0);\n headerTemplate = input<TemplateRef<any>>();\n isCompact = input(false);\n isFullWidth = input(false);\n isSwiper = input(false);\n swiperConfig = input<SwiperOptions>();\n testID = input('', { alias: 'data-testid' });\n onSelectTab = output<number>();\n\n setActive(idx: number) {\n this.onSelectTab.emit(idx);\n }\n}\n","<div class=\"src-tabs\">\n <ng-template #defaultTabsHeader>\n <src-tab-line\n [tabs]=\"data()\"\n [label]=\"label()\"\n [isCompact]=\"isCompact()\"\n [isFullWidth]=\"isFullWidth()\"\n [selectedIndex]=\"selectedIndex()\"\n [isSwiper]=\"isSwiper()\"\n [data-testid]=\"testID()\"\n (onSelectTab)=\"setActive($event)\"\n ></src-tab-line>\n </ng-template>\n\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate() ? headerTemplate()! : defaultTabsHeader;\n context: { tabs: this.data }\n \"\n >\n </ng-container>\n\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'src-tab',\n templateUrl: './source-tab.component.html',\n styleUrls: ['./source-tab.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceTabComponent {\n isActive = input(false);\n}\n","<div [hidden]=\"!isActive()\" class=\"src-tab-content\">\n <ng-content></ng-content>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport type { SourceTooltipData } from '../interfaces/source-tooltip.interface';\n\nexport const SOURCE_TOOLTIP_DATA = new InjectionToken<SourceTooltipData>(\n 'Data to display in tooltip',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SOURCE_TOOLTIP_DATA } from '../tokens/sourceTooltipDataToken';\n\n@Component({\n selector: 'src-tooltip',\n templateUrl: './source-tooltip.component.html',\n styleUrls: ['./source-tooltip.component.scss'],\n imports: [NgClass, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceTooltipComponent {\n readonly data = inject(SOURCE_TOOLTIP_DATA);\n\n get asString() {\n return typeof this.data.content === 'string' ? this.data.content : false;\n }\n\n get asTemplate() {\n return this.data.content instanceof TemplateRef ? this.data.content : false;\n }\n}\n","<div\n class=\"src-tooltip\"\n [ngClass]=\"data.srcTooltipCustomClass\"\n [style.--srcTooltipMaxWidth]=\"data.srcTooltipMaxWidth\"\n>\n <div\n class=\"src-tooltip__content\"\n [class.src-tooltip__content--custom]=\"asTemplate\"\n >\n @if (asString) {\n {{ asString }}\n }\n\n @if (asTemplate) {\n <ng-template [ngTemplateOutlet]=\"asTemplate\"></ng-template>\n }\n </div>\n\n @if (data.srcTooltipPosition === 'top') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11\"\n height=\"6\"\n viewBox=\"0 0 11 6\"\n fill=\"none\"\n >\n <path\n d=\"M6.26822 5.07814C5.86842 5.55789 5.13157 5.55789 4.73178 5.07813L0.500001 -1.35106e-06L10.5 -4.76837e-07L6.26822 5.07814Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n\n @if (data.srcTooltipPosition === 'right') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"6\"\n height=\"10\"\n viewBox=\"0 0 6 10\"\n fill=\"none\"\n >\n <path\n d=\"M0.921864 5.76822C0.44211 5.36842 0.442111 4.63157 0.921865 4.23178L6 -2.62268e-07L6 10L0.921864 5.76822Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n\n @if (data.srcTooltipPosition === 'bottom') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11\"\n height=\"6\"\n viewBox=\"0 0 11 6\"\n fill=\"none\"\n >\n <path\n d=\"M4.73178 0.921865C5.13158 0.44211 5.86843 0.442111 6.26822 0.921866L10.5 6L0.5 6L4.73178 0.921865Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n\n @if (data.srcTooltipPosition === 'left') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"6\"\n height=\"10\"\n viewBox=\"0 0 6 10\"\n fill=\"none\"\n >\n <path\n d=\"M5.07814 5.76822C5.55789 5.36842 5.55789 4.63157 5.07813 4.23178L-3.97233e-08 -2.62268e-07L-4.76837e-07 10L5.07814 5.76822Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n</div>\n","import type { ConnectedPosition } from '@angular/cdk/overlay';\nimport type { SourceTooltipPositionKeys } from '../interfaces/source-tooltip.interface';\n\nexport const TooltipPositions: Record<\n SourceTooltipPositionKeys,\n ConnectedPosition\n> = {\n top: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n panelClass: 'src-tooltip--top',\n },\n bottom: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n panelClass: 'src-tooltip--bottom',\n },\n left: {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n panelClass: 'src-tooltip--left',\n },\n right: {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n panelClass: 'src-tooltip--right',\n },\n};\n","import { TemplateRef } from '@angular/core';\n\nexport const SourceTooltipPosition = {\n TOP: 'top',\n BOTTOM: 'bottom',\n LEFT: 'left',\n RIGHT: 'right',\n} as const;\n\nexport type SourceTooltipPositionKeys =\n (typeof SourceTooltipPosition)[keyof typeof SourceTooltipPosition];\n\nexport interface SourceTooltipData {\n content?: string | TemplateRef<void>;\n srcTooltipMaxWidth: string;\n srcTooltipHideDelay: number;\n srcTooltipPosition: SourceTooltipPositionKeys;\n srcTooltipCustomClass: string;\n}\n","export const isDesktop = () => {\n // 1) Try the newer userAgentData API if available\n const uaData = (navigator as any).userAgentData;\n if (uaData && typeof uaData.mobile === 'boolean') {\n return !uaData.mobile;\n }\n\n // 2) Fallback to a broader UA regex\n const mobileRegex =\n /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile|Windows Phone|webOS|BlackBerry/i;\n return !mobileRegex.test(navigator.userAgent);\n};\n","import { Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { SourceTooltipComponent } from '../components/source-tooltip.component';\nimport { TooltipPositions } from '../constants/position';\nimport {\n SourceTooltipData,\n SourceTooltipPosition,\n SourceTooltipPositionKeys,\n} from '../interfaces/source-tooltip.interface';\nimport { SOURCE_TOOLTIP_DATA } from '../tokens/sourceTooltipDataToken';\nimport { isDesktop } from '../helpers';\n\n@Directive({\n selector: '[srcTooltip]',\n})\nexport class SourceTooltipDirective implements OnInit, OnDestroy {\n srcTooltip = input.required<string | TemplateRef<void>>();\n srcTooltipPosition = input<SourceTooltipPositionKeys>('top');\n srcTooltipHideDelay = input(0);\n srcTooltipMaxWidth = input('280px');\n srcTooltipCustomClass = input('');\n sourceTooltipData = input<SourceTooltipData>();\n\n private _config!: SourceTooltipData;\n private overlayRef: OverlayRef | null = null;\n private hideTimeout?: number;\n private hoverDevice = this.isDeviceWithHover();\n\n private element = inject<ElementRef<HTMLElement>>(ElementRef);\n private overlay = inject(Overlay);\n private viewContainer = inject(ViewContainerRef);\n\n _ = effect(() => {\n const tooltip = this.srcTooltip();\n\n this._config = {\n ...this._config,\n content: tooltip,\n };\n });\n\n @HostListener('mouseenter')\n @HostListener('focus')\n showTooltip() {\n this.addTooltip();\n }\n\n @HostListener('mouseleave')\n @HostListener('blur')\n hideTooltip() {\n this.removeTooltip();\n }\n\n ngOnInit() {\n if (\n !Object.values(SourceTooltipPosition).includes(this.srcTooltipPosition())\n ) {\n throw new Error(\n 'Invalid tooltip position. Please provide a valid position',\n );\n }\n if (this.sourceTooltipData()) {\n this._config = {\n ...this.sourceTooltipData()!,\n content: this.srcTooltip() ?? '',\n };\n } else {\n this._config = {\n content: this.srcTooltip(),\n srcTooltipMaxWidth: this.srcTooltipMaxWidth(),\n srcTooltipHideDelay: this.srcTooltipHideDelay(),\n srcTooltipPosition: this.srcTooltipPosition(),\n srcTooltipCustomClass: this.srcTooltipCustomClass(),\n };\n }\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n destroy() {\n if (this.overlayRef !== null) {\n window.clearInterval(this.hideTimeout);\n this.overlayRef?.dispose();\n this.overlayRef = null;\n }\n }\n\n private addTooltip() {\n if (\n !this.hoverDevice ||\n this.overlayRef?.hasAttached() === true ||\n !this._config.content\n ) {\n return;\n }\n\n window.clearInterval(this.hideTimeout);\n this.attachTooltip(this._config.srcTooltipPosition);\n }\n\n private removeTooltip() {\n if (!this.hoverDevice || this.overlayRef?.hasAttached() === false) {\n return;\n }\n\n if (this._config.srcTooltipHideDelay === 0) {\n this.destroy();\n\n return;\n }\n\n this.hideTimeout = window.setTimeout(\n this.destroy.bind(this),\n this._config.srcTooltipHideDelay,\n );\n }\n\n private attachTooltip(position: SourceTooltipPositionKeys) {\n if (this.overlayRef === null) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.getPositionStrategy(position),\n });\n }\n\n const injector = Injector.create({\n providers: [\n {\n provide: SOURCE_TOOLTIP_DATA,\n useValue: this._config,\n },\n ],\n });\n\n const component = new ComponentPortal(\n SourceTooltipComponent,\n this.viewContainer,\n injector,\n );\n this.overlayRef.attach(component);\n }\n\n private getPositionStrategy(\n position: SourceTooltipPositionKeys,\n ): PositionStrategy {\n return this.overlay\n .position()\n .flexibleConnectedTo(this.element)\n .withPositions([TooltipPositions[position]]);\n }\n\n private isDeviceWithHover() {\n const hasHover = window.matchMedia('(hover: hover)').matches;\n const hasFinePointer = window.matchMedia('(pointer: fine)').matches;\n const userAgent = navigator.userAgent;\n const isSamsungDevice = /Samsung/i.test(userAgent);\n return (hasHover || hasFinePointer) && isDesktop() && !isSamsungDevice;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"3dsource-source-ui.mjs","sources":["../../../../projects/3dsource/source-ui/src/lib/components/source-modal/components/source-modal.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-modal/components/source-modal.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-modal/constants/sourceModalSize.const.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/tokens/sourcePopoverDataToken.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/interfaces/defaultSourcePopover.config.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/services/sourcePopover.service.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover-trigger.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-popover/components/source-popover-trigger.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tab-line/components/source-tab-line.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tab-line/components/source-tab-line.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tabs/source-tabs.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tabs/source-tabs.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tab/source-tab.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tabs/components/source-tab/source-tab.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/tokens/sourceTooltipDataToken.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/components/source-tooltip.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/components/source-tooltip.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/constants/position.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/interfaces/source-tooltip.interface.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/helpers/index.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-tooltip/directives/source-tooltip.directive.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/drawPaletteGradient.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/RGBtoHSV.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/calculatePosition.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/clampf.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/RGBtoHEX.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/components/color-palette/color-palette.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/components/color-palette/color-palette.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/drawGradient.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/components/color-slider/color-slider.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/components/color-slider/color-slider.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/helpers/randomUUID.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/components/container/source-color-picker.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/components/container/source-color-picker.component.html","../../../../projects/3dsource/source-ui/src/lib/components/source-color-picker/interfaces/source-color-picker.interface.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-slider-group/components/source-slider-group.component.ts","../../../../projects/3dsource/source-ui/src/lib/components/source-slider-group/components/source-slider-group.component.html","../../../../projects/3dsource/source-ui/src/3dsource-source-ui.ts"],"sourcesContent":["import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport type { SourceModalSizeKeys } from '../constants/sourceModalSize.const';\nimport {\n defaultSourceButtonConfig,\n SourceButton,\n SourceButtonComponent,\n SourceIconButtonComponent,\n} from '@3dsource/source-ui-native';\nimport type { SourceModalData } from '../interfaces';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\n\n@Component({\n selector: 'src-modal',\n templateUrl: './source-modal.component.html',\n styleUrls: ['./source-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n SourceIconButtonComponent,\n NgScrollbarModule,\n SourceButtonComponent,\n ],\n})\nexport class SourceModalComponent {\n #dialogRef = inject(DialogRef<SourceModalComponent>);\n readonly data: SourceModalData = inject(DIALOG_DATA);\n size = signal<SourceModalSizeKeys>(this.data?.size || 'default');\n testID = signal(this.data?.testID || 'modal');\n stringContent = signal<string | null>(\n typeof this.data.content === 'string' ? this.data.content : null,\n );\n\n close(result?: any) {\n this.#dialogRef.close(result);\n }\n\n goBack() {\n this.#dialogRef.close();\n }\n\n getButtonConfig(\n externalConfig: Partial<SourceButton> | undefined,\n ): SourceButton {\n return {\n ...defaultSourceButtonConfig,\n ...externalConfig,\n };\n }\n}\n","<div\n class=\"src-modal\"\n [attr.data-testid]=\"testID()\"\n [ngClass]=\"{ 'src-modal--small': size() === 'small' }\"\n>\n <div class=\"src-modal__header\">\n @if (data['backButton']) {\n <src-icon-button\n class=\"src-modal__back\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-back'\"\n (onClick)=\"goBack()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n >\n <path\n d=\"m438-480 164 164q11 11 11 25.5T602-265q-11 11-25.5 11t-25.84-11.34L361-455q-5-5.4-7.5-11.7-2.5-6.3-2.5-13.5t2.5-13.5Q356-500 361-505l189.66-189.66Q562-706 576.5-706t25.5 11q11 11 11 25.5T602-644L438-480Z\"\n />\n </svg>\n </src-icon-button>\n }\n\n <div\n class=\"src-modal__title\"\n [attr.data-testid]=\"testID() + '-header-title'\"\n >\n {{ data['headerTitle'] }}\n </div>\n\n @if (data['closeButton']) {\n <src-icon-button\n class=\"src-modal__close\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-close'\"\n (onClick)=\"close()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10.0001 11.229L6.68618 14.5429C6.51951 14.7096 6.31818 14.7896 6.08218 14.7829C5.84618 14.7756 5.64485 14.6886 5.47818 14.5219C5.31151 14.3553 5.22818 14.1506 5.22818 13.9079C5.22818 13.6646 5.31151 13.4596 5.47818 13.2929L8.77107 10L5.45718 6.68615C5.29051 6.51949 5.21051 6.31482 5.21718 6.07215C5.22451 5.82882 5.31151 5.62382 5.47818 5.45715C5.64485 5.29049 5.84951 5.20715 6.09218 5.20715C6.33551 5.20715 6.54051 5.29049 6.70718 5.45715L10.0001 8.77105L13.314 5.45715C13.4806 5.29049 13.6853 5.20715 13.928 5.20715C14.1713 5.20715 14.3763 5.29049 14.543 5.45715C14.7096 5.62382 14.793 5.82882 14.793 6.07215C14.793 6.31482 14.7096 6.51949 14.543 6.68615L11.2291 10L14.543 13.3139C14.7096 13.4806 14.793 13.6819 14.793 13.9179C14.793 14.1539 14.7096 14.3553 14.543 14.5219C14.3763 14.6886 14.1713 14.7719 13.928 14.7719C13.6853 14.7719 13.4806 14.6886 13.314 14.5219L10.0001 11.229Z\"\n fill=\"currentColor\"\n />\n </svg>\n </src-icon-button>\n }\n </div>\n\n <div\n class=\"src-modal__body\"\n [class.src-modal__body--scrollable]=\"scrollbar.isVerticallyScrollable()\"\n >\n <ng-scrollbar #scrollbar class=\"src-modal__scroll-box\">\n @if (stringContent(); as content) {\n <div [innerHTML]=\"content\"></div>\n }\n </ng-scrollbar>\n </div>\n\n @if (data.footerButtons) {\n <div class=\"src-modal__footer\">\n @for (footerButton of data.footerButtons; track footerButton.label) {\n <src-button\n [srcButtonConfig]=\"getButtonConfig(footerButton.srcButtonConfig)\"\n [customClass]=\"footerButton.className\"\n (onClick)=\"close(footerButton.action())\"\n >\n {{ footerButton.label }}</src-button\n >\n }\n </div>\n }\n</div>\n","export const SourceModalSize = {\n SMALL: 'small',\n DEFAULT: 'default',\n};\nexport type SourceModalSizeKeys =\n (typeof SourceModalSize)[keyof typeof SourceModalSize];\n","import { InjectionToken } from '@angular/core';\nimport type { SourcePopoverData } from '../interfaces';\n\nexport const SOURCE_POPOVER_DATA = new InjectionToken<SourcePopoverData>(\n 'SourcePopoverData',\n);\n","import type {\n HorizontalConnectionPos,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport type { SourcePopoverData } from './sourcePopoverData.interface';\n\nexport const defaultSourcePopoverConfig: SourcePopoverData = {\n headerTitle: undefined,\n backButton: false,\n closeButton: true,\n popoverMaxHeight: 'auto',\n panelCustomClass: '',\n breakpointDesktop: '(min-width: 1024px)',\n hasBackdrop: true,\n closeOnBackdropClick: true,\n position: [\n {\n originX: 'start' as HorizontalConnectionPos,\n originY: 'bottom' as VerticalConnectionPos,\n overlayX: 'start' as HorizontalConnectionPos,\n overlayY: 'top' as VerticalConnectionPos,\n offsetY: 4,\n },\n {\n originX: 'start' as HorizontalConnectionPos,\n originY: 'top' as VerticalConnectionPos,\n overlayX: 'start' as HorizontalConnectionPos,\n overlayY: 'bottom' as VerticalConnectionPos,\n offsetY: -8,\n },\n ],\n testID: '',\n};\n","import {\n DestroyRef,\n inject,\n Injectable,\n Injector,\n signal,\n ViewContainerRef,\n} from '@angular/core';\nimport type { SourcePopoverData } from '../interfaces';\nimport { defaultSourcePopoverConfig } from '../interfaces';\nimport {\n CdkOverlayOrigin,\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { SOURCE_POPOVER_DATA } from '../tokens/sourcePopoverDataToken';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SourcePopoverComponent } from '../components/source-popover.component';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable()\nexport class SourcePopoverService {\n #breakpointObserver = inject(BreakpointObserver);\n #overlay = inject(Overlay);\n #destroyRef$ = inject(DestroyRef);\n #defaultSourcePopoverConfig = defaultSourcePopoverConfig;\n #isMobile = signal(false);\n readonly backButtonClicked = signal<OverlayRef | null>(null);\n\n show(\n overlayOrigin: CdkOverlayOrigin,\n viewContainerRef: ViewContainerRef,\n override: Partial<SourcePopoverData>,\n ): OverlayRef {\n const addedPanelClasses = ['src-popover-panel'];\n const backdropClasses = ['src-popover-backdrop'];\n const updatedConfig = this.getUpdatedConfig(override);\n\n if (updatedConfig.panelCustomClass) {\n addedPanelClasses.push(updatedConfig.panelCustomClass);\n }\n this.#breakpointObserver\n .observe(updatedConfig.breakpointDesktop)\n .pipe(takeUntilDestroyed(this.#destroyRef$))\n .subscribe((res) => this.#isMobile.set(!res.matches));\n\n if (this.#isMobile()) {\n addedPanelClasses.push('src-popover-panel--mobile');\n backdropClasses.push('src-popover-backdrop--mobile');\n }\n\n const dropdownPositionStrategy = this.#overlay\n .position()\n .flexibleConnectedTo(overlayOrigin.elementRef)\n .withPositions(updatedConfig.position);\n const drawerPositionStrategy = this.#overlay\n .position()\n .global()\n .centerHorizontally()\n .bottom('0px');\n const scrollStrategy = this.#overlay.scrollStrategies.reposition();\n const config = new OverlayConfig({\n panelClass: addedPanelClasses,\n hasBackdrop: updatedConfig.hasBackdrop,\n backdropClass: backdropClasses,\n positionStrategy: this.#isMobile()\n ? drawerPositionStrategy\n : dropdownPositionStrategy,\n scrollStrategy: scrollStrategy,\n width: this.#isMobile() ? '100%' : 'auto',\n });\n\n const overlayRef = this.#overlay.create(config);\n const injector = Injector.create({\n parent: viewContainerRef.injector,\n providers: [\n {\n provide: SOURCE_POPOVER_DATA,\n useValue: {\n ...updatedConfig,\n overlayRef,\n },\n },\n ],\n });\n const template = new ComponentPortal(\n SourcePopoverComponent,\n viewContainerRef,\n injector,\n );\n overlayRef.attach(template);\n return overlayRef;\n }\n\n closePopover(overlayRef: OverlayRef) {\n overlayRef.dispose();\n }\n\n getUpdatedConfig(override: Partial<SourcePopoverData>): SourcePopoverData {\n return {\n srcPopoverTpl: override?.srcPopoverTpl,\n headerTitle:\n override?.headerTitle ?? this.#defaultSourcePopoverConfig.headerTitle,\n hasBackButton:\n override?.hasBackButton ??\n this.#defaultSourcePopoverConfig.hasBackButton,\n hasCloseButton:\n override?.hasCloseButton ??\n this.#defaultSourcePopoverConfig.hasCloseButton,\n popoverMaxHeight:\n override?.popoverMaxHeight ??\n this.#defaultSourcePopoverConfig.popoverMaxHeight,\n panelCustomClass:\n override?.panelCustomClass ??\n this.#defaultSourcePopoverConfig.panelCustomClass,\n breakpointDesktop:\n override?.breakpointDesktop ??\n this.#defaultSourcePopoverConfig.breakpointDesktop,\n position: override?.position\n ? override?.position\n : this.#defaultSourcePopoverConfig.position,\n closeOnBackdropClick:\n override?.closeOnBackdropClick ??\n this.#defaultSourcePopoverConfig.closeOnBackdropClick,\n hasBackdrop:\n override?.hasBackdrop ?? this.#defaultSourcePopoverConfig.hasBackdrop,\n testID: override?.testID ?? this.#defaultSourcePopoverConfig.testID,\n };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SOURCE_POPOVER_DATA } from '../tokens/sourcePopoverDataToken';\nimport { SourcePopoverService } from '../services';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SourceIconButtonComponent } from '@3dsource/source-ui-native';\n\n@Component({\n selector: 'src-popover',\n templateUrl: './source-popover.component.html',\n styleUrls: ['./source-popover.component.scss'],\n imports: [SourceIconButtonComponent, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourcePopoverComponent {\n readonly data = inject(SOURCE_POPOVER_DATA);\n template = signal(\n this.data.srcPopoverTpl instanceof TemplateRef\n ? this.data.srcPopoverTpl\n : null,\n );\n testID = signal(this.data.testID || 'popover');\n #sourcePopoverService = inject(SourcePopoverService);\n\n close() {\n this.#sourcePopoverService.closePopover(this.data.overlayRef!);\n }\n\n emitBackAction() {\n this.#sourcePopoverService.closePopover(this.data.overlayRef!);\n }\n}\n","<div\n class=\"src-popover\"\n [style.maxHeight]=\"data.popoverMaxHeight\"\n [attr.data-testid]=\"testID()\"\n>\n @if (\n data['hasBackButton'] ||\n data['hasCloseButton'] ||\n (data['headerTitle'] && data['headerTitle'] !== '')\n ) {\n <div class=\"src-popover__header\">\n @if (data['hasBackButton']) {\n <src-icon-button\n class=\"src-popover__back\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-back'\"\n (onClick)=\"emitBackAction()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n >\n <path\n d=\"m438-480 164 164q11 11 11 25.5T602-265q-11 11-25.5 11t-25.84-11.34L361-455q-5-5.4-7.5-11.7-2.5-6.3-2.5-13.5t2.5-13.5Q356-500 361-505l189.66-189.66Q562-706 576.5-706t25.5 11q11 11 11 25.5T602-644L438-480Z\"\n />\n </svg>\n </src-icon-button>\n }\n\n <div\n class=\"src-popover__title\"\n [attr.data-testid]=\"testID() + '-header-title'\"\n >\n {{ data.headerTitle }}\n </div>\n\n @if (data['hasCloseButton']) {\n <src-icon-button\n class=\"src-popover__close\"\n shape=\"round\"\n size=\"sm\"\n [data-testid]=\"testID() + '-header-close'\"\n (click)=\"close()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M10.0001 11.229L6.68618 14.5429C6.51951 14.7096 6.31818 14.7896 6.08218 14.7829C5.84618 14.7756 5.64485 14.6886 5.47818 14.5219C5.31151 14.3553 5.22818 14.1506 5.22818 13.9079C5.22818 13.6646 5.31151 13.4596 5.47818 13.2929L8.77107 10L5.45718 6.68615C5.29051 6.51949 5.21051 6.31482 5.21718 6.07215C5.22451 5.82882 5.31151 5.62382 5.47818 5.45715C5.64485 5.29049 5.84951 5.20715 6.09218 5.20715C6.33551 5.20715 6.54051 5.29049 6.70718 5.45715L10.0001 8.77105L13.314 5.45715C13.4806 5.29049 13.6853 5.20715 13.928 5.20715C14.1713 5.20715 14.3763 5.29049 14.543 5.45715C14.7096 5.62382 14.793 5.82882 14.793 6.07215C14.793 6.31482 14.7096 6.51949 14.543 6.68615L11.2291 10L14.543 13.3139C14.7096 13.4806 14.793 13.6819 14.793 13.9179C14.793 14.1539 14.7096 14.3553 14.543 14.5219C14.3763 14.6886 14.1713 14.7719 13.928 14.7719C13.6853 14.7719 13.4806 14.6886 13.314 14.5219L10.0001 11.229Z\"\n fill=\"currentColor\"\n />\n </svg>\n </src-icon-button>\n }\n </div>\n }\n\n <div class=\"src-popover__body\">\n @if (template()) {\n <ng-template [ngTemplateOutlet]=\"template()\"></ng-template>\n }\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CdkOverlayOrigin,\n ConnectedPosition,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport type { SourcePopoverData } from '../interfaces';\nimport { SourcePopoverService } from '../services';\nimport { first } from 'rxjs';\n\n@Component({\n selector: 'src-popover-trigger',\n templateUrl: './source-popover-trigger.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [SourcePopoverService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CdkOverlayOrigin],\n})\nexport class SourcePopoverTriggerComponent {\n overlayOrigin = viewChild(CdkOverlayOrigin);\n srcPopoverTpl = input.required<TemplateRef<HTMLElement>>();\n headerTitle = input<string>();\n activeClass = input<string>();\n hasBackButton = input(false);\n hasCloseButton = input(true);\n hasBackdrop = input(true);\n closeOnBackdropClick = input(true);\n popoverMaxHeight = input('auto');\n panelCustomClass = input<string>();\n testID = input('', { alias: 'data-testid' });\n breakpointDesktop = input('(min-width: 1024px)');\n positions = input<ConnectedPosition[]>([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ]);\n\n popoverShown = signal(false);\n onPopoverShown = output<boolean>();\n onBackButtonClick = output<OverlayRef>();\n overlayRef: OverlayRef | null = null;\n #sourcePopoverService = inject(SourcePopoverService, { self: true });\n #viewContainerRef = inject(ViewContainerRef);\n\n _ = effect(() => {\n if (this.#sourcePopoverService.backButtonClicked()) {\n this.onBackButtonClick.emit(this.overlayRef!);\n }\n });\n\n showPopover() {\n const config: Partial<SourcePopoverData> = {\n srcPopoverTpl: this.srcPopoverTpl(),\n overlayOrigin: this.overlayOrigin(),\n headerTitle: this.headerTitle(),\n hasBackButton: this.hasBackButton(),\n hasCloseButton: this.hasCloseButton(),\n popoverMaxHeight: this.popoverMaxHeight(),\n panelCustomClass: this.panelCustomClass(),\n breakpointDesktop: this.breakpointDesktop(),\n position: this.positions(),\n hasBackdrop: this.hasBackdrop(),\n closeOnBackdropClick: this.closeOnBackdropClick(),\n testID: this.testID(),\n };\n\n this.overlayRef = this.#sourcePopoverService.show(\n this.overlayOrigin()!,\n this.#viewContainerRef,\n config,\n );\n\n this.popoverShown.set(true);\n this.onPopoverShown.emit(true);\n\n this.overlayRef\n .detachments()\n .pipe(first())\n .subscribe(() => {\n this.popoverShown.set(false);\n this.onPopoverShown.emit(false);\n this.overlayRef = null;\n });\n\n this.overlayRef\n .backdropClick()\n .pipe(first())\n .subscribe(() => this.overlayRef?.detach());\n }\n}\n","<div\n cdkOverlayOrigin\n [attr.data-testid]=\"testID()\"\n (click)=\"showPopover()\"\n [class]=\"popoverShown() ? activeClass() || 'active' : ''\"\n>\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n CUSTOM_ELEMENTS_SCHEMA,\n effect,\n ElementRef,\n input,\n linkedSignal,\n output,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { register } from 'swiper/element/bundle';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\nregister();\n\n@Component({\n selector: 'src-tab-line',\n templateUrl: './source-tab-line.component.html',\n styleUrls: ['./source-tab-line.component.scss'],\n imports: [NgClass, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class SourceTabLineComponent {\n swiperRef = viewChild<ElementRef>('swiperRef');\n tabs = input.required<any[]>();\n label = input.required<string>();\n selectedIndex = input(0);\n isCompact = input(false);\n offsetBefore = input(0);\n offsetAfter = input(0);\n spaceBetween = input(0);\n isFullWidth = input(false);\n isSwiper = input(false);\n testID = input('', { alias: 'data-testid' });\n tabsSelectedIndex = linkedSignal(() => this.selectedIndex());\n onSelectTab = output<number>();\n\n classes = computed(() =>\n this.isFullWidth() ? ['src-tab-line--full-width'] : [],\n );\n variables = computed(\n () =>\n `--srcTabsOffsetBefore: ${this.tabsOffsetBefore()}px; --srcTabsOffsetAfter: ${this.tabsOffsetAfter()}px; --srcTabsSpaceBetween: ${this.spacing()}px;`,\n );\n tabsOffsetBefore = computed(\n () => this.offsetBefore() || (this.isCompact() ? 8 : 16),\n );\n tabsOffsetAfter = computed(\n () => this.offsetAfter() || (this.isCompact() ? 8 : 16),\n );\n spacing = computed(() => this.spaceBetween() || (this.isCompact() ? 0 : 4));\n\n _ = effect(() => {\n const swiperRef = this.swiperRef();\n untracked(() => {\n if (!swiperRef?.nativeElement || !this.isSwiper()) return;\n Object.assign(swiperRef.nativeElement, {\n spaceBetween: this.spacing(),\n slidesOffsetBefore: this.tabsOffsetBefore(),\n slidesOffsetAfter: this.tabsOffsetAfter(),\n slidesPerView: 'auto',\n centeredSlides: false,\n slideToClickedSlide: true,\n });\n swiperRef.nativeElement.initialize();\n });\n });\n\n selectTab(tabIndex: number) {\n this.tabsSelectedIndex.set(tabIndex);\n this.onSelectTab.emit(tabIndex);\n }\n}\n","<div class=\"src-tab-line\" [ngClass]=\"classes()\" [attr.data-testid]=\"testID()\">\n @if (isSwiper()) {\n <div class=\"src-tabs__nav src-tabs__nav--swiper\">\n <swiper-container #swiperRef init=\"false\">\n @for (tab of tabs(); track tab) {\n <swiper-slide\n class=\"src-tabs__nav-slide\"\n [attr.data-testid]=\"testID() + '-slide-' + $index\"\n >\n <ng-container\n [ngTemplateOutlet]=\"slideTemplate\"\n [ngTemplateOutletContext]=\"{ tab: tab, index: $index }\"\n >\n </ng-container>\n </swiper-slide>\n }\n </swiper-container>\n </div>\n } @else {\n <div class=\"src-tabs__nav\" [style]=\"variables()\">\n @for (tab of tabs(); track tab) {\n <div\n class=\"src-tabs__nav-slide\"\n [attr.data-testid]=\"testID() + '-slide-' + $index\"\n >\n <ng-container\n [ngTemplateOutlet]=\"slideTemplate\"\n [ngTemplateOutletContext]=\"{ tab: tab, index: $index }\"\n >\n </ng-container>\n </div>\n }\n </div>\n }\n</div>\n\n<ng-template #slideTemplate let-tab=\"tab\" let-i=\"index\">\n <div\n class=\"src-tabs__nav-item\"\n (click)=\"selectTab(i)\"\n [class.src-tabs__nav-item--active]=\"i === tabsSelectedIndex()\"\n [class.src-disabled]=\"tab.isDisabled\"\n >\n <div class=\"text-label\" [attr.data-testid]=\"testID() + '-tab-label-' + i\">\n {{ tab[label()] }}\n </div>\n </div>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { SourceTabData } from '../../interfaces';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { SwiperOptions } from 'swiper/types';\nimport { SourceTabLineComponent } from '../../../source-tab-line';\n\n@Component({\n selector: 'src-tabs',\n templateUrl: './source-tabs.component.html',\n imports: [NgTemplateOutlet, SourceTabLineComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceTabsComponent {\n label = input.required<string>();\n data = input.required<SourceTabData[]>();\n selectedIndex = input(0);\n headerTemplate = input<TemplateRef<any>>();\n isCompact = input(false);\n isFullWidth = input(false);\n isSwiper = input(false);\n swiperConfig = input<SwiperOptions>();\n testID = input('', { alias: 'data-testid' });\n onSelectTab = output<number>();\n\n setActive(idx: number) {\n this.onSelectTab.emit(idx);\n }\n}\n","<div class=\"src-tabs\">\n <ng-template #defaultTabsHeader>\n <src-tab-line\n [tabs]=\"data()\"\n [label]=\"label()\"\n [isCompact]=\"isCompact()\"\n [isFullWidth]=\"isFullWidth()\"\n [selectedIndex]=\"selectedIndex()\"\n [isSwiper]=\"isSwiper()\"\n [data-testid]=\"testID()\"\n (onSelectTab)=\"setActive($event)\"\n ></src-tab-line>\n </ng-template>\n\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate() ? headerTemplate()! : defaultTabsHeader;\n context: { tabs: this.data }\n \"\n >\n </ng-container>\n\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'src-tab',\n templateUrl: './source-tab.component.html',\n styleUrls: ['./source-tab.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceTabComponent {\n isActive = input(false);\n}\n","<div [hidden]=\"!isActive()\" class=\"src-tab-content\">\n <ng-content></ng-content>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport type { SourceTooltipData } from '../interfaces/source-tooltip.interface';\n\nexport const SOURCE_TOOLTIP_DATA = new InjectionToken<SourceTooltipData>(\n 'Data to display in tooltip',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SOURCE_TOOLTIP_DATA } from '../tokens/sourceTooltipDataToken';\n\n@Component({\n selector: 'src-tooltip',\n templateUrl: './source-tooltip.component.html',\n styleUrls: ['./source-tooltip.component.scss'],\n imports: [NgClass, NgTemplateOutlet],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceTooltipComponent {\n readonly data = inject(SOURCE_TOOLTIP_DATA);\n\n get asString() {\n return typeof this.data.content === 'string' ? this.data.content : false;\n }\n\n get asTemplate() {\n return this.data.content instanceof TemplateRef ? this.data.content : false;\n }\n}\n","<div\n class=\"src-tooltip\"\n [ngClass]=\"data.srcTooltipCustomClass\"\n [style.--srcTooltipMaxWidth]=\"data.srcTooltipMaxWidth\"\n>\n <div\n class=\"src-tooltip__content\"\n [class.src-tooltip__content--custom]=\"asTemplate\"\n >\n @if (asString) {\n {{ asString }}\n }\n\n @if (asTemplate) {\n <ng-template [ngTemplateOutlet]=\"asTemplate\"></ng-template>\n }\n </div>\n\n @if (data.srcTooltipPosition === 'top') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11\"\n height=\"6\"\n viewBox=\"0 0 11 6\"\n fill=\"none\"\n >\n <path\n d=\"M6.26822 5.07814C5.86842 5.55789 5.13157 5.55789 4.73178 5.07813L0.500001 -1.35106e-06L10.5 -4.76837e-07L6.26822 5.07814Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n\n @if (data.srcTooltipPosition === 'right') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"6\"\n height=\"10\"\n viewBox=\"0 0 6 10\"\n fill=\"none\"\n >\n <path\n d=\"M0.921864 5.76822C0.44211 5.36842 0.442111 4.63157 0.921865 4.23178L6 -2.62268e-07L6 10L0.921864 5.76822Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n\n @if (data.srcTooltipPosition === 'bottom') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11\"\n height=\"6\"\n viewBox=\"0 0 11 6\"\n fill=\"none\"\n >\n <path\n d=\"M4.73178 0.921865C5.13158 0.44211 5.86843 0.442111 6.26822 0.921866L10.5 6L0.5 6L4.73178 0.921865Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n\n @if (data.srcTooltipPosition === 'left') {\n <svg\n class=\"src-tooltip__pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"6\"\n height=\"10\"\n viewBox=\"0 0 6 10\"\n fill=\"none\"\n >\n <path\n d=\"M5.07814 5.76822C5.55789 5.36842 5.55789 4.63157 5.07813 4.23178L-3.97233e-08 -2.62268e-07L-4.76837e-07 10L5.07814 5.76822Z\"\n fill=\"currentColor\"\n />\n </svg>\n }\n</div>\n","import type { ConnectedPosition } from '@angular/cdk/overlay';\nimport type { SourceTooltipPositionKeys } from '../interfaces/source-tooltip.interface';\n\nexport const TooltipPositions: Record<\n SourceTooltipPositionKeys,\n ConnectedPosition\n> = {\n top: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n panelClass: 'src-tooltip--top',\n },\n bottom: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n panelClass: 'src-tooltip--bottom',\n },\n left: {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n panelClass: 'src-tooltip--left',\n },\n right: {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n panelClass: 'src-tooltip--right',\n },\n};\n","import { TemplateRef } from '@angular/core';\n\nexport const SourceTooltipPosition = {\n TOP: 'top',\n BOTTOM: 'bottom',\n LEFT: 'left',\n RIGHT: 'right',\n} as const;\n\nexport type SourceTooltipPositionKeys =\n (typeof SourceTooltipPosition)[keyof typeof SourceTooltipPosition];\n\nexport interface SourceTooltipData {\n content?: string | TemplateRef<void>;\n srcTooltipMaxWidth: string;\n srcTooltipHideDelay: number;\n srcTooltipPosition: SourceTooltipPositionKeys;\n srcTooltipCustomClass: string;\n}\n","export const isDesktop = () => {\n // 1) Try the newer userAgentData API if available\n const uaData = (navigator as any).userAgentData;\n if (uaData && typeof uaData.mobile === 'boolean') {\n return !uaData.mobile;\n }\n\n // 2) Fallback to a broader UA regex\n const mobileRegex =\n /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile|Windows Phone|webOS|BlackBerry/i;\n return !mobileRegex.test(navigator.userAgent);\n};\n","import { Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { SourceTooltipComponent } from '../components/source-tooltip.component';\nimport { TooltipPositions } from '../constants/position';\nimport {\n SourceTooltipData,\n SourceTooltipPosition,\n SourceTooltipPositionKeys,\n} from '../interfaces/source-tooltip.interface';\nimport { SOURCE_TOOLTIP_DATA } from '../tokens/sourceTooltipDataToken';\nimport { isDesktop } from '../helpers';\n\n@Directive({\n selector: '[srcTooltip]',\n})\nexport class SourceTooltipDirective implements OnInit, OnDestroy {\n srcTooltip = input.required<string | TemplateRef<void>>();\n srcTooltipPosition = input<SourceTooltipPositionKeys>('top');\n srcTooltipHideDelay = input(0);\n srcTooltipMaxWidth = input('280px');\n srcTooltipCustomClass = input('');\n sourceTooltipData = input<SourceTooltipData>();\n\n private _config!: SourceTooltipData;\n private overlayRef: OverlayRef | null = null;\n private hideTimeout?: number;\n private hoverDevice = this.isDeviceWithHover();\n\n private element = inject<ElementRef<HTMLElement>>(ElementRef);\n private overlay = inject(Overlay);\n private viewContainer = inject(ViewContainerRef);\n\n _ = effect(() => {\n const tooltip = this.srcTooltip();\n\n this._config = {\n ...this._config,\n content: tooltip,\n };\n });\n\n @HostListener('mouseenter')\n @HostListener('focus')\n showTooltip() {\n this.addTooltip();\n }\n\n @HostListener('mouseleave')\n @HostListener('blur')\n hideTooltip() {\n this.removeTooltip();\n }\n\n ngOnInit() {\n if (\n !Object.values(SourceTooltipPosition).includes(this.srcTooltipPosition())\n ) {\n throw new Error(\n 'Invalid tooltip position. Please provide a valid position',\n );\n }\n if (this.sourceTooltipData()) {\n this._config = {\n ...this.sourceTooltipData()!,\n content: this.srcTooltip() ?? '',\n };\n } else {\n this._config = {\n content: this.srcTooltip(),\n srcTooltipMaxWidth: this.srcTooltipMaxWidth(),\n srcTooltipHideDelay: this.srcTooltipHideDelay(),\n srcTooltipPosition: this.srcTooltipPosition(),\n srcTooltipCustomClass: this.srcTooltipCustomClass(),\n };\n }\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n destroy() {\n if (this.overlayRef !== null) {\n window.clearInterval(this.hideTimeout);\n this.overlayRef?.dispose();\n this.overlayRef = null;\n }\n }\n\n private addTooltip() {\n if (\n !this.hoverDevice ||\n this.overlayRef?.hasAttached() === true ||\n !this._config.content\n ) {\n return;\n }\n\n window.clearInterval(this.hideTimeout);\n this.attachTooltip(this._config.srcTooltipPosition);\n }\n\n private removeTooltip() {\n if (!this.hoverDevice || this.overlayRef?.hasAttached() === false) {\n return;\n }\n\n if (this._config.srcTooltipHideDelay === 0) {\n this.destroy();\n\n return;\n }\n\n this.hideTimeout = window.setTimeout(\n this.destroy.bind(this),\n this._config.srcTooltipHideDelay,\n );\n }\n\n private attachTooltip(position: SourceTooltipPositionKeys) {\n if (this.overlayRef === null) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.getPositionStrategy(position),\n });\n }\n\n const injector = Injector.create({\n providers: [\n {\n provide: SOURCE_TOOLTIP_DATA,\n useValue: this._config,\n },\n ],\n });\n\n const component = new ComponentPortal(\n SourceTooltipComponent,\n this.viewContainer,\n injector,\n );\n this.overlayRef.attach(component);\n }\n\n private getPositionStrategy(\n position: SourceTooltipPositionKeys,\n ): PositionStrategy {\n return this.overlay\n .position()\n .flexibleConnectedTo(this.element)\n .withPositions([TooltipPositions[position]]);\n }\n\n private isDeviceWithHover() {\n const hasHover = window.matchMedia('(hover: hover)').matches;\n const hasFinePointer = window.matchMedia('(pointer: fine)').matches;\n const userAgent = navigator.userAgent;\n const isSamsungDevice = /Samsung/i.test(userAgent);\n return (hasHover || hasFinePointer) && isDesktop() && !isSamsungDevice;\n }\n}\n","export function drawPaletteGradient(\n ctx: CanvasRenderingContext2D,\n rectWidth: number,\n rectHeight: number,\n): void {\n const whiteGrad = ctx.createLinearGradient(0, 0, rectWidth, 0);\n whiteGrad.addColorStop(0, 'rgba(255,255,255,1)');\n whiteGrad.addColorStop(1, 'rgba(255,255,255,0)');\n\n ctx.fillStyle = whiteGrad;\n ctx.fillRect(0, 0, rectWidth, rectHeight);\n\n const blackGrad = ctx.createLinearGradient(0, 0, 0, rectHeight);\n blackGrad.addColorStop(0, 'rgba(0,0,0,0)');\n blackGrad.addColorStop(1, 'rgba(0,0,0,1)');\n\n ctx.fillStyle = blackGrad;\n ctx.fillRect(0, 0, rectWidth, rectHeight);\n}\n","/**\n * RGB from the respective figures, HSV sequences in terms of returns.\n * RGB values are as follows.\n * R - a number from 0 to 255\n * G - a number from 0 to 255\n * B - a number from 0 to 255\n *\n * HSV values are as follows.\n * H - a number between 360-0\n * S - number between 0 and 1.0\n * V - number between 0 and 1.0\n *\n * Cannot compute, including alpha.\n * @ Param r the red (R) indicating the number (0x00 to 0xFF to)\n * @ Param g green (G) indicates the number (0x00 to 0xFF to)\n * @ Param b blue (B) shows the number (0x00 to 0xFF to)\n * @ Return HSV values into an any[] of [H, S, V]\n **/\nexport function RGBtoHSV(r: number, g: number, b: number): any[] {\n r /= 255;\n g /= 255;\n b /= 255;\n let h = 0,\n s = 0,\n v = 0;\n let x: number, y: number;\n if (r >= g) x = r;\n else x = g;\n if (b > x) x = b;\n if (r <= g) y = r;\n else y = g;\n if (b < y) y = b;\n v = x;\n const c: number = x - y;\n if (x == 0) s = 0;\n else s = c / x;\n if (s != 0) {\n if (r == x) {\n h = (g - b) / c;\n } else {\n if (g == x) {\n h = 2 + (b - r) / c;\n } else {\n if (b == x) {\n h = 4 + (r - g) / c;\n }\n }\n }\n h = h * 60;\n if (h < 0) h = h + 360;\n }\n return [h, s, v];\n}\n","import { RGBtoHSV } from './RGBtoHSV';\nimport type { SourceColorPickerOrientationKeys } from '../interfaces/source-color-picker.interface';\n\nexport function calculatePosition(\n width: number,\n height: number,\n color: string,\n orientation?: SourceColorPickerOrientationKeys,\n) {\n const [r, g, b] = color\n .slice(1)\n .match(/.{1,2}/g)!\n .map((x) => parseInt(x, 16));\n const [h, s, l] = RGBtoHSV(r, g, b);\n\n if (orientation === undefined) {\n return { x: width * s, y: height * (1 - l) };\n }\n\n return orientation === 'horizontal'\n ? { x: (width * h) / 360, y: height / 2 }\n : { x: width / 2, y: (height * h) / 360 };\n}\n","export function clampf(min: number, max: number, value: number): number {\n return Math.min(max, Math.max(min, value));\n}\n","export function RGBtoHEX(r: number, g: number, b: number): string {\n let _r = r.toString(16);\n let _g = g.toString(16);\n let _b = b.toString(16);\n\n if (_r.length === 1) {\n _r = '0' + _r;\n }\n if (_g.length === 1) {\n _g = '0' + _g;\n }\n if (_b.length === 1) {\n _b = '0' + _b;\n }\n\n return (_r + _g + _b).toUpperCase();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n HostListener,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { drawPaletteGradient } from '../../helpers/drawPaletteGradient';\nimport { calculatePosition } from '../../helpers/calculatePosition';\nimport { clampf } from '../../helpers/clampf';\nimport { RGBtoHEX } from '../../helpers/RGBtoHEX';\n\n@Component({\n standalone: true,\n selector: 'app-color-palette',\n templateUrl: './color-palette.component.html',\n styleUrls: ['./color-palette.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPaletteComponent {\n paletteContainer =\n viewChild<ElementRef<HTMLCanvasElement>>('paletteContainer');\n canvas = viewChild<ElementRef<HTMLCanvasElement>>('paletteCanvas');\n indicator = viewChild<ElementRef<HTMLSpanElement>>('indicator');\n selectedHex = input.required<string>();\n isNeedUpdatePalette = input.required<string | null>();\n paletteColorUpdate = output<string>();\n selectedPosition = signal({ x: 0, y: 0 });\n ctx = signal<CanvasRenderingContext2D | null>(null);\n width = signal(0);\n height = signal(0);\n\n _ = effect(() => {\n const container = this.paletteContainer();\n const canvas = this.canvas();\n\n untracked(() => {\n if (container?.nativeElement && canvas?.nativeElement) {\n this.width.set(container.nativeElement.offsetWidth);\n this.height.set(container.nativeElement.offsetHeight);\n requestAnimationFrame(() => this.redraw());\n }\n });\n });\n _isNeedUpdatePalette = effect(() => {\n const isNeedUpdatePalette = this.isNeedUpdatePalette();\n untracked(() => {\n if (isNeedUpdatePalette) {\n this.redraw();\n }\n });\n });\n #mousedown = false;\n\n redraw() {\n this.calcPosition();\n this.drawPalette();\n this.drawIndicator();\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp() {\n this.#mousedown = false;\n }\n\n onMouseDown(event: MouseEvent) {\n this.#mousedown = true;\n this.updatePosition(event);\n }\n\n onMouseMove(event: MouseEvent) {\n if (this.#mousedown) {\n this.updatePosition(event);\n }\n }\n\n private calcPosition() {\n if (this.width() === undefined || this.height() === undefined) {\n return;\n }\n this.selectedPosition.set(\n calculatePosition(this.width(), this.height(), this.selectedHex()),\n );\n }\n\n private updatePosition(event: MouseEvent) {\n if (this.width() === undefined || this.height() === undefined) {\n return;\n }\n this.selectedPosition.set({\n x: clampf(0, this.width() - 1, event.offsetX),\n y: clampf(0, this.height() - 1, event.offsetY),\n });\n\n this.drawIndicator();\n this.updateColor();\n }\n\n private drawPalette() {\n this.ctx.set(\n this.canvas()?.nativeElement.getContext('2d', {\n willReadFrequently: true,\n })!,\n );\n const ctx = this.ctx();\n if (!ctx) {\n return;\n }\n ctx.fillStyle = this.selectedHex() || 'rgba(255,255,255,1)';\n ctx.fillRect(0, 0, this.width(), this.height());\n drawPaletteGradient(ctx, this.width(), this.height());\n }\n\n private drawIndicator() {\n const indicator = this.indicator()?.nativeElement;\n if (!indicator) {\n return;\n }\n indicator.style.left = this.selectedPosition().x + 'px';\n indicator.style.top = this.selectedPosition().y + 'px';\n }\n\n private updateColor() {\n const imageData = this.ctx()!.getImageData(\n this.selectedPosition().x,\n this.selectedPosition().y,\n 1,\n 1,\n ).data;\n this.paletteColorUpdate.emit(\n `#${RGBtoHEX(imageData[0], imageData[1], imageData[2])}`,\n );\n }\n}\n","<div #paletteContainer class=\"src-color-palette\">\n <canvas\n #paletteCanvas\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n [height]=\"height()\"\n [width]=\"width()\"\n class=\"src-color-palette__canvas\"\n >\n </canvas>\n</div>\n<span #indicator class=\"src-color-picker-indicator\"></span>\n","import type { SourceColorPickerOrientationKeys } from '../interfaces/source-color-picker.interface';\n\nexport function drawGradient(\n ctx: CanvasRenderingContext2D,\n rectWidth: number,\n rectHeight: number,\n orientation: SourceColorPickerOrientationKeys,\n): void {\n const gradient =\n orientation === 'horizontal'\n ? ctx.createLinearGradient(0, 0, rectWidth, 0)\n : ctx.createLinearGradient(0, 0, 0, rectHeight);\n gradient.addColorStop(0, 'red');\n gradient.addColorStop(1 / 6, 'yellow');\n gradient.addColorStop(2 / 6, 'lime');\n gradient.addColorStop(3 / 6, 'cyan');\n gradient.addColorStop(4 / 6, 'blue');\n gradient.addColorStop(5 / 6, 'magenta');\n gradient.addColorStop(1, 'red');\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, rectWidth, rectHeight);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n HostListener,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { SourceColorPickerOrientationKeys } from '../../interfaces/source-color-picker.interface';\nimport { calculatePosition } from '../../helpers/calculatePosition';\nimport { drawGradient } from '../../helpers/drawGradient';\nimport { clampf } from '../../helpers/clampf';\nimport { RGBtoHEX } from '../../helpers/RGBtoHEX';\n\n@Component({\n standalone: true,\n selector: 'app-color-slider',\n templateUrl: './color-slider.component.html',\n styleUrls: ['./color-slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorSliderComponent {\n sliderContainer = viewChild<ElementRef<HTMLDivElement>>('sliderContainer');\n canvas = viewChild<ElementRef<HTMLCanvasElement>>('canvas');\n indicator = viewChild<ElementRef<HTMLSpanElement>>('indicator');\n selectedHex = input.required<string>();\n orientation = input.required<SourceColorPickerOrientationKeys>();\n sliderThickness = input.required<number>();\n isNeedUpdateSlider = input.required<string | null>();\n sliderColorUpdate = output<string>();\n selectedPosition = signal({ x: 0, y: 0 });\n width = signal(0);\n height = signal(0);\n ctx = signal<CanvasRenderingContext2D | null>(null);\n\n _ = effect(() => {\n const container = this.sliderContainer();\n const canvas = this.canvas();\n\n untracked(() => {\n if (container?.nativeElement && canvas?.nativeElement) {\n this.width.set(\n this.orientation() === 'horizontal'\n ? container.nativeElement.clientWidth\n : this.sliderThickness(),\n );\n this.height.set(\n this.orientation() === 'horizontal'\n ? this.sliderThickness()\n : container.nativeElement.clientHeight,\n );\n requestAnimationFrame(() => this.redraw());\n }\n });\n });\n _isNeedUpdateSlider = effect(() => {\n const isNeedUpdateSlider = this.isNeedUpdateSlider();\n untracked(() => {\n if (isNeedUpdateSlider) {\n this.redraw();\n }\n });\n });\n #mousedown = false;\n\n redraw() {\n this.calcPosition();\n this.drawSlider();\n this.drawIndicator();\n }\n\n @HostListener('window:mouseup', ['$event'])\n onMouseUp() {\n this.#mousedown = false;\n }\n\n onMouseDown(event: MouseEvent) {\n this.#mousedown = true;\n this.updatePosition(event);\n }\n\n onMouseMove(event: MouseEvent) {\n if (this.#mousedown) {\n this.updatePosition(event);\n }\n }\n\n private calcPosition() {\n if (this.width() === undefined || this.height() === undefined) {\n return;\n }\n this.selectedPosition.set(\n calculatePosition(\n this.width(),\n this.height(),\n this.selectedHex(),\n this.orientation(),\n ),\n );\n }\n\n private updatePosition(event: MouseEvent) {\n if (this.width() === undefined || this.height() === undefined) {\n return;\n }\n this.selectedPosition.set(\n this.orientation() === 'horizontal'\n ? {\n x: clampf(0, this.width() - 1, event.offsetX),\n y: this.height() / 2,\n }\n : {\n x: this.width() / 2,\n y: clampf(0, this.height() - 1, event.offsetY),\n },\n );\n this.drawIndicator();\n this.updateColor();\n }\n\n private drawSlider() {\n this.ctx.set(\n this.canvas()?.nativeElement.getContext('2d', {\n willReadFrequently: true,\n })!,\n );\n const ctx = this.ctx();\n if (!ctx) {\n return;\n }\n ctx.fillRect(0, 0, this.width(), this.height());\n drawGradient(ctx, this.width(), this.height(), this.orientation());\n }\n\n private drawIndicator() {\n const indicator = this.indicator()?.nativeElement;\n if (!indicator) {\n return;\n }\n indicator.style.left = this.selectedPosition().x + 'px';\n indicator.style.top = this.selectedPosition().y + 'px';\n }\n\n private updateColor() {\n const imageData = this.ctx()!.getImageData(\n this.selectedPosition().x,\n this.selectedPosition().y,\n 1,\n 1,\n ).data;\n this.sliderColorUpdate.emit(\n `#${RGBtoHEX(imageData[0], imageData[1], imageData[2])}`,\n );\n }\n}\n","<div #sliderContainer class=\"src-color-slider\">\n <canvas\n #canvas\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n [height]=\"height()\"\n [width]=\"width()\"\n class=\"src-color-slider__canvas\"\n >\n </canvas>\n <span #indicator class=\"src-color-picker-indicator\"></span>\n</div>\n","export const randomUUID = (): string => crypto.randomUUID();\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n linkedSignal,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ColorPaletteComponent } from '../color-palette/color-palette.component';\nimport { ColorSliderComponent } from '../color-slider/color-slider.component';\nimport { SourceColorPickerOrientationKeys } from '../../interfaces/source-color-picker.interface';\nimport { randomUUID } from '../../helpers/randomUUID';\n\nconst matchRegexp = /^#[0-9a-f]{6}$/i;\n\n@Component({\n selector: 'src-color-picker',\n templateUrl: './source-color-picker.component.html',\n styleUrls: ['./source-color-picker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ColorSliderComponent, ColorPaletteComponent],\n})\nexport class SourceColorPickerComponent {\n selectedColor = input.required<string>();\n isCompact = input(false);\n orientation = input<SourceColorPickerOrientationKeys>('horizontal');\n hasInput = input(true);\n sliderThickness = input(28);\n colorUpdate = output<string>();\n selectedHex = linkedSignal(() => this.selectedColor());\n isNeedUpdatePalette = signal<string | null>(null);\n isNeedUpdateSlider = signal<string | null>(null);\n\n paletteColorUpdate(color: string) {\n this.update(color);\n }\n\n sliderColorUpdate(color: string) {\n this.update(color);\n this.isNeedUpdatePalette.set(randomUUID());\n }\n\n inputUpdate(event: Event) {\n const input = event.target as HTMLInputElement;\n this.update(input.value);\n this.isNeedUpdatePalette.set(randomUUID());\n this.isNeedUpdateSlider.set(randomUUID());\n }\n\n update(color: string) {\n if (!color.match(matchRegexp)) {\n return;\n }\n this.selectedHex.set(color);\n this.colorUpdate.emit(color);\n }\n}\n","<div\n [class.src-color-picker--compact]=\"isCompact()\"\n [class.src-color-picker--horizontal]=\"orientation() === 'horizontal'\"\n [class.src-color-picker--vertical]=\"orientation() === 'vertical'\"\n [style.--srcColorPickerSliderThickness]=\"sliderThickness() + 'px'\"\n class=\"src-color-picker\"\n>\n <div class=\"src-color-picker__wrapper\">\n <app-color-palette\n (paletteColorUpdate)=\"paletteColorUpdate($event)\"\n [isNeedUpdatePalette]=\"isNeedUpdatePalette()\"\n [selectedHex]=\"selectedHex()\"\n ></app-color-palette>\n <app-color-slider\n (sliderColorUpdate)=\"sliderColorUpdate($event)\"\n [isNeedUpdateSlider]=\"isNeedUpdateSlider()\"\n [orientation]=\"orientation()\"\n [selectedHex]=\"selectedHex()\"\n [sliderThickness]=\"sliderThickness()\"\n ></app-color-slider>\n </div>\n @if (hasInput()) {\n <div class=\"src-color-picker__input-row\">\n <input\n class=\"src-color-picker__input\"\n type=\"text\"\n [value]=\"selectedHex()\"\n (input)=\"inputUpdate($event)\"\n />\n <div\n class=\"src-color-picker__swatch\"\n [style.background-color]=\"selectedHex() || 'white'\"\n ></div>\n </div>\n }\n</div>\n","export const SourceColorPickerOrientation = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical',\n} as const;\n\nexport type SourceColorPickerOrientationKeys =\n (typeof SourceColorPickerOrientation)[keyof typeof SourceColorPickerOrientation];\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n linkedSignal,\n OnInit,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SourceSliderComponent } from '@3dsource/source-ui-native';\n\n@Component({\n selector: 'src-slider-group',\n templateUrl: './source-slider-group.component.html',\n styleUrls: ['./source-slider-group.component.scss'],\n imports: [FormsModule, SourceSliderComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SourceSliderGroupComponent implements OnInit {\n min = input.required<number>();\n max = input.required<number>();\n value = input.required<number>();\n label = input('');\n id = input('');\n step = input(1);\n units = input('%');\n showTicks = input(false);\n showRange = input(false);\n isDisabled = input(false);\n testID = input('', { alias: 'data-testid' });\n groupValueChange = output<number>();\n\n inputValue = linkedSignal(() => this.value());\n sliderValue = linkedSignal(() =>\n Math.min(Math.max(this.value(), this.min()), this.max()),\n );\n\n ngOnInit() {\n this.groupValueChange.emit(this.sliderValue());\n }\n\n updateSliderValue(event: number) {\n const value = Math.min(this.max(), Math.max(this.min(), +event));\n this.inputValue.set(value);\n this.sliderValue.set(value);\n this.groupValueChange.emit(value);\n }\n\n updateSliderValueFromInput(event: Event) {\n const value = Math.min(\n this.max(),\n Math.max(this.min(), (event.target as HTMLInputElement).valueAsNumber),\n );\n this.inputValue.set(value);\n this.sliderValue.set(value);\n this.groupValueChange.emit(value);\n }\n\n onEnter(event: Event) {\n event.preventDefault();\n this.updateSliderValueFromInput(event);\n (event.target as HTMLInputElement).blur();\n }\n}\n","<div\n [attr.data-testid]=\"testID()\"\n [class.src-slider-group--disabled]=\"isDisabled()\"\n class=\"src-slider-group\"\n>\n <div class=\"src-slider-group__label\">\n <label [attr.data-testid]=\"testID() + '-label'\" [for]=\"id()\">\n {{ label() }}</label\n >\n </div>\n <div class=\"src-slider-group__input\">\n <input\n (change)=\"updateSliderValueFromInput($event)\"\n (keydown.enter)=\"onEnter($event)\"\n [attr.data-testid]=\"testID() + '-input'\"\n [disabled]=\"isDisabled()\"\n [max]=\"max()\"\n [min]=\"min()\"\n [value]=\"inputValue()\"\n class=\"src-slider-group__number\"\n type=\"number\"\n />\n @if (units()) {\n <div class=\"src-slider-group__units\">{{ units() }}</div>\n }\n </div>\n <src-slider\n (onChange)=\"updateSliderValue($event)\"\n [data-testid]=\"testID() + '-slider'\"\n [id]=\"id()\"\n [isDisabled]=\"isDisabled()\"\n [max]=\"max()\"\n [min]=\"min()\"\n [showTicks]=\"showTicks()\"\n [step]=\"step()\"\n [value]=\"sliderValue()\"\n ></src-slider>\n @if (showRange()) {\n <div class=\"src-slider-group__range\">\n <span class=\"src-slider-group__range-min\">{{ min() }}</span>\n <span class=\"src-slider-group__range-max\">{{ max() }}</span>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/lib/components/source-color-picker/components/color-palette/color-palette.component.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ColorPaletteComponent {
|
|
4
|
+
#private;
|
|
5
|
+
paletteContainer: import("@angular/core").Signal<ElementRef<HTMLCanvasElement> | undefined>;
|
|
6
|
+
canvas: import("@angular/core").Signal<ElementRef<HTMLCanvasElement> | undefined>;
|
|
7
|
+
indicator: import("@angular/core").Signal<ElementRef<HTMLSpanElement> | undefined>;
|
|
8
|
+
selectedHex: import("@angular/core").InputSignal<string>;
|
|
9
|
+
isNeedUpdatePalette: import("@angular/core").InputSignal<string | null>;
|
|
10
|
+
paletteColorUpdate: import("@angular/core").OutputEmitterRef<string>;
|
|
11
|
+
selectedPosition: import("@angular/core").WritableSignal<{
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}>;
|
|
15
|
+
ctx: import("@angular/core").WritableSignal<CanvasRenderingContext2D | null>;
|
|
16
|
+
width: import("@angular/core").WritableSignal<number>;
|
|
17
|
+
height: import("@angular/core").WritableSignal<number>;
|
|
18
|
+
_: import("@angular/core").EffectRef;
|
|
19
|
+
_isNeedUpdatePalette: import("@angular/core").EffectRef;
|
|
20
|
+
redraw(): void;
|
|
21
|
+
onMouseUp(): void;
|
|
22
|
+
onMouseDown(event: MouseEvent): void;
|
|
23
|
+
onMouseMove(event: MouseEvent): void;
|
|
24
|
+
private calcPosition;
|
|
25
|
+
private updatePosition;
|
|
26
|
+
private drawPalette;
|
|
27
|
+
private drawIndicator;
|
|
28
|
+
private updateColor;
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ColorPaletteComponent, never>;
|
|
30
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ColorPaletteComponent, "app-color-palette", never, { "selectedHex": { "alias": "selectedHex"; "required": true; "isSignal": true; }; "isNeedUpdatePalette": { "alias": "isNeedUpdatePalette"; "required": true; "isSignal": true; }; }, { "paletteColorUpdate": "paletteColorUpdate"; }, never, never, true, never>;
|
|
31
|
+
}
|
package/lib/components/source-color-picker/components/color-slider/color-slider.component.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { SourceColorPickerOrientationKeys } from '../../interfaces/source-color-picker.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ColorSliderComponent {
|
|
5
|
+
#private;
|
|
6
|
+
sliderContainer: import("@angular/core").Signal<ElementRef<HTMLDivElement> | undefined>;
|
|
7
|
+
canvas: import("@angular/core").Signal<ElementRef<HTMLCanvasElement> | undefined>;
|
|
8
|
+
indicator: import("@angular/core").Signal<ElementRef<HTMLSpanElement> | undefined>;
|
|
9
|
+
selectedHex: import("@angular/core").InputSignal<string>;
|
|
10
|
+
orientation: import("@angular/core").InputSignal<SourceColorPickerOrientationKeys>;
|
|
11
|
+
sliderThickness: import("@angular/core").InputSignal<number>;
|
|
12
|
+
isNeedUpdateSlider: import("@angular/core").InputSignal<string | null>;
|
|
13
|
+
sliderColorUpdate: import("@angular/core").OutputEmitterRef<string>;
|
|
14
|
+
selectedPosition: import("@angular/core").WritableSignal<{
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
}>;
|
|
18
|
+
width: import("@angular/core").WritableSignal<number>;
|
|
19
|
+
height: import("@angular/core").WritableSignal<number>;
|
|
20
|
+
ctx: import("@angular/core").WritableSignal<CanvasRenderingContext2D | null>;
|
|
21
|
+
_: import("@angular/core").EffectRef;
|
|
22
|
+
_isNeedUpdateSlider: import("@angular/core").EffectRef;
|
|
23
|
+
redraw(): void;
|
|
24
|
+
onMouseUp(): void;
|
|
25
|
+
onMouseDown(event: MouseEvent): void;
|
|
26
|
+
onMouseMove(event: MouseEvent): void;
|
|
27
|
+
private calcPosition;
|
|
28
|
+
private updatePosition;
|
|
29
|
+
private drawSlider;
|
|
30
|
+
private drawIndicator;
|
|
31
|
+
private updateColor;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ColorSliderComponent, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ColorSliderComponent, "app-color-slider", never, { "selectedHex": { "alias": "selectedHex"; "required": true; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": true; "isSignal": true; }; "sliderThickness": { "alias": "sliderThickness"; "required": true; "isSignal": true; }; "isNeedUpdateSlider": { "alias": "isNeedUpdateSlider"; "required": true; "isSignal": true; }; }, { "sliderColorUpdate": "sliderColorUpdate"; }, never, never, true, never>;
|
|
34
|
+
}
|
package/lib/components/source-color-picker/components/container/source-color-picker.component.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SourceColorPickerOrientationKeys } from '../../interfaces/source-color-picker.interface';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class SourceColorPickerComponent {
|
|
4
|
+
selectedColor: import("@angular/core").InputSignal<string>;
|
|
5
|
+
isCompact: import("@angular/core").InputSignal<boolean>;
|
|
6
|
+
orientation: import("@angular/core").InputSignal<SourceColorPickerOrientationKeys>;
|
|
7
|
+
hasInput: import("@angular/core").InputSignal<boolean>;
|
|
8
|
+
sliderThickness: import("@angular/core").InputSignal<number>;
|
|
9
|
+
colorUpdate: import("@angular/core").OutputEmitterRef<string>;
|
|
10
|
+
selectedHex: import("@angular/core").WritableSignal<string>;
|
|
11
|
+
isNeedUpdatePalette: import("@angular/core").WritableSignal<string | null>;
|
|
12
|
+
isNeedUpdateSlider: import("@angular/core").WritableSignal<string | null>;
|
|
13
|
+
paletteColorUpdate(color: string): void;
|
|
14
|
+
sliderColorUpdate(color: string): void;
|
|
15
|
+
inputUpdate(event: Event): void;
|
|
16
|
+
update(color: string): void;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SourceColorPickerComponent, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SourceColorPickerComponent, "src-color-picker", never, { "selectedColor": { "alias": "selectedColor"; "required": true; "isSignal": true; }; "isCompact": { "alias": "isCompact"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "hasInput": { "alias": "hasInput"; "required": false; "isSignal": true; }; "sliderThickness": { "alias": "sliderThickness"; "required": false; "isSignal": true; }; }, { "colorUpdate": "colorUpdate"; }, never, never, true, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function RGBtoHEX(r: number, g: number, b: number): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RGB from the respective figures, HSV sequences in terms of returns.
|
|
3
|
+
* RGB values are as follows.
|
|
4
|
+
* R - a number from 0 to 255
|
|
5
|
+
* G - a number from 0 to 255
|
|
6
|
+
* B - a number from 0 to 255
|
|
7
|
+
*
|
|
8
|
+
* HSV values are as follows.
|
|
9
|
+
* H - a number between 360-0
|
|
10
|
+
* S - number between 0 and 1.0
|
|
11
|
+
* V - number between 0 and 1.0
|
|
12
|
+
*
|
|
13
|
+
* Cannot compute, including alpha.
|
|
14
|
+
* @ Param r the red (R) indicating the number (0x00 to 0xFF to)
|
|
15
|
+
* @ Param g green (G) indicates the number (0x00 to 0xFF to)
|
|
16
|
+
* @ Param b blue (B) shows the number (0x00 to 0xFF to)
|
|
17
|
+
* @ Return HSV values into an any[] of [H, S, V]
|
|
18
|
+
**/
|
|
19
|
+
export declare function RGBtoHSV(r: number, g: number, b: number): any[];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SourceColorPickerOrientationKeys } from '../interfaces/source-color-picker.interface';
|
|
2
|
+
export declare function calculatePosition(width: number, height: number, color: string, orientation?: SourceColorPickerOrientationKeys): {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function clampf(min: number, max: number, value: number): number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function drawPaletteGradient(ctx: CanvasRenderingContext2D, rectWidth: number, rectHeight: number): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const randomUUID: () => string;
|
|
@@ -7,7 +7,6 @@ export declare class SourcePopoverService {
|
|
|
7
7
|
readonly backButtonClicked: import("@angular/core").WritableSignal<OverlayRef | null>;
|
|
8
8
|
show(overlayOrigin: CdkOverlayOrigin, viewContainerRef: ViewContainerRef, override: Partial<SourcePopoverData>): OverlayRef;
|
|
9
9
|
closePopover(overlayRef: OverlayRef): void;
|
|
10
|
-
emitBackAction(menuRef: OverlayRef): void;
|
|
11
10
|
getUpdatedConfig(override: Partial<SourcePopoverData>): SourcePopoverData;
|
|
12
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<SourcePopoverService, never>;
|
|
13
12
|
static ɵprov: i0.ɵɵInjectableDeclaration<SourcePopoverService>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class SourceSliderGroupComponent implements OnInit {
|
|
4
|
+
min: import("@angular/core").InputSignal<number>;
|
|
5
|
+
max: import("@angular/core").InputSignal<number>;
|
|
6
|
+
value: import("@angular/core").InputSignal<number>;
|
|
7
|
+
label: import("@angular/core").InputSignal<string>;
|
|
8
|
+
id: import("@angular/core").InputSignal<string>;
|
|
9
|
+
step: import("@angular/core").InputSignal<number>;
|
|
10
|
+
units: import("@angular/core").InputSignal<string>;
|
|
11
|
+
showTicks: import("@angular/core").InputSignal<boolean>;
|
|
12
|
+
showRange: import("@angular/core").InputSignal<boolean>;
|
|
13
|
+
isDisabled: import("@angular/core").InputSignal<boolean>;
|
|
14
|
+
testID: import("@angular/core").InputSignal<string>;
|
|
15
|
+
groupValueChange: import("@angular/core").OutputEmitterRef<number>;
|
|
16
|
+
inputValue: import("@angular/core").WritableSignal<number>;
|
|
17
|
+
sliderValue: import("@angular/core").WritableSignal<number>;
|
|
18
|
+
ngOnInit(): void;
|
|
19
|
+
updateSliderValue(event: number): void;
|
|
20
|
+
updateSliderValueFromInput(event: Event): void;
|
|
21
|
+
onEnter(event: Event): void;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SourceSliderGroupComponent, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SourceSliderGroupComponent, "src-slider-group", never, { "min": { "alias": "min"; "required": true; "isSignal": true; }; "max": { "alias": "max"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "units": { "alias": "units"; "required": false; "isSignal": true; }; "showTicks": { "alias": "showTicks"; "required": false; "isSignal": true; }; "showRange": { "alias": "showRange"; "required": false; "isSignal": true; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "testID": { "alias": "data-testid"; "required": false; "isSignal": true; }; }, { "groupValueChange": "groupValueChange"; }, never, never, true, never>;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './components/source-slider-group.component';
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -3,3 +3,5 @@ export * from './lib/components/source-popover';
|
|
|
3
3
|
export * from './lib/components/source-tab-line';
|
|
4
4
|
export * from './lib/components/source-tabs';
|
|
5
5
|
export * from './lib/components/source-tooltip';
|
|
6
|
+
export * from './lib/components/source-color-picker';
|
|
7
|
+
export * from './lib/components/source-slider-group';
|