x-next 1.4.0 → 1.6.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.
Files changed (144) hide show
  1. package/AI_USAGE.md +2 -2
  2. package/CHANGELOG.md +71 -0
  3. package/dist/_utils/color.d.ts +53 -0
  4. package/dist/components/color-picker/ColorPicker.d.ts +239 -0
  5. package/dist/components/color-picker/gradient-slider.d.ts +52 -0
  6. package/dist/components/color-picker/index.d.ts +238 -0
  7. package/dist/components/color-picker/panel.d.ts +721 -0
  8. package/dist/components/color-picker/sv-panel.d.ts +48 -0
  9. package/dist/components/date-picker/DatePicker.vue.d.ts +3 -3
  10. package/dist/components/date-picker/index.d.ts +6 -6
  11. package/dist/components/dropdown/Dropdown.vue.d.ts +34 -4
  12. package/dist/components/dropdown/DropdownButton.vue.d.ts +37 -6
  13. package/dist/components/dropdown/DropdownSubmenu.vue.d.ts +34 -4
  14. package/dist/components/dropdown/dropdown-panel.vue.d.ts +30 -0
  15. package/dist/components/dropdown/index.d.ts +212 -29
  16. package/dist/components/form/FormItem.vue.d.ts +3 -3
  17. package/dist/components/form/form-item-label.vue.d.ts +3 -3
  18. package/dist/components/form/index.d.ts +6 -6
  19. package/dist/components/form-select/Select.d.ts +3 -3
  20. package/dist/components/form-select/SelectDropdown.vue.d.ts +30 -0
  21. package/dist/components/form-select/index.d.ts +66 -6
  22. package/dist/components/form-slider/Slider.vue.d.ts +3 -3
  23. package/dist/components/form-slider/index.d.ts +6 -6
  24. package/dist/components/form-slider/slider-button.vue.d.ts +3 -3
  25. package/dist/components/heatmap/Heatmap.d.ts +311 -0
  26. package/dist/components/heatmap/helpers/matrix.d.ts +58 -0
  27. package/dist/components/heatmap/index.d.ts +372 -0
  28. package/dist/components/heatmap/interface.d.ts +57 -0
  29. package/dist/components/image/Image.vue.d.ts +3 -3
  30. package/dist/components/image/ImagePreview.vue.d.ts +3 -3
  31. package/dist/components/image/ImagePreviewAction.d.ts +3 -3
  32. package/dist/components/image/ImagePreviewGroup.vue.d.ts +3 -3
  33. package/dist/components/image/index.d.ts +24 -24
  34. package/dist/components/image/preview-toolbar.vue.d.ts +3 -3
  35. package/dist/components/index.d.ts +2 -0
  36. package/dist/components/menu/sub-menu-pop.vue.d.ts +3 -3
  37. package/dist/components/network/Network.vue.d.ts +1 -1
  38. package/dist/components/network/index.d.ts +3 -3
  39. package/dist/components/network/utils.d.ts +2 -0
  40. package/dist/components/pagination/page-item-ellipsis.vue.d.ts +9 -0
  41. package/dist/components/pagination/page-jumper.vue.d.ts +6 -0
  42. package/dist/components/pagination/page-options.vue.d.ts +6 -6
  43. package/dist/components/popover/Popover.d.ts +1 -1
  44. package/dist/components/popover/index.d.ts +3 -3
  45. package/dist/components/popup/Popup.d.ts +1 -1
  46. package/dist/components/popup/index.d.ts +3 -3
  47. package/dist/components/skeleton/SkeletonShape.vue.d.ts +3 -3
  48. package/dist/components/skeleton/index.d.ts +6 -6
  49. package/dist/components/spin/Spin.d.ts +38 -0
  50. package/dist/components/spin/index.d.ts +30 -0
  51. package/dist/components/steps/context.d.ts +9 -0
  52. package/dist/components/table/Table.d.ts +1 -1
  53. package/dist/components/table/index.d.ts +3 -3
  54. package/dist/components/tabs/TabPane.vue.d.ts +2 -0
  55. package/dist/components/tabs/Tabs.d.ts +1 -1
  56. package/dist/components/tabs/index.d.ts +9 -3
  57. package/dist/components/tabs/interface.d.ts +4 -0
  58. package/dist/components/time-picker/TimePicker.vue.d.ts +3 -3
  59. package/dist/components/time-picker/index.d.ts +6 -6
  60. package/dist/components/tooltip/Tooltip.vue.d.ts +1 -1
  61. package/dist/components/tooltip/index.d.ts +3 -3
  62. package/dist/components/trigger/Trigger.d.ts +1 -1
  63. package/dist/components/trigger/index.d.ts +3 -3
  64. package/dist/components/watermark/Watermark.d.ts +1 -1
  65. package/dist/components/watermark/index.d.ts +3 -3
  66. package/dist/es/_styles/palette-aliases.js +8 -0
  67. package/dist/es/_utils/color.js +73 -0
  68. package/dist/es/components/button/Button.js +2 -2
  69. package/dist/es/components/color-picker/ColorPicker.js +239 -0
  70. package/dist/es/components/color-picker/gradient-slider.js +79 -0
  71. package/dist/es/components/color-picker/index.js +8 -0
  72. package/dist/es/components/color-picker/panel.js +307 -0
  73. package/dist/es/components/color-picker/sv-panel.js +99 -0
  74. package/dist/es/components/dropdown/Dropdown.vue2.js +11 -4
  75. package/dist/es/components/dropdown/DropdownButton.vue.js +8 -7
  76. package/dist/es/components/dropdown/DropdownButton.vue2.js +19 -17
  77. package/dist/es/components/dropdown/DropdownSubmenu.vue.js +18 -17
  78. package/dist/es/components/dropdown/dropdown-panel.vue.js +17 -17
  79. package/dist/es/components/form-input/Input.js +7 -7
  80. package/dist/es/components/form-input/InputPassword.vue2.js +2 -2
  81. package/dist/es/components/form-input/InputSearch.js +2 -2
  82. package/dist/es/components/form-input-number/InputNumber.js +12 -12
  83. package/dist/es/components/heatmap/Heatmap.js +334 -0
  84. package/dist/es/components/heatmap/helpers/matrix.js +106 -0
  85. package/dist/es/components/heatmap/index.js +8 -0
  86. package/dist/es/components/index.js +118 -114
  87. package/dist/es/components/menu/MenuSubMenu.js +50 -36
  88. package/dist/es/components/menu/sub-menu-pop.vue2.js +30 -30
  89. package/dist/es/components/network/Network.vue2.js +72 -72
  90. package/dist/es/components/network/utils.js +44 -35
  91. package/dist/es/components/pagination/Pagination.js +124 -112
  92. package/dist/es/components/pagination/page-item-ellipsis.vue.js +13 -12
  93. package/dist/es/components/pagination/page-item-ellipsis.vue2.js +19 -15
  94. package/dist/es/components/pagination/page-jumper.vue.js +13 -12
  95. package/dist/es/components/pagination/page-jumper.vue2.js +7 -4
  96. package/dist/es/components/pagination/page-options.vue.js +4 -3
  97. package/dist/es/components/pagination/page-options.vue2.js +17 -15
  98. package/dist/es/components/skeleton/Skeleton.vue.js +11 -9
  99. package/dist/es/components/skeleton/SkeletonLine.vue.js +9 -8
  100. package/dist/es/components/skeleton/SkeletonShape.vue.js +8 -7
  101. package/dist/es/components/spin/Spin.js +124 -60
  102. package/dist/es/components/steps/Step.vue2.js +51 -47
  103. package/dist/es/components/steps/Steps.vue2.js +22 -19
  104. package/dist/es/components/table/Table.js +3 -1
  105. package/dist/es/components/tabs/TabPane.vue.js +11 -9
  106. package/dist/es/components/tabs/TabPane.vue2.js +28 -24
  107. package/dist/es/components/tabs/tabs-nav.js +20 -18
  108. package/dist/es/components/tabs/tabs-tab.vue.js +10 -8
  109. package/dist/es/components/trigger/Trigger.js +19 -19
  110. package/dist/es/icons/_self/empty-better.js +25 -8
  111. package/dist/es/index.js +162 -158
  112. package/dist/es/locale/en-US.js +19 -2
  113. package/dist/es/locale/zh-CN.js +19 -2
  114. package/dist/es/style.css +1 -1
  115. package/dist/index.cjs +4 -4
  116. package/dist/index.umd.js +4 -4
  117. package/dist/locale/interface.d.ts +30 -0
  118. package/dist/style/base.css +1 -1
  119. package/dist/style/button.css +1 -1
  120. package/dist/style/color-picker.css +1 -0
  121. package/dist/style/color-picker.js +2 -0
  122. package/dist/style/date-picker.css +1 -1
  123. package/dist/style/dropdown.css +1 -1
  124. package/dist/style/empty.css +1 -1
  125. package/dist/style/form-checkbox.css +1 -1
  126. package/dist/style/form-input-tag.css +1 -1
  127. package/dist/style/form-input.css +1 -1
  128. package/dist/style/form-radio.css +1 -1
  129. package/dist/style/form-textarea.css +1 -1
  130. package/dist/style/form.css +1 -1
  131. package/dist/style/heatmap.css +1 -0
  132. package/dist/style/heatmap.js +2 -0
  133. package/dist/style/image.css +1 -1
  134. package/dist/style/menu.css +1 -1
  135. package/dist/style/pagination.css +1 -1
  136. package/dist/style/skeleton.css +1 -1
  137. package/dist/style/spin.css +1 -1
  138. package/dist/style/steps.css +1 -1
  139. package/dist/style/table.css +1 -1
  140. package/dist/style/tabs.css +1 -1
  141. package/dist/style.css +1 -1
  142. package/dist/types.d.ts +2 -0
  143. package/package.json +3 -2
  144. package/volar.d.ts +2 -0
