diff --git a/ui/colourpicker.css b/ui/colourpicker.css index 0450475a..c061eb6f 100644 --- a/ui/colourpicker.css +++ b/ui/colourpicker.css @@ -21,6 +21,25 @@ z-index: 1000; } + +.color-picker-drag-handle { + display: flex; + align-items: center; + justify-content: center; + margin: -6px -6px 8px; + padding: 4px 0; + color: #511d91; + cursor: move; + user-select: none; + touch-action: none; +} + +.color-picker-drag-grip { + font-size: 14px; + line-height: 1; + letter-spacing: 2px; + opacity: 0.75; +} .color-picker-tools-row { display: flex; align-items: center; diff --git a/ui/colourpicker.js b/ui/colourpicker.js index ecc07c90..bcf82e10 100644 --- a/ui/colourpicker.js +++ b/ui/colourpicker.js @@ -88,6 +88,8 @@ class CustomColorPicker { this.targetElement = options.target || document.body; this.isOpen = false; + this.userMovedPicker = false; + this.paintModeActiveFromOutside = false; // Eyedropper state this._eyedropperActive = false; @@ -298,6 +300,9 @@ class CustomColorPicker { this.container.innerHTML = `
+
+ +
@@ -406,6 +411,7 @@ class CustomColorPicker { // Palette UI refs this.paletteSelect = this.container.querySelector("#palette-select"); this.paletteGrid = this.container.querySelector(".color-palette"); + this.dragHandle = this.container.querySelector(".color-picker-drag-handle"); // Build dropdown options + render default swatches before events bind this._initPaletteUI(); @@ -422,6 +428,7 @@ class CustomColorPicker { this.drawColorWheel(); this.drawHueSlider(); this.setupLightnessCanvasScaling(); + this.makePopupDraggable(); } _initPaletteUI() { @@ -456,8 +463,8 @@ class CustomColorPicker { const label = translate(c.name) || c.hex; const hex = c.hex; return ` -