react-iro-gradient-picker 1.2.3 → 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/dist/index.es.js +151 -24
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +151 -23
- 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/package.json +1 -1
package/dist/index.js
CHANGED
@@ -6478,10 +6478,11 @@ var validGradient = (function (input) {
|
|
6478
6478
|
var stops_1 = [];
|
6479
6479
|
for (var i = 0; i < colorStops.length; i++) {
|
6480
6480
|
var stopString = colorStops[i].trim();
|
6481
|
-
//
|
6482
|
-
|
6481
|
+
// Improved regex to handle various gradient stop formats
|
6482
|
+
// Matches: color position%, color position, or just color
|
6483
|
+
var stopMatch = stopString.match(/^(.+?)(?:\s+([\d.]+)(%|px|em|rem)?)?$/);
|
6483
6484
|
if (stopMatch) {
|
6484
|
-
var _b = __read(stopMatch, 4), colorStr = _b[1], positionStr = _b[2],
|
6485
|
+
var _b = __read(stopMatch, 4), colorStr = _b[1], positionStr = _b[2], unit = _b[3];
|
6485
6486
|
var tinyColorInstance = tinycolor(colorStr.trim());
|
6486
6487
|
if (tinyColorInstance.isValid()) {
|
6487
6488
|
var stop_1 = {
|
@@ -6489,14 +6490,21 @@ var validGradient = (function (input) {
|
|
6489
6490
|
};
|
6490
6491
|
if (positionStr) {
|
6491
6492
|
var position = parseFloat(positionStr);
|
6492
|
-
//
|
6493
|
-
if (
|
6493
|
+
// Convert percentage to decimal (0-1 range)
|
6494
|
+
if (unit === '%' || !unit) {
|
6495
|
+
// If no unit specified, assume percentage
|
6494
6496
|
position = position / 100;
|
6495
6497
|
}
|
6496
6498
|
stop_1.position = Math.max(0, Math.min(1, position));
|
6497
6499
|
}
|
6498
6500
|
stops_1.push(stop_1);
|
6499
6501
|
}
|
6502
|
+
else {
|
6503
|
+
console.warn('Invalid color in gradient stop:', colorStr.trim());
|
6504
|
+
}
|
6505
|
+
}
|
6506
|
+
else {
|
6507
|
+
console.warn('Could not parse gradient stop:', stopString);
|
6500
6508
|
}
|
6501
6509
|
}
|
6502
6510
|
// Auto-assign positions if missing
|
@@ -6594,7 +6602,7 @@ var parseGradient = (function (str) {
|
|
6594
6602
|
var helperAngle = type === 'linear' ? '180' : 'circle at center';
|
6595
6603
|
var modifier = findF || angle_1 || helperAngle;
|
6596
6604
|
return {
|
6597
|
-
gradient:
|
6605
|
+
gradient: typeof gradient !== 'string' ? gradient.original : str,
|
6598
6606
|
type: type,
|
6599
6607
|
modifier: modifier.match(/\d+/) !== null
|
6600
6608
|
? Number((_b = modifier.match(/\d+/)) === null || _b === void 0 ? void 0 : _b.join(''))
|
@@ -6611,7 +6619,7 @@ var parseGradient = (function (str) {
|
|
6611
6619
|
});
|
6612
6620
|
|
6613
6621
|
/**
|
6614
|
-
* Convert gradient object to CSS gradient string
|
6622
|
+
* Convert gradient object to CSS gradient string (strict typing)
|
6615
6623
|
*/
|
6616
6624
|
function gradientObjectToCss(gradientData) {
|
6617
6625
|
var type = gradientData.type, _a = gradientData.angle, angle = _a === void 0 ? 90 : _a, stops = gradientData.stops;
|
@@ -6630,6 +6638,38 @@ function gradientObjectToCss(gradientData) {
|
|
6630
6638
|
return "radial-gradient(circle, ".concat(cssStops, ")");
|
6631
6639
|
}
|
6632
6640
|
}
|
6641
|
+
/**
|
6642
|
+
* Convert flexible gradient object to CSS gradient string (loose typing)
|
6643
|
+
*/
|
6644
|
+
function flexibleGradientToCss(gradientData) {
|
6645
|
+
var _a = gradientData.type, type = _a === void 0 ? 'linear' : _a, angle = gradientData.angle, direction = gradientData.direction, position = gradientData.position, stops = gradientData.stops;
|
6646
|
+
// Convert stops to CSS format with flexible position handling
|
6647
|
+
var cssStops = stops
|
6648
|
+
.map(function (stop) {
|
6649
|
+
var color = tinycolor(stop.color);
|
6650
|
+
var positionStr = '';
|
6651
|
+
if (stop.position !== undefined) {
|
6652
|
+
if (typeof stop.position === 'string') {
|
6653
|
+
positionStr = " ".concat(stop.position);
|
6654
|
+
}
|
6655
|
+
else {
|
6656
|
+
positionStr = " ".concat(stop.position, "%");
|
6657
|
+
}
|
6658
|
+
}
|
6659
|
+
return "".concat(color.toRgbString()).concat(positionStr);
|
6660
|
+
})
|
6661
|
+
.join(', ');
|
6662
|
+
if (type === 'linear') {
|
6663
|
+
// Use direction if provided, otherwise use angle
|
6664
|
+
var gradientDirection = direction || (angle ? "".concat(angle, "deg") : '90deg');
|
6665
|
+
return "linear-gradient(".concat(gradientDirection, ", ").concat(cssStops, ")");
|
6666
|
+
}
|
6667
|
+
else {
|
6668
|
+
// Handle radial gradients with flexible positioning
|
6669
|
+
var radialPosition = position || 'circle';
|
6670
|
+
return "radial-gradient(".concat(radialPosition, ", ").concat(cssStops, ")");
|
6671
|
+
}
|
6672
|
+
}
|
6633
6673
|
/**
|
6634
6674
|
* Convert CSS gradient string to gradient object
|
6635
6675
|
*/
|
@@ -7219,9 +7259,22 @@ var DefaultColorPanel = function (_a) {
|
|
7219
7259
|
var _d = __read(React.useState([]), 2), formatedDefColors = _d[0], setFormatedDefColors = _d[1];
|
7220
7260
|
React.useEffect(function () {
|
7221
7261
|
if (colorType === 'gradient') {
|
7222
|
-
|
7223
|
-
|
7224
|
-
|
7262
|
+
var validGradients = checkValidColorsArray(defaultColors, 'grad');
|
7263
|
+
// For popular colors display, create minimal IColor objects using original CSS strings
|
7264
|
+
// This avoids complex parsing issues while still providing functional display
|
7265
|
+
var displayGradients = validGradients.map(function (gradientString) {
|
7266
|
+
return {
|
7267
|
+
gradient: gradientString, // Use the original CSS string directly for display
|
7268
|
+
type: gradientString.startsWith('radial-') ? 'radial' : 'linear',
|
7269
|
+
modifier: 180, // Default value, not critical for display
|
7270
|
+
stops: [
|
7271
|
+
// Dummy stops that help identify display objects in onChooseColor
|
7272
|
+
['rgba(255, 0, 0, 1)', 0, 0],
|
7273
|
+
['rgba(0, 255, 0, 1)', 1, 1]
|
7274
|
+
]
|
7275
|
+
};
|
7276
|
+
});
|
7277
|
+
setFormatedDefColors(displayGradients);
|
7225
7278
|
}
|
7226
7279
|
else {
|
7227
7280
|
setFormatedDefColors(checkValidColorsArray(defaultColors, 'solid'));
|
@@ -7233,6 +7286,41 @@ var DefaultColorPanel = function (_a) {
|
|
7233
7286
|
return;
|
7234
7287
|
}
|
7235
7288
|
if (colorType === 'gradient' && typeof item !== 'string') {
|
7289
|
+
// If this is a simplified display object (identified by dummy stops), parse the gradient properly
|
7290
|
+
if (item.stops.length === 2 &&
|
7291
|
+
item.stops[0][0] === 'rgba(255, 0, 0, 1)') {
|
7292
|
+
try {
|
7293
|
+
var properlyParsed = parseGradient(item.gradient);
|
7294
|
+
if (properlyParsed &&
|
7295
|
+
properlyParsed.stops &&
|
7296
|
+
properlyParsed.stops.length > 0) {
|
7297
|
+
var stops_1 = properlyParsed.stops;
|
7298
|
+
var lastStop_1 = rgbaToArray(stops_1[stops_1.length - 1][0]);
|
7299
|
+
var lastStopLoc_1 = stops_1[stops_1.length - 1][1];
|
7300
|
+
var activeStop_1 = rgbaToHex([
|
7301
|
+
lastStop_1[0],
|
7302
|
+
lastStop_1[1],
|
7303
|
+
lastStop_1[2]
|
7304
|
+
]);
|
7305
|
+
var activeIdx_1 = stops_1[stops_1.length - 1][2];
|
7306
|
+
setInit(false);
|
7307
|
+
setColor(properlyParsed);
|
7308
|
+
setActiveColor &&
|
7309
|
+
setActiveColor({
|
7310
|
+
hex: activeStop_1,
|
7311
|
+
alpha: Number(Math.round(lastStop_1[3] * 100)),
|
7312
|
+
loc: lastStopLoc_1,
|
7313
|
+
index: activeIdx_1
|
7314
|
+
});
|
7315
|
+
setActive(index);
|
7316
|
+
return;
|
7317
|
+
}
|
7318
|
+
}
|
7319
|
+
catch (error) {
|
7320
|
+
console.warn('Failed to parse popular gradient on click:', item.gradient, error);
|
7321
|
+
}
|
7322
|
+
}
|
7323
|
+
// Normal gradient object processing (fallback)
|
7236
7324
|
var stops = item.stops;
|
7237
7325
|
var lastStop = rgbaToArray(stops[stops.length - 1][0]);
|
7238
7326
|
var lastStopLoc = stops[stops.length - 1][1];
|
@@ -7772,25 +7860,64 @@ var IroGradient = function (_a) {
|
|
7772
7860
|
// If parsing failed, return fallback gradient
|
7773
7861
|
if (typeof parsed === 'string') {
|
7774
7862
|
console.warn('Gradient parsing failed, using fallback:', parsed);
|
7775
|
-
|
7863
|
+
var fallback = parseGradient('linear-gradient(90deg, #ffffff 0%, #000000 100%)');
|
7864
|
+
// Ensure fallback has valid structure
|
7865
|
+
if (fallback && typeof fallback === 'object' && Array.isArray(fallback.stops) && fallback.stops.length > 0) {
|
7866
|
+
return fallback;
|
7867
|
+
}
|
7868
|
+
// Ultimate fallback with guaranteed structure
|
7869
|
+
return {
|
7870
|
+
stops: [
|
7871
|
+
['rgba(255, 255, 255, 1)', 0, 0],
|
7872
|
+
['rgba(0, 0, 0, 1)', 1, 1]
|
7873
|
+
],
|
7874
|
+
gradient: 'linear-gradient(90deg, #ffffff 0%, #000000 100%)',
|
7875
|
+
modifier: 90,
|
7876
|
+
type: 'linear'
|
7877
|
+
};
|
7878
|
+
}
|
7879
|
+
// Validate parsed result has required structure
|
7880
|
+
if (parsed && typeof parsed === 'object' && Array.isArray(parsed.stops) && parsed.stops.length > 0) {
|
7881
|
+
return parsed;
|
7776
7882
|
}
|
7777
|
-
|
7883
|
+
// If parsed result is invalid, use ultimate fallback
|
7884
|
+
console.warn('Parsed gradient has invalid structure:', parsed);
|
7885
|
+
return {
|
7886
|
+
stops: [
|
7887
|
+
['rgba(255, 255, 255, 1)', 0, 0],
|
7888
|
+
['rgba(0, 0, 0, 1)', 1, 1]
|
7889
|
+
],
|
7890
|
+
gradient: 'linear-gradient(90deg, #ffffff 0%, #000000 100%)',
|
7891
|
+
modifier: 90,
|
7892
|
+
type: 'linear'
|
7893
|
+
};
|
7778
7894
|
}
|
7779
7895
|
catch (error) {
|
7780
|
-
console.warn('Error parsing gradient, using fallback:', error);
|
7781
|
-
return
|
7896
|
+
console.warn('Error parsing gradient, using ultimate fallback:', error);
|
7897
|
+
return {
|
7898
|
+
stops: [
|
7899
|
+
['rgba(255, 255, 255, 1)', 0, 0],
|
7900
|
+
['rgba(0, 0, 0, 1)', 1, 1]
|
7901
|
+
],
|
7902
|
+
gradient: 'linear-gradient(90deg, #ffffff 0%, #000000 100%)',
|
7903
|
+
modifier: 90,
|
7904
|
+
type: 'linear'
|
7905
|
+
};
|
7782
7906
|
}
|
7783
7907
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
7784
7908
|
}, [value]);
|
7785
7909
|
var _s = parsedColors(), stops = _s.stops, type = _s.type, modifier = _s.modifier;
|
7786
|
-
var lastStop = rgbaToArray(stops[stops.length - 1][0]);
|
7787
|
-
var activeStopIndex = stops.length - 1;
|
7788
|
-
var activeStop = rgbaToHex([lastStop[0], lastStop[1], lastStop[2]]);
|
7789
|
-
var activeAlpha = Math.round(lastStop[3] * 100);
|
7790
7910
|
var iroPickerRef = React.useRef(null);
|
7791
7911
|
var containerRef = React.useRef(null);
|
7792
7912
|
var isUpdatingFromGradientStop = React.useRef(false);
|
7793
7913
|
var _t = __read(React.useState(200), 2), pickerWidth = _t[0], setPickerWidth = _t[1];
|
7914
|
+
// Safe extraction of stop data with fallbacks
|
7915
|
+
var safeStops = Array.isArray(stops) && stops.length > 0 ? stops : [['rgba(255, 255, 255, 1)', 0, 0], ['rgba(0, 0, 0, 1)', 1, 1]];
|
7916
|
+
var safeLastStop = rgbaToArray(safeStops[safeStops.length - 1][0]);
|
7917
|
+
var safeParsedLastStop = Array.isArray(safeLastStop) && safeLastStop.length >= 4 ? safeLastStop : [255, 255, 255, 1];
|
7918
|
+
var activeStopIndex = safeStops.length - 1;
|
7919
|
+
var activeStop = rgbaToHex([safeParsedLastStop[0], safeParsedLastStop[1], safeParsedLastStop[2]]);
|
7920
|
+
var activeAlpha = Math.round(safeParsedLastStop[3] * 100);
|
7794
7921
|
// Responsive width for IroColorPicker - match solid picker logic
|
7795
7922
|
React.useEffect(function () {
|
7796
7923
|
if (!containerRef.current)
|
@@ -7833,12 +7960,12 @@ var IroGradient = function (_a) {
|
|
7833
7960
|
gradient: value,
|
7834
7961
|
type: type,
|
7835
7962
|
modifier: modifier,
|
7836
|
-
stops:
|
7963
|
+
stops: safeStops
|
7837
7964
|
}), 2), color = _u[0], setColor = _u[1];
|
7838
7965
|
var _v = __read(React.useState({
|
7839
7966
|
hex: activeStop,
|
7840
7967
|
alpha: activeAlpha,
|
7841
|
-
loc:
|
7968
|
+
loc: safeStops[activeStopIndex][1],
|
7842
7969
|
index: activeStopIndex
|
7843
7970
|
}), 2), activeColor = _v[0], setActiveColor = _v[1];
|
7844
7971
|
var debounceColor = useDebounce(color, debounceMS);
|
@@ -8071,11 +8198,11 @@ var IroGradient = function (_a) {
|
|
8071
8198
|
var handleColorFromPanel = function (newColor) {
|
8072
8199
|
setColor(newColor);
|
8073
8200
|
if (newColor === null || newColor === void 0 ? void 0 : newColor.stops) {
|
8074
|
-
var
|
8075
|
-
var activeStop_1 = rgbaToHex([
|
8201
|
+
var lastStop = rgbaToArray(newColor.stops[newColor.stops.length - 1][0]);
|
8202
|
+
var activeStop_1 = rgbaToHex([lastStop[0], lastStop[1], lastStop[2]]);
|
8076
8203
|
var newActiveColor = {
|
8077
8204
|
hex: activeStop_1,
|
8078
|
-
alpha: Math.round(
|
8205
|
+
alpha: Math.round(lastStop[3] * 100),
|
8079
8206
|
loc: newColor.stops[newColor.stops.length - 1][1],
|
8080
8207
|
index: newColor.stops.length - 1
|
8081
8208
|
};
|
@@ -8536,6 +8663,7 @@ exports.checkFormat = checkFormat;
|
|
8536
8663
|
exports.cn = cn;
|
8537
8664
|
exports.cssToGradientObject = cssToGradientObject;
|
8538
8665
|
exports["default"] = ColorPicker;
|
8666
|
+
exports.flexibleGradientToCss = flexibleGradientToCss;
|
8539
8667
|
exports.getGradient = getGradient;
|
8540
8668
|
exports.getHexAlpha = getHexAlpha;
|
8541
8669
|
exports.gradientObjectToCss = gradientObjectToCss;
|