ngx-kit 8.1.0 → 8.3.0

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.
@@ -1,154 +1,153 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, EventEmitter, forwardRef, ViewChild, Output, ChangeDetectionStrategy, Component, ElementRef, HostListener, Input, Directive } from '@angular/core';
2
+ import { input, output, forwardRef, ViewChild, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Output, Input, Directive } from '@angular/core';
3
3
  import * as i2 from '@angular/forms';
4
4
  import { FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
5
  import * as i1$1 from 'ngx-kit/core';
6
- import { BrowserService, RangeSliderComponent } from 'ngx-kit/core';
6
+ import { RangeSliderComponent } from 'ngx-kit/core';
7
7
  import { NgxInputColor } from 'ngx-kit/color-picker';
8
8
  import { NgxInputAngle } from 'ngx-kit/angle-selector';
9
9
  import * as i1 from '@angular/common';
10
10
  import { CommonModule } from '@angular/common';
11
11
 
12
- function buildGradientFromStops(stops, type = 'linear', rotation = 0) {
13
- if (!stops || stops.length === 0)
12
+ function buildGradientFromStops(stops, type = 'linear', rotation = 0, options = '') {
13
+ if (!stops?.length)
14
14
  return '';
15
- // sort by numeric value
16
15
  const sorted = [...stops].sort((a, b) => a.value - b.value);
17
- // clamp 0..100 and format stops
18
- const parts = sorted.map((s) => {
19
- const v = Math.max(0, Math.min(Number(s.value) || 0, 100));
20
- return `${s.color.trim()} ${v}%`;
16
+ const parts = sorted.map((stop) => {
17
+ const value = Math.max(0, Math.min(Number(stop.value) || 0, 100));
18
+ return `${stop.color.trim()} ${value}%`;
21
19
  });
22
- let prefix = '';
23
- if (type === 'linear') {
24
- // rotation can be number (deg) or string like 'to right' or '45deg'
25
- if (typeof rotation === 'number')
26
- prefix = `${rotation}deg, `;
27
- else if (typeof rotation === 'string' && rotation.trim().length)
28
- prefix = `${rotation.trim()}, `;
29
- }
30
- else if (type === 'radial') {
31
- // keep simple "circle" default: caller may put 'circle' in rotation (or pass separate option if needed)
32
- prefix = typeof rotation === 'string' && rotation.trim() ? `${rotation.trim()}, ` : 'circle, ';
33
- }
34
- else if (type === 'conic') {
35
- // conic-gradient accepts angle like 'from 45deg at 50% 50%'
36
- if (typeof rotation === 'number')
37
- prefix = `from ${rotation}deg, `;
38
- else if (typeof rotation === 'string' && rotation.trim())
39
- prefix = `${rotation.trim()}, `;
40
- }
41
- return `${type}-gradient(${prefix}${parts.join(', ')})`;
20
+ const kind = type.replace('repeating-', '');
21
+ let prefix = options.trim();
22
+ if (!prefix && kind === 'linear') {
23
+ prefix = typeof rotation === 'number' ? `${rotation}deg` : rotation.trim();
24
+ }
25
+ else if (!prefix && kind === 'radial') {
26
+ prefix = typeof rotation === 'string' && rotation.trim() ? rotation.trim() : 'circle';
27
+ }
28
+ else if (!prefix && kind === 'conic') {
29
+ prefix = typeof rotation === 'number' ? `from ${rotation}deg` : rotation.trim();
30
+ }
31
+ return `${type}-gradient(${prefix ? `${prefix}, ` : ''}${parts.join(', ')})`;
42
32
  }
43
33
  function generateRandomColor() {
44
34
  const letters = '0123456789ABCDEF';
45
35
  let color = '#';
46
- for (let i = 0; i < 6; i++) {
36
+ for (let i = 0; i < 6; i++)
47
37
  color += letters[Math.floor(Math.random() * 16)];
48
- }
49
38
  return color;
50
39
  }
51
40
  function isValidGradient(value) {
52
- if (!value || typeof value !== 'string')
53
- return false;
54
- return /^\s*(conic|linear|radial)-gradient\s*\(/i.test(value.trim());
41
+ return (typeof value === 'string' &&
42
+ /^\s*(?:repeating-)?(?:conic|linear|radial)-gradient\s*\(/i.test(value));
55
43
  }
56
- /**
57
- * parseGradient
58
- * - returns: { type, rotation (number|string), stops, valid }
59
- * - stops: array of { id, color, value } where value is 0..100 (percent)
60
- * - rotation: number (deg) for linear if parsed as angle, or string (e.g. 'to right' or '45deg')
61
- */
62
44
  function parseGradient(value) {
63
45
  let type = 'linear';
64
46
  let rotation = 180;
47
+ let options = '';
65
48
  let shape;
66
- let stops = [];
49
+ const stops = [];
67
50
  let valid = false;
68
51
  if (!value)
69
- return { type, rotation, shape, stops, valid };
70
- const match = value.trim().match(/^(\s*)(conic|linear|radial)-gradient\s*\((.*)\)$/i);
52
+ return { type, rotation, options, shape, stops, valid };
53
+ const match = value
54
+ .trim()
55
+ .match(/^((?:repeating-)?(?:conic|linear|radial))-gradient\s*\((.*)\)$/i);
71
56
  if (!match)
72
- return { type, rotation, shape, stops, valid };
73
- type = match[2].toLowerCase();
74
- let content = match[3].trim();
75
- // --- Split arguments by commas, respecting parentheses (for rgba, hsl, etc.)
57
+ return { type, rotation, options, shape, stops, valid };
58
+ type = match[1].toLowerCase();
59
+ const parts = splitGradientArguments(match[2]);
60
+ const first = parts[0] ?? '';
61
+ const kind = type.replace('repeating-', '');
62
+ const hasPrelude = kind === 'linear'
63
+ ? /^(?:to\s+|in\s+|[-+]?(?:\d*\.)?\d+(?:deg|grad|rad|turn)\b)/i.test(first)
64
+ : kind === 'radial'
65
+ ? /^(?:(?:circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner)\b|at\s+)/i.test(first) || !parseColorStop(first)
66
+ : /^(?:from\s+|at\s+)/i.test(first) || !parseColorStop(first);
67
+ let firstStop = 0;
68
+ if (hasPrelude) {
69
+ options = first;
70
+ firstStop = 1;
71
+ const angle = first.match(/(?:from\s+)?([-+]?(?:\d*\.)?\d+)(deg|grad|rad|turn)\b/i);
72
+ if (angle)
73
+ rotation = angleToDegrees(Number(angle[1]), angle[2]);
74
+ if (kind === 'radial')
75
+ shape = first;
76
+ }
77
+ else if (kind === 'conic') {
78
+ rotation = 0;
79
+ }
80
+ for (let i = firstStop; i < parts.length; i++) {
81
+ const parsed = parseColorStop(parts[i]);
82
+ if (!parsed)
83
+ continue;
84
+ let position = parsed.position;
85
+ if (position === undefined) {
86
+ position =
87
+ stops.length === 0
88
+ ? 0
89
+ : i === parts.length - 1
90
+ ? 100
91
+ : (100 / (parts.length - firstStop - 1)) * stops.length;
92
+ }
93
+ stops.push({ color: parsed.color, value: position, id: generateId(stops) });
94
+ }
95
+ valid = stops.length >= 2;
96
+ return { type, rotation, options, shape, stops, valid };
97
+ }
98
+ function splitGradientArguments(value) {
76
99
  const parts = [];
77
- let buf = '';
78
100
  let depth = 0;
79
- for (const c of content) {
80
- if (c === '(')
101
+ let start = 0;
102
+ for (let i = 0; i < value.length; i++) {
103
+ if (value[i] === '(')
81
104
  depth++;
82
- if (c === ')')
105
+ else if (value[i] === ')')
83
106
  depth--;
84
- if (c === ',' && depth === 0) {
85
- parts.push(buf.trim());
86
- buf = '';
87
- }
88
- else {
89
- buf += c;
90
- }
91
- }
92
- if (buf.trim())
93
- parts.push(buf.trim());
94
- // --- Determine starting index for color stops
95
- let colorStopStart = 0;
96
- const first = parts[0];
97
- if (type === 'linear') {
98
- // e.g., "90deg" or "to right"
99
- const angleMatch = first.match(/^(\d+)(deg)?$/i);
100
- if (angleMatch) {
101
- rotation = parseFloat(angleMatch[1]);
102
- colorStopStart = 1;
103
- }
104
- else if (/^to /i.test(first)) {
105
- // optional direction mapping
106
- colorStopStart = 1;
107
+ else if (value[i] === ',' && depth === 0) {
108
+ parts.push(value.slice(start, i).trim());
109
+ start = i + 1;
107
110
  }
108
111
  }
109
- else if (type === 'radial') {
110
- // e.g., "circle", "circle at center", "ellipse at top left"
111
- if (!/^#|rgb|hsl|[a-z]+\(/i.test(first)) {
112
- shape = first;
113
- colorStopStart = 1;
112
+ parts.push(value.slice(start).trim());
113
+ return parts.filter(Boolean);
114
+ }
115
+ function parseColorStop(value) {
116
+ const stop = value.trim();
117
+ const positionMatch = stop.match(/\s+([-+]?(?:\d*\.)?\d+)%?$/);
118
+ const color = positionMatch ? stop.slice(0, positionMatch.index).trim() : stop;
119
+ if (!/^(?:#[\da-f]{3,8}|[a-z][\w-]*|[a-z][\w-]*\()/i.test(color))
120
+ return undefined;
121
+ if (color.includes('(')) {
122
+ let depth = 0;
123
+ for (const char of color) {
124
+ if (char === '(')
125
+ depth++;
126
+ else if (char === ')')
127
+ depth--;
128
+ if (depth < 0)
129
+ return undefined;
114
130
  }
131
+ if (depth !== 0 || !/\)$/.test(color))
132
+ return undefined;
115
133
  }
116
- else if (type === 'conic') {
117
- // e.g., "from 0deg at center"
118
- if (!/^#|rgb|hsl|[a-z]+\(/i.test(first))
119
- colorStopStart = 1;
120
- }
121
- // --- Regex for color stops
122
- const colorStopRegex = /((#([0-9a-fA-F]{3,8}))|(rgba?\([^\)]+\))|(hsla?\([^\)]+\))|([a-zA-Z]+))(\s+([\d.]+%?))?/;
123
- for (let i = colorStopStart; i < parts.length; i++) {
124
- const stopPart = parts[i].trim();
125
- const m = stopPart.match(colorStopRegex);
126
- if (m) {
127
- const color = m[1];
128
- const posStr = m[9];
129
- let value = 0;
130
- if (posStr && posStr.endsWith('%'))
131
- value = parseFloat(posStr);
132
- else if (posStr)
133
- value = parseFloat(posStr);
134
- else {
135
- // اگر درصدی وجود نداشت، با توجه به ایندکس مقدار دهی کن
136
- if (stops.length === 0)
137
- value = 0;
138
- else if (i === parts.length - 1)
139
- value = 100;
140
- else
141
- value = (100 / (parts.length - colorStopStart - 1)) * stops.length;
142
- }
143
- stops.push({ color, value, id: generateId(stops) });
144
- }
134
+ return { color, position: positionMatch ? Number.parseFloat(positionMatch[1]) : undefined };
135
+ }
136
+ function angleToDegrees(value, unit) {
137
+ switch (unit.toLowerCase()) {
138
+ case 'turn':
139
+ return value * 360;
140
+ case 'grad':
141
+ return value * 0.9;
142
+ case 'rad':
143
+ return value * (180 / Math.PI);
144
+ default:
145
+ return value;
145
146
  }
146
- valid = stops.length >= 2;
147
- return { type, rotation, shape, stops, valid };
148
147
  }
149
- function generateId(rangeValues) {
148
+ function generateId(stops) {
150
149
  const id = 'ngx-stop-' + Math.random().toString(36).substring(2, 9);
151
- return rangeValues.find((x) => x.id === id) ? generateId(rangeValues) : id;
150
+ return stops.some((stop) => stop.id === id) ? generateId(stops) : id;
152
151
  }
153
152
 
154
153
  const DefaultGradients = [
@@ -260,14 +259,16 @@ const DefaultGradients = [
260
259
 
261
260
  class NgxInputGradientComponent {
262
261
  cd;
263
- browserService = inject(BrowserService);
264
- change = new EventEmitter();
262
+ showSamples = input(true, /* @ts-ignore */
263
+ ...(ngDevMode ? [{ debugName: "showSamples" }] : /* istanbul ignore next */ []));
264
+ change = output();
265
265
  defaultGradients = [];
266
266
  resultGradient = '';
267
267
  baseBg = '';
268
268
  rangeValues = [];
269
269
  type = 'linear';
270
270
  rotation = 90;
271
+ gradientOptions = '';
271
272
  selectedIndex = 0;
272
273
  isDisabled = false;
273
274
  _onChange = (value) => { };
@@ -309,7 +310,8 @@ class NgxInputGradientComponent {
309
310
  if (parsed.valid) {
310
311
  this.resultGradient = value;
311
312
  this.type = parsed.type;
312
- this.rotation = +parsed.rotation;
313
+ this.rotation = parsed.rotation;
314
+ this.gradientOptions = parsed.options;
313
315
  this.rangeValues = parsed.stops;
314
316
  }
315
317
  else {
@@ -320,6 +322,7 @@ class NgxInputGradientComponent {
320
322
  ];
321
323
  this.type = 'linear';
322
324
  this.rotation = 90;
325
+ this.gradientOptions = '';
323
326
  }
324
327
  }
325
328
  else {
@@ -330,6 +333,7 @@ class NgxInputGradientComponent {
330
333
  ];
331
334
  this.type = 'linear';
332
335
  this.rotation = 90;
336
+ this.gradientOptions = '';
333
337
  }
334
338
  this.generateGradient();
335
339
  }
@@ -358,9 +362,17 @@ class NgxInputGradientComponent {
358
362
  item.color ??= generateRandomColor();
359
363
  }
360
364
  this.baseBg = buildGradientFromStops(this.rangeValues, 'linear', 90);
361
- this.resultGradient = buildGradientFromStops(this.rangeValues, this.type, +this.rotation);
365
+ this.resultGradient = buildGradientFromStops(this.rangeValues, this.type, this.rotation, this.gradientOptions);
362
366
  this.emitChange();
363
367
  }
368
+ updateGradientType() {
369
+ this.gradientOptions = '';
370
+ this.generateGradient();
371
+ }
372
+ updateRotation() {
373
+ this.gradientOptions = '';
374
+ this.generateGradient();
375
+ }
364
376
  updateRangeSlider() {
365
377
  if (this.rangeSlider) {
366
378
  this.rangeSlider.writeValue(this.rangeValues);
@@ -382,7 +394,7 @@ class NgxInputGradientComponent {
382
394
  this.emitChange();
383
395
  }
384
396
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputGradientComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxInputGradientComponent, isStandalone: true, selector: "ngx-input-gradient", outputs: { change: "change" }, providers: [
397
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxInputGradientComponent, isStandalone: true, selector: "ngx-input-gradient", inputs: { showSamples: { classPropertyName: "showSamples", publicName: "showSamples", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, providers: [
386
398
  {
387
399
  provide: NG_VALUE_ACCESSOR,
388
400
  useExisting: forwardRef(() => NgxInputGradientComponent),
@@ -393,7 +405,7 @@ class NgxInputGradientComponent {
393
405
  multi: true,
394
406
  useExisting: NgxInputGradientComponent,
395
407
  },
396
- ], viewQueries: [{ propertyName: "rangeSlider", first: true, predicate: ["rangeSlider"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ngx-input-gradient-picker\" (click)=\"stopPropagation($event)\">\n <div class=\"ngx-color-preview\" [ngStyle]=\"{ '--ngx-selected-gradient': resultGradient }\"></div>\n <div class=\"ngx-c-inner\">\n <range-slider\n [(ngModel)]=\"rangeValues\"\n name=\"rangeCalues\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n [addNewRangeOnClick]=\"true\"\n [background]=\"baseBg\"\n [(selectedIndex)]=\"selectedIndex\"\n (change)=\"generateGradient()\"\n #rangeSlider></range-slider>\n\n <div class=\"text-end\">\n <button class=\"remove-btn\" type=\"button\" (click)=\"remove()\">remove</button>\n </div>\n @if (rangeValues[selectedIndex]) {\n <div class=\"ngx-row\">\n <div class=\"ngx-col-6\">\n <div class=\"label\">Color</div>\n <div class=\"input-color\">\n <input\n type=\"text\"\n [(ngModel)]=\"rangeValues[selectedIndex].color\"\n name=\"color\"\n #inputColor\n (ngModelChange)=\"generateGradient(); updateRangeSlider()\" />\n <span\n #ngxGradColor\n class=\"color\"\n [style.backgroundColor]=\"rangeValues[selectedIndex].color\"\n [ngxInputColor]=\"inputColor\"\n [ngModel]=\"rangeValues[selectedIndex].color\"\n [simpleMode]=\"true\"\n (change)=\"generateGradient($event)\"></span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Position</div>\n <input\n type=\"number\"\n [(ngModel)]=\"rangeValues[selectedIndex].value\"\n min=\"0\"\n max=\"100\"\n name=\"posiition\"\n (change)=\"generateGradient(); updateRangeSlider()\" />\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Rotation</div>\n <div class=\"ngx-input-group\">\n <input\n type=\"text\"\n [(ngModel)]=\"rotation\"\n ngxInputAngle\n (change)=\"generateGradient()\"\n name=\"rotation\"\n [disabled]=\"type == 'radial'\" />\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Type</div>\n <div class=\"ngx-input-group\">\n <select [(ngModel)]=\"type\" (change)=\"generateGradient()\" name=\"type\">\n <option value=\"linear\">linear</option>\n <option value=\"radial\">radial</option>\n </select>\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n }\n\n <div class=\"default-list\">\n @for (item of defaultGradients; track $index; let i = $index) {\n <span [style.background]=\"item\" (click)=\"onSelectDefault(item, i)\"></span>\n }\n </div>\n </div>\n</div>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #222);--ngx-color-text: light-dark(#000, #fff)}.ngx-input-gradient-picker{width:270px;max-width:100%;border-radius:15px;background:var(--ngx-color-bg);color:var(--ngx-color-text);overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-gradient-picker .ngx-c-inner{padding:0 12px 12px}.ngx-input-gradient-picker *{box-sizing:border-box}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-gradient)}.ngx-row{display:flex;flex-wrap:wrap;gap:12px}.ngx-row .ngx-col-6{width:47%}.ngx-row .ngx-input-group{display:flex}.ngx-row .ngx-input-group .ngx-input-prefix,.ngx-row .ngx-input-group .ngx-input-group-text{width:14px;margin-left:-28px;margin-top:6px;pointer-events:none}.ngx-row .ngx-input-group .ngx-input-prefix svg,.ngx-row .ngx-input-group .ngx-input-group-text svg{max-width:100%;max-height:100%;fill:var(--ngx-color-text)}.ngx-row .input-color{position:relative}.ngx-row .input-color input{padding-right:26px}.ngx-row .input-color .color{position:absolute;top:4px;right:5px;cursor:pointer;display:inline-block;width:24px;height:24px;border-radius:4px;border:1px solid #ccc;transition:all .3s}.ngx-row .input-color .color:hover{border-color:#8db6e4}.ngx-row select,.ngx-row input{outline:none;border:1px solid #ececec;border-radius:4px;padding:8px 10px;background:none;width:100%;color:var(--ngx-color-text);appearance:none}.ngx-row select option,.ngx-row input option{padding:10px 20px;background-color:#fff;transition:all .3s;background:var(--ngx-color-bg);color:var(--ngx-color-text)}.ngx-row select option:hover,.ngx-row input option:hover{background:#f0f0f0}.text-end{text-align:end}.remove-btn{background:none;border:none;outline:none;color:#07f;transition:color .3s}.remove-btn:hover{color:#0462cc}.default-list{display:flex;gap:5px;flex-wrap:wrap;margin-top:16px}.default-list span{width:36px;height:26px;border-radius:4px;cursor:pointer;transition:transform .3s}.default-list span:hover{transform:scale(1.2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: RangeSliderComponent, selector: "range-slider", inputs: ["step", "min", "max", "background", "isBgTransparent", "addNewRangeOnClick", "selectedIndex"], outputs: ["change", "selectedIndexChange"] }, { kind: "directive", type: NgxInputColor, selector: "[ngxInputColor]", inputs: ["setInputBackgroundColor", "simpleMode", "outputType", "defaultInspector", "useAlphaChannel", "showPresets", "presetColors", "ngxInputColor"], outputs: ["defaultInspectorChange", "colorChange", "change"], exportAs: ["ngxInputColor"] }, { kind: "directive", type: NgxInputAngle, selector: "[ngxInputAngle]", inputs: ["size", "openOnCLick"], outputs: ["change"], exportAs: ["ngxInputAngle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
408
+ ], viewQueries: [{ propertyName: "rangeSlider", first: true, predicate: ["rangeSlider"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ngx-input-gradient-picker\" (click)=\"stopPropagation($event)\">\n <div class=\"ngx-color-preview\" [ngStyle]=\"{ '--ngx-selected-gradient': resultGradient }\"></div>\n <div class=\"ngx-c-inner\">\n <range-slider\n [(ngModel)]=\"rangeValues\"\n name=\"rangeCalues\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n [addNewRangeOnClick]=\"true\"\n [background]=\"baseBg\"\n [(selectedIndex)]=\"selectedIndex\"\n (change)=\"generateGradient()\"\n #rangeSlider></range-slider>\n\n <div class=\"text-end\">\n <button class=\"remove-btn\" type=\"button\" (click)=\"remove()\">remove</button>\n </div>\n @if (rangeValues[selectedIndex]) {\n <div class=\"ngx-row\">\n <div class=\"ngx-col-6\">\n <div class=\"label\">Color</div>\n <div class=\"input-color\">\n <input\n type=\"text\"\n [(ngModel)]=\"rangeValues[selectedIndex].color\"\n name=\"color\"\n #inputColor\n (ngModelChange)=\"generateGradient(); updateRangeSlider()\" />\n <span\n #ngxGradColor\n class=\"color\"\n [style.backgroundColor]=\"rangeValues[selectedIndex].color\"\n [ngxInputColor]=\"inputColor\"\n [ngModel]=\"rangeValues[selectedIndex].color\"\n [simpleMode]=\"true\"\n (change)=\"generateGradient($event)\"></span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Position</div>\n <input\n type=\"number\"\n [(ngModel)]=\"rangeValues[selectedIndex].value\"\n min=\"0\"\n max=\"100\"\n name=\"posiition\"\n (change)=\"generateGradient(); updateRangeSlider()\" />\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Rotation</div>\n <div class=\"ngx-input-group\">\n <input\n type=\"text\"\n [(ngModel)]=\"rotation\"\n ngxInputAngle\n (change)=\"updateRotation()\"\n name=\"rotation\"\n [disabled]=\"type.endsWith('radial')\" />\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Type</div>\n <div class=\"ngx-input-group\">\n <select [(ngModel)]=\"type\" (change)=\"updateGradientType()\" name=\"type\">\n <option value=\"linear\">linear</option>\n <option value=\"radial\">radial</option>\n <option value=\"conic\">conic</option>\n <option value=\"repeating-linear\">repeating linear</option>\n <option value=\"repeating-radial\">repeating radial</option>\n <option value=\"repeating-conic\">repeating conic</option>\n </select>\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n }\n\n @if (showSamples()) {\n <div class=\"default-list\">\n @for (item of defaultGradients; track $index; let i = $index) {\n <span [style.background]=\"item\" (click)=\"onSelectDefault(item, i)\"></span>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #222);--ngx-color-text: light-dark(#000, #fff)}.ngx-input-gradient-picker{width:270px;max-width:100%;border-radius:15px;background:var(--ngx-color-bg);color:var(--ngx-color-text);overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-gradient-picker .ngx-c-inner{padding:0 12px 12px}.ngx-input-gradient-picker *{box-sizing:border-box}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-gradient)}.ngx-row{display:flex;flex-wrap:wrap;gap:12px}.ngx-row .ngx-col-6{width:47%}.ngx-row .ngx-input-group{display:flex}.ngx-row .ngx-input-group .ngx-input-prefix,.ngx-row .ngx-input-group .ngx-input-group-text{width:14px;margin-left:-28px;margin-top:6px;pointer-events:none}.ngx-row .ngx-input-group .ngx-input-prefix svg,.ngx-row .ngx-input-group .ngx-input-group-text svg{max-width:100%;max-height:100%;fill:var(--ngx-color-text)}.ngx-row .input-color{position:relative}.ngx-row .input-color input{padding-right:26px}.ngx-row .input-color .color{position:absolute;top:4px;right:5px;cursor:pointer;display:inline-block;width:24px;height:24px;border-radius:4px;border:1px solid #ccc;transition:all .3s}.ngx-row .input-color .color:hover{border-color:#8db6e4}.ngx-row select,.ngx-row input{outline:none;border:1px solid #ececec;border-radius:4px;padding:8px 10px;background:none;width:100%;color:var(--ngx-color-text);appearance:none}.ngx-row select option,.ngx-row input option{padding:10px 20px;background-color:#fff;transition:all .3s;background:var(--ngx-color-bg);color:var(--ngx-color-text)}.ngx-row select option:hover,.ngx-row input option:hover{background:#f0f0f0}.ngx-row select:disabled,.ngx-row input:disabled{cursor:not-allowed;opacity:.7}.text-end{text-align:end}.remove-btn{background:none;border:none;outline:none;color:#07f;transition:color .3s}.remove-btn:hover{color:#0462cc}.default-list{display:flex;gap:5px;flex-wrap:wrap;margin-top:16px}.default-list span{width:36px;height:26px;border-radius:4px;cursor:pointer;transition:transform .3s}.default-list span:hover{transform:scale(1.2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: RangeSliderComponent, selector: "range-slider", inputs: ["step", "min", "max", "background", "isBgTransparent", "addNewRangeOnClick", "selectedIndex"], outputs: ["change", "selectedIndexChange"] }, { kind: "directive", type: NgxInputColor, selector: "[ngxInputColor]", inputs: ["setInputBackgroundColor", "simpleMode", "outputType", "defaultInspector", "useAlphaChannel", "showPresets", "presetColors", "ngxInputColor"], outputs: ["defaultInspectorChange", "colorChange", "change"], exportAs: ["ngxInputColor"] }, { kind: "directive", type: NgxInputAngle, selector: "[ngxInputAngle]", inputs: ["size", "openOnCLick"], outputs: ["change"], exportAs: ["ngxInputAngle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
397
409
  }
398
410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputGradientComponent, decorators: [{
399
411
  type: Component,
@@ -408,10 +420,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
408
420
  multi: true,
409
421
  useExisting: NgxInputGradientComponent,
410
422
  },
411
- ], imports: [CommonModule, FormsModule, RangeSliderComponent, NgxInputColor, NgxInputAngle], template: "<div class=\"ngx-input-gradient-picker\" (click)=\"stopPropagation($event)\">\n <div class=\"ngx-color-preview\" [ngStyle]=\"{ '--ngx-selected-gradient': resultGradient }\"></div>\n <div class=\"ngx-c-inner\">\n <range-slider\n [(ngModel)]=\"rangeValues\"\n name=\"rangeCalues\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n [addNewRangeOnClick]=\"true\"\n [background]=\"baseBg\"\n [(selectedIndex)]=\"selectedIndex\"\n (change)=\"generateGradient()\"\n #rangeSlider></range-slider>\n\n <div class=\"text-end\">\n <button class=\"remove-btn\" type=\"button\" (click)=\"remove()\">remove</button>\n </div>\n @if (rangeValues[selectedIndex]) {\n <div class=\"ngx-row\">\n <div class=\"ngx-col-6\">\n <div class=\"label\">Color</div>\n <div class=\"input-color\">\n <input\n type=\"text\"\n [(ngModel)]=\"rangeValues[selectedIndex].color\"\n name=\"color\"\n #inputColor\n (ngModelChange)=\"generateGradient(); updateRangeSlider()\" />\n <span\n #ngxGradColor\n class=\"color\"\n [style.backgroundColor]=\"rangeValues[selectedIndex].color\"\n [ngxInputColor]=\"inputColor\"\n [ngModel]=\"rangeValues[selectedIndex].color\"\n [simpleMode]=\"true\"\n (change)=\"generateGradient($event)\"></span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Position</div>\n <input\n type=\"number\"\n [(ngModel)]=\"rangeValues[selectedIndex].value\"\n min=\"0\"\n max=\"100\"\n name=\"posiition\"\n (change)=\"generateGradient(); updateRangeSlider()\" />\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Rotation</div>\n <div class=\"ngx-input-group\">\n <input\n type=\"text\"\n [(ngModel)]=\"rotation\"\n ngxInputAngle\n (change)=\"generateGradient()\"\n name=\"rotation\"\n [disabled]=\"type == 'radial'\" />\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Type</div>\n <div class=\"ngx-input-group\">\n <select [(ngModel)]=\"type\" (change)=\"generateGradient()\" name=\"type\">\n <option value=\"linear\">linear</option>\n <option value=\"radial\">radial</option>\n </select>\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n }\n\n <div class=\"default-list\">\n @for (item of defaultGradients; track $index; let i = $index) {\n <span [style.background]=\"item\" (click)=\"onSelectDefault(item, i)\"></span>\n }\n </div>\n </div>\n</div>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #222);--ngx-color-text: light-dark(#000, #fff)}.ngx-input-gradient-picker{width:270px;max-width:100%;border-radius:15px;background:var(--ngx-color-bg);color:var(--ngx-color-text);overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-gradient-picker .ngx-c-inner{padding:0 12px 12px}.ngx-input-gradient-picker *{box-sizing:border-box}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-gradient)}.ngx-row{display:flex;flex-wrap:wrap;gap:12px}.ngx-row .ngx-col-6{width:47%}.ngx-row .ngx-input-group{display:flex}.ngx-row .ngx-input-group .ngx-input-prefix,.ngx-row .ngx-input-group .ngx-input-group-text{width:14px;margin-left:-28px;margin-top:6px;pointer-events:none}.ngx-row .ngx-input-group .ngx-input-prefix svg,.ngx-row .ngx-input-group .ngx-input-group-text svg{max-width:100%;max-height:100%;fill:var(--ngx-color-text)}.ngx-row .input-color{position:relative}.ngx-row .input-color input{padding-right:26px}.ngx-row .input-color .color{position:absolute;top:4px;right:5px;cursor:pointer;display:inline-block;width:24px;height:24px;border-radius:4px;border:1px solid #ccc;transition:all .3s}.ngx-row .input-color .color:hover{border-color:#8db6e4}.ngx-row select,.ngx-row input{outline:none;border:1px solid #ececec;border-radius:4px;padding:8px 10px;background:none;width:100%;color:var(--ngx-color-text);appearance:none}.ngx-row select option,.ngx-row input option{padding:10px 20px;background-color:#fff;transition:all .3s;background:var(--ngx-color-bg);color:var(--ngx-color-text)}.ngx-row select option:hover,.ngx-row input option:hover{background:#f0f0f0}.text-end{text-align:end}.remove-btn{background:none;border:none;outline:none;color:#07f;transition:color .3s}.remove-btn:hover{color:#0462cc}.default-list{display:flex;gap:5px;flex-wrap:wrap;margin-top:16px}.default-list span{width:36px;height:26px;border-radius:4px;cursor:pointer;transition:transform .3s}.default-list span:hover{transform:scale(1.2)}\n"] }]
412
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { change: [{
413
- type: Output
414
- }], rangeSlider: [{
423
+ ], imports: [CommonModule, FormsModule, RangeSliderComponent, NgxInputColor, NgxInputAngle], template: "<div class=\"ngx-input-gradient-picker\" (click)=\"stopPropagation($event)\">\n <div class=\"ngx-color-preview\" [ngStyle]=\"{ '--ngx-selected-gradient': resultGradient }\"></div>\n <div class=\"ngx-c-inner\">\n <range-slider\n [(ngModel)]=\"rangeValues\"\n name=\"rangeCalues\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n [addNewRangeOnClick]=\"true\"\n [background]=\"baseBg\"\n [(selectedIndex)]=\"selectedIndex\"\n (change)=\"generateGradient()\"\n #rangeSlider></range-slider>\n\n <div class=\"text-end\">\n <button class=\"remove-btn\" type=\"button\" (click)=\"remove()\">remove</button>\n </div>\n @if (rangeValues[selectedIndex]) {\n <div class=\"ngx-row\">\n <div class=\"ngx-col-6\">\n <div class=\"label\">Color</div>\n <div class=\"input-color\">\n <input\n type=\"text\"\n [(ngModel)]=\"rangeValues[selectedIndex].color\"\n name=\"color\"\n #inputColor\n (ngModelChange)=\"generateGradient(); updateRangeSlider()\" />\n <span\n #ngxGradColor\n class=\"color\"\n [style.backgroundColor]=\"rangeValues[selectedIndex].color\"\n [ngxInputColor]=\"inputColor\"\n [ngModel]=\"rangeValues[selectedIndex].color\"\n [simpleMode]=\"true\"\n (change)=\"generateGradient($event)\"></span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Position</div>\n <input\n type=\"number\"\n [(ngModel)]=\"rangeValues[selectedIndex].value\"\n min=\"0\"\n max=\"100\"\n name=\"posiition\"\n (change)=\"generateGradient(); updateRangeSlider()\" />\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Rotation</div>\n <div class=\"ngx-input-group\">\n <input\n type=\"text\"\n [(ngModel)]=\"rotation\"\n ngxInputAngle\n (change)=\"updateRotation()\"\n name=\"rotation\"\n [disabled]=\"type.endsWith('radial')\" />\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n <div class=\"ngx-col-6\">\n <div class=\"label\">Type</div>\n <div class=\"ngx-input-group\">\n <select [(ngModel)]=\"type\" (change)=\"updateGradientType()\" name=\"type\">\n <option value=\"linear\">linear</option>\n <option value=\"radial\">radial</option>\n <option value=\"conic\">conic</option>\n <option value=\"repeating-linear\">repeating linear</option>\n <option value=\"repeating-radial\">repeating radial</option>\n <option value=\"repeating-conic\">repeating conic</option>\n </select>\n <span class=\"ngx-input-prefix\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n }\n\n @if (showSamples()) {\n <div class=\"default-list\">\n @for (item of defaultGradients; track $index; let i = $index) {\n <span [style.background]=\"item\" (click)=\"onSelectDefault(item, i)\"></span>\n }\n </div>\n }\n </div>\n</div>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #222);--ngx-color-text: light-dark(#000, #fff)}.ngx-input-gradient-picker{width:270px;max-width:100%;border-radius:15px;background:var(--ngx-color-bg);color:var(--ngx-color-text);overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-gradient-picker .ngx-c-inner{padding:0 12px 12px}.ngx-input-gradient-picker *{box-sizing:border-box}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-gradient)}.ngx-row{display:flex;flex-wrap:wrap;gap:12px}.ngx-row .ngx-col-6{width:47%}.ngx-row .ngx-input-group{display:flex}.ngx-row .ngx-input-group .ngx-input-prefix,.ngx-row .ngx-input-group .ngx-input-group-text{width:14px;margin-left:-28px;margin-top:6px;pointer-events:none}.ngx-row .ngx-input-group .ngx-input-prefix svg,.ngx-row .ngx-input-group .ngx-input-group-text svg{max-width:100%;max-height:100%;fill:var(--ngx-color-text)}.ngx-row .input-color{position:relative}.ngx-row .input-color input{padding-right:26px}.ngx-row .input-color .color{position:absolute;top:4px;right:5px;cursor:pointer;display:inline-block;width:24px;height:24px;border-radius:4px;border:1px solid #ccc;transition:all .3s}.ngx-row .input-color .color:hover{border-color:#8db6e4}.ngx-row select,.ngx-row input{outline:none;border:1px solid #ececec;border-radius:4px;padding:8px 10px;background:none;width:100%;color:var(--ngx-color-text);appearance:none}.ngx-row select option,.ngx-row input option{padding:10px 20px;background-color:#fff;transition:all .3s;background:var(--ngx-color-bg);color:var(--ngx-color-text)}.ngx-row select option:hover,.ngx-row input option:hover{background:#f0f0f0}.ngx-row select:disabled,.ngx-row input:disabled{cursor:not-allowed;opacity:.7}.text-end{text-align:end}.remove-btn{background:none;border:none;outline:none;color:#07f;transition:color .3s}.remove-btn:hover{color:#0462cc}.default-list{display:flex;gap:5px;flex-wrap:wrap;margin-top:16px}.default-list span{width:36px;height:26px;border-radius:4px;cursor:pointer;transition:transform .3s}.default-list span:hover{transform:scale(1.2)}\n"] }]
424
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { showSamples: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSamples", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], rangeSlider: [{
415
425
  type: ViewChild,
416
426
  args: ['rangeSlider', { static: true }]
417
427
  }] } });