@@ -158,11 +158,11 @@ export declare const Trigger: {
158
158
  }, import('vue').PublicProps, {
159
159
  disabled: boolean;
160
160
  position: "top" | "tl" | "tr" | "bottom" | "bl" | "br" | "left" | "lt" | "lb" | "right" | "rt" | "rb";
161
+ trigger: "hover" | "click" | "focus" | "contextMenu" | ("hover" | "click" | "focus" | "contextMenu")[];
161
162
  animationName: string;
162
163
  autoFitPosition: boolean;
163
164
  popupVisible: boolean;
164
165
  defaultPopupVisible: boolean;
165
- trigger: "hover" | "click" | "focus" | "contextMenu" | ("hover" | "click" | "focus" | "contextMenu")[];
166
166
  popupOffset: number;
167
167
  showArrow: boolean;
168
168
  alignPoint: boolean;
@@ -346,11 +346,11 @@ export declare const Trigger: {
346
346
  }>, () => any, {}, {}, {}, {
347
347
  disabled: boolean;
348
348
  position: "top" | "tl" | "tr" | "bottom" | "bl" | "br" | "left" | "lt" | "lb" | "right" | "rt" | "rb";
349
+ trigger: "hover" | "click" | "focus" | "contextMenu" | ("hover" | "click" | "focus" | "contextMenu")[];
349
350
  animationName: string;
350
351
  autoFitPosition: boolean;
351
352
  popupVisible: boolean;
352
353
  defaultPopupVisible: boolean;
353
- trigger: "hover" | "click" | "focus" | "contextMenu" | ("hover" | "click" | "focus" | "contextMenu")[];
354
354
  popupOffset: number;
355
355
  showArrow: boolean;
356
356
  alignPoint: boolean;
@@ -534,11 +534,11 @@ export declare const Trigger: {
534
534
  }, string, {
535
535
  disabled: boolean;
536
536
  position: "top" | "tl" | "tr" | "bottom" | "bl" | "br" | "left" | "lt" | "lb" | "right" | "rt" | "rb";
537
+ trigger: "hover" | "click" | "focus" | "contextMenu" | ("hover" | "click" | "focus" | "contextMenu")[];
537
538
  animationName: string;
538
539
  autoFitPosition: boolean;
539
540
  popupVisible: boolean;
540
541
  defaultPopupVisible: boolean;
541
- trigger: "hover" | "click" | "focus" | "contextMenu" | ("hover" | "click" | "focus" | "contextMenu")[];
542
542
  popupOffset: number;
543
543
  showArrow: boolean;
544
544
  alignPoint: boolean;
@@ -231,13 +231,13 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
231
231
  rotate: number;
232
232
  repeat: boolean;
233
233
  content: string | string[];
234
+ alpha: number;
234
235
  height: number;
235
236
  width: number;
236
237
  zIndex: number;
237
238
  font: WatermarkFont;
238
239
  gap: WatermarkGap;
239
240
  offset: WatermarkGap;
240
- alpha: number;
241
241
  antiTamper: boolean;
242
242
  grayscale: boolean;
243
243
  staggered: boolean;
@@ -64,13 +64,13 @@ export declare const Watermark: {
64
64
  rotate: number;
65
65
  repeat: boolean;
66
66
  content: string | string[];
67
+ alpha: number;
67
68
  height: number;
68
69
  width: number;
69
70
  zIndex: number;
70
71
  font: import('./interface').WatermarkFont;
71
72
  gap: import('./interface').WatermarkGap;
72
73
  offset: import('./interface').WatermarkGap;
73
- alpha: number;
74
74
  antiTamper: boolean;
75
75
  grayscale: boolean;
76
76
  staggered: boolean;
@@ -143,13 +143,13 @@ export declare const Watermark: {
143
143
  rotate: number;
144
144
  repeat: boolean;
145
145
  content: string | string[];
146
+ alpha: number;
146
147
  height: number;
147
148
  width: number;
148
149
  zIndex: number;
149
150
  font: import('./interface').WatermarkFont;
150
151
  gap: import('./interface').WatermarkGap;
151
152
  offset: import('./interface').WatermarkGap;
152
- alpha: number;
153
153
  antiTamper: boolean;
154
154
  grayscale: boolean;
155
155
  staggered: boolean;
@@ -219,13 +219,13 @@ export declare const Watermark: {
219
219
  rotate: number;
220
220
  repeat: boolean;
221
221
  content: string | string[];
222
+ alpha: number;
222
223
  height: number;
223
224
  width: number;
224
225
  zIndex: number;
225
226
  font: import('./interface').WatermarkFont;
226
227
  gap: import('./interface').WatermarkGap;
227
228
  offset: import('./interface').WatermarkGap;
228
- alpha: number;
229
229
  antiTamper: boolean;
230
230
  grayscale: boolean;
231
231
  staggered: boolean;
@@ -13,6 +13,8 @@ const r = {
13
13
  "--x-color-border-focus": "var(--x-color-primary-6)",
14
14
  "--x-color-menu-dark-hover": "var(--x-color-primary)",
15
15
  "--x-color-menu-dark-submenu-selected-bg": "color-mix(in srgb, var(--x-color-primary) 45%, transparent)",
16
+ "--x-color-picker-color-swatch_active": "var(--x-color-primary-text)",
17
+ "--x-color-picker-color-text_active": "var(--x-color-primary-text)",
16
18
  "--x-color-primary-button-text": "var(--x-color-primary-text)",
17
19
  "--x-color-primary-light-1": "var(--x-color-primary-1)",
18
20
  "--x-color-primary-light-2": "var(--x-color-primary-light-1)",
@@ -40,6 +42,11 @@ const r = {
40
42
  "--x-field-status-validating-text": "var(--x-color-primary-text)",
41
43
  "--x-focus-bc": "var(--x-color-primary)",
42
44
  "--x-form-border-color-focus": "var(--x-field-color-border-focus)",
45
+ "--x-heatmap-color-level-1": "var(--x-color-primary-1)",
46
+ "--x-heatmap-color-level-2": "var(--x-color-primary-2)",
47
+ "--x-heatmap-color-level-3": "var(--x-color-primary-3)",
48
+ "--x-heatmap-color-level-4": "var(--x-color-primary-5)",
49
+ "--x-heatmap-color-level-5": "var(--x-color-primary-6)",
43
50
  "--x-hover-color": "var(--x-color-primary)",
44
51
  "--x-image-preview-color-action-hover-bg": "var(--x-color-primary-subtle)",
45
52
  "--x-image-preview-color-action-hover-text": "var(--x-color-primary-solid)",
@@ -81,6 +88,7 @@ const r = {
81
88
  "--x-radio-color-bg_checked_disabled": "var(--x-color-primary-light-3)",
82
89
  "--x-select-bc": "var(--x-color-primary)",
83
90
  "--x-select-color": "var(--x-color-primary)",
91
+ "--x-spin-tip-shimmer-color-highlight": "color-mix( in srgb, var(--x-color-primary-text) 30%, var(--x-color-white) )",
84
92
  "--x-table-color-bg-body-row_active": "var(--x-color-primary-subtle)",
85
93
  "--x-table-color-border_resizing": "var(--x-color-primary-6)",
86
94
  "--x-table-color-header-filters-icon_active": "var(--x-color-primary-6)",
@@ -0,0 +1,73 @@
1
+ import { hslToRgb as N } from "./palette.js";
2
+ import { rgbToHsl as w } from "./palette.js";
3
+ const c = (n, t, r) => Math.min(r, Math.max(t, n)), T = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i, F = /^(rgba?|hsla?)\(([^)]+)\)$/i, b = /^[+-]?(?:\d+\.?\d*|\.\d+)%?$/, u = (n) => c(Math.round(n), 0, 255), v = (n) => {
4
+ if (n === void 0) return 1;
5
+ const t = n.trim();
6
+ if (!t) return 1;
7
+ if (t.endsWith("%")) return c(parseFloat(t) / 100, 0, 1);
8
+ const r = Number(t);
9
+ return Number.isFinite(r) ? c(r, 0, 1) : 1;
10
+ }, A = (n) => {
11
+ const t = n.trim();
12
+ return t.endsWith("%") ? u(parseFloat(t) / 100 * 255) : u(Number(t));
13
+ }, C = (n) => {
14
+ if (!T.test(n)) return null;
15
+ const t = n.slice(1), r = t.length <= 4 ? [...t].map((i) => i + i).join("") : t, a = parseInt(r.slice(0, 2), 16), s = parseInt(r.slice(2, 4), 16), e = parseInt(r.slice(4, 6), 16), o = r.length === 8 ? parseInt(r.slice(6, 8), 16) / 255 : 1;
16
+ return [a, s, e, o].some((i) => !Number.isFinite(i)) ? null : { r: a, g: s, b: e, a: c(o, 0, 1) };
17
+ }, M = (n) => {
18
+ const t = n.trim();
19
+ if (!t) return null;
20
+ if (t.includes(",")) {
21
+ const e = t.split(",").map((o) => o.trim());
22
+ return e.length !== 3 && e.length !== 4 ? null : { channels: e.slice(0, 3), alpha: e[3] };
23
+ }
24
+ if (t.split("/").length > 2) return null;
25
+ const [r, a] = t.split("/"), s = r.trim().split(/\s+/);
26
+ return s.length !== 3 ? null : { channels: s, alpha: a };
27
+ }, H = (n) => {
28
+ if (typeof n != "string") return null;
29
+ const t = n.trim();
30
+ if (!t) return null;
31
+ if (t.startsWith("#")) return C(t);
32
+ const r = t.match(F);
33
+ if (!r) return null;
34
+ const a = r[1].toLowerCase(), s = M(r[2]);
35
+ if (!s || s.channels.some((f) => !b.test(f)) || s.alpha !== void 0 && s.alpha !== "" && !b.test(s.alpha.trim()))
36
+ return null;
37
+ const e = v(s.alpha), o = s.channels.map((f) => parseFloat(f));
38
+ if (o.some((f) => !Number.isFinite(f))) return null;
39
+ if (a.startsWith("rgb")) {
40
+ const [f, $, x] = s.channels.map(A);
41
+ return { r: f, g: $, b: x, a: e };
42
+ }
43
+ const [i, h, l] = o, [m, g, d] = N({ h: i, s: c(h, 0, 100), l: c(l, 0, 100) });
44
+ return { r: u(m), g: u(g), b: u(d), a: e };
45
+ }, I = ({ r: n, g: t, b: r }) => {
46
+ const a = c(n, 0, 255) / 255, s = c(t, 0, 255) / 255, e = c(r, 0, 255) / 255, o = Math.max(a, s, e), i = Math.min(a, s, e), h = o - i;
47
+ let l = 0;
48
+ h !== 0 && (o === a ? l = (s - e) / h % 6 : o === s ? l = (e - a) / h + 2 : l = (a - s) / h + 4, l *= 60, l < 0 && (l += 360));
49
+ const m = o === 0 ? 0 : h / o * 100;
50
+ return { h: l, s: m, v: o * 100 };
51
+ }, E = ({ h: n, s: t, v: r }) => {
52
+ const a = c(t, 0, 100) / 100, s = c(r, 0, 100) / 100, e = (n % 360 + 360) % 360, o = s * a, i = o * (1 - Math.abs(e / 60 % 2 - 1)), h = s - o;
53
+ let l;
54
+ return e < 60 ? l = [o, i, 0] : e < 120 ? l = [i, o, 0] : e < 180 ? l = [0, o, i] : e < 240 ? l = [0, i, o] : e < 300 ? l = [i, 0, o] : l = [o, 0, i], l.map((m) => u((m + h) * 255));
55
+ }, p = (n) => u(n).toString(16).padStart(2, "0"), P = ({ r: n, g: t, b: r, a }, s = !1) => {
56
+ const e = `#${p(n)}${p(t)}${p(r)}`;
57
+ return s && a < 1 ? `${e}${p(a * 255)}` : e;
58
+ }, S = (n) => Math.round(c(n, 0, 1) * 100), W = (n, t, r = !1) => {
59
+ const { r: a, g: s, b: e, a: o } = n;
60
+ return P(n, r);
61
+ }, _ = ({ r: n, g: t, b: r, a }) => `rgba(${u(n)}, ${u(t)}, ${u(r)}, ${Number(c(a, 0, 1).toFixed(3))})`, L = ({ r: n, g: t, b: r }) => `rgba(${u(n)}, ${u(t)}, ${u(r)}, 1)`;
62
+ export {
63
+ S as formatAlphaPercent,
64
+ W as formatColor,
65
+ N as hslToRgb,
66
+ E as hsvToRgb,
67
+ H as parseColorAlpha,
68
+ w as rgbToHsl,
69
+ I as rgbToHsv,
70
+ P as rgbaToHex,
71
+ L as toAlphaSliderColor,
72
+ _ as toRgbaString
73
+ };
@@ -5,7 +5,7 @@ import B from "../../icons/animation/animation-loading.js";
5
5
  import I from "../../directives/wave.js";
6
6
  import { buttonGroupInjectionKey as K } from "./context.js";
7
7
  import { useSize as N } from "../../_hooks/use-size.js";
8
- const q = /* @__PURE__ */ O({
8
+ const H = /* @__PURE__ */ O({
9
9
  name: "Button",
10
10
  props: A,
11
11
  // 显式导入插槽
@@ -69,5 +69,5 @@ const q = /* @__PURE__ */ O({
69
69
  }
70
70
  });
71
71
  export {
72
- q as default
72
+ H as default
73
73
  };
@@ -0,0 +1,239 @@
1
+ import { defineComponent as L, toRefs as k, ref as C, computed as c, watch as A, createVNode as n } from "vue";
2
+ import { getClassNameMixin as R } from "../../_utils/config.js";
3
+ import { useFormItem as j } from "../../_hooks/use-form-item.js";
4
+ import { useSize as D } from "../../_hooks/use-size.js";
5
+ import { useLocale as G } from "../../locale/index.js";
6
+ import { parseColorAlpha as H, formatColor as v } from "../../_utils/color.js";
7
+ import I from "../trigger/Trigger.js";
8
+ import K from "./panel.js";
9
+ const Y = /* @__PURE__ */ L({
10
+ name: "ColorPicker",
11
+ props: {
12
+ /**
13
+ * @zh 颜色值,支持 hex / rgb / hsl(含 alpha)
14
+ * @en Color value, supports hex / rgb / hsl with alpha
15
+ * @vModel
16
+ */
17
+ modelValue: {
18
+ type: String,
19
+ default: void 0
20
+ },
21
+ /**
22
+ * @zh 非受控初值
23
+ * @en Default value for uncontrolled mode
24
+ */
25
+ defaultValue: {
26
+ type: String,
27
+ /*
28
+ * 不设字符串默认值:未传值时由下方 rgba 的数值兜底给出品牌蓝,
29
+ * 避免在组件里硬编码色值(硬编码色门禁不允许,且换主色时会失配)。
30
+ */
31
+ default: void 0
32
+ },
33
+ /**
34
+ * @zh 面板是否可见
35
+ * @en Whether the panel is visible
36
+ * @vModel
37
+ */
38
+ show: {
39
+ type: Boolean,
40
+ default: void 0
41
+ },
42
+ /**
43
+ * @zh 面板默认是否可见
44
+ * @en Whether the panel is visible by default
45
+ */
46
+ defaultShow: {
47
+ type: Boolean,
48
+ default: !1
49
+ },
50
+ /**
51
+ * @zh 可选的颜色格式
52
+ * @en Available color formats
53
+ * @defaultValue ['hex', 'rgb', 'hsl']
54
+ */
55
+ modes: {
56
+ type: Array,
57
+ default: () => ["hex", "rgb", "hsl"]
58
+ },
59
+ /**
60
+ * @zh 是否启用透明度
61
+ * @en Whether alpha is enabled
62
+ * @defaultValue true
63
+ */
64
+ showAlpha: {
65
+ type: Boolean,
66
+ default: !0
67
+ },
68
+ /**
69
+ * @zh 预设色块
70
+ * @en Preset swatches
71
+ */
72
+ swatches: {
73
+ type: Array,
74
+ default: () => []
75
+ },
76
+ /**
77
+ * @zh 是否展示确认按钮
78
+ * @en Whether to show the confirm button
79
+ * @defaultValue true
80
+ */
81
+ showConfirm: {
82
+ type: Boolean,
83
+ default: !0
84
+ },
85
+ /**
86
+ * @zh 是否展示清除按钮
87
+ * @en Whether to show the clear button
88
+ * @defaultValue true
89
+ */
90
+ showClear: {
91
+ type: Boolean,
92
+ default: !0
93
+ },
94
+ /**
95
+ * @zh 是否禁用
96
+ * @en Whether the picker is disabled
97
+ */
98
+ disabled: {
99
+ type: Boolean,
100
+ default: !1
101
+ },
102
+ /**
103
+ * @zh 尺寸
104
+ * @en Size
105
+ * @values 'mini', 'small', 'medium', 'large'
106
+ */
107
+ size: {
108
+ type: String
109
+ },
110
+ /**
111
+ * @zh 面板挂载容器
112
+ * @en Mount container for the panel
113
+ */
114
+ popupContainer: {
115
+ type: [String, Object]
116
+ }
117
+ },
118
+ emits: {
119
+ "update:modelValue": (a, d) => !0,
120
+ change: (a, d) => !0,
121
+ "update:show": (a) => !0,
122
+ showChange: (a) => !0,
123
+ confirm: (a) => !0,
124
+ clear: () => !0
125
+ },
126
+ slots: Object,
127
+ setup(a, {
128
+ attrs: d,
129
+ emit: t,
130
+ slots: s
131
+ }) {
132
+ const f = R("color-picker"), {
133
+ t: u
134
+ } = G(), {
135
+ mergedDisabled: g,
136
+ mergedSize: x,
137
+ eventHandlers: B
138
+ } = j({
139
+ disabled: k(a).disabled,
140
+ size: k(a).size
141
+ });
142
+ D(x);
143
+ const h = C(a.defaultShow), i = c(() => a.show ?? h.value), m = (e) => {
144
+ e !== i.value && (h.value = e, t("update:show", e), t("showChange", e));
145
+ };
146
+ A(() => a.show, (e) => {
147
+ e !== void 0 && e !== h.value && (h.value = e);
148
+ });
149
+ const p = C(a.defaultValue), w = c(() => a.modelValue ?? p.value ?? ""), S = {
150
+ r: 28,
151
+ g: 97,
152
+ b: 255,
153
+ a: 1
154
+ }, b = c(() => H(w.value ?? "") ?? S), y = c(() => v(b.value, "hex", a.showAlpha)), _ = (e, l) => {
155
+ var r, P;
156
+ const o = v(e, "hex", a.showAlpha);
157
+ o !== w.value && (p.value = o, t("update:modelValue", o, l), t("change", o, l), (P = (r = B.value) == null ? void 0 : r.onChange) == null || P.call(r, l));
158
+ }, z = c(() => ({
159
+ clear: u("colorPicker.clear"),
160
+ confirm: u("colorPicker.confirm"),
161
+ hue: u("colorPicker.hue"),
162
+ alpha: u("colorPicker.alpha"),
163
+ saturation: u("colorPicker.saturation")
164
+ })), T = (e, l) => {
165
+ _(e, l);
166
+ }, F = (e) => {
167
+ const l = v(e, "hex", a.showAlpha);
168
+ p.value = l, t("update:modelValue", l), t("change", l), t("confirm", l), m(!1);
169
+ }, N = () => {
170
+ const e = a.defaultValue;
171
+ p.value = e, t("update:modelValue", e ?? ""), t("change", e ?? ""), t("clear");
172
+ }, V = C();
173
+ A(i, (e, l) => {
174
+ var o, r;
175
+ l && !e && ((r = (o = V.value) == null ? void 0 : o.focus) == null || r.call(o));
176
+ });
177
+ const O = () => {
178
+ var o;
179
+ if (s.trigger)
180
+ return s.trigger({
181
+ value: y.value,
182
+ visible: i.value
183
+ });
184
+ const e = (o = s.default) == null ? void 0 : o.call(s), l = n("button", {
185
+ ref: V,
186
+ type: "button",
187
+ class: f.element("trigger"),
188
+ disabled: g.value,
189
+ "aria-haspopup": "dialog",
190
+ "aria-expanded": i.value ? "true" : "false",
191
+ "aria-label": u("colorPicker.trigger")
192
+ }, [n("span", {
193
+ class: f.element("trigger-color"),
194
+ style: {
195
+ backgroundColor: y.value
196
+ }
197
+ }, null)]);
198
+ return e ? n("span", {
199
+ class: [f.element("trigger-wrapper"), d.class]
200
+ }, [l, n("span", {
201
+ class: f.element("trigger-label")
202
+ }, [e])]) : n("span", {
203
+ class: d.class
204
+ }, [l]);
205
+ };
206
+ return () => n(I, {
207
+ trigger: "click",
208
+ position: "bl",
209
+ popupOffset: 4,
210
+ clickToClose: !1,
211
+ preventFocus: !0,
212
+ autoFitTransformOrigin: !0,
213
+ animationName: "x-zoom-in-fade-out",
214
+ disabled: g.value,
215
+ popupVisible: i.value,
216
+ popupContainer: a.popupContainer,
217
+ onPopupVisibleChange: m
218
+ }, {
219
+ default: O,
220
+ content: () => n(K, {
221
+ value: b.value,
222
+ modes: a.modes,
223
+ showAlpha: a.showAlpha,
224
+ swatches: a.swatches,
225
+ disabled: g.value,
226
+ showConfirm: a.showConfirm,
227
+ showClear: a.showClear,
228
+ texts: z.value,
229
+ onChange: T,
230
+ onConfirm: F,
231
+ onClear: N,
232
+ onClose: () => m(!1)
233
+ }, null)
234
+ });
235
+ }
236
+ });
237
+ export {
238
+ Y as default
239
+ };
@@ -0,0 +1,79 @@
1
+ import { defineComponent as b, ref as m, computed as y, watch as w, createVNode as o } from "vue";
2
+ import { getClassNameMixin as k } from "../../_utils/config.js";
3
+ const D = /* @__PURE__ */ b({
4
+ name: "ColorPickerSlider",
5
+ props: {
6
+ /** 0-100 的位置百分比 */
7
+ value: {
8
+ type: Number,
9
+ required: !0
10
+ },
11
+ /** 滑轨背景(CSS background 值) */
12
+ background: {
13
+ type: String,
14
+ required: !0
15
+ },
16
+ disabled: {
17
+ type: Boolean,
18
+ default: !1
19
+ },
20
+ /** 无障碍名称,由父组件传入已本地化的文案 */
21
+ ariaLabel: {
22
+ type: String
23
+ }
24
+ },
25
+ emits: {
26
+ change: (t) => !0
27
+ },
28
+ setup(t, {
29
+ emit: l
30
+ }) {
31
+ const n = k("color-picker"), u = m(), i = m(!1), f = y(() => ({
32
+ left: `${t.value}%`
33
+ })), s = (e) => {
34
+ const a = u.value;
35
+ if (!a || t.disabled) return;
36
+ const r = a.getBoundingClientRect();
37
+ if (!r.width) return;
38
+ const h = Math.min(Math.max(e - r.left, 0), r.width);
39
+ l("change", h / r.width * 100);
40
+ }, c = (e) => {
41
+ s(e.clientX);
42
+ }, d = () => {
43
+ i.value = !1, document.removeEventListener("mousemove", c), document.removeEventListener("mouseup", d);
44
+ }, v = (e) => {
45
+ t.disabled || (e.preventDefault(), i.value = !0, s(e.clientX), document.addEventListener("mousemove", c), document.addEventListener("mouseup", d));
46
+ }, g = (e) => {
47
+ if (t.disabled) return;
48
+ const a = e.shiftKey ? 10 : 1;
49
+ e.key === "ArrowLeft" || e.key === "ArrowDown" ? (e.preventDefault(), l("change", Math.max(t.value - a, 0))) : (e.key === "ArrowRight" || e.key === "ArrowUp") && (e.preventDefault(), l("change", Math.min(t.value + a, 100)));
50
+ };
51
+ return w(() => t.disabled, (e) => {
52
+ e && d();
53
+ }), () => o("div", {
54
+ class: [n.element("slider"), {
55
+ [n.is("dragging")]: i.value
56
+ }],
57
+ role: "slider",
58
+ "aria-label": t.ariaLabel,
59
+ "aria-valuemin": 0,
60
+ "aria-valuemax": 100,
61
+ "aria-valuenow": Math.round(t.value),
62
+ tabindex: t.disabled ? -1 : 0,
63
+ onMousedown: v,
64
+ onKeydown: g
65
+ }, [o("div", {
66
+ ref: u,
67
+ class: n.element("slider-track"),
68
+ style: {
69
+ background: t.background
70
+ }
71
+ }, [o("div", {
72
+ class: n.element("slider-handler"),
73
+ style: f.value
74
+ }, null)])]);
75
+ }
76
+ });
77
+ export {
78
+ D as default
79
+ };
@@ -0,0 +1,8 @@
1
+ import o from "./ColorPicker.js";
2
+ import { generateComponent as r } from "../../_utils/vue-eco.js";
3
+ import { getComponentPrefix as e } from "../../_utils/config.js";
4
+ const n = r(e("ColorPicker"), o);
5
+ export {
6
+ n as ColorPicker,
7
+ n as default
8
+ };