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.es.js
CHANGED
@@ -6470,10 +6470,11 @@ var validGradient = (function (input) {
|
|
6470
6470
|
var stops_1 = [];
|
6471
6471
|
for (var i = 0; i < colorStops.length; i++) {
|
6472
6472
|
var stopString = colorStops[i].trim();
|
6473
|
-
//
|
6474
|
-
|
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)?)?$/);
|
6475
6476
|
if (stopMatch) {
|
6476
|
-
var _b = __read(stopMatch, 4), colorStr = _b[1], positionStr = _b[2],
|
6477
|
+
var _b = __read(stopMatch, 4), colorStr = _b[1], positionStr = _b[2], unit = _b[3];
|
6477
6478
|
var tinyColorInstance = tinycolor(colorStr.trim());
|
6478
6479
|
if (tinyColorInstance.isValid()) {
|
6479
6480
|
var stop_1 = {
|
@@ -6481,14 +6482,21 @@ var validGradient = (function (input) {
|
|
6481
6482
|
};
|
6482
6483
|
if (positionStr) {
|
6483
6484
|
var position = parseFloat(positionStr);
|
6484
|
-
//
|
6485
|
-
if (
|
6485
|
+
// Convert percentage to decimal (0-1 range)
|
6486
|
+
if (unit === '%' || !unit) {
|
6487
|
+
// If no unit specified, assume percentage
|
6486
6488
|
position = position / 100;
|
6487
6489
|
}
|
6488
6490
|
stop_1.position = Math.max(0, Math.min(1, position));
|
6489
6491
|
}
|
6490
6492
|
stops_1.push(stop_1);
|
6491
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);
|
6492
6500
|
}
|
6493
6501
|
}
|
6494
6502
|
// Auto-assign positions if missing
|
@@ -6586,7 +6594,7 @@ var parseGradient = (function (str) {
|
|
6586
6594
|
var helperAngle = type === 'linear' ? '180' : 'circle at center';
|
6587
6595
|
var modifier = findF || angle_1 || helperAngle;
|
6588
6596
|
return {
|
6589
|
-
gradient:
|
6597
|
+
gradient: typeof gradient !== 'string' ? gradient.original : str,
|
6590
6598
|
type: type,
|
6591
6599
|
modifier: modifier.match(/\d+/) !== null
|
6592
6600
|
? Number((_b = modifier.match(/\d+/)) === null || _b === void 0 ? void 0 : _b.join(''))
|
@@ -6603,7 +6611,7 @@ var parseGradient = (function (str) {
|
|
6603
6611
|
});
|
6604
6612
|
|
6605
6613
|
/**
|
6606
|
-
* Convert gradient object to CSS gradient string
|
6614
|
+
* Convert gradient object to CSS gradient string (strict typing)
|
6607
6615
|
*/
|
6608
6616
|
function gradientObjectToCss(gradientData) {
|
6609
6617
|
var type = gradientData.type, _a = gradientData.angle, angle = _a === void 0 ? 90 : _a, stops = gradientData.stops;
|
@@ -6622,6 +6630,38 @@ function gradientObjectToCss(gradientData) {
|
|
6622
6630
|
return "radial-gradient(circle, ".concat(cssStops, ")");
|
6623
6631
|
}
|
6624
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
|
+
}
|
6625
6665
|
/**
|
6626
6666
|
* Convert CSS gradient string to gradient object
|
6627
6667
|
*/
|
@@ -7211,9 +7251,22 @@ var DefaultColorPanel = function (_a) {
|
|
7211
7251
|
var _d = __read(useState([]), 2), formatedDefColors = _d[0], setFormatedDefColors = _d[1];
|
7212
7252
|
useEffect(function () {
|
7213
7253
|
if (colorType === 'gradient') {
|
7214
|
-
|
7215
|
-
|
7216
|
-
|
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);
|
7217
7270
|
}
|
7218
7271
|
else {
|
7219
7272
|
setFormatedDefColors(checkValidColorsArray(defaultColors, 'solid'));
|
@@ -7225,6 +7278,41 @@ var DefaultColorPanel = function (_a) {
|
|
7225
7278
|
return;
|
7226
7279
|
}
|
7227
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)
|
7228
7316
|
var stops = item.stops;
|
7229
7317
|
var lastStop = rgbaToArray(stops[stops.length - 1][0]);
|
7230
7318
|
var lastStopLoc = stops[stops.length - 1][1];
|
@@ -7764,25 +7852,64 @@ var IroGradient = function (_a) {
|
|
7764
7852
|
// If parsing failed, return fallback gradient
|
7765
7853
|
if (typeof parsed === 'string') {
|
7766
7854
|
console.warn('Gradient parsing failed, using fallback:', parsed);
|
7767
|
-
|
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;
|
7768
7874
|
}
|
7769
|
-
|
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
|
+
};
|
7770
7886
|
}
|
7771
7887
|
catch (error) {
|
7772
|
-
console.warn('Error parsing gradient, using fallback:', error);
|
7773
|
-
return
|
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
|
+
};
|
7774
7898
|
}
|
7775
7899
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
7776
7900
|
}, [value]);
|
7777
7901
|
var _s = parsedColors(), stops = _s.stops, type = _s.type, modifier = _s.modifier;
|
7778
|
-
var lastStop = rgbaToArray(stops[stops.length - 1][0]);
|
7779
|
-
var activeStopIndex = stops.length - 1;
|
7780
|
-
var activeStop = rgbaToHex([lastStop[0], lastStop[1], lastStop[2]]);
|
7781
|
-
var activeAlpha = Math.round(lastStop[3] * 100);
|
7782
7902
|
var iroPickerRef = useRef(null);
|
7783
7903
|
var containerRef = useRef(null);
|
7784
7904
|
var isUpdatingFromGradientStop = useRef(false);
|
7785
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);
|
7786
7913
|
// Responsive width for IroColorPicker - match solid picker logic
|
7787
7914
|
useEffect(function () {
|
7788
7915
|
if (!containerRef.current)
|
@@ -7825,12 +7952,12 @@ var IroGradient = function (_a) {
|
|
7825
7952
|
gradient: value,
|
7826
7953
|
type: type,
|
7827
7954
|
modifier: modifier,
|
7828
|
-
stops:
|
7955
|
+
stops: safeStops
|
7829
7956
|
}), 2), color = _u[0], setColor = _u[1];
|
7830
7957
|
var _v = __read(useState({
|
7831
7958
|
hex: activeStop,
|
7832
7959
|
alpha: activeAlpha,
|
7833
|
-
loc:
|
7960
|
+
loc: safeStops[activeStopIndex][1],
|
7834
7961
|
index: activeStopIndex
|
7835
7962
|
}), 2), activeColor = _v[0], setActiveColor = _v[1];
|
7836
7963
|
var debounceColor = useDebounce(color, debounceMS);
|
@@ -8063,11 +8190,11 @@ var IroGradient = function (_a) {
|
|
8063
8190
|
var handleColorFromPanel = function (newColor) {
|
8064
8191
|
setColor(newColor);
|
8065
8192
|
if (newColor === null || newColor === void 0 ? void 0 : newColor.stops) {
|
8066
|
-
var
|
8067
|
-
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]]);
|
8068
8195
|
var newActiveColor = {
|
8069
8196
|
hex: activeStop_1,
|
8070
|
-
alpha: Math.round(
|
8197
|
+
alpha: Math.round(lastStop[3] * 100),
|
8071
8198
|
loc: newColor.stops[newColor.stops.length - 1][1],
|
8072
8199
|
index: newColor.stops.length - 1
|
8073
8200
|
};
|
@@ -8512,5 +8639,5 @@ var ColorPicker = function (_a) {
|
|
8512
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)));
|
8513
8640
|
};
|
8514
8641
|
|
8515
|
-
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 };
|
8516
8643
|
//# sourceMappingURL=index.es.js.map
|