@neural-ui/core 1.5.7 → 1.5.9
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/neural-ui-core-autocomplete.mjs +193 -90
- package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
- package/fesm2022/neural-ui-core-color-picker.mjs +66 -8
- package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
- package/fesm2022/neural-ui-core-date-input.mjs +139 -19
- package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
- package/fesm2022/neural-ui-core-multiselect.mjs +86 -32
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
- package/fesm2022/neural-ui-core-notification-center.mjs +63 -7
- package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -1
- package/fesm2022/neural-ui-core-select.mjs +87 -39
- package/fesm2022/neural-ui-core-select.mjs.map +1 -1
- package/fesm2022/neural-ui-core-split-button.mjs +67 -8
- package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_cdk-overlay.scss +69 -0
- package/styles/index.scss +1 -0
- package/types/neural-ui-core-autocomplete.d.ts +11 -0
- package/types/neural-ui-core-color-picker.d.ts +6 -0
- package/types/neural-ui-core-date-input.d.ts +7 -1
- package/types/neural-ui-core-multiselect.d.ts +8 -3
- package/types/neural-ui-core-notification-center.d.ts +6 -0
- package/types/neural-ui-core-select.d.ts +8 -2
- package/types/neural-ui-core-split-button.d.ts +6 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, output, signal, linkedSignal, inject, ElementRef, computed, forwardRef, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/cdk/overlay';
|
|
4
|
+
import { Overlay, OverlayModule } from '@angular/cdk/overlay';
|
|
3
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
6
|
|
|
5
7
|
/** Parse hex → { r, g, b } */
|
|
@@ -126,9 +128,37 @@ class NeuColorPickerComponent {
|
|
|
126
128
|
_onChange = () => { };
|
|
127
129
|
_onTouched = () => { };
|
|
128
130
|
_el = inject((ElementRef));
|
|
131
|
+
_overlay = inject(Overlay);
|
|
132
|
+
_viewportMargin = 16;
|
|
133
|
+
overlayPositions = [
|
|
134
|
+
{
|
|
135
|
+
originX: 'start',
|
|
136
|
+
originY: 'bottom',
|
|
137
|
+
overlayX: 'start',
|
|
138
|
+
overlayY: 'top',
|
|
139
|
+
offsetY: 6,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
originX: 'end',
|
|
143
|
+
originY: 'bottom',
|
|
144
|
+
overlayX: 'end',
|
|
145
|
+
overlayY: 'top',
|
|
146
|
+
offsetY: 6,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
originX: 'start',
|
|
150
|
+
originY: 'top',
|
|
151
|
+
overlayX: 'start',
|
|
152
|
+
overlayY: 'bottom',
|
|
153
|
+
offsetY: -6,
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
overlayScrollStrategy = this._overlay.scrollStrategies.reposition();
|
|
129
157
|
// ── Close on outside click ─────────────────────────────────────
|
|
130
158
|
_outsideClick(e) {
|
|
131
|
-
|
|
159
|
+
const target = e.target;
|
|
160
|
+
const isInsidePanel = !!target?.closest('.neu-cp__panel');
|
|
161
|
+
if (!this._el.nativeElement.contains(e.target) && !isInsidePanel) {
|
|
132
162
|
this._isOpen.set(false);
|
|
133
163
|
}
|
|
134
164
|
}
|
|
@@ -240,6 +270,8 @@ class NeuColorPickerComponent {
|
|
|
240
270
|
], ngImport: i0, template: `
|
|
241
271
|
<!-- Swatch trigger -->
|
|
242
272
|
<button
|
|
273
|
+
cdkOverlayOrigin
|
|
274
|
+
#colorPickerOrigin="cdkOverlayOrigin"
|
|
243
275
|
type="button"
|
|
244
276
|
class="neu-cp__trigger"
|
|
245
277
|
[attr.aria-expanded]="_isOpen()"
|
|
@@ -251,7 +283,19 @@ class NeuColorPickerComponent {
|
|
|
251
283
|
<span class="neu-cp__hex-label">{{ _hexValue() }}</span>
|
|
252
284
|
</button>
|
|
253
285
|
|
|
254
|
-
|
|
286
|
+
<ng-template
|
|
287
|
+
cdkConnectedOverlay
|
|
288
|
+
[cdkConnectedOverlayOrigin]="colorPickerOrigin"
|
|
289
|
+
[cdkConnectedOverlayOpen]="_isOpen()"
|
|
290
|
+
[cdkConnectedOverlayPositions]="overlayPositions"
|
|
291
|
+
[cdkConnectedOverlayScrollStrategy]="overlayScrollStrategy"
|
|
292
|
+
[cdkConnectedOverlayHasBackdrop]="true"
|
|
293
|
+
[cdkConnectedOverlayBackdropClass]="'cdk-overlay-transparent-backdrop'"
|
|
294
|
+
[cdkConnectedOverlayPush]="true"
|
|
295
|
+
[cdkConnectedOverlayViewportMargin]="_viewportMargin"
|
|
296
|
+
(backdropClick)="_isOpen.set(false)"
|
|
297
|
+
(detach)="_isOpen.set(false)"
|
|
298
|
+
>
|
|
255
299
|
<div class="neu-cp__panel" role="dialog" aria-label="Selector de color">
|
|
256
300
|
<!-- HSV Canvas -->
|
|
257
301
|
<div
|
|
@@ -318,12 +362,12 @@ class NeuColorPickerComponent {
|
|
|
318
362
|
<span class="neu-cp__swatch-sm" [style.background]="_hexValue()"></span>
|
|
319
363
|
</div>
|
|
320
364
|
</div>
|
|
321
|
-
|
|
322
|
-
`, isInline: true, styles: ["@charset \"UTF-8\";.neu-cp{position:relative;display:inline-block}.neu-cp--disabled{opacity:.55;pointer-events:none}.neu-cp__trigger{all:unset;display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);background:var(--neu-surface-1, #ffffff);cursor:pointer;box-sizing:border-box;transition:border-color .12s}.neu-cp__trigger:hover:not([disabled]){border-color:var(--neu-color-primary, #0ea5e9)}.neu-cp__trigger[disabled]{background:var(--neu-surface-2, #f3f4f6)}.neu-cp__swatch{width:22px;height:22px;border-radius:var(--neu-radius-sm, 4px);border:1px solid rgba(0,0,0,.1);display:inline-block}.neu-cp__swatch-sm{width:28px;height:28px;border-radius:var(--neu-radius-md, 8px);border:1px solid rgba(0,0,0,.1);display:inline-block;flex-shrink:0}.neu-cp__hex-label{font-size:.8125rem;color:var(--neu-text-primary, #111);font-family:monospace}.neu-cp__panel{position:
|
|
365
|
+
</ng-template>
|
|
366
|
+
`, isInline: true, styles: ["@charset \"UTF-8\";.neu-cp{position:relative;display:inline-block}.neu-cp--disabled{opacity:.55;pointer-events:none}.neu-cp__trigger{all:unset;display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);background:var(--neu-surface-1, #ffffff);cursor:pointer;box-sizing:border-box;transition:border-color .12s}.neu-cp__trigger:hover:not([disabled]){border-color:var(--neu-color-primary, #0ea5e9)}.neu-cp__trigger[disabled]{background:var(--neu-surface-2, #f3f4f6)}.neu-cp__swatch{width:22px;height:22px;border-radius:var(--neu-radius-sm, 4px);border:1px solid rgba(0,0,0,.1);display:inline-block}.neu-cp__swatch-sm{width:28px;height:28px;border-radius:var(--neu-radius-md, 8px);border:1px solid rgba(0,0,0,.1);display:inline-block;flex-shrink:0}.neu-cp__hex-label{font-size:.8125rem;color:var(--neu-text-primary, #111);font-family:monospace}.neu-cp__panel{position:relative;width:272px;background:var(--neu-surface-1, #ffffff);border:1px solid var(--neu-border-color, #e5e7eb);border-radius:var(--neu-radius-xl, 16px);box-shadow:0 10px 24px -4px #00000024;padding:16px;z-index:1001;display:flex;flex-direction:column;gap:12px;animation:neu-cp-in 80ms ease}@keyframes neu-cp-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-cp__canvas-wrap{position:relative;width:100%;height:150px;border-radius:var(--neu-radius-md, 8px);overflow:hidden;cursor:crosshair;-webkit-user-select:none;user-select:none;touch-action:none}.neu-cp__canvas-wrap:before{content:\"\";position:absolute;inset:0;background:linear-gradient(to right,#fff,transparent)}.neu-cp__canvas-wrap:after{content:\"\";position:absolute;inset:0;background:linear-gradient(to top,#000,transparent)}.neu-cp__canvas-cursor{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 4px #00000073;transform:translate(-50%,-50%);pointer-events:none;z-index:1}.neu-cp__hue-slider{width:100%;height:10px;border-radius:999px;cursor:pointer;appearance:none;-webkit-appearance:none;background:linear-gradient(to right,red,#ff8000,#ff0,#80ff00,#0f0,#00ff80,#0ff,#0080ff,#00f,#7f00ff,#f0f,#ff0080,red)}.neu-cp__hue-slider::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid rgba(0,0,0,.25);box-shadow:0 1px 3px #0003;cursor:pointer}.neu-cp__hue-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid rgba(0,0,0,.25);box-shadow:0 1px 3px #0003;cursor:pointer}.neu-cp__swatches{display:flex;gap:5px;flex-wrap:wrap}.neu-cp__sw{all:unset;box-sizing:border-box;width:20px;height:20px;border-radius:4px;cursor:pointer;border:1.5px solid rgba(0,0,0,.1);transition:transform 80ms}.neu-cp__sw:hover{transform:scale(1.2)}.neu-cp__sw:focus-visible{outline:2px solid var(--neu-color-primary, #0ea5e9);outline-offset:1px}.neu-cp__mode-tabs{display:flex;background:var(--neu-surface-2, #f3f4f6);border-radius:var(--neu-radius-md, 8px);padding:3px;gap:2px}.neu-cp__mode-btn{all:unset;flex:1;text-align:center;font-size:.6875rem;font-weight:600;padding:4px 0;border-radius:6px;cursor:pointer;transition:background 80ms,color 80ms}.neu-cp__mode-btn--active{background:var(--neu-surface-1, #ffffff);color:var(--neu-color-primary, #0ea5e9);box-shadow:0 1px 4px #00000014}.neu-cp__input-row{display:flex;gap:8px;align-items:center}.neu-cp__text-input{flex:1;padding:6px 10px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);font-size:.8125rem;font-family:monospace;background:var(--neu-surface-1, #fff);color:var(--neu-text-primary, #111);outline:none}.neu-cp__text-input:focus{border-color:var(--neu-color-primary, #0ea5e9)}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
323
367
|
}
|
|
324
368
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuColorPickerComponent, decorators: [{
|
|
325
369
|
type: Component,
|
|
326
|
-
args: [{ selector: 'neu-color-picker', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
370
|
+
args: [{ selector: 'neu-color-picker', imports: [OverlayModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
327
371
|
{
|
|
328
372
|
provide: NG_VALUE_ACCESSOR,
|
|
329
373
|
useExisting: forwardRef(() => NeuColorPickerComponent),
|
|
@@ -336,6 +380,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
336
380
|
}, template: `
|
|
337
381
|
<!-- Swatch trigger -->
|
|
338
382
|
<button
|
|
383
|
+
cdkOverlayOrigin
|
|
384
|
+
#colorPickerOrigin="cdkOverlayOrigin"
|
|
339
385
|
type="button"
|
|
340
386
|
class="neu-cp__trigger"
|
|
341
387
|
[attr.aria-expanded]="_isOpen()"
|
|
@@ -347,7 +393,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
347
393
|
<span class="neu-cp__hex-label">{{ _hexValue() }}</span>
|
|
348
394
|
</button>
|
|
349
395
|
|
|
350
|
-
|
|
396
|
+
<ng-template
|
|
397
|
+
cdkConnectedOverlay
|
|
398
|
+
[cdkConnectedOverlayOrigin]="colorPickerOrigin"
|
|
399
|
+
[cdkConnectedOverlayOpen]="_isOpen()"
|
|
400
|
+
[cdkConnectedOverlayPositions]="overlayPositions"
|
|
401
|
+
[cdkConnectedOverlayScrollStrategy]="overlayScrollStrategy"
|
|
402
|
+
[cdkConnectedOverlayHasBackdrop]="true"
|
|
403
|
+
[cdkConnectedOverlayBackdropClass]="'cdk-overlay-transparent-backdrop'"
|
|
404
|
+
[cdkConnectedOverlayPush]="true"
|
|
405
|
+
[cdkConnectedOverlayViewportMargin]="_viewportMargin"
|
|
406
|
+
(backdropClick)="_isOpen.set(false)"
|
|
407
|
+
(detach)="_isOpen.set(false)"
|
|
408
|
+
>
|
|
351
409
|
<div class="neu-cp__panel" role="dialog" aria-label="Selector de color">
|
|
352
410
|
<!-- HSV Canvas -->
|
|
353
411
|
<div
|
|
@@ -414,8 +472,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
414
472
|
<span class="neu-cp__swatch-sm" [style.background]="_hexValue()"></span>
|
|
415
473
|
</div>
|
|
416
474
|
</div>
|
|
417
|
-
|
|
418
|
-
`, styles: ["@charset \"UTF-8\";.neu-cp{position:relative;display:inline-block}.neu-cp--disabled{opacity:.55;pointer-events:none}.neu-cp__trigger{all:unset;display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);background:var(--neu-surface-1, #ffffff);cursor:pointer;box-sizing:border-box;transition:border-color .12s}.neu-cp__trigger:hover:not([disabled]){border-color:var(--neu-color-primary, #0ea5e9)}.neu-cp__trigger[disabled]{background:var(--neu-surface-2, #f3f4f6)}.neu-cp__swatch{width:22px;height:22px;border-radius:var(--neu-radius-sm, 4px);border:1px solid rgba(0,0,0,.1);display:inline-block}.neu-cp__swatch-sm{width:28px;height:28px;border-radius:var(--neu-radius-md, 8px);border:1px solid rgba(0,0,0,.1);display:inline-block;flex-shrink:0}.neu-cp__hex-label{font-size:.8125rem;color:var(--neu-text-primary, #111);font-family:monospace}.neu-cp__panel{position:
|
|
475
|
+
</ng-template>
|
|
476
|
+
`, styles: ["@charset \"UTF-8\";.neu-cp{position:relative;display:inline-block}.neu-cp--disabled{opacity:.55;pointer-events:none}.neu-cp__trigger{all:unset;display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);background:var(--neu-surface-1, #ffffff);cursor:pointer;box-sizing:border-box;transition:border-color .12s}.neu-cp__trigger:hover:not([disabled]){border-color:var(--neu-color-primary, #0ea5e9)}.neu-cp__trigger[disabled]{background:var(--neu-surface-2, #f3f4f6)}.neu-cp__swatch{width:22px;height:22px;border-radius:var(--neu-radius-sm, 4px);border:1px solid rgba(0,0,0,.1);display:inline-block}.neu-cp__swatch-sm{width:28px;height:28px;border-radius:var(--neu-radius-md, 8px);border:1px solid rgba(0,0,0,.1);display:inline-block;flex-shrink:0}.neu-cp__hex-label{font-size:.8125rem;color:var(--neu-text-primary, #111);font-family:monospace}.neu-cp__panel{position:relative;width:272px;background:var(--neu-surface-1, #ffffff);border:1px solid var(--neu-border-color, #e5e7eb);border-radius:var(--neu-radius-xl, 16px);box-shadow:0 10px 24px -4px #00000024;padding:16px;z-index:1001;display:flex;flex-direction:column;gap:12px;animation:neu-cp-in 80ms ease}@keyframes neu-cp-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-cp__canvas-wrap{position:relative;width:100%;height:150px;border-radius:var(--neu-radius-md, 8px);overflow:hidden;cursor:crosshair;-webkit-user-select:none;user-select:none;touch-action:none}.neu-cp__canvas-wrap:before{content:\"\";position:absolute;inset:0;background:linear-gradient(to right,#fff,transparent)}.neu-cp__canvas-wrap:after{content:\"\";position:absolute;inset:0;background:linear-gradient(to top,#000,transparent)}.neu-cp__canvas-cursor{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 4px #00000073;transform:translate(-50%,-50%);pointer-events:none;z-index:1}.neu-cp__hue-slider{width:100%;height:10px;border-radius:999px;cursor:pointer;appearance:none;-webkit-appearance:none;background:linear-gradient(to right,red,#ff8000,#ff0,#80ff00,#0f0,#00ff80,#0ff,#0080ff,#00f,#7f00ff,#f0f,#ff0080,red)}.neu-cp__hue-slider::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid rgba(0,0,0,.25);box-shadow:0 1px 3px #0003;cursor:pointer}.neu-cp__hue-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid rgba(0,0,0,.25);box-shadow:0 1px 3px #0003;cursor:pointer}.neu-cp__swatches{display:flex;gap:5px;flex-wrap:wrap}.neu-cp__sw{all:unset;box-sizing:border-box;width:20px;height:20px;border-radius:4px;cursor:pointer;border:1.5px solid rgba(0,0,0,.1);transition:transform 80ms}.neu-cp__sw:hover{transform:scale(1.2)}.neu-cp__sw:focus-visible{outline:2px solid var(--neu-color-primary, #0ea5e9);outline-offset:1px}.neu-cp__mode-tabs{display:flex;background:var(--neu-surface-2, #f3f4f6);border-radius:var(--neu-radius-md, 8px);padding:3px;gap:2px}.neu-cp__mode-btn{all:unset;flex:1;text-align:center;font-size:.6875rem;font-weight:600;padding:4px 0;border-radius:6px;cursor:pointer;transition:background 80ms,color 80ms}.neu-cp__mode-btn--active{background:var(--neu-surface-1, #ffffff);color:var(--neu-color-primary, #0ea5e9);box-shadow:0 1px 4px #00000014}.neu-cp__input-row{display:flex;gap:8px;align-items:center}.neu-cp__text-input{flex:1;padding:6px 10px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);font-size:.8125rem;font-family:monospace;background:var(--neu-surface-1, #fff);color:var(--neu-text-primary, #111);outline:none}.neu-cp__text-input:focus{border-color:var(--neu-color-primary, #0ea5e9)}\n"] }]
|
|
419
477
|
}], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], colorChange: [{ type: i0.Output, args: ["colorChange"] }], _outsideClick: [{
|
|
420
478
|
type: HostListener,
|
|
421
479
|
args: ['document:mousedown', ['$event']]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-color-picker.mjs","sources":["../../../../projects/ui-core/color-picker/neu-color-picker.component.ts","../../../../projects/ui-core/color-picker/neural-ui-core-color-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type NeuColorMode = 'hex' | 'rgb' | 'hsl';\n\n/** Parse hex → { r, g, b } */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const clean = hex.replace('#', '').padEnd(6, '0');\n if (!/^[0-9a-fA-F]{6}$/.test(clean)) return null;\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n };\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return (\n '#' +\n [r, g, b]\n .map((v) =>\n Math.round(Math.max(0, Math.min(255, v)))\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')\n );\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n const _r = r / 255,\n _g = g / 255,\n _b = b / 255;\n const max = Math.max(_r, _g, _b),\n min = Math.min(_r, _g, _b);\n let h = 0,\n s = 0;\n const l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case _r:\n h = ((_g - _b) / d + (_g < _b ? 6 : 0)) / 6;\n break;\n case _g:\n h = ((_b - _r) / d + 2) / 6;\n break;\n case _b:\n h = ((_r - _g) / d + 4) / 6;\n break;\n }\n }\n return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n const _r = r / 255,\n _g = g / 255,\n _b = b / 255;\n const max = Math.max(_r, _g, _b),\n min = Math.min(_r, _g, _b);\n const v = max;\n const s = max === 0 ? 0 : (max - min) / max;\n let h = 0;\n if (max !== min) {\n const d = max - min;\n switch (max) {\n case _r:\n h = ((_g - _b) / d + (_g < _b ? 6 : 0)) / 6;\n break;\n case _g:\n h = ((_b - _r) / d + 2) / 6;\n break;\n case _b:\n h = ((_r - _g) / d + 4) / 6;\n break;\n }\n }\n return { h: Math.round(h * 360), s: Math.round(s * 100), v: Math.round(v * 100) };\n}\n\nfunction hsvToHex(h: number, s: number, v: number): string {\n const _s = s / 100,\n _v = v / 100;\n const f = (n: number) => {\n const k = (n + h / 60) % 6;\n const val = _v - _v * _s * Math.max(0, Math.min(k, 4 - k, 1));\n return Math.round(val * 255)\n .toString(16)\n .padStart(2, '0');\n };\n return `#${f(5)}${f(3)}${f(1)}`;\n}\n\nfunction hslToHex(h: number, s: number, l: number): string {\n const _s = s / 100,\n _l = l / 100;\n const a = _s * Math.min(_l, 1 - _l);\n const f = (n: number) => {\n const k = (n + h / 30) % 12;\n const color = _l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return Math.round(255 * color)\n .toString(16)\n .padStart(2, '0');\n };\n return `#${f(0)}${f(8)}${f(4)}`;\n}\n\nlet _seq = 0;\n\n/**\n * NeuralUI ColorPicker\n *\n * Selector de color con swatch, hue slider y modos hex/rgb/hsl. CVA.\n *\n * Uso:\n * <neu-color-picker [formControl]=\"colorCtrl\" mode=\"hex\" />\n */\n@Component({\n selector: 'neu-color-picker',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuColorPickerComponent),\n multi: true,\n },\n ],\n host: {\n class: 'neu-cp',\n '[class.neu-cp--open]': '_isOpen()',\n '[class.neu-cp--disabled]': '_cvaDisabled()',\n },\n template: `\n <!-- Swatch trigger -->\n <button\n type=\"button\"\n class=\"neu-cp__trigger\"\n [attr.aria-expanded]=\"_isOpen()\"\n [attr.aria-label]=\"'Color: ' + _hexValue()\"\n [disabled]=\"_cvaDisabled()\"\n (click)=\"_toggle()\"\n >\n <span class=\"neu-cp__swatch\" [style.background]=\"_hexValue()\"></span>\n <span class=\"neu-cp__hex-label\">{{ _hexValue() }}</span>\n </button>\n\n @if (_isOpen()) {\n <div class=\"neu-cp__panel\" role=\"dialog\" aria-label=\"Selector de color\">\n <!-- HSV Canvas -->\n <div\n class=\"neu-cp__canvas-wrap\"\n [style.background-color]=\"'hsl(' + _hue() + ', 100%, 50%)'\"\n (pointerdown)=\"_canvasDown($event)\"\n (pointermove)=\"_canvasDrag($event)\"\n (pointerup)=\"_canvasUp($event)\"\n >\n <div\n class=\"neu-cp__canvas-cursor\"\n [style.left]=\"_sv().s + '%'\"\n [style.top]=\"100 - _sv().v + '%'\"\n ></div>\n </div>\n\n <!-- Hue slider -->\n <input\n type=\"range\"\n class=\"neu-cp__hue-slider\"\n min=\"0\"\n max=\"360\"\n [value]=\"_hue()\"\n (input)=\"_onHueChange(+$any($event.target).value)\"\n [attr.aria-label]=\"'Tono ' + _hue() + '°'\"\n />\n\n <!-- Swatches -->\n <div class=\"neu-cp__swatches\" role=\"group\" aria-label=\"Colores predefinidos\">\n @for (sw of _swatches; track sw) {\n <button\n type=\"button\"\n class=\"neu-cp__sw\"\n [style.background]=\"sw\"\n [attr.aria-label]=\"'Color ' + sw\"\n (click)=\"_pickSwatch(sw)\"\n ></button>\n }\n </div>\n\n <!-- Mode tabs -->\n <div class=\"neu-cp__mode-tabs\">\n @for (m of _modes; track m) {\n <button\n type=\"button\"\n class=\"neu-cp__mode-btn\"\n [class.neu-cp__mode-btn--active]=\"_activeMode() === m\"\n (click)=\"_activeMode.set(m)\"\n >\n {{ m.toUpperCase() }}\n </button>\n }\n </div>\n\n <!-- Value input -->\n <div class=\"neu-cp__input-row\">\n <input\n class=\"neu-cp__text-input\"\n type=\"text\"\n [value]=\"_textValue()\"\n (input)=\"_onTextChange($any($event.target).value)\"\n [attr.aria-label]=\"'Valor ' + _activeMode()\"\n />\n <span class=\"neu-cp__swatch-sm\" [style.background]=\"_hexValue()\"></span>\n </div>\n </div>\n }\n `,\n styleUrl: './neu-color-picker.component.scss',\n})\nexport class NeuColorPickerComponent implements ControlValueAccessor {\n // ── Inputs / Outputs ────────────────────────────────────────────\n readonly mode = input<NeuColorMode>('hex');\n\n /** Emitido al cambiar el color / Emitted when color changes */\n readonly colorChange = output<string>();\n\n // ── Internal state ───────────────────────────────────────────────\n readonly _id = `neu-cp-${++_seq}`;\n readonly _modes: NeuColorMode[] = ['hex', 'rgb', 'hsl'];\n readonly _swatches: string[] = [\n '#ef4444',\n '#f97316',\n '#eab308',\n '#22c55e',\n '#10b981',\n '#06b6d4',\n '#3b82f6',\n '#6366f1',\n '#a855f7',\n '#ec4899',\n ];\n\n readonly _isOpen = signal(false);\n readonly _cvaDisabled = signal(false);\n readonly _hue = signal(210);\n readonly _sv = signal({ s: 80, v: 90 });\n readonly _activeMode = linkedSignal<NeuColorMode>(() => this.mode());\n\n private _dragging = false;\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n private readonly _el = inject(ElementRef<HTMLElement>);\n\n // ── Close on outside click ─────────────────────────────────────\n @HostListener('document:mousedown', ['$event'])\n _outsideClick(e: MouseEvent): void {\n if (!this._el.nativeElement.contains(e.target as Node)) {\n this._isOpen.set(false);\n }\n }\n\n // ── Computed ──────────────────────────────────────────────────\n readonly _hexValue = computed(() => hsvToHex(this._hue(), this._sv().s, this._sv().v));\n\n readonly _textValue = computed(() => {\n const hex = this._hexValue();\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n switch (this._activeMode()) {\n case 'rgb':\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n case 'hsl': {\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n default:\n return hex;\n }\n });\n\n // ── Canvas interactions ───────────────────────────────────────\n _canvasDown(e: PointerEvent): void {\n this._dragging = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n this._updateFromCanvas(e);\n }\n\n _canvasDrag(e: PointerEvent): void {\n if (!this._dragging) return;\n this._updateFromCanvas(e);\n }\n\n _canvasUp(e: PointerEvent): void {\n this._dragging = false;\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n }\n\n private _updateFromCanvas(e: PointerEvent): void {\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const s = Math.round(Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width)) * 100);\n const v = Math.round(Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height)) * 100);\n this._sv.set({ s, v });\n this._emit();\n }\n\n // ── Event handlers ────────────────────────────────────────────\n _toggle(): void {\n this._isOpen.update((v) => !v);\n }\n\n _onHueChange(v: number): void {\n this._hue.set(Number(v));\n this._emit();\n }\n\n _pickSwatch(hex: string): void {\n this._applyHex(hex);\n this._emit();\n }\n\n _onTextChange(text: string): void {\n const t = text.trim();\n if (t.startsWith('#')) {\n this._applyHex(t);\n } else if (t.startsWith('rgb')) {\n const m = t.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) this._applyHex(rgbToHex(+m[1], +m[2], +m[3]));\n } else if (t.startsWith('hsl')) {\n const m = t.match(/hsl\\((\\d+),\\s*(\\d+)%?,\\s*(\\d+)%?\\)/);\n if (m) this._applyHex(hslToHex(+m[1], +m[2], +m[3]));\n }\n this._emit();\n }\n\n // ── Helpers ───────────────────────────────────────────────────\n private _applyHex(hex: string): void {\n const rgb = hexToRgb(hex);\n if (!rgb) return;\n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b);\n this._hue.set(hsv.h);\n this._sv.set({ s: hsv.s, v: hsv.v });\n }\n\n private _emit(): void {\n const val = this._textValue();\n this._onChange(val);\n this.colorChange.emit(val);\n }\n\n // ── CVA ──────────────────────────────────────────────────────\n writeValue(val: string | null): void {\n if (!val) return;\n this._onTextChange(val);\n }\n\n registerOnChange(fn: (v: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(d: boolean): void {\n this._cvaDisabled.set(d);\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":"neural-ui-core-color-picker.mjs","sources":["../../../../projects/ui-core/color-picker/neu-color-picker.component.ts","../../../../projects/ui-core/color-picker/neural-ui-core-color-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type NeuColorMode = 'hex' | 'rgb' | 'hsl';\n\n/** Parse hex → { r, g, b } */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const clean = hex.replace('#', '').padEnd(6, '0');\n if (!/^[0-9a-fA-F]{6}$/.test(clean)) return null;\n return {\n r: parseInt(clean.slice(0, 2), 16),\n g: parseInt(clean.slice(2, 4), 16),\n b: parseInt(clean.slice(4, 6), 16),\n };\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return (\n '#' +\n [r, g, b]\n .map((v) =>\n Math.round(Math.max(0, Math.min(255, v)))\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')\n );\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n const _r = r / 255,\n _g = g / 255,\n _b = b / 255;\n const max = Math.max(_r, _g, _b),\n min = Math.min(_r, _g, _b);\n let h = 0,\n s = 0;\n const l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case _r:\n h = ((_g - _b) / d + (_g < _b ? 6 : 0)) / 6;\n break;\n case _g:\n h = ((_b - _r) / d + 2) / 6;\n break;\n case _b:\n h = ((_r - _g) / d + 4) / 6;\n break;\n }\n }\n return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n const _r = r / 255,\n _g = g / 255,\n _b = b / 255;\n const max = Math.max(_r, _g, _b),\n min = Math.min(_r, _g, _b);\n const v = max;\n const s = max === 0 ? 0 : (max - min) / max;\n let h = 0;\n if (max !== min) {\n const d = max - min;\n switch (max) {\n case _r:\n h = ((_g - _b) / d + (_g < _b ? 6 : 0)) / 6;\n break;\n case _g:\n h = ((_b - _r) / d + 2) / 6;\n break;\n case _b:\n h = ((_r - _g) / d + 4) / 6;\n break;\n }\n }\n return { h: Math.round(h * 360), s: Math.round(s * 100), v: Math.round(v * 100) };\n}\n\nfunction hsvToHex(h: number, s: number, v: number): string {\n const _s = s / 100,\n _v = v / 100;\n const f = (n: number) => {\n const k = (n + h / 60) % 6;\n const val = _v - _v * _s * Math.max(0, Math.min(k, 4 - k, 1));\n return Math.round(val * 255)\n .toString(16)\n .padStart(2, '0');\n };\n return `#${f(5)}${f(3)}${f(1)}`;\n}\n\nfunction hslToHex(h: number, s: number, l: number): string {\n const _s = s / 100,\n _l = l / 100;\n const a = _s * Math.min(_l, 1 - _l);\n const f = (n: number) => {\n const k = (n + h / 30) % 12;\n const color = _l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return Math.round(255 * color)\n .toString(16)\n .padStart(2, '0');\n };\n return `#${f(0)}${f(8)}${f(4)}`;\n}\n\nlet _seq = 0;\n\n/**\n * NeuralUI ColorPicker\n *\n * Selector de color con swatch, hue slider y modos hex/rgb/hsl. CVA.\n *\n * Uso:\n * <neu-color-picker [formControl]=\"colorCtrl\" mode=\"hex\" />\n */\n@Component({\n selector: 'neu-color-picker',\n imports: [OverlayModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuColorPickerComponent),\n multi: true,\n },\n ],\n host: {\n class: 'neu-cp',\n '[class.neu-cp--open]': '_isOpen()',\n '[class.neu-cp--disabled]': '_cvaDisabled()',\n },\n template: `\n <!-- Swatch trigger -->\n <button\n cdkOverlayOrigin\n #colorPickerOrigin=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"neu-cp__trigger\"\n [attr.aria-expanded]=\"_isOpen()\"\n [attr.aria-label]=\"'Color: ' + _hexValue()\"\n [disabled]=\"_cvaDisabled()\"\n (click)=\"_toggle()\"\n >\n <span class=\"neu-cp__swatch\" [style.background]=\"_hexValue()\"></span>\n <span class=\"neu-cp__hex-label\">{{ _hexValue() }}</span>\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"colorPickerOrigin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (backdropClick)=\"_isOpen.set(false)\"\n (detach)=\"_isOpen.set(false)\"\n >\n <div class=\"neu-cp__panel\" role=\"dialog\" aria-label=\"Selector de color\">\n <!-- HSV Canvas -->\n <div\n class=\"neu-cp__canvas-wrap\"\n [style.background-color]=\"'hsl(' + _hue() + ', 100%, 50%)'\"\n (pointerdown)=\"_canvasDown($event)\"\n (pointermove)=\"_canvasDrag($event)\"\n (pointerup)=\"_canvasUp($event)\"\n >\n <div\n class=\"neu-cp__canvas-cursor\"\n [style.left]=\"_sv().s + '%'\"\n [style.top]=\"100 - _sv().v + '%'\"\n ></div>\n </div>\n\n <!-- Hue slider -->\n <input\n type=\"range\"\n class=\"neu-cp__hue-slider\"\n min=\"0\"\n max=\"360\"\n [value]=\"_hue()\"\n (input)=\"_onHueChange(+$any($event.target).value)\"\n [attr.aria-label]=\"'Tono ' + _hue() + '°'\"\n />\n\n <!-- Swatches -->\n <div class=\"neu-cp__swatches\" role=\"group\" aria-label=\"Colores predefinidos\">\n @for (sw of _swatches; track sw) {\n <button\n type=\"button\"\n class=\"neu-cp__sw\"\n [style.background]=\"sw\"\n [attr.aria-label]=\"'Color ' + sw\"\n (click)=\"_pickSwatch(sw)\"\n ></button>\n }\n </div>\n\n <!-- Mode tabs -->\n <div class=\"neu-cp__mode-tabs\">\n @for (m of _modes; track m) {\n <button\n type=\"button\"\n class=\"neu-cp__mode-btn\"\n [class.neu-cp__mode-btn--active]=\"_activeMode() === m\"\n (click)=\"_activeMode.set(m)\"\n >\n {{ m.toUpperCase() }}\n </button>\n }\n </div>\n\n <!-- Value input -->\n <div class=\"neu-cp__input-row\">\n <input\n class=\"neu-cp__text-input\"\n type=\"text\"\n [value]=\"_textValue()\"\n (input)=\"_onTextChange($any($event.target).value)\"\n [attr.aria-label]=\"'Valor ' + _activeMode()\"\n />\n <span class=\"neu-cp__swatch-sm\" [style.background]=\"_hexValue()\"></span>\n </div>\n </div>\n </ng-template>\n `,\n styleUrl: './neu-color-picker.component.scss',\n})\nexport class NeuColorPickerComponent implements ControlValueAccessor {\n // ── Inputs / Outputs ────────────────────────────────────────────\n readonly mode = input<NeuColorMode>('hex');\n\n /** Emitido al cambiar el color / Emitted when color changes */\n readonly colorChange = output<string>();\n\n // ── Internal state ───────────────────────────────────────────────\n readonly _id = `neu-cp-${++_seq}`;\n readonly _modes: NeuColorMode[] = ['hex', 'rgb', 'hsl'];\n readonly _swatches: string[] = [\n '#ef4444',\n '#f97316',\n '#eab308',\n '#22c55e',\n '#10b981',\n '#06b6d4',\n '#3b82f6',\n '#6366f1',\n '#a855f7',\n '#ec4899',\n ];\n\n readonly _isOpen = signal(false);\n readonly _cvaDisabled = signal(false);\n readonly _hue = signal(210);\n readonly _sv = signal({ s: 80, v: 90 });\n readonly _activeMode = linkedSignal<NeuColorMode>(() => this.mode());\n\n private _dragging = false;\n private _onChange: (v: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n private readonly _el = inject(ElementRef<HTMLElement>);\n private readonly _overlay = inject(Overlay);\n readonly _viewportMargin = 16;\n readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n readonly overlayScrollStrategy = this._overlay.scrollStrategies.reposition();\n\n // ── Close on outside click ─────────────────────────────────────\n @HostListener('document:mousedown', ['$event'])\n _outsideClick(e: MouseEvent): void {\n const target = e.target as Element | null;\n const isInsidePanel = !!target?.closest('.neu-cp__panel');\n if (!this._el.nativeElement.contains(e.target as Node) && !isInsidePanel) {\n this._isOpen.set(false);\n }\n }\n\n // ── Computed ──────────────────────────────────────────────────\n readonly _hexValue = computed(() => hsvToHex(this._hue(), this._sv().s, this._sv().v));\n\n readonly _textValue = computed(() => {\n const hex = this._hexValue();\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n switch (this._activeMode()) {\n case 'rgb':\n return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n case 'hsl': {\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n default:\n return hex;\n }\n });\n\n // ── Canvas interactions ───────────────────────────────────────\n _canvasDown(e: PointerEvent): void {\n this._dragging = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n this._updateFromCanvas(e);\n }\n\n _canvasDrag(e: PointerEvent): void {\n if (!this._dragging) return;\n this._updateFromCanvas(e);\n }\n\n _canvasUp(e: PointerEvent): void {\n this._dragging = false;\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n }\n\n private _updateFromCanvas(e: PointerEvent): void {\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const s = Math.round(Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width)) * 100);\n const v = Math.round(Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height)) * 100);\n this._sv.set({ s, v });\n this._emit();\n }\n\n // ── Event handlers ────────────────────────────────────────────\n _toggle(): void {\n this._isOpen.update((v) => !v);\n }\n\n _onHueChange(v: number): void {\n this._hue.set(Number(v));\n this._emit();\n }\n\n _pickSwatch(hex: string): void {\n this._applyHex(hex);\n this._emit();\n }\n\n _onTextChange(text: string): void {\n const t = text.trim();\n if (t.startsWith('#')) {\n this._applyHex(t);\n } else if (t.startsWith('rgb')) {\n const m = t.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (m) this._applyHex(rgbToHex(+m[1], +m[2], +m[3]));\n } else if (t.startsWith('hsl')) {\n const m = t.match(/hsl\\((\\d+),\\s*(\\d+)%?,\\s*(\\d+)%?\\)/);\n if (m) this._applyHex(hslToHex(+m[1], +m[2], +m[3]));\n }\n this._emit();\n }\n\n // ── Helpers ───────────────────────────────────────────────────\n private _applyHex(hex: string): void {\n const rgb = hexToRgb(hex);\n if (!rgb) return;\n const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b);\n this._hue.set(hsv.h);\n this._sv.set({ s: hsv.s, v: hsv.v });\n }\n\n private _emit(): void {\n const val = this._textValue();\n this._onChange(val);\n this.colorChange.emit(val);\n }\n\n // ── CVA ──────────────────────────────────────────────────────\n writeValue(val: string | null): void {\n if (!val) return;\n this._onTextChange(val);\n }\n\n registerOnChange(fn: (v: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(d: boolean): void {\n this._cvaDisabled.set(d);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|