@chenzy-design/core 0.3.1 → 0.4.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 (283) hide show
  1. package/dist/ai-chat-dialogue.d.ts +300 -0
  2. package/dist/ai-chat-dialogue.d.ts.map +1 -0
  3. package/dist/ai-chat-dialogue.js +699 -0
  4. package/dist/ai-chat-dialogue.js.map +1 -0
  5. package/dist/ai-chat-dialogue.test.d.ts +2 -0
  6. package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
  7. package/dist/ai-chat-dialogue.test.js +338 -0
  8. package/dist/ai-chat-dialogue.test.js.map +1 -0
  9. package/dist/ai-chat-input.d.ts +191 -0
  10. package/dist/ai-chat-input.d.ts.map +1 -0
  11. package/dist/ai-chat-input.js +274 -0
  12. package/dist/ai-chat-input.js.map +1 -0
  13. package/dist/ai-chat-input.test.d.ts +2 -0
  14. package/dist/ai-chat-input.test.d.ts.map +1 -0
  15. package/dist/ai-chat-input.test.js +339 -0
  16. package/dist/ai-chat-input.test.js.map +1 -0
  17. package/dist/audio-player.d.ts +154 -0
  18. package/dist/audio-player.d.ts.map +1 -0
  19. package/dist/audio-player.js +254 -0
  20. package/dist/audio-player.js.map +1 -0
  21. package/dist/audio-player.test.d.ts +2 -0
  22. package/dist/audio-player.test.d.ts.map +1 -0
  23. package/dist/audio-player.test.js +275 -0
  24. package/dist/audio-player.test.js.map +1 -0
  25. package/dist/back-top.d.ts +4 -1
  26. package/dist/back-top.d.ts.map +1 -1
  27. package/dist/back-top.js +5 -2
  28. package/dist/back-top.js.map +1 -1
  29. package/dist/back-top.test.js +3 -2
  30. package/dist/back-top.test.js.map +1 -1
  31. package/dist/calendar.d.ts +132 -44
  32. package/dist/calendar.d.ts.map +1 -1
  33. package/dist/calendar.js +413 -70
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/calendar.test.js +160 -76
  36. package/dist/calendar.test.js.map +1 -1
  37. package/dist/chat.d.ts +172 -0
  38. package/dist/chat.d.ts.map +1 -0
  39. package/dist/chat.js +210 -0
  40. package/dist/chat.js.map +1 -0
  41. package/dist/chat.test.d.ts +2 -0
  42. package/dist/chat.test.d.ts.map +1 -0
  43. package/dist/chat.test.js +181 -0
  44. package/dist/chat.test.js.map +1 -0
  45. package/dist/code-highlight.d.ts +30 -0
  46. package/dist/code-highlight.d.ts.map +1 -0
  47. package/dist/code-highlight.js +37 -0
  48. package/dist/code-highlight.js.map +1 -0
  49. package/dist/code-highlight.test.d.ts +2 -0
  50. package/dist/code-highlight.test.d.ts.map +1 -0
  51. package/dist/code-highlight.test.js +36 -0
  52. package/dist/code-highlight.test.js.map +1 -0
  53. package/dist/collapsible.d.ts +41 -0
  54. package/dist/collapsible.d.ts.map +1 -0
  55. package/dist/collapsible.js +33 -0
  56. package/dist/collapsible.js.map +1 -0
  57. package/dist/collapsible.test.d.ts +2 -0
  58. package/dist/collapsible.test.d.ts.map +1 -0
  59. package/dist/collapsible.test.js +57 -0
  60. package/dist/collapsible.test.js.map +1 -0
  61. package/dist/color-value.d.ts +60 -0
  62. package/dist/color-value.d.ts.map +1 -0
  63. package/dist/color-value.js +165 -0
  64. package/dist/color-value.js.map +1 -0
  65. package/dist/color-value.test.d.ts +2 -0
  66. package/dist/color-value.test.d.ts.map +1 -0
  67. package/dist/color-value.test.js +104 -0
  68. package/dist/color-value.test.js.map +1 -0
  69. package/dist/config-provider.d.ts +76 -37
  70. package/dist/config-provider.d.ts.map +1 -1
  71. package/dist/config-provider.js +107 -32
  72. package/dist/config-provider.js.map +1 -1
  73. package/dist/config-provider.test.js +123 -60
  74. package/dist/config-provider.test.js.map +1 -1
  75. package/dist/cropper.d.ts +164 -0
  76. package/dist/cropper.d.ts.map +1 -0
  77. package/dist/cropper.js +841 -0
  78. package/dist/cropper.js.map +1 -0
  79. package/dist/cropper.test.d.ts +2 -0
  80. package/dist/cropper.test.d.ts.map +1 -0
  81. package/dist/cropper.test.js +259 -0
  82. package/dist/cropper.test.js.map +1 -0
  83. package/dist/drag-move.d.ts +119 -0
  84. package/dist/drag-move.d.ts.map +1 -0
  85. package/dist/drag-move.js +237 -0
  86. package/dist/drag-move.js.map +1 -0
  87. package/dist/drag-move.test.d.ts +2 -0
  88. package/dist/drag-move.test.d.ts.map +1 -0
  89. package/dist/drag-move.test.js +304 -0
  90. package/dist/drag-move.test.js.map +1 -0
  91. package/dist/editable.d.ts +24 -4
  92. package/dist/editable.d.ts.map +1 -1
  93. package/dist/editable.js +18 -0
  94. package/dist/editable.js.map +1 -1
  95. package/dist/editable.test.js +55 -2
  96. package/dist/editable.test.js.map +1 -1
  97. package/dist/ellipsis.d.ts +13 -0
  98. package/dist/ellipsis.d.ts.map +1 -1
  99. package/dist/ellipsis.js +36 -0
  100. package/dist/ellipsis.js.map +1 -1
  101. package/dist/ellipsis.test.js +37 -1
  102. package/dist/ellipsis.test.js.map +1 -1
  103. package/dist/form-path.d.ts +19 -0
  104. package/dist/form-path.d.ts.map +1 -0
  105. package/dist/form-path.js +97 -0
  106. package/dist/form-path.js.map +1 -0
  107. package/dist/form-path.test.d.ts +2 -0
  108. package/dist/form-path.test.d.ts.map +1 -0
  109. package/dist/form-path.test.js +57 -0
  110. package/dist/form-path.test.js.map +1 -0
  111. package/dist/form-validate.d.ts +13 -0
  112. package/dist/form-validate.d.ts.map +1 -0
  113. package/dist/form-validate.js +204 -0
  114. package/dist/form-validate.js.map +1 -0
  115. package/dist/form.d.ts +91 -18
  116. package/dist/form.d.ts.map +1 -1
  117. package/dist/form.js +170 -115
  118. package/dist/form.js.map +1 -1
  119. package/dist/form.test.js +349 -76
  120. package/dist/form.test.js.map +1 -1
  121. package/dist/highlight.d.ts +42 -32
  122. package/dist/highlight.d.ts.map +1 -1
  123. package/dist/highlight.js +67 -41
  124. package/dist/highlight.js.map +1 -1
  125. package/dist/highlight.test.js +73 -32
  126. package/dist/highlight.test.js.map +1 -1
  127. package/dist/hotkeys.d.ts +151 -0
  128. package/dist/hotkeys.d.ts.map +1 -0
  129. package/dist/hotkeys.js +188 -0
  130. package/dist/hotkeys.js.map +1 -0
  131. package/dist/hotkeys.test.d.ts +2 -0
  132. package/dist/hotkeys.test.d.ts.map +1 -0
  133. package/dist/hotkeys.test.js +170 -0
  134. package/dist/hotkeys.test.js.map +1 -0
  135. package/dist/index.d.ts +33 -17
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +32 -13
  138. package/dist/index.js.map +1 -1
  139. package/dist/input.d.ts +34 -0
  140. package/dist/input.d.ts.map +1 -0
  141. package/dist/input.js +54 -0
  142. package/dist/input.js.map +1 -0
  143. package/dist/input.test.d.ts +2 -0
  144. package/dist/input.test.d.ts.map +1 -0
  145. package/dist/input.test.js +56 -0
  146. package/dist/input.test.js.map +1 -0
  147. package/dist/markdown-render.d.ts +49 -0
  148. package/dist/markdown-render.d.ts.map +1 -0
  149. package/dist/markdown-render.js +61 -0
  150. package/dist/markdown-render.js.map +1 -0
  151. package/dist/markdown-render.test.d.ts +2 -0
  152. package/dist/markdown-render.test.d.ts.map +1 -0
  153. package/dist/markdown-render.test.js +106 -0
  154. package/dist/markdown-render.test.js.map +1 -0
  155. package/dist/notification.d.ts +40 -31
  156. package/dist/notification.d.ts.map +1 -1
  157. package/dist/notification.js +86 -70
  158. package/dist/notification.js.map +1 -1
  159. package/dist/notification.test.js +62 -39
  160. package/dist/notification.test.js.map +1 -1
  161. package/dist/numeral.d.ts +32 -0
  162. package/dist/numeral.d.ts.map +1 -0
  163. package/dist/numeral.js +67 -0
  164. package/dist/numeral.js.map +1 -0
  165. package/dist/numeral.test.d.ts +2 -0
  166. package/dist/numeral.test.d.ts.map +1 -0
  167. package/dist/numeral.test.js +59 -0
  168. package/dist/numeral.test.js.map +1 -0
  169. package/dist/overflow-list.d.ts +9 -40
  170. package/dist/overflow-list.d.ts.map +1 -1
  171. package/dist/overflow-list.js +9 -70
  172. package/dist/overflow-list.js.map +1 -1
  173. package/dist/overflow-list.test.js +1 -122
  174. package/dist/overflow-list.test.js.map +1 -1
  175. package/dist/pagination.d.ts +17 -0
  176. package/dist/pagination.d.ts.map +1 -1
  177. package/dist/pagination.js +48 -0
  178. package/dist/pagination.js.map +1 -1
  179. package/dist/pagination.test.js +40 -1
  180. package/dist/pagination.test.js.map +1 -1
  181. package/dist/pincode.d.ts +79 -0
  182. package/dist/pincode.d.ts.map +1 -0
  183. package/dist/pincode.js +119 -0
  184. package/dist/pincode.js.map +1 -0
  185. package/dist/pincode.test.d.ts +2 -0
  186. package/dist/pincode.test.d.ts.map +1 -0
  187. package/dist/pincode.test.js +151 -0
  188. package/dist/pincode.test.js.map +1 -0
  189. package/dist/progress.d.ts +32 -30
  190. package/dist/progress.d.ts.map +1 -1
  191. package/dist/progress.js +257 -64
  192. package/dist/progress.js.map +1 -1
  193. package/dist/progress.test.js +50 -47
  194. package/dist/progress.test.js.map +1 -1
  195. package/dist/resizable.d.ts +200 -0
  196. package/dist/resizable.d.ts.map +1 -0
  197. package/dist/resizable.js +329 -0
  198. package/dist/resizable.js.map +1 -0
  199. package/dist/resizable.test.d.ts +2 -0
  200. package/dist/resizable.test.d.ts.map +1 -0
  201. package/dist/resizable.test.js +302 -0
  202. package/dist/resizable.test.js.map +1 -0
  203. package/dist/scroll-list.d.ts +69 -62
  204. package/dist/scroll-list.d.ts.map +1 -1
  205. package/dist/scroll-list.js +103 -144
  206. package/dist/scroll-list.js.map +1 -1
  207. package/dist/scroll-list.test.js +100 -110
  208. package/dist/scroll-list.test.js.map +1 -1
  209. package/dist/sidebar.d.ts +46 -0
  210. package/dist/sidebar.d.ts.map +1 -0
  211. package/dist/sidebar.js +65 -0
  212. package/dist/sidebar.js.map +1 -0
  213. package/dist/sidebar.test.d.ts +2 -0
  214. package/dist/sidebar.test.d.ts.map +1 -0
  215. package/dist/sidebar.test.js +88 -0
  216. package/dist/sidebar.test.js.map +1 -0
  217. package/dist/spin.d.ts +5 -5
  218. package/dist/spin.d.ts.map +1 -1
  219. package/dist/spin.js +13 -39
  220. package/dist/spin.js.map +1 -1
  221. package/dist/spin.test.js +2 -26
  222. package/dist/spin.test.js.map +1 -1
  223. package/dist/toast.d.ts +33 -30
  224. package/dist/toast.d.ts.map +1 -1
  225. package/dist/toast.js +77 -72
  226. package/dist/toast.js.map +1 -1
  227. package/dist/toast.test.js +63 -37
  228. package/dist/toast.test.js.map +1 -1
  229. package/dist/tree.d.ts +22 -5
  230. package/dist/tree.d.ts.map +1 -1
  231. package/dist/tree.js +61 -9
  232. package/dist/tree.js.map +1 -1
  233. package/dist/tree.test.js +72 -1
  234. package/dist/tree.test.js.map +1 -1
  235. package/dist/user-guide.d.ts +73 -0
  236. package/dist/user-guide.d.ts.map +1 -0
  237. package/dist/user-guide.js +95 -0
  238. package/dist/user-guide.js.map +1 -0
  239. package/dist/user-guide.test.d.ts +2 -0
  240. package/dist/user-guide.test.d.ts.map +1 -0
  241. package/dist/user-guide.test.js +109 -0
  242. package/dist/user-guide.test.js.map +1 -0
  243. package/dist/video-player.d.ts +196 -0
  244. package/dist/video-player.d.ts.map +1 -0
  245. package/dist/video-player.js +461 -0
  246. package/dist/video-player.js.map +1 -0
  247. package/dist/video-player.test.d.ts +2 -0
  248. package/dist/video-player.test.d.ts.map +1 -0
  249. package/dist/video-player.test.js +435 -0
  250. package/dist/video-player.test.js.map +1 -0
  251. package/package.json +17 -1
  252. package/dist/banner.d.ts +0 -19
  253. package/dist/banner.d.ts.map +0 -1
  254. package/dist/banner.js +0 -20
  255. package/dist/banner.js.map +0 -1
  256. package/dist/banner.test.d.ts +0 -2
  257. package/dist/banner.test.d.ts.map +0 -1
  258. package/dist/banner.test.js +0 -29
  259. package/dist/banner.test.js.map +0 -1
  260. package/dist/breakpoints.d.ts +0 -30
  261. package/dist/breakpoints.d.ts.map +0 -1
  262. package/dist/breakpoints.js +0 -45
  263. package/dist/breakpoints.js.map +0 -1
  264. package/dist/breakpoints.test.d.ts +0 -2
  265. package/dist/breakpoints.test.d.ts.map +0 -1
  266. package/dist/breakpoints.test.js +0 -46
  267. package/dist/breakpoints.test.js.map +0 -1
  268. package/dist/lottie-icon.d.ts +0 -88
  269. package/dist/lottie-icon.d.ts.map +0 -1
  270. package/dist/lottie-icon.js +0 -84
  271. package/dist/lottie-icon.js.map +0 -1
  272. package/dist/lottie-icon.test.d.ts +0 -2
  273. package/dist/lottie-icon.test.d.ts.map +0 -1
  274. package/dist/lottie-icon.test.js +0 -88
  275. package/dist/lottie-icon.test.js.map +0 -1
  276. package/dist/sider.d.ts +0 -26
  277. package/dist/sider.d.ts.map +0 -1
  278. package/dist/sider.js +0 -55
  279. package/dist/sider.js.map +0 -1
  280. package/dist/sider.test.d.ts +0 -2
  281. package/dist/sider.test.d.ts.map +0 -1
  282. package/dist/sider.test.js +0 -29
  283. package/dist/sider.test.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { collapsibleShouldRender, collapsibleCollapsedHeight, } from './collapsible.js';
