react-iro-gradient-picker 1.4.9 → 2.0.0

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
@@ -129,7 +129,12 @@ var ThemeProvider = function (_a) {
129
129
  , defaultTheme = _b === void 0 ? 'dark' : _b // Dark theme as default
130
130
  ;
131
131
  var _c = __read(React.useState(function () {
132
- // Check localStorage first, then use default
132
+ // If defaultTheme is explicitly provided (not default 'dark'), use it
133
+ // This allows stories to override localStorage
134
+ if (defaultTheme !== 'dark') {
135
+ return defaultTheme;
136
+ }
137
+ // Otherwise check localStorage first, then use default
133
138
  if (typeof window !== 'undefined') {
134
139
  var stored = localStorage.getItem('color-picker-theme');
135
140
  return stored || defaultTheme;
@@ -5093,10 +5098,10 @@ var InputRgba = function (_a) {
5093
5098
  };
5094
5099
  return (React__default["default"].createElement("div", { className: 'w-full' },
5095
5100
  React__default["default"].createElement("div", { className: 'flex flex-wrap gap-3' }, inputsData(inputsProps).map(function (item, index) {
5096
- var wrapClass = item.wrapClass, labelSymbol = item.labelSymbol, idInput = item.idInput, valueInput = item.valueInput, labelArea = item.labelArea, onChangeInput = item.onChangeInput, name = item.name;
5097
- return (React__default["default"].createElement("div", { key: index, className: cn('flex-1 min-w-0 px-2 pb-3', 'relative group', wrapClass) },
5101
+ var wrapClass = item.wrapClass; item.labelSymbol; var idInput = item.idInput, valueInput = item.valueInput, labelArea = item.labelArea, onChangeInput = item.onChangeInput, name = item.name;
5102
+ return (React__default["default"].createElement("div", { key: index, className: cn('flex-1 min-w-0', 'relative group', wrapClass) },
5098
5103
  React__default["default"].createElement("div", { className: 'relative' },
5099
- React__default["default"].createElement("input", { type: 'text', id: idInput, value: "#".concat(valueInput), "aria-label": labelArea, onChange: function (e) { return onChangeInput(e); }, onBlur: onHandleSubmit, onKeyPress: function (e) { return handlePressEnter(e, onHandleSubmit); }, className: cn('w-full py-2.5 text-md font-mono rounded-lg', 'focus:ring-2 focus:ring-blue-500/20 transition-all duration-200', labelSymbol && 'pl-4', name === 'alpha' && 'pr-7'), style: {
5104
+ React__default["default"].createElement("input", { type: 'text', id: idInput, value: "#".concat(valueInput), "aria-label": labelArea, onChange: function (e) { return onChangeInput(e); }, onBlur: onHandleSubmit, onKeyPress: function (e) { return handlePressEnter(e, onHandleSubmit); }, className: cn('w-full py-2.5 px-3 text-md font-mono rounded-lg', 'focus:ring-2 focus:ring-blue-500/20 transition-all duration-200', name === 'alpha' && 'pr-7'), style: {
5100
5105
  backgroundColor: 'var(--colorpicker-input-bg)',
5101
5106
  color: 'var(--colorpicker-text)',
5102
5107
  border: 'none',
@@ -5109,20 +5114,49 @@ var InputRgba = function (_a) {
5109
5114
 
5110
5115
  // Lazy load iro.js to improve initial bundle size
5111
5116
  var iroPromise = null;
5112
- var loadIro = function () {
5113
- if (!iroPromise) {
5114
- iroPromise = Promise.resolve().then(function () { return iro_es; });
5115
- }
5116
- return iroPromise;
5117
- };
5117
+ var loadIro = function () { return __awaiter(void 0, void 0, void 0, function () {
5118
+ return __generator(this, function (_a) {
5119
+ if (!iroPromise) {
5120
+ iroPromise = Promise.resolve().then(function () { return iro_es; }).then(function (module) { return module.default || module; });
5121
+ }
5122
+ return [2 /*return*/, iroPromise];
5123
+ });
5124
+ }); };
5118
5125
  var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5119
5126
  var width = _a.width, _b = _a.color, color = _b === void 0 ? '#ffffff' : _b, colors = _a.colors, _c = _a.display, display = _c === void 0 ? 'block' : _c, id = _a.id, layout = _a.layout, _d = _a.layoutDirection, layoutDirection = _d === void 0 ? 'vertical' : _d, _e = _a.padding, padding = _e === void 0 ? 6 : _e, _f = _a.margin, margin = _f === void 0 ? 12 : _f, _g = _a.handleRadius, handleRadius = _g === void 0 ? 8 : _g, activeHandleRadius = _a.activeHandleRadius, handleSvg = _a.handleSvg, _h = _a.handleProps, handleProps = _h === void 0 ? { x: 0, y: 0 } : _h, _j = _a.wheelLightness, wheelLightness = _j === void 0 ? true : _j, _k = _a.wheelAngle, wheelAngle = _k === void 0 ? 0 : _k, _l = _a.wheelDirection, wheelDirection = _l === void 0 ? 'anticlockwise' : _l, sliderSize = _a.sliderSize, boxHeight = _a.boxHeight, onColorChange = _a.onColorChange, onInputChange = _a.onInputChange, onInputStart = _a.onInputStart, onInputMove = _a.onInputMove, onInputEnd = _a.onInputEnd, onMount = _a.onMount;
5120
- var theme = useTheme().theme;
5127
+ var contextTheme = useTheme().theme;
5121
5128
  var containerRef = React.useRef(null);
5122
5129
  var colorPickerRef = React.useRef(null);
5130
+ // Detect theme from parent element as fallback
5131
+ var _m = __read(React.useState(contextTheme), 2), detectedTheme = _m[0], setDetectedTheme = _m[1];
5132
+ React.useEffect(function () {
5133
+ if (!containerRef.current)
5134
+ return;
5135
+ // Check parent elements for light/dark class
5136
+ var element = containerRef.current;
5137
+ var foundTheme = null;
5138
+ while (element) {
5139
+ if (element.classList.contains('light')) {
5140
+ foundTheme = 'light';
5141
+ break;
5142
+ }
5143
+ if (element.classList.contains('dark')) {
5144
+ foundTheme = 'dark';
5145
+ break;
5146
+ }
5147
+ element = element.parentElement;
5148
+ }
5149
+ if (foundTheme) {
5150
+ setDetectedTheme(foundTheme);
5151
+ }
5152
+ else {
5153
+ setDetectedTheme(contextTheme);
5154
+ }
5155
+ }, [contextTheme]);
5156
+ var theme = detectedTheme;
5123
5157
  var isUpdatingColor = React.useRef(false);
5124
- var _m = __read(React.useState(width || 200), 2), containerWidth = _m[0], setContainerWidth = _m[1];
5125
- var _o = __read(React.useState(true), 2), isLoading = _o[0], setIsLoading = _o[1];
5158
+ var _o = __read(React.useState(width || 200), 2), containerWidth = _o[0], setContainerWidth = _o[1];
5159
+ var _p = __read(React.useState(true), 2), isLoading = _p[0], setIsLoading = _p[1];
5126
5160
  // Set up ResizeObserver to make the color picker responsive
5127
5161
  // Only when width prop is NOT provided (parent doesn't control width)
5128
5162
  React.useEffect(function () {
@@ -5171,7 +5205,7 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5171
5205
  }); });
5172
5206
  // Create a shared picker creation function with enhanced error handling
5173
5207
  var createColorPicker = React.useCallback(function (pickerWidth) { return __awaiter(void 0, void 0, void 0, function () {
5174
- var currentContainer, iro, layoutConfig, themeBorderColor, themeBorderWidth, options, applyThemeStyles;
5208
+ var iro, layoutConfig, themeBorderColor, themeBorderWidth, options, applyThemeStyles, observer;
5175
5209
  return __generator(this, function (_a) {
5176
5210
  switch (_a.label) {
5177
5211
  case 0:
@@ -5203,14 +5237,14 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5203
5237
  console.warn('IroColorPicker: Error cleaning up existing picker:', error);
5204
5238
  }
5205
5239
  }
5206
- currentContainer = containerRef.current;
5207
- // IMPORTANT: Clear any existing DOM content first
5208
- if (currentContainer) {
5209
- currentContainer.innerHTML = '';
5210
- }
5211
5240
  return [4 /*yield*/, loadIro()];
5212
5241
  case 1:
5213
5242
  iro = _a.sent();
5243
+ // Check if component is still mounted after async load
5244
+ if (!containerRef.current) {
5245
+ console.warn('IroColorPicker: Component unmounted during iro.js load');
5246
+ return [2 /*return*/];
5247
+ }
5214
5248
  layoutConfig = layout;
5215
5249
  if (typeof layout === 'string') {
5216
5250
  if (layout === 'wheel-value') {
@@ -5300,30 +5334,59 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5300
5334
  applyThemeStyles = function () {
5301
5335
  if (!containerRef.current)
5302
5336
  return;
5303
- var svgElements = containerRef.current.querySelectorAll('svg');
5304
- svgElements.forEach(function (svg) {
5305
- // Remove default background
5306
- svg.style.backgroundColor = 'transparent';
5307
- // Style background rectangles
5308
- var backgroundRects = svg.querySelectorAll('rect:first-child');
5309
- backgroundRects.forEach(function (rect) {
5310
- if (theme === 'light') {
5311
- rect.setAttribute('fill', 'white');
5312
- rect.setAttribute('stroke', '#e5e7eb');
5313
- rect.setAttribute('stroke-width', '1');
5314
- }
5315
- else {
5316
- rect.setAttribute('fill', '#374151');
5317
- rect.setAttribute('stroke', '#6b7280');
5318
- rect.setAttribute('stroke-width', '1');
5319
- }
5337
+ // Target the main iro containers including IroColorPicker wrapper
5338
+ var pickers = containerRef.current.querySelectorAll('.IroColorPicker');
5339
+ var wheels = containerRef.current.querySelectorAll('.IroWheel');
5340
+ var sliders = containerRef.current.querySelectorAll('.IroSlider');
5341
+ var boxes = containerRef.current.querySelectorAll('.IroBox');
5342
+ if (theme === 'light') {
5343
+ // Light theme - keep iro elements transparent so container bg shows
5344
+ pickers.forEach(function (el) {
5345
+ el.style.setProperty('background-color', 'transparent', 'important');
5320
5346
  });
5321
- });
5347
+ wheels.forEach(function (el) {
5348
+ el.style.setProperty('background-color', 'transparent', 'important');
5349
+ });
5350
+ sliders.forEach(function (el) {
5351
+ el.style.setProperty('background-color', 'transparent', 'important');
5352
+ });
5353
+ boxes.forEach(function (el) {
5354
+ el.style.setProperty('background-color', 'transparent', 'important');
5355
+ });
5356
+ }
5357
+ else {
5358
+ // Dark theme - transparent to let parent bg show
5359
+ pickers.forEach(function (el) {
5360
+ el.style.setProperty('background-color', 'transparent', 'important');
5361
+ });
5362
+ wheels.forEach(function (el) {
5363
+ el.style.setProperty('background-color', 'transparent', 'important');
5364
+ });
5365
+ sliders.forEach(function (el) {
5366
+ el.style.setProperty('background-color', 'transparent', 'important');
5367
+ });
5368
+ boxes.forEach(function (el) {
5369
+ el.style.setProperty('background-color', 'transparent', 'important');
5370
+ });
5371
+ }
5322
5372
  };
5323
- // Apply styles immediately and after a short delay
5373
+ // Apply styles immediately
5324
5374
  applyThemeStyles();
5325
- setTimeout(applyThemeStyles, 100);
5326
- // Set up event listeners
5375
+ observer = new MutationObserver(function () {
5376
+ applyThemeStyles();
5377
+ });
5378
+ if (containerRef.current) {
5379
+ observer.observe(containerRef.current, {
5380
+ childList: true,
5381
+ subtree: true,
5382
+ attributes: true
5383
+ });
5384
+ }
5385
+ // Apply on timers as fallback
5386
+ setTimeout(applyThemeStyles, 50);
5387
+ setTimeout(applyThemeStyles, 200);
5388
+ setTimeout(applyThemeStyles, 500);
5389
+ // Set up event listeners BEFORE returning the cleanup function
5327
5390
  if (onColorChange) {
5328
5391
  colorPickerRef.current.on('color:change', function (color) {
5329
5392
  if (!isUpdatingColor.current) {
@@ -5346,7 +5409,8 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5346
5409
  if (onMount) {
5347
5410
  colorPickerRef.current.on('mount', onMount);
5348
5411
  }
5349
- return [2 /*return*/, currentContainer];
5412
+ // Cleanup observer on unmount
5413
+ return [2 /*return*/, function () { return observer.disconnect(); }];
5350
5414
  }
5351
5415
  });
5352
5416
  }); }, [
@@ -5376,7 +5440,7 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5376
5440
  onMount
5377
5441
  ]);
5378
5442
  // Cleanup function
5379
- var cleanup = React.useCallback(function () {
5443
+ React.useCallback(function () {
5380
5444
  if (colorPickerRef.current) {
5381
5445
  try {
5382
5446
  // Clean up event listeners
@@ -5441,13 +5505,12 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5441
5505
  }, 100); // Increased from 50ms to 100ms
5442
5506
  return function () { return clearTimeout(timeoutId); };
5443
5507
  };
5444
- var cleanup = createWithRetry();
5508
+ var cleanupFn = createWithRetry();
5445
5509
  return function () {
5446
- if (cleanup)
5447
- cleanup();
5448
- cleanup();
5510
+ if (cleanupFn)
5511
+ cleanupFn();
5449
5512
  };
5450
- }, [width, theme, createColorPicker, cleanup]);
5513
+ }, [width, theme, createColorPicker]);
5451
5514
  // useEffect for when containerWidth is used (internal ResizeObserver)
5452
5515
  React.useEffect(function () {
5453
5516
  if (width)
@@ -5476,13 +5539,12 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5476
5539
  }, 100); // Increased from 50ms to 100ms
5477
5540
  return function () { return clearTimeout(timeoutId); };
5478
5541
  };
5479
- var cleanup = createWithRetry();
5542
+ var cleanupFn = createWithRetry();
5480
5543
  return function () {
5481
- if (cleanup)
5482
- cleanup();
5483
- cleanup();
5544
+ if (cleanupFn)
5545
+ cleanupFn();
5484
5546
  };
5485
- }, [containerWidth, theme, createColorPicker, cleanup, width]);
5547
+ }, [containerWidth, theme, createColorPicker, width]);
5486
5548
  // Update color when prop changes
5487
5549
  React.useEffect(function () {
5488
5550
  if (colorPickerRef.current && !colors && color) {
@@ -5525,6 +5587,59 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5525
5587
  });
5526
5588
  }
5527
5589
  }, [colors]);
5590
+ // Apply theme styles when theme changes without recreating picker
5591
+ React.useEffect(function () {
5592
+ if (!colorPickerRef.current || !containerRef.current)
5593
+ return;
5594
+ var applyThemeStyles = function () {
5595
+ if (!containerRef.current)
5596
+ return;
5597
+ var pickers = containerRef.current.querySelectorAll('.IroColorPicker');
5598
+ var wheels = containerRef.current.querySelectorAll('.IroWheel');
5599
+ var sliders = containerRef.current.querySelectorAll('.IroSlider');
5600
+ var boxes = containerRef.current.querySelectorAll('.IroBox');
5601
+ if (theme === 'light') {
5602
+ pickers.forEach(function (el) {
5603
+ el.style.setProperty('background-color', 'transparent', 'important');
5604
+ });
5605
+ wheels.forEach(function (el) {
5606
+ el.style.setProperty('background-color', 'transparent', 'important');
5607
+ });
5608
+ sliders.forEach(function (el) {
5609
+ el.style.setProperty('background-color', 'transparent', 'important');
5610
+ });
5611
+ boxes.forEach(function (el) {
5612
+ el.style.setProperty('background-color', 'transparent', 'important');
5613
+ });
5614
+ var borders = containerRef.current.querySelectorAll('.IroWheelBorder');
5615
+ borders.forEach(function (el) {
5616
+ el.style.setProperty('border-color', '#e5e7eb', 'important');
5617
+ });
5618
+ }
5619
+ else {
5620
+ // Dark theme - transparent to let parent bg show
5621
+ pickers.forEach(function (el) {
5622
+ el.style.setProperty('background-color', 'transparent', 'important');
5623
+ });
5624
+ wheels.forEach(function (el) {
5625
+ el.style.setProperty('background-color', 'transparent', 'important');
5626
+ });
5627
+ sliders.forEach(function (el) {
5628
+ el.style.setProperty('background-color', 'transparent', 'important');
5629
+ });
5630
+ boxes.forEach(function (el) {
5631
+ el.style.setProperty('background-color', 'transparent', 'important');
5632
+ });
5633
+ }
5634
+ };
5635
+ applyThemeStyles();
5636
+ var timer1 = setTimeout(applyThemeStyles, 50);
5637
+ var timer2 = setTimeout(applyThemeStyles, 150);
5638
+ return function () {
5639
+ clearTimeout(timer1);
5640
+ clearTimeout(timer2);
5641
+ };
5642
+ }, [theme]);
5528
5643
  return (React__default["default"].createElement("div", { ref: containerRef, style: {
5529
5644
  display: 'flex',
5530
5645
  width: '100%',
@@ -5532,8 +5647,9 @@ var IroColorPicker$1 = React.forwardRef(function (_a, ref) {
5532
5647
  minWidth: 0,
5533
5648
  overflow: 'hidden',
5534
5649
  justifyContent: 'center',
5535
- minHeight: isLoading ? (width || containerWidth) : 'auto',
5536
- position: 'relative'
5650
+ minHeight: isLoading ? width || containerWidth : 'auto',
5651
+ position: 'relative',
5652
+ backgroundColor: 'transparent'
5537
5653
  } }, isLoading && (React__default["default"].createElement("div", { style: {
5538
5654
  position: 'absolute',
5539
5655
  inset: 0,
@@ -6362,7 +6478,7 @@ var useDebounce = (function (value, delay) {
6362
6478
  });
6363
6479
 
6364
6480
  var IroGradient = function (_a) {
6365
- var _b = _a.value, value = _b === void 0 ? 'linear-gradient(90deg, #ffffff 0%, #000000 100%)' : _b, _c = _a.onChange, onChange = _c === void 0 ? function () { return ({}); } : _c, _d = _a.format, format = _d === void 0 ? 'rgb' : _d, _e = _a.debounceMS, debounceMS = _e === void 0 ? 300 : _e, _f = _a.debounce, debounce = _f === void 0 ? true : _f, _g = _a.showAlpha, showAlpha = _g === void 0 ? true : _g, _h = _a.showInputs, showInputs = _h === void 0 ? true : _h, _j = _a.showGradientResult, showGradientResult = _j === void 0 ? true : _j, _k = _a.showGradientStops, showGradientStops = _k === void 0 ? true : _k, _l = _a.showGradientMode, showGradientMode = _l === void 0 ? true : _l, _m = _a.showGradientAngle, showGradientAngle = _m === void 0 ? true : _m, _o = _a.showGradientPosition, showGradientPosition = _o === void 0 ? true : _o, _p = _a.allowAddGradientStops, allowAddGradientStops = _p === void 0 ? true : _p, _q = _a.colorBoardHeight, colorBoardHeight = _q === void 0 ? 120 : _q, defaultColors = _a.defaultColors, _r = _a.showReset, showReset = _r === void 0 ? false : _r, onReset = _a.onReset, _s = _a.popupWidth, popupWidth = _s === void 0 ? 280 : _s;
6481
+ var _b = _a.value, value = _b === void 0 ? 'linear-gradient(90deg, #ffffff 0%, #000000 100%)' : _b, _c = _a.onChange, onChange = _c === void 0 ? function () { return ({}); } : _c, onColorChangeImmediate = _a.onColorChangeImmediate, _d = _a.format, format = _d === void 0 ? 'rgb' : _d, _e = _a.debounceMS, debounceMS = _e === void 0 ? 300 : _e, _f = _a.debounce, debounce = _f === void 0 ? true : _f, _g = _a.showAlpha, showAlpha = _g === void 0 ? true : _g, _h = _a.showInputs, showInputs = _h === void 0 ? true : _h, _j = _a.showGradientResult, showGradientResult = _j === void 0 ? true : _j, _k = _a.showGradientStops, showGradientStops = _k === void 0 ? true : _k, _l = _a.showGradientMode, showGradientMode = _l === void 0 ? true : _l, _m = _a.showGradientAngle, showGradientAngle = _m === void 0 ? true : _m, _o = _a.showGradientPosition, showGradientPosition = _o === void 0 ? true : _o, _p = _a.allowAddGradientStops, allowAddGradientStops = _p === void 0 ? true : _p, _q = _a.colorBoardHeight, colorBoardHeight = _q === void 0 ? 120 : _q, defaultColors = _a.defaultColors, _r = _a.showReset, showReset = _r === void 0 ? false : _r, onReset = _a.onReset, _s = _a.popupWidth, popupWidth = _s === void 0 ? 280 : _s;
6366
6482
  // Store the initial value for reset functionality
6367
6483
  var initialValue = React.useRef(value);
6368
6484
  var parsedColors = React.useCallback(function () {
@@ -6581,6 +6697,13 @@ var IroGradient = function (_a) {
6581
6697
  }
6582
6698
  // eslint-disable-next-line react-hooks/exhaustive-deps
6583
6699
  }, [debounceColor]);
6700
+ // Call immediate callback for real-time updates (e.g., wrapper background)
6701
+ React.useEffect(function () {
6702
+ if (onColorChangeImmediate && color.gradient) {
6703
+ onColorChangeImmediate(color.gradient);
6704
+ }
6705
+ // eslint-disable-next-line react-hooks/exhaustive-deps
6706
+ }, [color.gradient]);
6584
6707
  // Initialize iro picker with current activeColor when component mounts or picker becomes ready
6585
6708
  React.useEffect(function () {
6586
6709
  var initializeIroPicker = function () {
@@ -6767,7 +6890,8 @@ var IroGradient = function (_a) {
6767
6890
  } },
6768
6891
  React__default["default"].createElement("div", { className: 'relative', ref: containerRef },
6769
6892
  React__default["default"].createElement("div", { className: 'flex justify-center items-center rounded-lg', style: {
6770
- height: colorBoardHeight + pickerWidth
6893
+ height: colorBoardHeight + pickerWidth,
6894
+ backgroundColor: 'transparent'
6771
6895
  } },
6772
6896
  React__default["default"].createElement(IroColorPicker$1, { ref: iroPickerRef, width: pickerWidth, color: iroColorValue, layout: layoutConfig, onColorChange: handleIroColorChange }))),
6773
6897
  React__default["default"].createElement("div", { className: 'rounded-lg colorpicker-glass px-4' },
@@ -6791,7 +6915,7 @@ var IroGradient = function (_a) {
6791
6915
  };
6792
6916
 
6793
6917
  var IroSolidColorPicker = function (_a) {
6794
- var _b = _a.value, value = _b === void 0 ? '#ffffff' : _b, _c = _a.onChange, onChange = _c === void 0 ? function () { return ({}); } : _c, _d = _a.format, format = _d === void 0 ? 'rgb' : _d, _e = _a.debounceMS, debounceMS = _e === void 0 ? 300 : _e, _f = _a.debounce, debounce = _f === void 0 ? true : _f, _g = _a.showAlpha, showAlpha = _g === void 0 ? true : _g, _h = _a.showInputs, showInputs = _h === void 0 ? true : _h, defaultColors = _a.defaultColors, _j = _a.showReset, showReset = _j === void 0 ? false : _j, onReset = _a.onReset, _k = _a.popupWidth, popupWidth = _k === void 0 ? 280 : _k;
6918
+ var _b = _a.value, value = _b === void 0 ? '#ffffff' : _b, _c = _a.onChange, onChange = _c === void 0 ? function () { return ({}); } : _c, onColorChangeImmediate = _a.onColorChangeImmediate, _d = _a.format, format = _d === void 0 ? 'rgb' : _d, _e = _a.debounceMS, debounceMS = _e === void 0 ? 300 : _e, _f = _a.debounce, debounce = _f === void 0 ? true : _f, _g = _a.showAlpha, showAlpha = _g === void 0 ? true : _g, _h = _a.showInputs, showInputs = _h === void 0 ? true : _h, defaultColors = _a.defaultColors, _j = _a.showReset, showReset = _j === void 0 ? false : _j, onReset = _a.onReset, _k = _a.popupWidth, popupWidth = _k === void 0 ? 280 : _k;
6795
6919
  var node = React.useRef(null);
6796
6920
  var iroPickerRef = React.useRef(null);
6797
6921
  // Store the initial value for reset functionality
@@ -6917,6 +7041,13 @@ var IroSolidColorPicker = function (_a) {
6917
7041
  };
6918
7042
  setInit(false);
6919
7043
  setColor(newColor);
7044
+ // Call immediate callback for real-time updates (e.g., wrapper background)
7045
+ if (onColorChangeImmediate) {
7046
+ var rgba = tinycolor(newColor.hex);
7047
+ rgba.setAlpha(newColor.alpha / 100);
7048
+ var formattedColor = checkFormat(rgba.toRgbString(), format, showAlpha, newColor.alpha);
7049
+ onColorChangeImmediate(formattedColor);
7050
+ }
6920
7051
  };
6921
7052
  var handleInputChange = function (newColor) {
6922
7053
  setColor(newColor);
@@ -7010,18 +7141,21 @@ var IroSolidColorPicker = function (_a) {
7010
7141
  minWidth: 0,
7011
7142
  boxSizing: 'border-box'
7012
7143
  } },
7013
- React__default["default"].createElement("div", { className: 'relative overflow-hidden' },
7014
- React__default["default"].createElement("div", { className: 'flex justify-center items-center rounded-lg colorpicker-glass w-full overflow-hidden', style: {
7144
+ React__default["default"].createElement("div", { className: 'relative overflow-hidden', style: { backgroundColor: 'transparent' } },
7145
+ React__default["default"].createElement("div", { className: 'flex justify-center items-center rounded-lg w-full overflow-hidden', style: {
7015
7146
  height: Math.max(pickerWidth + 80, 220), // Better height calculation
7016
7147
  width: '100%',
7017
7148
  minWidth: 0,
7018
7149
  maxWidth: '100%',
7019
- boxSizing: 'border-box'
7150
+ boxSizing: 'border-box',
7151
+ backgroundColor: 'var(--colorpicker-panel-bg)',
7152
+ border: '1px solid var(--colorpicker-border)'
7020
7153
  } },
7021
7154
  React__default["default"].createElement("div", { style: {
7022
7155
  width: pickerWidth,
7023
7156
  height: 'fit-content',
7024
- maxWidth: '90%'
7157
+ maxWidth: '90%',
7158
+ backgroundColor: 'transparent'
7025
7159
  } },
7026
7160
  React__default["default"].createElement(IroColorPicker$1, { ref: iroPickerRef, width: pickerWidth, color: iroColorValue, layout: layoutConfig, onColorChange: handleColorChange })))),
7027
7161
  React__default["default"].createElement("div", { className: 'border-t pt-4 colorpicker-glass rounded-lg' },
@@ -7046,7 +7180,11 @@ var PopupTabs = function (_a) {
7046
7180
  activeTab: activeTab
7047
7181
  });
7048
7182
  });
7049
- return (React__default["default"].createElement("div", { className: 'relative rounded-md', style: { width: "".concat(popupWidth, "px") } }, childrenContact));
7183
+ return (React__default["default"].createElement("div", { className: 'relative rounded-md', style: {
7184
+ width: "".concat(popupWidth, "px"),
7185
+ backgroundColor: 'var(--colorpicker-bg)',
7186
+ color: 'var(--colorpicker-text)'
7187
+ } }, childrenContact));
7050
7188
  };
7051
7189
  var PopupTabsHeaderLabel = function (_a) {
7052
7190
  var children = _a.children, activeTab = _a.activeTab, tabName = _a.tabName, onClick = _a.onClick;
@@ -7061,7 +7199,7 @@ var PopupTabsHeader = function (_a) {
7061
7199
  activeTab: activeTab
7062
7200
  });
7063
7201
  });
7064
- return (React__default["default"].createElement("div", { className: 'w-full h-12 flex rounded-md rounded-b-none overflow-hidden colorpicker-glass shadow-inner' }, childrenContact));
7202
+ return (React__default["default"].createElement("div", { className: 'w-full h-12 flex rounded-md rounded-b-none overflow-hidden colorpicker-glass shadow-inner', style: { backgroundColor: 'var(--colorpicker-panel-bg)' } }, childrenContact));
7065
7203
  };
7066
7204
  var PopupTabsBody = function (_a) {
7067
7205
  var children = _a.children, activeTab = _a.activeTab;
@@ -7070,7 +7208,10 @@ var PopupTabsBody = function (_a) {
7070
7208
  activeTab: activeTab
7071
7209
  });
7072
7210
  });
7073
- return React__default["default"].createElement("div", { className: 'p-4' }, childrenContact);
7211
+ return (React__default["default"].createElement("div", { className: 'p-4', style: {
7212
+ backgroundColor: 'var(--colorpicker-bg)',
7213
+ color: 'var(--colorpicker-text)'
7214
+ } }, childrenContact));
7074
7215
  };
7075
7216
  var PopupTabsBodyItem = function (_a) {
7076
7217
  var children = _a.children, activeTab = _a.activeTab, tabName = _a.tabName;
@@ -7081,14 +7222,22 @@ var PopupTabsBodyItem = function (_a) {
7081
7222
  };
7082
7223
 
7083
7224
  var ColorPicker = function (_a) {
7084
- 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, _u = _a.defaultGradientIndex, defaultGradientIndex = _u === void 0 ? 7 : _u, onChangeTabs = _a.onChangeTabs, _v = _a.onChange, onChange = _v === void 0 ? function () { return ({}); } : _v, _w = _a.showReset, showReset = _w === void 0 ? false : _w, onReset = _a.onReset;
7225
+ 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, _u = _a.defaultGradientIndex, defaultGradientIndex = _u === void 0 ? 7 : _u, onChangeTabs = _a.onChangeTabs, _v = _a.onChange, onChange = _v === void 0 ? function () { return ({}); } : _v, _w = _a.showReset, showReset = _w === void 0 ? false : _w, onReset = _a.onReset,
7226
+ // Theme prop
7227
+ _x = _a.theme,
7228
+ // Theme prop
7229
+ theme = _x === void 0 ? 'dark' : _x,
7230
+ // Wrapper props
7231
+ _y = _a.showWrapper,
7232
+ // Wrapper props
7233
+ showWrapper = _y === void 0 ? false : _y, wrapperBackground = _a.wrapperBackground, _z = _a.wrapperClassName, wrapperClassName = _z === void 0 ? '' : _z, _0 = _a.wrapperHeight, wrapperHeight = _0 === void 0 ? 'auto' : _0, _1 = _a.wrapperWidth, wrapperWidth = _1 === void 0 ? 'auto' : _1, _2 = _a.wrapperPadding, wrapperPadding = _2 === void 0 ? '24px' : _2, _3 = _a.wrapperRounded, wrapperRounded = _3 === void 0 ? true : _3;
7085
7234
  // Convert object value to CSS string for internal use
7086
7235
  var cssValue = normalizeGradientValue(value);
7087
7236
  // Auto-switch to gradient tab if receiving gradient object
7088
7237
  var initialTab = isGradientObject(value)
7089
7238
  ? 'gradient'
7090
7239
  : defaultActiveTab || getIndexActiveTag(value);
7091
- var _x = __read(React.useState(initialTab), 2), activeTab = _x[0], setActiveTab = _x[1];
7240
+ var _4 = __read(React.useState(initialTab), 2), activeTab = _4[0], setActiveTab = _4[1];
7092
7241
  // Track the gradient value separately - use default gradient at specified index or fallback
7093
7242
  var getDefaultGradient = function () {
7094
7243
  var gradients = defaultColors.filter(function (color) {
@@ -7102,9 +7251,11 @@ var ColorPicker = function (_a) {
7102
7251
  }
7103
7252
  return 'linear-gradient(90deg, rgb(255, 177, 153) 0%, rgb(255, 8, 68) 100%)';
7104
7253
  };
7105
- var _y = __read(React.useState(isGradientObject(value) || getIndexActiveTag(value) === 'gradient'
7254
+ var _5 = __read(React.useState(isGradientObject(value) || getIndexActiveTag(value) === 'gradient'
7106
7255
  ? cssValue
7107
- : getDefaultGradient()), 2), gradientValue = _y[0], setGradientValue = _y[1];
7256
+ : getDefaultGradient()), 2), gradientValue = _5[0], setGradientValue = _5[1];
7257
+ // Track current color for wrapper background (updates in real-time)
7258
+ var _6 = __read(React.useState(cssValue), 2), currentWrapperColor = _6[0], setCurrentWrapperColor = _6[1];
7108
7259
  // Auto-switch tab when value changes from object to string or vice versa
7109
7260
  React__default["default"].useEffect(function () {
7110
7261
  if (isGradientObject(value) && activeTab !== 'gradient') {
@@ -7119,12 +7270,16 @@ var ColorPicker = function (_a) {
7119
7270
  // Update gradient value if external value is a gradient
7120
7271
  setGradientValue(cssValue);
7121
7272
  }
7273
+ // Also update wrapper color when value prop changes
7274
+ setCurrentWrapperColor(cssValue);
7122
7275
  }, [value, cssValue, activeTab, onChangeTabs]);
7123
7276
  var onChangeSolid = function (value) {
7277
+ setCurrentWrapperColor(value); // Update wrapper immediately
7124
7278
  onChange(value);
7125
7279
  };
7126
7280
  var onChangeGradient = function (value) {
7127
7281
  setGradientValue(value); // Track gradient changes
7282
+ setCurrentWrapperColor(value); // Update wrapper immediately
7128
7283
  onChange(value);
7129
7284
  };
7130
7285
  var onChangeTab = function (tab) {
@@ -7137,24 +7292,71 @@ var ColorPicker = function (_a) {
7137
7292
  onChange(gradientValue);
7138
7293
  }
7139
7294
  };
7140
- if (solid && gradient) {
7141
- return (React__default["default"].createElement(ThemeProvider, null,
7142
- React__default["default"].createElement("div", { className: 'relative dark iro-gradient-picker', "data-color-picker-theme": true },
7143
- React__default["default"].createElement(PopupTabs, { activeTab: activeTab, popupWidth: popupWidth },
7144
- React__default["default"].createElement(PopupTabsHeader, null,
7145
- React__default["default"].createElement(PopupTabsHeaderLabel, { tabName: 'solid', onClick: function () { return onChangeTab('solid'); } }, "Solid"),
7146
- React__default["default"].createElement(PopupTabsHeaderLabel, { tabName: 'gradient', onClick: function () { return onChangeTab('gradient'); } }, "Gradient")),
7147
- React__default["default"].createElement(PopupTabsBody, null,
7148
- React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'solid' },
7149
- 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, popupWidth: popupWidth })),
7150
- React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'gradient' },
7151
- React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, value: gradientValue, 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, popupWidth: popupWidth })))))));
7152
- }
7153
- return (React__default["default"].createElement(ThemeProvider, null,
7154
- React__default["default"].createElement("div", { className: 'relative dark iro-gradient-picker', "data-color-picker-theme": true }, solid || gradient ? (React__default["default"].createElement(PopupTabs, { popupWidth: popupWidth },
7295
+ // Wrapper styling - use currentWrapperColor for real-time updates
7296
+ var wrapperStyle = showWrapper
7297
+ ? {
7298
+ background: wrapperBackground || currentWrapperColor || 'transparent',
7299
+ height: wrapperHeight,
7300
+ width: wrapperWidth,
7301
+ padding: wrapperPadding,
7302
+ borderRadius: wrapperRounded ? '1rem' : '0',
7303
+ display: 'flex',
7304
+ justifyContent: 'center',
7305
+ alignItems: 'center',
7306
+ minHeight: 'auto',
7307
+ textAlign: 'center',
7308
+ transition: 'background 0.3s ease',
7309
+ boxSizing: 'border-box'
7310
+ }
7311
+ : undefined;
7312
+ // Theme-specific inline styles for maximum specificity
7313
+ var themeStyles = theme === 'light'
7314
+ ? {
7315
+ backgroundColor: '#ffffff',
7316
+ color: '#1a1d23',
7317
+ '--colorpicker-bg': '#ffffff',
7318
+ '--colorpicker-text': '#1a1d23',
7319
+ '--colorpicker-panel-bg': '#f8f9fa',
7320
+ '--colorpicker-input-bg': '#f3f4f6',
7321
+ '--colorpicker-border': '#e5e7eb',
7322
+ '--colorpicker-input-border': '#d1d5db',
7323
+ '--color-background': '#ffffff',
7324
+ '--color-foreground': '#1a1d23',
7325
+ '--color-muted-foreground': '#6b7280',
7326
+ '--colorpicker-shadow': '0 4px 6px -1px rgb(0 0 0 / 0.1)'
7327
+ }
7328
+ : {
7329
+ backgroundColor: 'rgba(26, 26, 28, 0.8)',
7330
+ color: '#f7f8f9',
7331
+ '--colorpicker-bg': 'rgba(26, 26, 28, 0.8)',
7332
+ '--colorpicker-text': '#ffffff',
7333
+ '--colorpicker-panel-bg': 'rgba(0, 0, 0, 1)',
7334
+ '--colorpicker-input-bg': 'rgba(39, 39, 42, 0.8)',
7335
+ '--colorpicker-border': 'rgba(39, 39, 42, 0.8)',
7336
+ '--colorpicker-input-border': 'rgba(39, 39, 42, 0.8)',
7337
+ '--color-background': '#000000',
7338
+ '--color-foreground': '#f7f8f9',
7339
+ '--color-muted-foreground': '#a1a1aa'
7340
+ };
7341
+ var pickerContent = solid && gradient ? (React__default["default"].createElement(ThemeProvider, { defaultTheme: theme },
7342
+ React__default["default"].createElement("div", { className: "relative ".concat(theme, " iro-gradient-picker"), "data-color-picker-theme": true, style: themeStyles },
7343
+ React__default["default"].createElement(PopupTabs, { activeTab: activeTab, popupWidth: popupWidth },
7344
+ React__default["default"].createElement(PopupTabsHeader, null,
7345
+ React__default["default"].createElement(PopupTabsHeaderLabel, { tabName: 'solid', onClick: function () { return onChangeTab('solid'); } }, "Solid"),
7346
+ React__default["default"].createElement(PopupTabsHeaderLabel, { tabName: 'gradient', onClick: function () { return onChangeTab('gradient'); } }, "Gradient")),
7347
+ React__default["default"].createElement(PopupTabsBody, null,
7348
+ React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'solid' },
7349
+ React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, onColorChangeImmediate: setCurrentWrapperColor, value: cssValue, format: format, defaultColors: defaultColors, debounceMS: debounceMS, debounce: debounce, showAlpha: showAlpha, showInputs: showInputs, colorBoardHeight: colorBoardHeight, showReset: showReset, onReset: onReset, popupWidth: popupWidth })),
7350
+ React__default["default"].createElement(PopupTabsBodyItem, { tabName: 'gradient' },
7351
+ React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, onColorChangeImmediate: setCurrentWrapperColor, value: gradientValue, 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, popupWidth: popupWidth }))))))) : (React__default["default"].createElement(ThemeProvider, { defaultTheme: theme },
7352
+ React__default["default"].createElement("div", { className: "relative ".concat(theme, " iro-gradient-picker"), "data-color-picker-theme": true, style: themeStyles }, solid || gradient ? (React__default["default"].createElement(PopupTabs, { popupWidth: popupWidth },
7155
7353
  React__default["default"].createElement(PopupTabsBody, null,
7156
- 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, popupWidth: popupWidth })) : (React__default["default"].createElement(React.Fragment, null)),
7157
- 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, popupWidth: popupWidth })) : (React__default["default"].createElement(React.Fragment, null))))) : null)));
7354
+ solid ? (React__default["default"].createElement(IroSolidColorPicker, { onChange: onChangeSolid, onColorChangeImmediate: setCurrentWrapperColor, value: cssValue, format: format, defaultColors: defaultColors, debounceMS: debounceMS, debounce: debounce, showAlpha: showAlpha, showInputs: showInputs, colorBoardHeight: colorBoardHeight, showReset: showReset, onReset: onReset, popupWidth: popupWidth })) : (React__default["default"].createElement(React.Fragment, null)),
7355
+ gradient ? (React__default["default"].createElement(IroGradient, { onChange: onChangeGradient, onColorChangeImmediate: setCurrentWrapperColor, 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, popupWidth: popupWidth })) : (React__default["default"].createElement(React.Fragment, null))))) : null)));
7356
+ if (showWrapper) {
7357
+ return (React__default["default"].createElement("div", { className: "iro-picker-wrapper ".concat(wrapperClassName), style: wrapperStyle }, pickerContent));
7358
+ }
7359
+ return pickerContent;
7158
7360
  };
7159
7361
 
7160
7362
  // Simple sun and moon icons as SVG components