@chenzy-design/core 0.2.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.
- package/dist/ai-chat-dialogue.d.ts +300 -0
- package/dist/ai-chat-dialogue.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.js +699 -0
- package/dist/ai-chat-dialogue.js.map +1 -0
- package/dist/ai-chat-dialogue.test.d.ts +2 -0
- package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.test.js +338 -0
- package/dist/ai-chat-dialogue.test.js.map +1 -0
- package/dist/ai-chat-input.d.ts +191 -0
- package/dist/ai-chat-input.d.ts.map +1 -0
- package/dist/ai-chat-input.js +274 -0
- package/dist/ai-chat-input.js.map +1 -0
- package/dist/ai-chat-input.test.d.ts +2 -0
- package/dist/ai-chat-input.test.d.ts.map +1 -0
- package/dist/ai-chat-input.test.js +339 -0
- package/dist/ai-chat-input.test.js.map +1 -0
- package/dist/audio-player.d.ts +154 -0
- package/dist/audio-player.d.ts.map +1 -0
- package/dist/audio-player.js +254 -0
- package/dist/audio-player.js.map +1 -0
- package/dist/audio-player.test.d.ts +2 -0
- package/dist/audio-player.test.d.ts.map +1 -0
- package/dist/audio-player.test.js +275 -0
- package/dist/audio-player.test.js.map +1 -0
- package/dist/back-top.d.ts +4 -1
- package/dist/back-top.d.ts.map +1 -1
- package/dist/back-top.js +5 -2
- package/dist/back-top.js.map +1 -1
- package/dist/back-top.test.js +3 -2
- package/dist/back-top.test.js.map +1 -1
- package/dist/calendar.d.ts +132 -44
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +413 -70
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.test.js +160 -76
- package/dist/calendar.test.js.map +1 -1
- package/dist/chat.d.ts +172 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +210 -0
- package/dist/chat.js.map +1 -0
- package/dist/chat.test.d.ts +2 -0
- package/dist/chat.test.d.ts.map +1 -0
- package/dist/chat.test.js +181 -0
- package/dist/chat.test.js.map +1 -0
- package/dist/code-highlight.d.ts +30 -0
- package/dist/code-highlight.d.ts.map +1 -0
- package/dist/code-highlight.js +37 -0
- package/dist/code-highlight.js.map +1 -0
- package/dist/code-highlight.test.d.ts +2 -0
- package/dist/code-highlight.test.d.ts.map +1 -0
- package/dist/code-highlight.test.js +36 -0
- package/dist/code-highlight.test.js.map +1 -0
- package/dist/collapsible.d.ts +41 -0
- package/dist/collapsible.d.ts.map +1 -0
- package/dist/collapsible.js +33 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/collapsible.test.d.ts +2 -0
- package/dist/collapsible.test.d.ts.map +1 -0
- package/dist/collapsible.test.js +57 -0
- package/dist/collapsible.test.js.map +1 -0
- package/dist/color-value.d.ts +60 -0
- package/dist/color-value.d.ts.map +1 -0
- package/dist/color-value.js +165 -0
- package/dist/color-value.js.map +1 -0
- package/dist/color-value.test.d.ts +2 -0
- package/dist/color-value.test.d.ts.map +1 -0
- package/dist/color-value.test.js +104 -0
- package/dist/color-value.test.js.map +1 -0
- package/dist/config-provider.d.ts +76 -37
- package/dist/config-provider.d.ts.map +1 -1
- package/dist/config-provider.js +107 -32
- package/dist/config-provider.js.map +1 -1
- package/dist/config-provider.test.js +123 -60
- package/dist/config-provider.test.js.map +1 -1
- package/dist/cropper.d.ts +164 -0
- package/dist/cropper.d.ts.map +1 -0
- package/dist/cropper.js +841 -0
- package/dist/cropper.js.map +1 -0
- package/dist/cropper.test.d.ts +2 -0
- package/dist/cropper.test.d.ts.map +1 -0
- package/dist/cropper.test.js +259 -0
- package/dist/cropper.test.js.map +1 -0
- package/dist/drag-move.d.ts +119 -0
- package/dist/drag-move.d.ts.map +1 -0
- package/dist/drag-move.js +237 -0
- package/dist/drag-move.js.map +1 -0
- package/dist/drag-move.test.d.ts +2 -0
- package/dist/drag-move.test.d.ts.map +1 -0
- package/dist/drag-move.test.js +304 -0
- package/dist/drag-move.test.js.map +1 -0
- package/dist/editable.d.ts +24 -4
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +18 -0
- package/dist/editable.js.map +1 -1
- package/dist/editable.test.js +55 -2
- package/dist/editable.test.js.map +1 -1
- package/dist/ellipsis.d.ts +13 -0
- package/dist/ellipsis.d.ts.map +1 -1
- package/dist/ellipsis.js +36 -0
- package/dist/ellipsis.js.map +1 -1
- package/dist/ellipsis.test.js +37 -1
- package/dist/ellipsis.test.js.map +1 -1
- package/dist/form-path.d.ts +19 -0
- package/dist/form-path.d.ts.map +1 -0
- package/dist/form-path.js +97 -0
- package/dist/form-path.js.map +1 -0
- package/dist/form-path.test.d.ts +2 -0
- package/dist/form-path.test.d.ts.map +1 -0
- package/dist/form-path.test.js +57 -0
- package/dist/form-path.test.js.map +1 -0
- package/dist/form-validate.d.ts +13 -0
- package/dist/form-validate.d.ts.map +1 -0
- package/dist/form-validate.js +204 -0
- package/dist/form-validate.js.map +1 -0
- package/dist/form.d.ts +91 -18
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +170 -115
- package/dist/form.js.map +1 -1
- package/dist/form.test.js +349 -76
- package/dist/form.test.js.map +1 -1
- package/dist/highlight.d.ts +42 -32
- package/dist/highlight.d.ts.map +1 -1
- package/dist/highlight.js +67 -41
- package/dist/highlight.js.map +1 -1
- package/dist/highlight.test.js +73 -32
- package/dist/highlight.test.js.map +1 -1
- package/dist/hotkeys.d.ts +151 -0
- package/dist/hotkeys.d.ts.map +1 -0
- package/dist/hotkeys.js +188 -0
- package/dist/hotkeys.js.map +1 -0
- package/dist/hotkeys.test.d.ts +2 -0
- package/dist/hotkeys.test.d.ts.map +1 -0
- package/dist/hotkeys.test.js +170 -0
- package/dist/hotkeys.test.js.map +1 -0
- package/dist/index.d.ts +33 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -13
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +34 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +54 -0
- package/dist/input.js.map +1 -0
- package/dist/input.test.d.ts +2 -0
- package/dist/input.test.d.ts.map +1 -0
- package/dist/input.test.js +56 -0
- package/dist/input.test.js.map +1 -0
- package/dist/markdown-render.d.ts +49 -0
- package/dist/markdown-render.d.ts.map +1 -0
- package/dist/markdown-render.js +61 -0
- package/dist/markdown-render.js.map +1 -0
- package/dist/markdown-render.test.d.ts +2 -0
- package/dist/markdown-render.test.d.ts.map +1 -0
- package/dist/markdown-render.test.js +106 -0
- package/dist/markdown-render.test.js.map +1 -0
- package/dist/notification.d.ts +40 -31
- package/dist/notification.d.ts.map +1 -1
- package/dist/notification.js +86 -70
- package/dist/notification.js.map +1 -1
- package/dist/notification.test.js +62 -39
- package/dist/notification.test.js.map +1 -1
- package/dist/numeral.d.ts +32 -0
- package/dist/numeral.d.ts.map +1 -0
- package/dist/numeral.js +67 -0
- package/dist/numeral.js.map +1 -0
- package/dist/numeral.test.d.ts +2 -0
- package/dist/numeral.test.d.ts.map +1 -0
- package/dist/numeral.test.js +59 -0
- package/dist/numeral.test.js.map +1 -0
- package/dist/overflow-list.d.ts +9 -40
- package/dist/overflow-list.d.ts.map +1 -1
- package/dist/overflow-list.js +9 -70
- package/dist/overflow-list.js.map +1 -1
- package/dist/overflow-list.test.js +1 -122
- package/dist/overflow-list.test.js.map +1 -1
- package/dist/pagination.d.ts +17 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +48 -0
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.test.js +40 -1
- package/dist/pagination.test.js.map +1 -1
- package/dist/pincode.d.ts +79 -0
- package/dist/pincode.d.ts.map +1 -0
- package/dist/pincode.js +119 -0
- package/dist/pincode.js.map +1 -0
- package/dist/pincode.test.d.ts +2 -0
- package/dist/pincode.test.d.ts.map +1 -0
- package/dist/pincode.test.js +151 -0
- package/dist/pincode.test.js.map +1 -0
- package/dist/progress.d.ts +32 -30
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +257 -64
- package/dist/progress.js.map +1 -1
- package/dist/progress.test.js +50 -47
- package/dist/progress.test.js.map +1 -1
- package/dist/resizable.d.ts +200 -0
- package/dist/resizable.d.ts.map +1 -0
- package/dist/resizable.js +329 -0
- package/dist/resizable.js.map +1 -0
- package/dist/resizable.test.d.ts +2 -0
- package/dist/resizable.test.d.ts.map +1 -0
- package/dist/resizable.test.js +302 -0
- package/dist/resizable.test.js.map +1 -0
- package/dist/scroll-list.d.ts +69 -62
- package/dist/scroll-list.d.ts.map +1 -1
- package/dist/scroll-list.js +103 -144
- package/dist/scroll-list.js.map +1 -1
- package/dist/scroll-list.test.js +100 -110
- package/dist/scroll-list.test.js.map +1 -1
- package/dist/sidebar.d.ts +46 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +65 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/sidebar.test.d.ts +2 -0
- package/dist/sidebar.test.d.ts.map +1 -0
- package/dist/sidebar.test.js +88 -0
- package/dist/sidebar.test.js.map +1 -0
- package/dist/spin.d.ts +5 -5
- package/dist/spin.d.ts.map +1 -1
- package/dist/spin.js +13 -39
- package/dist/spin.js.map +1 -1
- package/dist/spin.test.js +2 -26
- package/dist/spin.test.js.map +1 -1
- package/dist/toast.d.ts +33 -30
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +77 -72
- package/dist/toast.js.map +1 -1
- package/dist/toast.test.js +63 -37
- package/dist/toast.test.js.map +1 -1
- package/dist/tree.d.ts +22 -5
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +61 -9
- package/dist/tree.js.map +1 -1
- package/dist/tree.test.js +72 -1
- package/dist/tree.test.js.map +1 -1
- package/dist/user-guide.d.ts +73 -0
- package/dist/user-guide.d.ts.map +1 -0
- package/dist/user-guide.js +95 -0
- package/dist/user-guide.js.map +1 -0
- package/dist/user-guide.test.d.ts +2 -0
- package/dist/user-guide.test.d.ts.map +1 -0
- package/dist/user-guide.test.js +109 -0
- package/dist/user-guide.test.js.map +1 -0
- package/dist/video-player.d.ts +196 -0
- package/dist/video-player.d.ts.map +1 -0
- package/dist/video-player.js +461 -0
- package/dist/video-player.js.map +1 -0
- package/dist/video-player.test.d.ts +2 -0
- package/dist/video-player.test.d.ts.map +1 -0
- package/dist/video-player.test.js +435 -0
- package/dist/video-player.test.js.map +1 -0
- package/package.json +17 -1
- package/dist/banner.d.ts +0 -19
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -20
- package/dist/banner.js.map +0 -1
- package/dist/banner.test.d.ts +0 -2
- package/dist/banner.test.d.ts.map +0 -1
- package/dist/banner.test.js +0 -29
- package/dist/banner.test.js.map +0 -1
- package/dist/breakpoints.d.ts +0 -30
- package/dist/breakpoints.d.ts.map +0 -1
- package/dist/breakpoints.js +0 -45
- package/dist/breakpoints.js.map +0 -1
- package/dist/breakpoints.test.d.ts +0 -2
- package/dist/breakpoints.test.d.ts.map +0 -1
- package/dist/breakpoints.test.js +0 -46
- package/dist/breakpoints.test.js.map +0 -1
- package/dist/lottie-icon.d.ts +0 -88
- package/dist/lottie-icon.d.ts.map +0 -1
- package/dist/lottie-icon.js +0 -84
- package/dist/lottie-icon.js.map +0 -1
- package/dist/lottie-icon.test.d.ts +0 -2
- package/dist/lottie-icon.test.d.ts.map +0 -1
- package/dist/lottie-icon.test.js +0 -88
- package/dist/lottie-icon.test.js.map +0 -1
- package/dist/sider.d.ts +0 -26
- package/dist/sider.d.ts.map +0 -1
- package/dist/sider.js +0 -55
- package/dist/sider.js.map +0 -1
- package/dist/sider.test.d.ts +0 -2
- package/dist/sider.test.d.ts.map +0 -1
- package/dist/sider.test.js +0 -29
- 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 @@
|
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
9
|
-
*
|
|
12
|
+
* 响应式断点键(xs..xxl),与 Semi Design / Ant Design 六档一致。
|
|
13
|
+
* 断点系统的类型与常量归属此处(config-provider 是响应式配置的落点)。
|
|
10
14
|
*/
|
|
11
|
-
export type
|
|
12
|
-
/**
|
|
13
|
-
export
|
|
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
|
-
|
|
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
|
-
*
|
|
18
|
-
*
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
size?: ConfigSize;
|
|
26
|
-
zIndexBase?: number;
|
|
27
|
-
transition?: boolean;
|
|
28
|
-
reducedMotion?: ReducedMotionInput;
|
|
56
|
+
direction?: ConfigDir;
|
|
57
|
+
timeZone?: ConfigTimeZone;
|
|
29
58
|
}
|
|
30
|
-
/**
|
|
59
|
+
/** 完全解析后的配置(每个字段都存在)。 */
|
|
31
60
|
export interface ResolvedConfig {
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
*
|
|
42
|
-
*
|
|
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
|
-
*
|
|
48
|
-
*
|
|
72
|
+
* 把 timeZone(数字=距 UTC 的小时偏移 | 'GMT±HH:mm')解析成「分钟偏移」;无法解析(含具名
|
|
73
|
+
* IANA 标识、非法串)返回 undefined,调用方据此回退到不做时区转换(用本地时区)。
|
|
49
74
|
*/
|
|
50
|
-
export declare function
|
|
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
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
90
|
+
* 注册 media query 的 match/unmatch 回调,返回注销函数。
|
|
91
|
+
* 逐字对齐 Semi `_utils` 的 registerMediaQuery:SSR(无 window)返回 noop;
|
|
92
|
+
* 优先 addEventListener,回退老浏览器 addListener;callInInit 默认立即回调一次。
|
|
55
93
|
*/
|
|
56
|
-
export declare function
|
|
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
|
|
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"}
|