react-iro-gradient-picker 1.1.7 → 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/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
- var validValue = tinycolor(value).isValid();
6992
- if (value) {
6993
- if (value === 'transparent') {
6994
- tab = 'solid';
6995
- return tab;
6996
- }
6997
- if (validValue &&
6998
- !value.trim().startsWith('radial-gradient') &&
6999
- !value.trim().startsWith('linear-gradient')) {
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
- else {
7011
- tab = 'gradient';
7012
- return tab;
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;
@@ -8334,7 +8429,22 @@ var PopupTabsBodyItem = function (_a) {
8334
8429
 
8335
8430
  var ColorPicker = function (_a) {
8336
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;
8337
- var _w = __read(React.useState(defaultActiveTab || getIndexActiveTag(value)), 2), activeTab = _w[0], setActiveTab = _w[1];
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]);
8338
8448
  var onChangeSolid = function (value) {
8339
8449
  onChange(value);
8340
8450
  };
@@ -8357,17 +8467,17 @@ var ColorPicker = function (_a) {
8357
8467
  React__default["default"].createElement(PopupTabsHeaderLabel, { tabName: 'gradient', onClick: function () { return onChangeTab('gradient'); } }, "Gradient")),
8358
8468
  React__default["default"].createElement(PopupTabsBody, null,
8359
8469
  React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'solid' },
8360
- React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, value: value, format: format, defaultColors: defaultColors, debounceMS: debounceMS, debounce: debounce, showAlpha: showAlpha, showInputs: showInputs, colorBoardHeight: colorBoardHeight, showReset: showReset, onReset: onReset })),
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 })),
8361
8471
  React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'gradient' },
8362
- React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, value: value, 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 })))))));
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 })))))));
8363
8473
  }
8364
8474
  return (React__default["default"].createElement(ThemeProvider, null,
8365
8475
  React__default["default"].createElement("div", { className: 'relative dark iro-gradient-picker', "data-color-picker-theme": true },
8366
8476
  React__default["default"].createElement(ThemeToggle, null),
8367
8477
  solid || gradient ? (React__default["default"].createElement(PopupTabs, { popupWidth: popupWidth },
8368
8478
  React__default["default"].createElement(PopupTabsBody, null,
8369
- solid ? (React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, value: value, 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)),
8370
- gradient ? (React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, value: value, 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)));
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)));
8371
8481
  };
8372
8482
 
8373
8483
  exports.ColorPicker = ColorPicker;
@@ -8384,12 +8494,16 @@ exports.ThemeToggle = ThemeToggle;
8384
8494
  exports.TinyColor = TinyColor;
8385
8495
  exports.checkFormat = checkFormat;
8386
8496
  exports.cn = cn;
8497
+ exports.cssToGradientObject = cssToGradientObject;
8387
8498
  exports["default"] = ColorPicker;
8388
8499
  exports.getGradient = getGradient;
8389
8500
  exports.getHexAlpha = getHexAlpha;
8501
+ exports.gradientObjectToCss = gradientObjectToCss;
8390
8502
  exports.hexToRgba = hexToRgba;
8503
+ exports.isGradientObject = isGradientObject;
8391
8504
  exports.isValidHex = isValidHex;
8392
8505
  exports.isValidRgba = isValidRgba;
8506
+ exports.normalizeGradientValue = normalizeGradientValue;
8393
8507
  exports.parseGradient = parseGradient;
8394
8508
  exports.rgbaToArray = rgbaToArray;
8395
8509
  exports.rgbaToHex = rgbaToHex;