react-iro-gradient-picker 1.1.6 → 1.2.1
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 +61 -1
- package/dist/components/core/Colorpicker/IroGradient/index.d.ts +2 -2
- package/dist/components/core/Colorpicker/IroSolid/index.d.ts +2 -2
- package/dist/components/core/Colorpicker/helper.d.ts +2 -1
- package/dist/index.es.js +157 -40
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +160 -39
- package/dist/index.js.map +1 -1
- package/dist/lib/types/types.d.ts +44 -1
- package/dist/utils/gradient/gradientConverter.d.ts +17 -0
- package/dist/utils/gradient/index.d.ts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -6582,6 +6582,94 @@ var parseGradient = (function (str) {
|
|
6582
6582
|
}
|
6583
6583
|
});
|
6584
6584
|
|
6585
|
+
/**
|
6586
|
+
* Convert gradient object to CSS gradient string
|
6587
|
+
*/
|
6588
|
+
function gradientObjectToCss(gradientData) {
|
6589
|
+
var type = gradientData.type, _a = gradientData.angle, angle = _a === void 0 ? 90 : _a, stops = gradientData.stops;
|
6590
|
+
// Convert stops to CSS format
|
6591
|
+
var cssStops = stops
|
6592
|
+
.sort(function (a, b) { return a.position - b.position; }) // Ensure stops are in order
|
6593
|
+
.map(function (stop) {
|
6594
|
+
var color = tinycolor(stop.color);
|
6595
|
+
return "".concat(color.toRgbString(), " ").concat(stop.position, "%");
|
6596
|
+
})
|
6597
|
+
.join(', ');
|
6598
|
+
if (type === 'linear') {
|
6599
|
+
return "linear-gradient(".concat(angle, "deg, ").concat(cssStops, ")");
|
6600
|
+
}
|
6601
|
+
else {
|
6602
|
+
return "radial-gradient(circle, ".concat(cssStops, ")");
|
6603
|
+
}
|
6604
|
+
}
|
6605
|
+
/**
|
6606
|
+
* Convert CSS gradient string to gradient object
|
6607
|
+
*/
|
6608
|
+
function cssToGradientObject(cssGradient) {
|
6609
|
+
try {
|
6610
|
+
var parsed = parseGradient(cssGradient);
|
6611
|
+
if (!parsed) {
|
6612
|
+
return null;
|
6613
|
+
}
|
6614
|
+
var type = parsed.type, modifier = parsed.modifier, stops = parsed.stops;
|
6615
|
+
// Convert stops to object format
|
6616
|
+
var gradientStops = stops.map(function (stop) { return ({
|
6617
|
+
color: String(stop[0]), // Ensure it's a string
|
6618
|
+
position: Math.round(stop[1] * 100) // Convert to percentage
|
6619
|
+
}); });
|
6620
|
+
// Extract angle from modifier (for linear gradients)
|
6621
|
+
var angle = 90; // Default angle
|
6622
|
+
if (type === 'linear' && modifier && typeof modifier === 'string') {
|
6623
|
+
var angleMatch = modifier.match(/(\d+)deg/);
|
6624
|
+
if (angleMatch) {
|
6625
|
+
angle = parseInt(angleMatch[1], 10);
|
6626
|
+
}
|
6627
|
+
}
|
6628
|
+
return {
|
6629
|
+
type: type,
|
6630
|
+
angle: type === 'linear' ? angle : undefined,
|
6631
|
+
stops: gradientStops,
|
6632
|
+
defaultActiveTab: 'gradient'
|
6633
|
+
};
|
6634
|
+
}
|
6635
|
+
catch (error) {
|
6636
|
+
console.warn('Failed to parse CSS gradient:', error);
|
6637
|
+
return null;
|
6638
|
+
}
|
6639
|
+
}
|
6640
|
+
/**
|
6641
|
+
* Check if a value is a gradient object
|
6642
|
+
*/
|
6643
|
+
function isGradientObject(value) {
|
6644
|
+
return (value &&
|
6645
|
+
typeof value === 'object' &&
|
6646
|
+
'type' in value &&
|
6647
|
+
'stops' in value &&
|
6648
|
+
Array.isArray(value.stops) &&
|
6649
|
+
value.stops.length > 0 &&
|
6650
|
+
value.stops.every(function (stop) {
|
6651
|
+
return stop &&
|
6652
|
+
typeof stop === 'object' &&
|
6653
|
+
'color' in stop &&
|
6654
|
+
'position' in stop &&
|
6655
|
+
typeof stop.position === 'number';
|
6656
|
+
}));
|
6657
|
+
}
|
6658
|
+
/**
|
6659
|
+
* Normalize value to always return a CSS gradient string
|
6660
|
+
*/
|
6661
|
+
function normalizeGradientValue(value) {
|
6662
|
+
if (typeof value === 'string') {
|
6663
|
+
return value;
|
6664
|
+
}
|
6665
|
+
if (isGradientObject(value)) {
|
6666
|
+
return gradientObjectToCss(value);
|
6667
|
+
}
|
6668
|
+
// Fallback
|
6669
|
+
return 'linear-gradient(90deg, #ffffff 0%, #000000 100%)';
|
6670
|
+
}
|
6671
|
+
// End of file
|
6672
|
+
|
6585
6673
|
var getAlphaValue = function (value) {
|
6586
6674
|
value.replace(/%/i, '');
|
6587
6675
|
if (value[0] === '0' && value.length > 1) {
|
@@ -6988,28 +7076,35 @@ IroColorPicker.displayName = 'IroColorPicker';
|
|
6988
7076
|
|
6989
7077
|
var getIndexActiveTag = function (value) {
|
6990
7078
|
var tab = 'solid';
|
6991
|
-
|
6992
|
-
if (value) {
|
6993
|
-
|
6994
|
-
|
6995
|
-
|
6996
|
-
|
6997
|
-
|
6998
|
-
|
6999
|
-
|
7000
|
-
tab = 'solid';
|
7001
|
-
return tab;
|
7002
|
-
}
|
7003
|
-
var rgba = rgbaToArray(value);
|
7004
|
-
if (rgba) {
|
7005
|
-
if (isValidRgba([rgba[0], rgba[1], rgba[2]])) {
|
7079
|
+
// Handle gradient object
|
7080
|
+
if (isGradientObject(value)) {
|
7081
|
+
return 'gradient';
|
7082
|
+
}
|
7083
|
+
// Handle string value
|
7084
|
+
if (typeof value === 'string') {
|
7085
|
+
var validValue = tinycolor(value).isValid();
|
7086
|
+
if (value) {
|
7087
|
+
if (value === 'transparent') {
|
7006
7088
|
tab = 'solid';
|
7007
7089
|
return tab;
|
7008
7090
|
}
|
7009
|
-
|
7010
|
-
|
7011
|
-
|
7012
|
-
|
7091
|
+
if (validValue &&
|
7092
|
+
!value.trim().startsWith('radial-gradient') &&
|
7093
|
+
!value.trim().startsWith('linear-gradient')) {
|
7094
|
+
tab = 'solid';
|
7095
|
+
return tab;
|
7096
|
+
}
|
7097
|
+
var rgba = rgbaToArray(value);
|
7098
|
+
if (rgba) {
|
7099
|
+
if (isValidRgba([rgba[0], rgba[1], rgba[2]])) {
|
7100
|
+
tab = 'solid';
|
7101
|
+
return tab;
|
7102
|
+
}
|
7103
|
+
}
|
7104
|
+
else {
|
7105
|
+
tab = 'gradient';
|
7106
|
+
return tab;
|
7107
|
+
}
|
7013
7108
|
}
|
7014
7109
|
}
|
7015
7110
|
return tab;
|
@@ -7792,7 +7887,9 @@ var IroGradient = function (_a) {
|
|
7792
7887
|
React.useEffect(function () {
|
7793
7888
|
var initializeIroPicker = function () {
|
7794
7889
|
var _a, _b;
|
7795
|
-
if (((_b = (_a = iroPickerRef.current) === null || _a === void 0 ? void 0 : _a.colorPicker) === null || _b === void 0 ? void 0 : _b.color) &&
|
7890
|
+
if (((_b = (_a = iroPickerRef.current) === null || _a === void 0 ? void 0 : _a.colorPicker) === null || _b === void 0 ? void 0 : _b.color) &&
|
7891
|
+
activeColor.hex &&
|
7892
|
+
typeof activeColor.alpha === 'number') {
|
7796
7893
|
console.log('🚀 Initializing iro picker with activeColor:', activeColor);
|
7797
7894
|
// Wait a bit for the picker to be fully ready, then update
|
7798
7895
|
setTimeout(function () {
|
@@ -7813,13 +7910,19 @@ var IroGradient = function (_a) {
|
|
7813
7910
|
var handleSetActiveColor = React.useCallback(function (newActiveColor) {
|
7814
7911
|
console.log('🎯 Gradient stop clicked, setting active color:', newActiveColor);
|
7815
7912
|
setActiveColor(newActiveColor);
|
7816
|
-
//
|
7817
|
-
|
7818
|
-
|
7819
|
-
|
7820
|
-
|
7821
|
-
|
7822
|
-
|
7913
|
+
// Validate before updating iro picker
|
7914
|
+
if (newActiveColor.hex && typeof newActiveColor.alpha === 'number') {
|
7915
|
+
// Force immediate update of iro picker with longer delay for first-time reliability
|
7916
|
+
setTimeout(function () {
|
7917
|
+
updateIroPickerColor({
|
7918
|
+
hex: newActiveColor.hex,
|
7919
|
+
alpha: newActiveColor.alpha
|
7920
|
+
});
|
7921
|
+
}, 50); // Increased from 5ms to 50ms for better first-time success
|
7922
|
+
}
|
7923
|
+
else {
|
7924
|
+
console.log('⚠️ Skipping iro picker update in handleSetActiveColor - invalid data:', newActiveColor);
|
7925
|
+
}
|
7823
7926
|
}, [updateIroPickerColor]);
|
7824
7927
|
// Update iro picker when activeColor changes (e.g., clicking gradient stops)
|
7825
7928
|
React.useEffect(function () {
|
@@ -7829,18 +7932,17 @@ var IroGradient = function (_a) {
|
|
7829
7932
|
index: activeColor.index,
|
7830
7933
|
loc: activeColor.loc
|
7831
7934
|
});
|
7935
|
+
// Validate activeColor before proceeding
|
7936
|
+
if (!activeColor.hex || typeof activeColor.alpha !== 'number') {
|
7937
|
+
console.log('⚠️ Skipping iro picker update - invalid activeColor:', activeColor);
|
7938
|
+
return;
|
7939
|
+
}
|
7832
7940
|
// Add a small delay to ensure the activeColor state has fully updated
|
7833
7941
|
var timeoutId = setTimeout(function () {
|
7834
7942
|
updateIroPickerColor({ hex: activeColor.hex, alpha: activeColor.alpha });
|
7835
7943
|
}, 10);
|
7836
7944
|
return function () { return clearTimeout(timeoutId); };
|
7837
|
-
}, [
|
7838
|
-
activeColor.hex,
|
7839
|
-
activeColor.alpha,
|
7840
|
-
activeColor.index,
|
7841
|
-
activeColor.loc,
|
7842
|
-
updateIroPickerColor
|
7843
|
-
]);
|
7945
|
+
}, [activeColor, updateIroPickerColor]);
|
7844
7946
|
var updateGradient = React.useCallback(function (newColor) {
|
7845
7947
|
if (Array.isArray(newColor)) {
|
7846
7948
|
// Handle the case where it's called with stops array
|
@@ -8327,7 +8429,22 @@ var PopupTabsBodyItem = function (_a) {
|
|
8327
8429
|
|
8328
8430
|
var ColorPicker = function (_a) {
|
8329
8431
|
var _b = _a.value, value = _b === void 0 ? '#ffffff' : _b, _c = _a.format, format = _c === void 0 ? 'rgb' : _c, _d = _a.gradient, gradient = _d === void 0 ? false : _d, _e = _a.solid, solid = _e === void 0 ? true : _e, _f = _a.debounceMS, debounceMS = _f === void 0 ? 300 : _f, _g = _a.debounce, debounce = _g === void 0 ? true : _g, _h = _a.showAlpha, showAlpha = _h === void 0 ? true : _h, _j = _a.showInputs, showInputs = _j === void 0 ? true : _j, _k = _a.showGradientResult, showGradientResult = _k === void 0 ? true : _k, _l = _a.showGradientStops, showGradientStops = _l === void 0 ? true : _l, _m = _a.showGradientMode, showGradientMode = _m === void 0 ? true : _m, _o = _a.showGradientAngle, showGradientAngle = _o === void 0 ? true : _o, _p = _a.showGradientPosition, showGradientPosition = _p === void 0 ? true : _p, _q = _a.allowAddGradientStops, allowAddGradientStops = _q === void 0 ? true : _q, _r = _a.popupWidth, popupWidth = _r === void 0 ? 267 : _r, _s = _a.colorBoardHeight, colorBoardHeight = _s === void 0 ? 120 : _s, _t = _a.defaultColors, defaultColors = _t === void 0 ? DEFAULT_COLORS : _t, defaultActiveTab = _a.defaultActiveTab, onChangeTabs = _a.onChangeTabs, _u = _a.onChange, onChange = _u === void 0 ? function () { return ({}); } : _u, _v = _a.showReset, showReset = _v === void 0 ? false : _v, onReset = _a.onReset;
|
8330
|
-
|
8432
|
+
// Convert object value to CSS string for internal use
|
8433
|
+
var cssValue = normalizeGradientValue(value);
|
8434
|
+
// Auto-switch to gradient tab if receiving gradient object
|
8435
|
+
var initialTab = isGradientObject(value)
|
8436
|
+
? 'gradient'
|
8437
|
+
: defaultActiveTab || getIndexActiveTag(value);
|
8438
|
+
var _w = __read(React.useState(initialTab), 2), activeTab = _w[0], setActiveTab = _w[1];
|
8439
|
+
// Auto-switch tab when value changes from object to string or vice versa
|
8440
|
+
React__default["default"].useEffect(function () {
|
8441
|
+
if (isGradientObject(value) && activeTab !== 'gradient') {
|
8442
|
+
setActiveTab('gradient');
|
8443
|
+
if (typeof onChangeTabs === 'function') {
|
8444
|
+
onChangeTabs('gradient');
|
8445
|
+
}
|
8446
|
+
}
|
8447
|
+
}, [value, activeTab, onChangeTabs]);
|
8331
8448
|
var onChangeSolid = function (value) {
|
8332
8449
|
onChange(value);
|
8333
8450
|
};
|
@@ -8350,17 +8467,17 @@ var ColorPicker = function (_a) {
|
|
8350
8467
|
React__default["default"].createElement(PopupTabsHeaderLabel, { tabName: 'gradient', onClick: function () { return onChangeTab('gradient'); } }, "Gradient")),
|
8351
8468
|
React__default["default"].createElement(PopupTabsBody, null,
|
8352
8469
|
React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'solid' },
|
8353
|
-
React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, value:
|
8470
|
+
React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, value: cssValue, format: format, defaultColors: defaultColors, debounceMS: debounceMS, debounce: debounce, showAlpha: showAlpha, showInputs: showInputs, colorBoardHeight: colorBoardHeight, showReset: showReset, onReset: onReset })),
|
8354
8471
|
React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'gradient' },
|
8355
|
-
React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, value:
|
8472
|
+
React__default["default"].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 })))))));
|
8356
8473
|
}
|
8357
8474
|
return (React__default["default"].createElement(ThemeProvider, null,
|
8358
8475
|
React__default["default"].createElement("div", { className: 'relative dark iro-gradient-picker', "data-color-picker-theme": true },
|
8359
8476
|
React__default["default"].createElement(ThemeToggle, null),
|
8360
8477
|
solid || gradient ? (React__default["default"].createElement(PopupTabs, { popupWidth: popupWidth },
|
8361
8478
|
React__default["default"].createElement(PopupTabsBody, null,
|
8362
|
-
solid ? (React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, value:
|
8363
|
-
gradient ? (React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, value:
|
8479
|
+
solid ? (React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, value: cssValue, format: format, defaultColors: defaultColors, debounceMS: debounceMS, debounce: debounce, showAlpha: showAlpha, showInputs: showInputs, colorBoardHeight: colorBoardHeight, showReset: showReset, onReset: onReset })) : (React__default["default"].createElement(React.Fragment, null)),
|
8480
|
+
gradient ? (React__default["default"].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__default["default"].createElement(React.Fragment, null))))) : null)));
|
8364
8481
|
};
|
8365
8482
|
|
8366
8483
|
exports.ColorPicker = ColorPicker;
|
@@ -8377,12 +8494,16 @@ exports.ThemeToggle = ThemeToggle;
|
|
8377
8494
|
exports.TinyColor = TinyColor;
|
8378
8495
|
exports.checkFormat = checkFormat;
|
8379
8496
|
exports.cn = cn;
|
8497
|
+
exports.cssToGradientObject = cssToGradientObject;
|
8380
8498
|
exports["default"] = ColorPicker;
|
8381
8499
|
exports.getGradient = getGradient;
|
8382
8500
|
exports.getHexAlpha = getHexAlpha;
|
8501
|
+
exports.gradientObjectToCss = gradientObjectToCss;
|
8383
8502
|
exports.hexToRgba = hexToRgba;
|
8503
|
+
exports.isGradientObject = isGradientObject;
|
8384
8504
|
exports.isValidHex = isValidHex;
|
8385
8505
|
exports.isValidRgba = isValidRgba;
|
8506
|
+
exports.normalizeGradientValue = normalizeGradientValue;
|
8386
8507
|
exports.parseGradient = parseGradient;
|
8387
8508
|
exports.rgbaToArray = rgbaToArray;
|
8388
8509
|
exports.rgbaToHex = rgbaToHex;
|