react-iro-gradient-picker 1.2.1 → 1.2.4
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/README.md +52 -0
- package/dist/index.es.js +279 -112
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +279 -111
- package/dist/index.js.map +1 -1
- package/dist/lib/types/types.d.ts +13 -1
- package/dist/utils/gradient/gradientConverter.d.ts +7 -3
- package/dist/utils/validation/validGradient.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -272,6 +272,58 @@ This is an enhanced version of the original react-gcolor-picker with major impro
|
|
272
272
|
- **Updated Dependencies** - Latest versions of all packages
|
273
273
|
- **Better Build Process** - Optimized for modern React applications
|
274
274
|
|
275
|
+
## 🎨 Supported CSS Gradient Formats
|
276
|
+
|
277
|
+
**v1.2.2+ supports all standard CSS gradient formats with robust parsing:**
|
278
|
+
|
279
|
+
### Linear Gradients
|
280
|
+
|
281
|
+
```css
|
282
|
+
/* Angle-based directions */
|
283
|
+
linear-gradient(120deg, #FF6B6B, #FFD93D, #6BCB77)
|
284
|
+
linear-gradient(45deg, #4FACFE, #00F2FE, #38EF7D)
|
285
|
+
linear-gradient(200deg, #FF9A9E, #FAD0C4, #FBC2EB)
|
286
|
+
linear-gradient(60deg, #30CFD0, #330867, #6A82FB)
|
287
|
+
|
288
|
+
/* Named directions */
|
289
|
+
linear-gradient(to top right, #FF6B6B, #FFD93D)
|
290
|
+
linear-gradient(to bottom, #4FACFE, #00F2FE)
|
291
|
+
linear-gradient(to left, #FF9A9E, #FAD0C4)
|
292
|
+
|
293
|
+
/* With explicit positions */
|
294
|
+
linear-gradient(90deg, #FF6B6B 0%, #FFD93D 50%, #6BCB77 100%)
|
295
|
+
|
296
|
+
/* Without positions (auto-distributed) */
|
297
|
+
linear-gradient(180deg, #FF9966, #FF5E62, #F54EA2)
|
298
|
+
```
|
299
|
+
|
300
|
+
### Radial Gradients
|
301
|
+
|
302
|
+
```css
|
303
|
+
/* Basic circle gradients */
|
304
|
+
radial-gradient(circle at center, #00C9FF, #92FE9D, #0061FF)
|
305
|
+
radial-gradient(circle at top left, #FF6B6B, #FF4757, #2F3542)
|
306
|
+
radial-gradient(circle at bottom right, #1E90FF, #3742FA, #2C3E50)
|
307
|
+
|
308
|
+
/* Positioned radial gradients */
|
309
|
+
radial-gradient(circle at 70% 30%, #2ED573, #1EAE98, #004E64)
|
310
|
+
radial-gradient(circle at 20% 80%, #FFB347, #FFCC33, #FF6347)
|
311
|
+
radial-gradient(circle at top center, #FF7E5F, #FEB47B, #FFD93D)
|
312
|
+
radial-gradient(circle at right center, #6A82FB, #FC5C7D, #FF85A1)
|
313
|
+
|
314
|
+
/* Complex positioning */
|
315
|
+
radial-gradient(circle at 30% 70%, #11998E, #38EF7D, #8BC34A)
|
316
|
+
radial-gradient(circle at 80% 20%, #F7971E, #FFD200, #FF512F)
|
317
|
+
radial-gradient(circle at 40% 40%, #C6FFDD, #FBD786, #F7797D)
|
318
|
+
```
|
319
|
+
|
320
|
+
### Advanced Features
|
321
|
+
|
322
|
+
- **Auto-positioning**: Color stops without explicit positions are automatically distributed evenly
|
323
|
+
- **Flexible syntax**: Supports various positioning keywords and percentage values
|
324
|
+
- **Error recovery**: Invalid gradients fall back to a default gradient instead of crashing
|
325
|
+
- **Type safety**: Full TypeScript support with proper gradient object interfaces
|
326
|
+
|
275
327
|
## Props
|
276
328
|
|
277
329
|
| Attribute | Type | Default | Description |
|
package/dist/index.es.js
CHANGED
@@ -6386,111 +6386,147 @@ var isValidRgba = (function (rgba) {
|
|
6386
6386
|
return !!rgbaToHex(rgba);
|
6387
6387
|
});
|
6388
6388
|
|
6389
|
-
var
|
6390
|
-
|
6391
|
-
|
6392
|
-
|
6393
|
-
|
6394
|
-
|
6395
|
-
|
6396
|
-
|
6397
|
-
|
6398
|
-
|
6399
|
-
|
6400
|
-
var rColorHex = /\#(?:[a-f0-9]{6,8}|[a-f0-9]{3})/;
|
6401
|
-
var rDigits3 = /\(\s*(?:\d{1,3}%?\s*,\s*){2}%?\d{1,3}%?\s*\)/;
|
6402
|
-
var rDigits4 = /\(\s*(?:\d{1,3}%?\s*,\s*){2}%?\d{1,3}%?\s*,\s*\d*\.?\d+\)/;
|
6403
|
-
var rValue = /(?:[+-]?\d*\.?\d+)(?:%|[a-z]+)?/;
|
6404
|
-
var rKeyword = /[_a-z-][_a-z0-9-]*/;
|
6405
|
-
var rColor = combineRegExp([
|
6406
|
-
'(?:',
|
6407
|
-
rColorHex,
|
6408
|
-
'|',
|
6409
|
-
'(?:rgb|hsl)',
|
6410
|
-
rDigits3,
|
6411
|
-
'|',
|
6412
|
-
'(?:rgba|hsla)',
|
6413
|
-
rDigits4,
|
6414
|
-
'|',
|
6415
|
-
rKeyword,
|
6416
|
-
')'
|
6417
|
-
], '');
|
6418
|
-
var rColorStop = combineRegExp([rColor, '(?:\\s+', rValue, '(?:\\s+', rValue, ')?)?'], '');
|
6419
|
-
var rColorStopList = combineRegExp(['(?:', rColorStop, rComma, ')*', rColorStop], '');
|
6420
|
-
var rLineCapture = combineRegExp(['(?:(', rAngle, ')|', rSideCornerCapture, '|', rRadial, ')'], '');
|
6421
|
-
var rGradientSearch = combineRegExp(['(?:(', rLineCapture, ')', rComma, ')?(', rColorStopList, ')'], searchFlags);
|
6422
|
-
var rColorStopSearch = combineRegExp([
|
6423
|
-
'\\s*(',
|
6424
|
-
rColor,
|
6425
|
-
')',
|
6426
|
-
'(?:\\s+',
|
6427
|
-
'(',
|
6428
|
-
rValue,
|
6429
|
-
'))?',
|
6430
|
-
'(?:',
|
6431
|
-
rComma,
|
6432
|
-
'\\s*)?'
|
6433
|
-
], searchFlags);
|
6434
|
-
return {
|
6435
|
-
gradientSearch: rGradientSearch,
|
6436
|
-
colorStopSearch: rColorStopSearch
|
6437
|
-
};
|
6438
|
-
};
|
6439
|
-
var parseGradient$1 = function (regExpLib, input) {
|
6440
|
-
var result = {
|
6441
|
-
stops: [],
|
6442
|
-
angle: '',
|
6443
|
-
line: '',
|
6444
|
-
original: ''
|
6445
|
-
};
|
6446
|
-
var matchGradient, matchColorStop, stopResult;
|
6447
|
-
regExpLib.gradientSearch.lastIndex = 0;
|
6448
|
-
matchGradient = regExpLib.gradientSearch.exec(input);
|
6449
|
-
if (matchGradient !== null) {
|
6450
|
-
result = __assign(__assign({}, result), { original: matchGradient[0] });
|
6451
|
-
if (matchGradient[1]) {
|
6452
|
-
result.line = matchGradient[1];
|
6389
|
+
var validGradient = (function (input) {
|
6390
|
+
try {
|
6391
|
+
// Clean input
|
6392
|
+
var cleanInput = input
|
6393
|
+
.trim()
|
6394
|
+
.replace(/;$/, '')
|
6395
|
+
.replace(/^background-image:\s*/, '');
|
6396
|
+
// Extract gradient type and content
|
6397
|
+
var gradientMatch = cleanInput.match(/^(linear|radial)-gradient\s*\(\s*(.*)\s*\)$/i);
|
6398
|
+
if (!gradientMatch) {
|
6399
|
+
return 'Failed to find gradient';
|
6453
6400
|
}
|
6454
|
-
|
6455
|
-
|
6401
|
+
var _a = __read(gradientMatch, 3), type = _a[1], content = _a[2];
|
6402
|
+
var parts = [];
|
6403
|
+
var currentPart = '';
|
6404
|
+
var parenDepth = 0;
|
6405
|
+
var inQuotes = false;
|
6406
|
+
// Parse content by splitting on commas, but respect parentheses and quotes
|
6407
|
+
for (var i = 0; i < content.length; i++) {
|
6408
|
+
var char = content[i];
|
6409
|
+
if (char === '"' || char === "'") {
|
6410
|
+
inQuotes = !inQuotes;
|
6411
|
+
}
|
6412
|
+
else if (!inQuotes) {
|
6413
|
+
if (char === '(')
|
6414
|
+
parenDepth++;
|
6415
|
+
else if (char === ')')
|
6416
|
+
parenDepth--;
|
6417
|
+
else if (char === ',' && parenDepth === 0) {
|
6418
|
+
parts.push(currentPart.trim());
|
6419
|
+
currentPart = '';
|
6420
|
+
continue;
|
6421
|
+
}
|
6422
|
+
}
|
6423
|
+
currentPart += char;
|
6456
6424
|
}
|
6457
|
-
if (
|
6458
|
-
|
6425
|
+
if (currentPart.trim()) {
|
6426
|
+
parts.push(currentPart.trim());
|
6459
6427
|
}
|
6460
|
-
|
6461
|
-
|
6462
|
-
|
6463
|
-
|
6464
|
-
|
6465
|
-
|
6466
|
-
|
6467
|
-
|
6468
|
-
|
6428
|
+
var angle = '';
|
6429
|
+
var line = '';
|
6430
|
+
var colorStops = [];
|
6431
|
+
// Determine if first part is direction/angle or color stop
|
6432
|
+
var firstPart = parts[0];
|
6433
|
+
var isDirection = /^\d+deg$/i.test(firstPart) ||
|
6434
|
+
/^to\s+/.test(firstPart) ||
|
6435
|
+
/^(?:circle|ellipse)/.test(firstPart) ||
|
6436
|
+
/at\s+/.test(firstPart);
|
6437
|
+
if (isDirection) {
|
6438
|
+
if (type === 'linear') {
|
6439
|
+
if (/^\d+deg$/i.test(firstPart)) {
|
6440
|
+
angle = firstPart.replace(/deg$/i, '');
|
6441
|
+
}
|
6442
|
+
else if (/^to\s+/.test(firstPart)) {
|
6443
|
+
line = firstPart;
|
6444
|
+
// Convert named directions to angles
|
6445
|
+
var directionMap = {
|
6446
|
+
'to top': '0',
|
6447
|
+
'to top right': '45',
|
6448
|
+
'to right': '90',
|
6449
|
+
'to bottom right': '135',
|
6450
|
+
'to bottom': '180',
|
6451
|
+
'to bottom left': '225',
|
6452
|
+
'to left': '270',
|
6453
|
+
'to top left': '315'
|
6454
|
+
};
|
6455
|
+
angle = directionMap[firstPart] || '0';
|
6456
|
+
}
|
6469
6457
|
}
|
6470
|
-
|
6471
|
-
|
6458
|
+
else {
|
6459
|
+
line = firstPart;
|
6460
|
+
}
|
6461
|
+
colorStops = parts.slice(1);
|
6472
6462
|
}
|
6473
|
-
|
6474
|
-
|
6475
|
-
|
6476
|
-
|
6477
|
-
|
6478
|
-
var result;
|
6479
|
-
var rGradientEnclosedInBrackets = /.*gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/;
|
6480
|
-
var match = rGradientEnclosedInBrackets.exec(input);
|
6481
|
-
if (match !== null) {
|
6482
|
-
result = parseGradient$1(regExpLib, match[1]);
|
6483
|
-
if (result.original.trim() !== match[1].trim()) {
|
6484
|
-
result.parseWarning = true;
|
6463
|
+
else {
|
6464
|
+
// No explicit direction, use defaults
|
6465
|
+
angle = type === 'linear' ? '180' : '';
|
6466
|
+
line = type === 'radial' ? 'circle at center' : '';
|
6467
|
+
colorStops = parts;
|
6485
6468
|
}
|
6486
|
-
|
6487
|
-
|
6469
|
+
// Parse color stops
|
6470
|
+
var stops_1 = [];
|
6471
|
+
for (var i = 0; i < colorStops.length; i++) {
|
6472
|
+
var stopString = colorStops[i].trim();
|
6473
|
+
// Improved regex to handle various gradient stop formats
|
6474
|
+
// Matches: color position%, color position, or just color
|
6475
|
+
var stopMatch = stopString.match(/^(.+?)(?:\s+([\d.]+)(%|px|em|rem)?)?$/);
|
6476
|
+
if (stopMatch) {
|
6477
|
+
var _b = __read(stopMatch, 4), colorStr = _b[1], positionStr = _b[2], unit = _b[3];
|
6478
|
+
var tinyColorInstance = tinycolor(colorStr.trim());
|
6479
|
+
if (tinyColorInstance.isValid()) {
|
6480
|
+
var stop_1 = {
|
6481
|
+
color: tinyColorInstance.toRgbString()
|
6482
|
+
};
|
6483
|
+
if (positionStr) {
|
6484
|
+
var position = parseFloat(positionStr);
|
6485
|
+
// Convert percentage to decimal (0-1 range)
|
6486
|
+
if (unit === '%' || !unit) {
|
6487
|
+
// If no unit specified, assume percentage
|
6488
|
+
position = position / 100;
|
6489
|
+
}
|
6490
|
+
stop_1.position = Math.max(0, Math.min(1, position));
|
6491
|
+
}
|
6492
|
+
stops_1.push(stop_1);
|
6493
|
+
}
|
6494
|
+
else {
|
6495
|
+
console.warn('Invalid color in gradient stop:', colorStr.trim());
|
6496
|
+
}
|
6497
|
+
}
|
6498
|
+
else {
|
6499
|
+
console.warn('Could not parse gradient stop:', stopString);
|
6500
|
+
}
|
6501
|
+
}
|
6502
|
+
// Auto-assign positions if missing
|
6503
|
+
stops_1.forEach(function (stop, index) {
|
6504
|
+
if (!stop.hasOwnProperty('position')) {
|
6505
|
+
stop.position = stops_1.length > 1 ? index / (stops_1.length - 1) : 0;
|
6506
|
+
}
|
6507
|
+
});
|
6508
|
+
// Ensure we have at least 2 stops
|
6509
|
+
if (stops_1.length === 0) {
|
6510
|
+
return 'No valid color stops found';
|
6488
6511
|
}
|
6512
|
+
else if (stops_1.length === 1) {
|
6513
|
+
// Duplicate the single stop to create a valid gradient
|
6514
|
+
stops_1.push({
|
6515
|
+
color: stops_1[0].color,
|
6516
|
+
position: 1
|
6517
|
+
});
|
6518
|
+
}
|
6519
|
+
return {
|
6520
|
+
stops: stops_1,
|
6521
|
+
angle: angle,
|
6522
|
+
line: line,
|
6523
|
+
original: cleanInput
|
6524
|
+
};
|
6489
6525
|
}
|
6490
|
-
|
6491
|
-
|
6526
|
+
catch (error) {
|
6527
|
+
console.warn('Error parsing gradient:', error);
|
6528
|
+
return 'Failed to parse gradient';
|
6492
6529
|
}
|
6493
|
-
return result;
|
6494
6530
|
});
|
6495
6531
|
|
6496
6532
|
var LINEAR_POS = [
|
@@ -6558,7 +6594,7 @@ var parseGradient = (function (str) {
|
|
6558
6594
|
var helperAngle = type === 'linear' ? '180' : 'circle at center';
|
6559
6595
|
var modifier = findF || angle_1 || helperAngle;
|
6560
6596
|
return {
|
6561
|
-
gradient:
|
6597
|
+
gradient: typeof gradient !== 'string' ? gradient.original : str,
|
6562
6598
|
type: type,
|
6563
6599
|
modifier: modifier.match(/\d+/) !== null
|
6564
6600
|
? Number((_b = modifier.match(/\d+/)) === null || _b === void 0 ? void 0 : _b.join(''))
|
@@ -6575,7 +6611,7 @@ var parseGradient = (function (str) {
|
|
6575
6611
|
});
|
6576
6612
|
|
6577
6613
|
/**
|
6578
|
-
* Convert gradient object to CSS gradient string
|
6614
|
+
* Convert gradient object to CSS gradient string (strict typing)
|
6579
6615
|
*/
|
6580
6616
|
function gradientObjectToCss(gradientData) {
|
6581
6617
|
var type = gradientData.type, _a = gradientData.angle, angle = _a === void 0 ? 90 : _a, stops = gradientData.stops;
|
@@ -6594,6 +6630,38 @@ function gradientObjectToCss(gradientData) {
|
|
6594
6630
|
return "radial-gradient(circle, ".concat(cssStops, ")");
|
6595
6631
|
}
|
6596
6632
|
}
|
6633
|
+
/**
|
6634
|
+
* Convert flexible gradient object to CSS gradient string (loose typing)
|
6635
|
+
*/
|
6636
|
+
function flexibleGradientToCss(gradientData) {
|
6637
|
+
var _a = gradientData.type, type = _a === void 0 ? 'linear' : _a, angle = gradientData.angle, direction = gradientData.direction, position = gradientData.position, stops = gradientData.stops;
|
6638
|
+
// Convert stops to CSS format with flexible position handling
|
6639
|
+
var cssStops = stops
|
6640
|
+
.map(function (stop) {
|
6641
|
+
var color = tinycolor(stop.color);
|
6642
|
+
var positionStr = '';
|
6643
|
+
if (stop.position !== undefined) {
|
6644
|
+
if (typeof stop.position === 'string') {
|
6645
|
+
positionStr = " ".concat(stop.position);
|
6646
|
+
}
|
6647
|
+
else {
|
6648
|
+
positionStr = " ".concat(stop.position, "%");
|
6649
|
+
}
|
6650
|
+
}
|
6651
|
+
return "".concat(color.toRgbString()).concat(positionStr);
|
6652
|
+
})
|
6653
|
+
.join(', ');
|
6654
|
+
if (type === 'linear') {
|
6655
|
+
// Use direction if provided, otherwise use angle
|
6656
|
+
var gradientDirection = direction || (angle ? "".concat(angle, "deg") : '90deg');
|
6657
|
+
return "linear-gradient(".concat(gradientDirection, ", ").concat(cssStops, ")");
|
6658
|
+
}
|
6659
|
+
else {
|
6660
|
+
// Handle radial gradients with flexible positioning
|
6661
|
+
var radialPosition = position || 'circle';
|
6662
|
+
return "radial-gradient(".concat(radialPosition, ", ").concat(cssStops, ")");
|
6663
|
+
}
|
6664
|
+
}
|
6597
6665
|
/**
|
6598
6666
|
* Convert CSS gradient string to gradient object
|
6599
6667
|
*/
|
@@ -7183,9 +7251,22 @@ var DefaultColorPanel = function (_a) {
|
|
7183
7251
|
var _d = __read(useState([]), 2), formatedDefColors = _d[0], setFormatedDefColors = _d[1];
|
7184
7252
|
useEffect(function () {
|
7185
7253
|
if (colorType === 'gradient') {
|
7186
|
-
|
7187
|
-
|
7188
|
-
|
7254
|
+
var validGradients = checkValidColorsArray(defaultColors, 'grad');
|
7255
|
+
// For popular colors display, create minimal IColor objects using original CSS strings
|
7256
|
+
// This avoids complex parsing issues while still providing functional display
|
7257
|
+
var displayGradients = validGradients.map(function (gradientString) {
|
7258
|
+
return {
|
7259
|
+
gradient: gradientString, // Use the original CSS string directly for display
|
7260
|
+
type: gradientString.startsWith('radial-') ? 'radial' : 'linear',
|
7261
|
+
modifier: 180, // Default value, not critical for display
|
7262
|
+
stops: [
|
7263
|
+
// Dummy stops that help identify display objects in onChooseColor
|
7264
|
+
['rgba(255, 0, 0, 1)', 0, 0],
|
7265
|
+
['rgba(0, 255, 0, 1)', 1, 1]
|
7266
|
+
]
|
7267
|
+
};
|
7268
|
+
});
|
7269
|
+
setFormatedDefColors(displayGradients);
|
7189
7270
|
}
|
7190
7271
|
else {
|
7191
7272
|
setFormatedDefColors(checkValidColorsArray(defaultColors, 'solid'));
|
@@ -7197,6 +7278,41 @@ var DefaultColorPanel = function (_a) {
|
|
7197
7278
|
return;
|
7198
7279
|
}
|
7199
7280
|
if (colorType === 'gradient' && typeof item !== 'string') {
|
7281
|
+
// If this is a simplified display object (identified by dummy stops), parse the gradient properly
|
7282
|
+
if (item.stops.length === 2 &&
|
7283
|
+
item.stops[0][0] === 'rgba(255, 0, 0, 1)') {
|
7284
|
+
try {
|
7285
|
+
var properlyParsed = parseGradient(item.gradient);
|
7286
|
+
if (properlyParsed &&
|
7287
|
+
properlyParsed.stops &&
|
7288
|
+
properlyParsed.stops.length > 0) {
|
7289
|
+
var stops_1 = properlyParsed.stops;
|
7290
|
+
var lastStop_1 = rgbaToArray(stops_1[stops_1.length - 1][0]);
|
7291
|
+
var lastStopLoc_1 = stops_1[stops_1.length - 1][1];
|
7292
|
+
var activeStop_1 = rgbaToHex([
|
7293
|
+
lastStop_1[0],
|
7294
|
+
lastStop_1[1],
|
7295
|
+
lastStop_1[2]
|
7296
|
+
]);
|
7297
|
+
var activeIdx_1 = stops_1[stops_1.length - 1][2];
|
7298
|
+
setInit(false);
|
7299
|
+
setColor(properlyParsed);
|
7300
|
+
setActiveColor &&
|
7301
|
+
setActiveColor({
|
7302
|
+
hex: activeStop_1,
|
7303
|
+
alpha: Number(Math.round(lastStop_1[3] * 100)),
|
7304
|
+
loc: lastStopLoc_1,
|
7305
|
+
index: activeIdx_1
|
7306
|
+
});
|
7307
|
+
setActive(index);
|
7308
|
+
return;
|
7309
|
+
}
|
7310
|
+
}
|
7311
|
+
catch (error) {
|
7312
|
+
console.warn('Failed to parse popular gradient on click:', item.gradient, error);
|
7313
|
+
}
|
7314
|
+
}
|
7315
|
+
// Normal gradient object processing (fallback)
|
7200
7316
|
var stops = item.stops;
|
7201
7317
|
var lastStop = rgbaToArray(stops[stops.length - 1][0]);
|
7202
7318
|
var lastStopLoc = stops[stops.length - 1][1];
|
@@ -7731,18 +7847,69 @@ var IroGradient = function (_a) {
|
|
7731
7847
|
// Store the initial value for reset functionality
|
7732
7848
|
var initialValue = useRef(value);
|
7733
7849
|
var parsedColors = useCallback(function () {
|
7734
|
-
|
7850
|
+
try {
|
7851
|
+
var parsed = parseGradient(value);
|
7852
|
+
// If parsing failed, return fallback gradient
|
7853
|
+
if (typeof parsed === 'string') {
|
7854
|
+
console.warn('Gradient parsing failed, using fallback:', parsed);
|
7855
|
+
var fallback = parseGradient('linear-gradient(90deg, #ffffff 0%, #000000 100%)');
|
7856
|
+
// Ensure fallback has valid structure
|
7857
|
+
if (fallback && typeof fallback === 'object' && Array.isArray(fallback.stops) && fallback.stops.length > 0) {
|
7858
|
+
return fallback;
|
7859
|
+
}
|
7860
|
+
// Ultimate fallback with guaranteed structure
|
7861
|
+
return {
|
7862
|
+
stops: [
|
7863
|
+
['rgba(255, 255, 255, 1)', 0, 0],
|
7864
|
+
['rgba(0, 0, 0, 1)', 1, 1]
|
7865
|
+
],
|
7866
|
+
gradient: 'linear-gradient(90deg, #ffffff 0%, #000000 100%)',
|
7867
|
+
modifier: 90,
|
7868
|
+
type: 'linear'
|
7869
|
+
};
|
7870
|
+
}
|
7871
|
+
// Validate parsed result has required structure
|
7872
|
+
if (parsed && typeof parsed === 'object' && Array.isArray(parsed.stops) && parsed.stops.length > 0) {
|
7873
|
+
return parsed;
|
7874
|
+
}
|
7875
|
+
// If parsed result is invalid, use ultimate fallback
|
7876
|
+
console.warn('Parsed gradient has invalid structure:', parsed);
|
7877
|
+
return {
|
7878
|
+
stops: [
|
7879
|
+
['rgba(255, 255, 255, 1)', 0, 0],
|
7880
|
+
['rgba(0, 0, 0, 1)', 1, 1]
|
7881
|
+
],
|
7882
|
+
gradient: 'linear-gradient(90deg, #ffffff 0%, #000000 100%)',
|
7883
|
+
modifier: 90,
|
7884
|
+
type: 'linear'
|
7885
|
+
};
|
7886
|
+
}
|
7887
|
+
catch (error) {
|
7888
|
+
console.warn('Error parsing gradient, using ultimate fallback:', error);
|
7889
|
+
return {
|
7890
|
+
stops: [
|
7891
|
+
['rgba(255, 255, 255, 1)', 0, 0],
|
7892
|
+
['rgba(0, 0, 0, 1)', 1, 1]
|
7893
|
+
],
|
7894
|
+
gradient: 'linear-gradient(90deg, #ffffff 0%, #000000 100%)',
|
7895
|
+
modifier: 90,
|
7896
|
+
type: 'linear'
|
7897
|
+
};
|
7898
|
+
}
|
7735
7899
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
7736
7900
|
}, [value]);
|
7737
7901
|
var _s = parsedColors(), stops = _s.stops, type = _s.type, modifier = _s.modifier;
|
7738
|
-
var lastStop = rgbaToArray(stops[stops.length - 1][0]);
|
7739
|
-
var activeStopIndex = stops.length - 1;
|
7740
|
-
var activeStop = rgbaToHex([lastStop[0], lastStop[1], lastStop[2]]);
|
7741
|
-
var activeAlpha = Math.round(lastStop[3] * 100);
|
7742
7902
|
var iroPickerRef = useRef(null);
|
7743
7903
|
var containerRef = useRef(null);
|
7744
7904
|
var isUpdatingFromGradientStop = useRef(false);
|
7745
7905
|
var _t = __read(useState(200), 2), pickerWidth = _t[0], setPickerWidth = _t[1];
|
7906
|
+
// Safe extraction of stop data with fallbacks
|
7907
|
+
var safeStops = Array.isArray(stops) && stops.length > 0 ? stops : [['rgba(255, 255, 255, 1)', 0, 0], ['rgba(0, 0, 0, 1)', 1, 1]];
|
7908
|
+
var safeLastStop = rgbaToArray(safeStops[safeStops.length - 1][0]);
|
7909
|
+
var safeParsedLastStop = Array.isArray(safeLastStop) && safeLastStop.length >= 4 ? safeLastStop : [255, 255, 255, 1];
|
7910
|
+
var activeStopIndex = safeStops.length - 1;
|
7911
|
+
var activeStop = rgbaToHex([safeParsedLastStop[0], safeParsedLastStop[1], safeParsedLastStop[2]]);
|
7912
|
+
var activeAlpha = Math.round(safeParsedLastStop[3] * 100);
|
7746
7913
|
// Responsive width for IroColorPicker - match solid picker logic
|
7747
7914
|
useEffect(function () {
|
7748
7915
|
if (!containerRef.current)
|
@@ -7785,12 +7952,12 @@ var IroGradient = function (_a) {
|
|
7785
7952
|
gradient: value,
|
7786
7953
|
type: type,
|
7787
7954
|
modifier: modifier,
|
7788
|
-
stops:
|
7955
|
+
stops: safeStops
|
7789
7956
|
}), 2), color = _u[0], setColor = _u[1];
|
7790
7957
|
var _v = __read(useState({
|
7791
7958
|
hex: activeStop,
|
7792
7959
|
alpha: activeAlpha,
|
7793
|
-
loc:
|
7960
|
+
loc: safeStops[activeStopIndex][1],
|
7794
7961
|
index: activeStopIndex
|
7795
7962
|
}), 2), activeColor = _v[0], setActiveColor = _v[1];
|
7796
7963
|
var debounceColor = useDebounce(color, debounceMS);
|
@@ -8023,11 +8190,11 @@ var IroGradient = function (_a) {
|
|
8023
8190
|
var handleColorFromPanel = function (newColor) {
|
8024
8191
|
setColor(newColor);
|
8025
8192
|
if (newColor === null || newColor === void 0 ? void 0 : newColor.stops) {
|
8026
|
-
var
|
8027
|
-
var activeStop_1 = rgbaToHex([
|
8193
|
+
var lastStop = rgbaToArray(newColor.stops[newColor.stops.length - 1][0]);
|
8194
|
+
var activeStop_1 = rgbaToHex([lastStop[0], lastStop[1], lastStop[2]]);
|
8028
8195
|
var newActiveColor = {
|
8029
8196
|
hex: activeStop_1,
|
8030
|
-
alpha: Math.round(
|
8197
|
+
alpha: Math.round(lastStop[3] * 100),
|
8031
8198
|
loc: newColor.stops[newColor.stops.length - 1][1],
|
8032
8199
|
index: newColor.stops.length - 1
|
8033
8200
|
};
|
@@ -8472,5 +8639,5 @@ var ColorPicker = function (_a) {
|
|
8472
8639
|
gradient ? (React.createElement(IroGradient, { onChange: onChangeGradient, value: cssValue, format: format, defaultColors: defaultColors, debounceMS: debounceMS, debounce: debounce, showAlpha: showAlpha, showInputs: showInputs, showGradientResult: showGradientResult, showGradientStops: showGradientStops, showGradientMode: showGradientMode, showGradientAngle: showGradientAngle, showGradientPosition: showGradientPosition, allowAddGradientStops: allowAddGradientStops, colorBoardHeight: colorBoardHeight, showReset: showReset, onReset: onReset })) : (React.createElement(Fragment, null))))) : null)));
|
8473
8640
|
};
|
8474
8641
|
|
8475
|
-
export { ColorPicker, DEFAULT_COLORS, InputRgba, PopupTabs, PopupTabsBody, PopupTabsBodyItem, PopupTabsHeader, PopupTabsHeaderLabel, RADIALS_POS, ThemeProvider, ThemeToggle, TinyColor, checkFormat, cn, cssToGradientObject, ColorPicker as default, getGradient, getHexAlpha, gradientObjectToCss, hexToRgba, isGradientObject, isValidHex, isValidRgba, normalizeGradientValue, parseGradient, rgbaToArray, rgbaToHex, useDebounce, validGradient };
|
8642
|
+
export { ColorPicker, DEFAULT_COLORS, InputRgba, PopupTabs, PopupTabsBody, PopupTabsBodyItem, PopupTabsHeader, PopupTabsHeaderLabel, RADIALS_POS, ThemeProvider, ThemeToggle, TinyColor, checkFormat, cn, cssToGradientObject, ColorPicker as default, flexibleGradientToCss, getGradient, getHexAlpha, gradientObjectToCss, hexToRgba, isGradientObject, isValidHex, isValidRgba, normalizeGradientValue, parseGradient, rgbaToArray, rgbaToHex, useDebounce, validGradient };
|
8476
8643
|
//# sourceMappingURL=index.es.js.map
|