diff --git a/packages/common b/packages/common
index 5aedfdf7ab..4f8e9bfadf 160000
--- a/packages/common
+++ b/packages/common
@@ -1 +1 @@
-Subproject commit 5aedfdf7ab0457141b0a886d2126e22bbdb42cae
+Subproject commit 4f8e9bfadf5aec9c6bd48fde0ee046156d6baac6
diff --git a/packages/components/color-picker/__tests__/__snapshots__/color-picker-panel.test.tsx.snap b/packages/components/color-picker/__tests__/__snapshots__/color-picker-panel.test.tsx.snap
index 5150da8729..ec4d41c0ae 100644
--- a/packages/components/color-picker/__tests__/__snapshots__/color-picker-panel.test.tsx.snap
+++ b/packages/components/color-picker/__tests__/__snapshots__/color-picker-panel.test.tsx.snap
@@ -123,6 +123,40 @@ exports[`ColorPickerPanel > :props > :colorModes[monochrome,linear-gradient] 1`]
style="background: rgb(0, 31, 151);"
/>
+
:props > :colorModes[monochrome,linear-gradient] 2`]
class="t-color-picker__sliders-preview-inner"
/>
+
:props > :colorModes[monochrome,linear-gradient] 3`]
class="t-color-picker__sliders-preview-inner"
/>
+
:ui > :mount 1`] = `
style="background: rgb(0, 31, 151);"
/>
+
,
/** 调色板控制器的值变化时触发,`context.color` 指调色板控制器的值 */
diff --git a/packages/components/color-picker/components/panel/index.tsx b/packages/components/color-picker/components/panel/index.tsx
index 9688bab301..30cd40230f 100644
--- a/packages/components/color-picker/components/panel/index.tsx
+++ b/packages/components/color-picker/components/panel/index.tsx
@@ -9,6 +9,8 @@ import {
GradientColorPoint,
initColorFormat,
TD_COLOR_USED_COLORS_MAX_SIZE,
+ // PR合并后需要从子包导入
+ // getEyeDropper,
} from '@tdesign/common-js/color-picker/index';
import { useCommonClassName, useConfig, useDefaultValue, useVModel } from '@tdesign/shared-hooks';
import props from '../../color-picker-panel-props';
@@ -22,6 +24,9 @@ import HueSlider from './hue';
import LinearGradient from './linear-gradient';
import SaturationPanel from './saturation';
import SwatchesPanel from './swatches';
+// PR合并后需要删除这个导入语句
+import { getEyeDropper } from '../../utils/eyedropper';
+import { SipIcon } from 'tdesign-icons-vue-next';
export default defineComponent({
name: 'ColorPanel',
@@ -229,6 +234,17 @@ export default defineComponent({
emitColorChange(trigger);
};
+ const openEyeDropper = async (trigger?: ColorPickerChangeTrigger): Promise => {
+ const eyeDropper = getEyeDropper();
+
+ const result = await eyeDropper.open();
+ if (!result) {
+ return;
+ }
+ color.value.update(result.sRGBHex);
+ emitColorChange(trigger);
+ };
+
return () => {
const baseProps = {
color: color.value,
@@ -317,6 +333,11 @@ export default defineComponent({
/>
) : null}
+ {props.showEyeDropper ? (
+ openEyeDropper('eyedropper')}>
+
+
+ ) : null}
diff --git a/packages/components/color-picker/props.ts b/packages/components/color-picker/props.ts
index f0757763bc..aa69d411ca 100644
--- a/packages/components/color-picker/props.ts
+++ b/packages/components/color-picker/props.ts
@@ -93,6 +93,11 @@ export default {
type: String,
default: '',
},
+ /** 是否显示拾色器功能 */
+ showEyeDropper: {
+ type: Boolean,
+ default: true,
+ },
/** 选中的色值发生变化时触发,第一个参数 `value` 表示新色值,`context.color` 表示当前调色板控制器的色值,`context.trigger` 表示触发颜色变化的来源 */
onChange: Function as PropType,
/** 清空按钮点击时触发 */
diff --git a/packages/components/color-picker/type.ts b/packages/components/color-picker/type.ts
index dae9992b4b..986150523d 100644
--- a/packages/components/color-picker/type.ts
+++ b/packages/components/color-picker/type.ts
@@ -198,7 +198,8 @@ export type ColorPickerChangeTrigger =
| 'palette-alpha-bar'
| 'input'
| 'preset'
- | 'recent';
+ | 'recent'
+ | 'eyedropper';
export interface ColorObject {
alpha: number;
diff --git a/packages/components/color-picker/utils/eyedropper.ts b/packages/components/color-picker/utils/eyedropper.ts
new file mode 100644
index 0000000000..8b49b21ffb
--- /dev/null
+++ b/packages/components/color-picker/utils/eyedropper.ts
@@ -0,0 +1,45 @@
+/**
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/EyeDropper
+ * PR合并后 该文件可以删除
+ * */
+
+declare global {
+ interface Window {
+ EyeDropper?: new () => {
+ open(options?: EyeDropperOpenOptions): Promise;
+ };
+ }
+}
+
+export interface EyeDropperOpenResult {
+ sRGBHex: string;
+}
+
+export interface EyeDropperOpenOptions {
+ signal?: AbortSignal;
+}
+
+export const getEyeDropper = () => {
+ if (typeof window === 'undefined') return undefined;
+
+ const EyeDropperClass = window.EyeDropper;
+ if (EyeDropperClass === undefined) {
+ // 浏览器不支持 EyeDropper 兼容性:https://developer.mozilla.org/zh-CN/docs/Web/API/EyeDropper#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%85%BC%E5%AE%B9%E6%80%A7
+ return undefined;
+ }
+
+ const eyeDropper = new EyeDropperClass();
+ const originOpen = eyeDropper.open.bind(eyeDropper);
+ eyeDropper.open = async (options?: EyeDropperOpenOptions) => {
+ try {
+ return await originOpen(options);
+ } catch (e) {
+ // 用户取消操作
+ if (e instanceof DOMException && e.name === 'AbortError') {
+ return undefined;
+ }
+ throw e;
+ }
+ };
+ return eyeDropper;
+};
diff --git a/packages/tdesign-vue-next/.changelog/pr-6830.md b/packages/tdesign-vue-next/.changelog/pr-6830.md
new file mode 100644
index 0000000000..8378c25c40
--- /dev/null
+++ b/packages/tdesign-vue-next/.changelog/pr-6830.md
@@ -0,0 +1,6 @@
+---
+pr_number: 6830
+contributor: yuxi-ovo
+---
+
+- fix(Swiper): 修复只有两个轮播图内容场景下切换逻辑错误的问题 @yuxi-ovo ([#6830](https://github.com/Tencent/tdesign-vue-next/pull/6830))