3
+ function input(partial) {
4
+ return {
5
+ isOpen: false,
6
+ keepDOM: false,
7
+ lazyRender: false,
8
+ collapseHeight: 0,
9
+ visible: false,
10
+ hasBeenRendered: false,
11
+ ...partial,
12
+ };
13
+ }
14
+ describe('collapsibleShouldRender', () => {
15
+ it('默认(全 false):完全折叠不渲染', () => {
16
+ expect(collapsibleShouldRender(input({}))).toBe(false);
17
+ });
18
+ it('isOpen=true:渲染', () => {
19
+ expect(collapsibleShouldRender(input({ isOpen: true }))).toBe(true);
20
+ });
21
+ it('visible=true(折叠过渡进行中):仍渲染', () => {
22
+ expect(collapsibleShouldRender(input({ visible: true }))).toBe(true);
23
+ });
24
+ it('keepDOM 非 lazyRender:折叠也常驻', () => {
25
+ expect(collapsibleShouldRender(input({ keepDOM: true }))).toBe(true);
26
+ });
27
+ it('keepDOM + lazyRender:首展前(hasBeenRendered=false)不渲染', () => {
28
+ expect(collapsibleShouldRender(input({ keepDOM: true, lazyRender: true }))).toBe(false);
29
+ });
30
+ it('keepDOM + lazyRender:首展后(hasBeenRendered=true)常驻', () => {
31
+ expect(collapsibleShouldRender(input({ keepDOM: true, lazyRender: true, hasBeenRendered: true }))).toBe(true);
32
+ });
33
+ it('keepDOM + lazyRender + isOpen:即使 hasBeenRendered=false,isOpen 也强制渲染', () => {
34
+ expect(collapsibleShouldRender(input({ keepDOM: true, lazyRender: true, isOpen: true }))).toBe(true);
35
+ });
36
+ it('collapseHeight>0:折叠仍渲染(保留部分高度)', () => {
37
+ expect(collapsibleShouldRender(input({ collapseHeight: 40 }))).toBe(true);
38
+ });
39
+ it('lazyRender 无 keepDOM:折叠不渲染,isOpen 才渲染', () => {
40
+ expect(collapsibleShouldRender(input({ lazyRender: true }))).toBe(false);
41
+ expect(collapsibleShouldRender(input({ lazyRender: true, isOpen: true }))).toBe(true);
42
+ });
43
+ });
44
+ describe('collapsibleCollapsedHeight', () => {
45
+ it('非自适应:直接返回 collapseHeight', () => {
46
+ expect(collapsibleCollapsedHeight(40, false, 200)).toBe(40);
47
+ expect(collapsibleCollapsedHeight(40, false, 10)).toBe(40);
48
+ });
49
+ it('自适应:不超过实测内容高度', () => {
50
+ expect(collapsibleCollapsedHeight(40, true, 200)).toBe(40);
51
+ expect(collapsibleCollapsedHeight(40, true, 10)).toBe(10);
52
+ });
53
+ it('自适应但未测量(domHeight=0):返回 0', () => {
54
+ expect(collapsibleCollapsedHeight(40, true, 0)).toBe(0);
55
+ });
56
+ });
57
+ //# sourceMappingURL=collapsible.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.test.js","sourceRoot":"","sources":["../src/collapsible.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * ColorPicker ColorValue 三态互转(framework-agnostic),严格对齐 Semi Design
3
+ * semi-foundation/colorPicker(interface + utils/convert)。
4
+ *
5
+ * 与 color.ts 的 Hsv(s/v 归一 0-1)不同:此处 HsvaColor 的 s/v 为 0-100 百分比、
6
+ * h 为 0-360、a 为 0-1,忠实镜像 Semi 的 HsvaColor 语义,避免选色器内部反复换算失真。
7
+ *
8
+ * ColorValue = { hsva, rgba, hex } 三态同源,任一态变更经此层同步另两态。
9
+ */
10
+ export interface HsvaColor {
11
+ h: number;
12
+ s: number;
13
+ v: number;
14
+ a: number;
15
+ }
16
+ export interface RgbaColor {
17
+ r: number;
18
+ g: number;
19
+ b: number;
20
+ a: number;
21
+ }
22
+ export type ColorValue = {
23
+ hsva: HsvaColor;
24
+ rgba: RgbaColor;
25
+ hex: string;
26
+ };
27
+ /** 面板内输入区可切换的颜色格式(对齐 Semi defaultFormat)。 */
28
+ export type ColorValueFormat = 'hex' | 'rgba' | 'hsva';
29
+ /** hex → RgbaColor(对齐 Semi hexToRgba,支持 #rgb/#rgba/#rrggbb/#rrggbbaa)。 */
30
+ export declare function hexToRgba(hex: string): RgbaColor;
31
+ /** RgbaColor → hex(对齐 Semi rgbaToHex:a===1 省略 alpha 段,小写)。 */
32
+ export declare function rgbaToHex({ r, g, b, a }: RgbaColor): string;
33
+ /** RgbaColor → HsvaColor(对齐 Semi rgbaToHsva,s/v 0-100)。 */
34
+ export declare function rgbaToHsva({ r, g, b, a }: RgbaColor): HsvaColor;
35
+ /** HsvaColor → RgbaColor(对齐 Semi hsvaToRgba)。 */
36
+ export declare function hsvaToRgba({ h, s, v, a }: HsvaColor): RgbaColor;
37
+ /** HsvaColor → hex。 */
38
+ export declare function hsvaToHex(hsva: HsvaColor): string;
39
+ /** hex → HsvaColor。 */
40
+ export declare function hexToHsva(hex: string): HsvaColor;
41
+ /** 从任一颜色态构造完整 ColorValue 三态(对齐 Semi foundation.handleChange 分支)。 */
42
+ export declare function colorValueFromHsva(hsva: HsvaColor): ColorValue;
43
+ export declare function colorValueFromRgba(rgba: RgbaColor): ColorValue;
44
+ export declare function colorValueFromHex(hex: string): ColorValue;
45
+ /** Semi 品牌绿默认 ColorValue(对齐 Semi defaultProps.defaultValue)。 */
46
+ export declare const DEFAULT_COLOR_VALUE: ColorValue;
47
+ /**
48
+ * 输入框显示串(对齐 Semi DataPartFoundation.getInputValue):
49
+ * hex → hex.slice(0,7);rgba → "r,g,b";hsva → "h,s,v"(均不含 alpha)。
50
+ */
51
+ export declare function colorValueToInputString(value: ColorValue, format: ColorValueFormat): string;
52
+ /**
53
+ * 解析输入框串为对应格式的颜色态(对齐 Semi getValueByInputValue + split)。
54
+ * 成功返回 {color, format},失败返回 null(不改值)。
55
+ */
56
+ export declare function parseColorInput(input: string, format: ColorValueFormat): {
57
+ color: HsvaColor | RgbaColor | string;
58
+ format: ColorValueFormat;
59
+ } | null;
60
+ //# sourceMappingURL=color-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-value.d.ts","sourceRoot":"","sources":["../src/color-value.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAYvD,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAkBhD;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAK3D;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAkB/D;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAe/D;AAED,uBAAuB;AACvB,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEjD;AAED,uBAAuB;AACvB,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAE9D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAEzD;AAED,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAU3F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GACvB;IAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CA+B5E"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * ColorPicker ColorValue 三态互转(framework-agnostic),严格对齐 Semi Design
3
+ * semi-foundation/colorPicker(interface + utils/convert)。
4
+ *
5
+ * 与 color.ts 的 Hsv(s/v 归一 0-1)不同:此处 HsvaColor 的 s/v 为 0-100 百分比、
6
+ * h 为 0-360、a 为 0-1,忠实镜像 Semi 的 HsvaColor 语义,避免选色器内部反复换算失真。
7
+ *
8
+ * ColorValue = { hsva, rgba, hex } 三态同源,任一态变更经此层同步另两态。
9
+ */
10
+ function round(n, digits = 0) {
11
+ const p = 10 ** digits;
12
+ return Math.round(n * p) / p;
13
+ }
14
+ function toHex2(n) {
15
+ const hex = Math.round(n).toString(16);
16
+ return hex.length < 2 ? '0' + hex : hex;
17
+ }
18
+ /** hex → RgbaColor(对齐 Semi hexToRgba,支持 #rgb/#rgba/#rrggbb/#rrggbbaa)。 */
19
+ export function hexToRgba(hex) {
20
+ let h = hex[0] === '#' ? hex.substring(1) : hex;
21
+ if (h.length === 3 || h.length === 4) {
22
+ h = h
23
+ .split('')
24
+ .map((c) => c + c)
25
+ .join('');
26
+ }
27
+ const hexToPercent = (str) => {
28
+ const decimal = parseInt(str, 16);
29
+ return isNaN(decimal) ? 1 : decimal / 255;
30
+ };
31
+ return {
32
+ r: parseInt(h.substring(0, 2), 16) || 0,
33
+ g: parseInt(h.substring(2, 4), 16) || 0,
34
+ b: parseInt(h.substring(4, 6), 16) || 0,
35
+ a: h.length >= 8 ? round(hexToPercent(h.substring(6, 8)), 2) : 1,
36
+ };
37
+ }
38
+ /** RgbaColor → hex(对齐 Semi rgbaToHex:a===1 省略 alpha 段,小写)。 */
39
+ export function rgbaToHex({ r, g, b, a }) {
40
+ const base = '#' + toHex2(r) + toHex2(g) + toHex2(b);
41
+ if (a === undefined || a === 1)
42
+ return base;
43
+ const alphaHex = toHex2(Math.round(a * 255));
44
+ return base + alphaHex;
45
+ }
46
+ /** RgbaColor → HsvaColor(对齐 Semi rgbaToHsva,s/v 0-100)。 */
47
+ export function rgbaToHsva({ r, g, b, a }) {
48
+ const max = Math.max(r, g, b);
49
+ const min = Math.min(r, g, b);
50
+ const delta = max - min;
51
+ let h = 0;
52
+ if (delta) {
53
+ if (max === r)
54
+ h = ((g - b) / delta) % 6;
55
+ else if (max === g)
56
+ h = (b - r) / delta + 2;
57
+ else
58
+ h = (r - g) / delta + 4;
59
+ h = round(h * 60);
60
+ if (h < 0)
61
+ h += 360;
62
+ }
63
+ return {
64
+ h,
65
+ s: max ? round((delta / max) * 100) : 0,
66
+ v: round((max / 255) * 100),
67
+ a,
68
+ };
69
+ }
70
+ /** HsvaColor → RgbaColor(对齐 Semi hsvaToRgba)。 */
71
+ export function hsvaToRgba({ h, s, v, a }) {
72
+ const hh = (h / 360) * 6;
73
+ const ss = s / 100;
74
+ const vv = v / 100;
75
+ const hi = Math.floor(hh);
76
+ const b = vv * (1 - ss);
77
+ const c = vv * (1 - (hh - hi) * ss);
78
+ const d = vv * (1 - (1 - hh + hi) * ss);
79
+ const mod = hi % 6;
80
+ return {
81
+ r: round([vv, c, b, b, d, vv][mod] * 255),
82
+ g: round([d, vv, vv, c, b, b][mod] * 255),
83
+ b: round([b, b, d, vv, vv, c][mod] * 255),
84
+ a: round(a, 2),
85
+ };
86
+ }
87
+ /** HsvaColor → hex。 */
88
+ export function hsvaToHex(hsva) {
89
+ return rgbaToHex(hsvaToRgba(hsva));
90
+ }
91
+ /** hex → HsvaColor。 */
92
+ export function hexToHsva(hex) {
93
+ return rgbaToHsva(hexToRgba(hex));
94
+ }
95
+ /** 从任一颜色态构造完整 ColorValue 三态(对齐 Semi foundation.handleChange 分支)。 */
96
+ export function colorValueFromHsva(hsva) {
97
+ return { hsva, rgba: hsvaToRgba(hsva), hex: hsvaToHex(hsva) };
98
+ }
99
+ export function colorValueFromRgba(rgba) {
100
+ return { rgba, hsva: rgbaToHsva(rgba), hex: rgbaToHex(rgba) };
101
+ }
102
+ export function colorValueFromHex(hex) {
103
+ return { hex, hsva: hexToHsva(hex), rgba: hexToRgba(hex) };
104
+ }
105
+ /** Semi 品牌绿默认 ColorValue(对齐 Semi defaultProps.defaultValue)。 */
106
+ export const DEFAULT_COLOR_VALUE = {
107
+ hsva: { h: 176, s: 71, v: 77, a: 1 },
108
+ rgba: { r: 57, g: 197, b: 187, a: 1 },
109
+ hex: '#39c5bb',
110
+ };
111
+ /**
112
+ * 输入框显示串(对齐 Semi DataPartFoundation.getInputValue):
113
+ * hex → hex.slice(0,7);rgba → "r,g,b";hsva → "h,s,v"(均不含 alpha)。
114
+ */
115
+ export function colorValueToInputString(value, format) {
116
+ if (format === 'rgba') {
117
+ const { r, g, b } = value.rgba;
118
+ return `${r},${g},${b}`;
119
+ }
120
+ if (format === 'hsva') {
121
+ const { h, s, v } = value.hsva;
122
+ return `${h},${s},${v}`;
123
+ }
124
+ return value.hex.slice(0, 7);
125
+ }
126
+ /**
127
+ * 解析输入框串为对应格式的颜色态(对齐 Semi getValueByInputValue + split)。
128
+ * 成功返回 {color, format},失败返回 null(不改值)。
129
+ */
130
+ export function parseColorInput(input, format) {
131
+ if (format === 'hex') {
132
+ let v = input.trim();
133
+ if (!v.startsWith('#'))
134
+ v = '#' + v;
135
+ if (/^#[0-9a-fA-F]{6,8}$/.test(v))
136
+ return { color: v, format: 'hex' };
137
+ return null;
138
+ }
139
+ const nums = (input.match(/-?\d*\.?\d+/g) ?? []).map(Number);
140
+ if (nums.length < 3)
141
+ return null;
142
+ const [c0, c1, c2] = nums;
143
+ if (format === 'rgba') {
144
+ return {
145
+ color: {
146
+ r: Math.min(255, Math.max(0, c0)),
147
+ g: Math.min(255, Math.max(0, c1)),
148
+ b: Math.min(255, Math.max(0, c2)),
149
+ a: 1,
150
+ },
151
+ format: 'rgba',
152
+ };
153
+ }
154
+ // hsva
155
+ return {
156
+ color: {
157
+ h: ((c0 % 360) + 360) % 360,
158
+ s: Math.min(100, Math.max(0, c1)),
159
+ v: Math.min(100, Math.max(0, c2)),
160
+ a: 1,
161
+ },
162
+ format: 'hsva',
163
+ };
164
+ }
165
+ //# sourceMappingURL=color-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-value.js","sourceRoot":"","sources":["../src/color-value.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,SAAS,KAAK,CAAC,CAAS,EAAE,MAAM,GAAG,CAAC;IAClC,MAAM,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC,GAAG,CAAC;aACF,KAAK,CAAC,EAAE,CAAC;aACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;QAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC;IAC5C,CAAC,CAAC;IACF,OAAO;QACL,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;QACvC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;QACvC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;QACvC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa;IACjD,MAAM,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,GAAG,QAAQ,CAAC;AACzB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,GAAG,KAAK,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;aACpC,IAAI,GAAG,KAAK,CAAC;YAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;;YACvC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,IAAI,GAAG,CAAC;IACtB,CAAC;IACD,OAAO;QACL,CAAC;QACD,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa;IAClD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IACnB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IACnB,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAE,GAAG,GAAG,CAAC;QAC1C,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,GAAG,CAAC;QAC1C,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,GAAG,CAAC;QAC1C,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KACf,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,IAAe;IAChD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAe;IAChD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;IACpC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;IACrC,GAAG,EAAE,SAAS;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAiB,EAAE,MAAwB;IACjF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;QAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;QAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,MAAwB;IAExB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACpC,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAgC,CAAC;IACtD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE;gBACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC,EAAE,CAAC;aACL;YACD,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IACD,OAAO;IACP,OAAO;QACL,KAAK,EAAE;YACL,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAC3B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,CAAC;SACL;QACD,MAAM,EAAE,MAAM;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=color-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-value.test.d.ts","sourceRoot":"","sources":["../src/color-value.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { hexToRgba, rgbaToHex, rgbaToHsva, hsvaToRgba, hexToHsva, hsvaToHex, colorValueFromHex, colorValueFromRgba, colorValueFromHsva, colorValueToInputString, parseColorInput, DEFAULT_COLOR_VALUE, } from './color-value.js';
3
+ describe('ColorValue: hex <-> rgba', () => {
4
+ it('hexToRgba 6-digit', () => {
5
+ expect(hexToRgba('#39c5bb')).toEqual({ r: 57, g: 197, b: 187, a: 1 });
6
+ });
7
+ it('hexToRgba 8-digit alpha', () => {
8
+ const r = hexToRgba('#39c5bb80');
9
+ expect(r.r).toBe(57);
10
+ expect(r.a).toBeCloseTo(0.5, 1);
11
+ });
12
+ it('hexToRgba 3-digit expands', () => {
13
+ expect(hexToRgba('#fff')).toEqual({ r: 255, g: 255, b: 255, a: 1 });
14
+ });
15
+ it('rgbaToHex a===1 omits alpha, lowercase', () => {
16
+ expect(rgbaToHex({ r: 57, g: 197, b: 187, a: 1 })).toBe('#39c5bb');
17
+ });
18
+ it('rgbaToHex a<1 appends alpha', () => {
19
+ expect(rgbaToHex({ r: 0, g: 0, b: 0, a: 0.5 })).toBe('#00000080');
20
+ });
21
+ });
22
+ describe('ColorValue: Semi hsva (s/v 0-100) round-trips', () => {
23
+ it('hexToHsva #39c5bb matches Semi default hsva', () => {
24
+ expect(hexToHsva('#39c5bb')).toEqual({ h: 176, s: 71, v: 77, a: 1 });
25
+ });
26
+ it('white', () => {
27
+ expect(rgbaToHsva({ r: 255, g: 255, b: 255, a: 1 })).toEqual({ h: 0, s: 0, v: 100, a: 1 });
28
+ });
29
+ it('red hue 0, s/v 100', () => {
30
+ expect(rgbaToHsva({ r: 255, g: 0, b: 0, a: 1 })).toEqual({ h: 0, s: 100, v: 100, a: 1 });
31
+ });
32
+ it('green hue 120', () => {
33
+ expect(rgbaToHsva({ r: 0, g: 255, b: 0, a: 1 }).h).toBe(120);
34
+ });
35
+ it('hsva -> rgba round-trip', () => {
36
+ const rgba = hsvaToRgba({ h: 176, s: 71, v: 77, a: 1 });
37
+ expect(rgba.r).toBe(57);
38
+ expect(rgba.g).toBeGreaterThanOrEqual(196);
39
+ expect(rgba.b).toBeGreaterThanOrEqual(186);
40
+ });
41
+ it('hsva -> hex (Semi 品牌绿,含 ±1 byte 舍入)', () => {
42
+ // hsvaToHex = rgbaToHex(hsvaToRgba);#39c5bb 往返因 round 得 #39c4bb(g 少 1,Semi 同)。
43
+ const hex = hsvaToHex({ h: 176, s: 71, v: 77, a: 1 });
44
+ expect(hex).toMatch(/^#39c[45]bb$/);
45
+ });
46
+ });
47
+ describe('ColorValue: three-state constructors', () => {
48
+ it('fromHex fills all three states', () => {
49
+ const cv = colorValueFromHex('#39c5bb');
50
+ expect(cv.hex).toBe('#39c5bb');
51
+ expect(cv.rgba).toEqual({ r: 57, g: 197, b: 187, a: 1 });
52
+ expect(cv.hsva).toEqual({ h: 176, s: 71, v: 77, a: 1 });
53
+ });
54
+ it('fromRgba fills hex + hsva', () => {
55
+ const cv = colorValueFromRgba({ r: 255, g: 0, b: 0, a: 1 });
56
+ expect(cv.hex).toBe('#ff0000');
57
+ expect(cv.hsva.h).toBe(0);
58
+ });
59
+ it('fromHsva fills rgba + hex', () => {
60
+ const cv = colorValueFromHsva({ h: 0, s: 100, v: 100, a: 1 });
61
+ expect(cv.rgba).toEqual({ r: 255, g: 0, b: 0, a: 1 });
62
+ expect(cv.hex).toBe('#ff0000');
63
+ });
64
+ it('DEFAULT is Semi brand green', () => {
65
+ expect(DEFAULT_COLOR_VALUE.hex).toBe('#39c5bb');
66
+ expect(DEFAULT_COLOR_VALUE.hsva).toEqual({ h: 176, s: 71, v: 77, a: 1 });
67
+ });
68
+ });
69
+ describe('ColorValue: input string (Semi getInputValue)', () => {
70
+ const cv = colorValueFromHex('#39c5bbff');
71
+ it('hex slices to 7 chars', () => {
72
+ expect(colorValueToInputString(cv, 'hex')).toBe('#39c5bb');
73
+ });
74
+ it('rgba is r,g,b', () => {
75
+ expect(colorValueToInputString(cv, 'rgba')).toBe('57,197,187');
76
+ });
77
+ it('hsva is h,s,v', () => {
78
+ expect(colorValueToInputString(cv, 'hsva')).toBe('176,71,77');
79
+ });
80
+ });
81
+ describe('ColorValue: parseColorInput', () => {
82
+ it('parses hex without #', () => {
83
+ expect(parseColorInput('39c5bb', 'hex')).toEqual({ color: '#39c5bb', format: 'hex' });
84
+ });
85
+ it('rejects short hex', () => {
86
+ expect(parseColorInput('#abc', 'hex')).toBeNull();
87
+ });
88
+ it('parses rgba', () => {
89
+ expect(parseColorInput('57,197,187', 'rgba')).toEqual({
90
+ color: { r: 57, g: 197, b: 187, a: 1 },
91
+ format: 'rgba',
92
+ });
93
+ });
94
+ it('parses hsva', () => {
95
+ expect(parseColorInput('176,71,77', 'hsva')).toEqual({
96
+ color: { h: 176, s: 71, v: 77, a: 1 },
97
+ format: 'hsva',
98
+ });
99
+ });
100
+ it('returns null when too few numbers', () => {
101
+ expect(parseColorInput('57,197', 'rgba')).toBeNull();
102
+ });
103
+ });
104
+ //# sourceMappingURL=color-value.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-value.test.js","sourceRoot":"","sources":["../src/color-value.test.ts"],"names":[],"mappings":"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"}
@@ -1,57 +1,96 @@
1
1
  /**
2
- * createConfigProvider helpers — framework-agnostic config merge logic.
3
- * Pure functions only: shallow-merge a child config over a parent so that
4
- * `undefined` fields inherit from the parent (nearest-wins). The svelte layer
5
- * owns context injection. See specs/components/other/ConfigProvider.spec.md §3.
2
+ * ConfigProvider helpers — framework-agnostic config merge + responsive utils.
3
+ *
4
+ * 严格对齐 Semi ConfigProvider(packages/semi-ui/configProvider):ConfigProvider
5
+ * 纯逻辑组件,仅下发 direction / timeZone / getPopupContainer 等跨组件公共配置,并提供
6
+ * 响应式断点订阅能力。locale 维度由 svelte 层的 locale context 承担(不进 core 纯配置)。
7
+ *
8
+ * 纯函数 / 纯类型:context 注入与 matchMedia 生命周期由 svelte 层拥有;此处仅提供
9
+ * 可测的合并逻辑、断点常量与 registerMediaQuery 工具(对齐 semi `_utils`)。
6
10
  */
7
11
  /**
8
- * 主题:'auto' 跟随系统 prefers-color-scheme 自动在 light/dark 间切换。
9
- * 'light' | 'dark' 行为完全不变(向后兼容)。
12
+ * 响应式断点键(xs..xxl),与 Semi Design / Ant Design 六档一致。
13
+ * 断点系统的类型与常量归属此处(config-provider 是响应式配置的落点)。
10
14
  */
11
- export type ConfigTheme = 'light' | 'dark' | 'auto';
12
- /** 实际落到 DOM 的主题(auto 解析后只会是这两者之一)。 */
13
- export type AppliedTheme = 'light' | 'dark';
15
+ export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
16
+ /** 各断点的 min-width(px)。xs 0(基础层无媒体查询)。对齐 Semi 断点尺寸。 */
17
+ export declare const BREAKPOINTS: Record<Breakpoint, number>;
18
+ /** 文本方向。对齐 Semi direction。 */
14
19
  export type ConfigDir = 'ltr' | 'rtl';
15
- export type ConfigSize = 'small' | 'default' | 'large';
20
+ /** 时区标识:数字(距 UTC 偏移小时)或字符串(GMT±/IANA)。对齐 Semi timeZone。 */
21
+ export type ConfigTimeZone = string | number;
22
+ /** 断点 → media query 字符串映射。对齐 Semi ResponsiveMap。 */
23
+ export interface ResponsiveMap {
24
+ xs: string;
25
+ sm: string;
26
+ md: string;
27
+ lg: string;
28
+ xl: string;
29
+ xxl: string;
30
+ }
31
+ /** 各断点当前命中情况。对齐 Semi BreakpointScreens。 */
32
+ export interface BreakpointScreens {
33
+ xs: boolean;
34
+ sm: boolean;
35
+ md: boolean;
36
+ lg: boolean;
37
+ xl: boolean;
38
+ xxl: boolean;
39
+ }
40
+ /** 订阅回调:拿到完整 screens 映射。对齐 Semi OnBreakpointScreensCallback。 */
41
+ export type OnBreakpointScreensCallback = (screens: BreakpointScreens) => void;
42
+ /** 订阅回调:拿到单个断点变化。对齐 Semi OnBreakpointChangeCallback。 */
43
+ export type OnBreakpointChangeCallback = (screen: Breakpoint, match: boolean) => void;
44
+ /**
45
+ * 默认断点配置。对齐 Semi defaultResponsiveMap,可经
46
+ * `ConfigProvider.defaultResponsiveMap` 获取。
47
+ */
48
+ export declare const defaultResponsiveMap: ResponsiveMap;
49
+ /** 全部断点均未命中的初值。 */
50
+ export declare const EMPTY_SCREENS: BreakpointScreens;
16
51
  /**
17
- * 降级动画开关:true 强制降级、false 强制开启、'auto' 跟随系统
18
- * prefers-reduced-motion。
52
+ * ConfigProvider 传入的部分配置(undefined = 继承父级)。
53
+ * 对齐 Semi ConfigProviderProps 中参与跨组件继承的纯配置字段。
19
54
  */
20
- export type ReducedMotionInput = boolean | 'auto';
21
- /** A partial config as passed to a ConfigProvider (undefined = inherit). */
22
55
  export interface ConfigInput {
23
- theme?: ConfigTheme;
24
- dir?: ConfigDir;
25
- size?: ConfigSize;
26
- zIndexBase?: number;
27
- transition?: boolean;
28
- reducedMotion?: ReducedMotionInput;
56
+ direction?: ConfigDir;
57
+ timeZone?: ConfigTimeZone;
29
58
  }
30
- /** A fully-resolved config (every field present). */
59
+ /** 完全解析后的配置(每个字段都存在)。 */
31
60
  export interface ResolvedConfig {
32
- theme: ConfigTheme;
33
- dir: ConfigDir;
34
- size: ConfigSize;
35
- zIndexBase: number;
36
- transition: boolean;
37
- reducedMotion: ReducedMotionInput;
61
+ direction: ConfigDir;
62
+ timeZone: ConfigTimeZone | undefined;
38
63
  }
64
+ /** 默认配置。对齐 Semi defaultProps(direction: 'ltr')。 */
39
65
  export declare const DEFAULT_CONFIG: ResolvedConfig;
40
66
  /**
41
- * Shallow-merge a child config over a resolved parent: each field of `child`
42
- * overrides the parent only when explicitly provided (not undefined), so
43
- * omitting a field inherits the parent's value.
67
+ * 把子配置浅合并到已解析的父配置:子字段仅在显式提供(非 undefined)时覆盖父级,
68
+ * 省略字段继承父级值(就近 wins)。对齐 Semi 嵌套 Context 的继承语义。
44
69
  */
45
70
  export declare function mergeConfig(parent: ResolvedConfig, child: ConfigInput): ResolvedConfig;
46
71
  /**
47
- * 把配置主题解析为实际落到 DOM 的主题:'auto' 时跟随系统是否偏好暗色,
48
- * 其余原样返回。纯函数(红线 #2),不读 window,系统态由调用方注入。
72
+ * timeZone(数字=距 UTC 的小时偏移 | 'GMT±HH:mm')解析成「分钟偏移」;无法解析(含具名
73
+ * IANA 标识、非法串)返回 undefined,调用方据此回退到不做时区转换(用本地时区)。
49
74
  */
50
- export declare function resolveAppliedTheme(theme: ConfigTheme, systemPrefersDark: boolean): AppliedTheme;
75
+ export declare function parseTimeZoneOffsetMinutes(tz: string | number): number | undefined;
76
+ /**
77
+ * 把一个绝对时刻(Date)转成「目标时区墙上时间」对应的 Date —— 该 Date 的本地字段
78
+ * (getHours/getFullYear…) 即目标时区的墙上时间。对齐 Semi utcToZonedTime(固定偏移场景):
79
+ * 消费方随后用现有的本地字段序列化(getHours 等 / Intl 不传 timeZone)即得到该时区的显示文案。
80
+ * timeZone 无法解析(具名 IANA / 非法)时原样返回入参 Date,等价于不做时区转换。
81
+ */
82
+ export declare function zonedWallTime(date: Date, tz: string | number | undefined): Date;
83
+ interface RegisterMediaQueryOption {
84
+ match?: (e: MediaQueryList | MediaQueryListEvent) => void;
85
+ unmatch?: (e: MediaQueryList | MediaQueryListEvent) => void;
86
+ /** true 时注册后立即以当前状态回调一次。对齐 Semi callInInit 默认 true。 */
87
+ callInInit?: boolean;
88
+ }
51
89
  /**
52
- * 解析最终是否降级动画:显式 boolean 优先,'auto' 跟随系统
53
- * prefers-reduced-motion。纯函数(红线 #2),系统态由调用方注入。
54
- * 返回 true 表示应降级(reduce)。
90
+ * 注册 media query 的 match/unmatch 回调,返回注销函数。
91
+ * 逐字对齐 Semi `_utils` 的 registerMediaQuery:SSR(无 window)返回 noop;
92
+ * 优先 addEventListener,回退老浏览器 addListener;callInInit 默认立即回调一次。
55
93
  */
56
- export declare function resolveReducedMotion(input: ReducedMotionInput, systemReduced: boolean): boolean;
94
+ export declare function registerMediaQuery(media: string, { match, unmatch, callInInit }: RegisterMediaQueryOption): () => void;
95
+ export {};
57
96
  //# sourceMappingURL=config-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-provider.d.ts","sourceRoot":"","sources":["../src/config-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACpD,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AACtC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AACvD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAED,eAAO,MAAM,cAAc,EAAE,cAO5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAStF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,GAAG,YAAY,CAGhG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAG/F"}
1
+ {"version":3,"file":"config-provider.d.ts","sourceRoot":"","sources":["../src/config-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAElE,wDAAwD;AACxD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOlD,CAAC;AAEF,8BAA8B;AAC9B,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtC,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,OAAO,CAAC;CACd;AAED,gEAAgE;AAChE,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAE/E,wDAAwD;AACxD,MAAM,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAEtF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAOlC,CAAC;AAEF,mBAAmB;AACnB,eAAO,MAAM,aAAa,EAAE,iBAO3B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,yBAAyB;AACzB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;CACtC;AAED,mDAAmD;AACnD,eAAO,MAAM,cAAc,EAAE,cAG5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAKtF;AAWD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAUlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAS/E;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,GAAG,mBAAmB,KAAK,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,GAAG,mBAAmB,KAAK,IAAI,CAAC;IAC5D,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,EAAE,KAAK,EAAE,OAAO,EAAE,UAAiB,EAAE,EAAE,wBAAwB,GAC9D,MAAM,IAAI,CAmBZ"}