@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
package/dist/config-provider.js
CHANGED
|
@@ -1,49 +1,124 @@
|
|
|
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
|
*/
|
|
11
|
+
/** 各断点的 min-width(px)。xs 为 0(基础层无媒体查询)。对齐 Semi 断点尺寸。 */
|
|
12
|
+
export const BREAKPOINTS = {
|
|
13
|
+
xs: 0,
|
|
14
|
+
sm: 576,
|
|
15
|
+
md: 768,
|
|
16
|
+
lg: 992,
|
|
17
|
+
xl: 1200,
|
|
18
|
+
xxl: 1600,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 默认断点配置。对齐 Semi defaultResponsiveMap,可经
|
|
22
|
+
* `ConfigProvider.defaultResponsiveMap` 获取。
|
|
23
|
+
*/
|
|
24
|
+
export const defaultResponsiveMap = {
|
|
25
|
+
xs: '(max-width: 575px)',
|
|
26
|
+
sm: '(min-width: 576px)',
|
|
27
|
+
md: '(min-width: 768px)',
|
|
28
|
+
lg: '(min-width: 992px)',
|
|
29
|
+
xl: '(min-width: 1200px)',
|
|
30
|
+
xxl: '(min-width: 1600px)',
|
|
31
|
+
};
|
|
32
|
+
/** 全部断点均未命中的初值。 */
|
|
33
|
+
export const EMPTY_SCREENS = {
|
|
34
|
+
xs: false,
|
|
35
|
+
sm: false,
|
|
36
|
+
md: false,
|
|
37
|
+
lg: false,
|
|
38
|
+
xl: false,
|
|
39
|
+
xxl: false,
|
|
40
|
+
};
|
|
41
|
+
/** 默认配置。对齐 Semi defaultProps(direction: 'ltr')。 */
|
|
7
42
|
export const DEFAULT_CONFIG = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
size: 'default',
|
|
11
|
-
zIndexBase: 1000,
|
|
12
|
-
transition: true,
|
|
13
|
-
reducedMotion: 'auto',
|
|
43
|
+
direction: 'ltr',
|
|
44
|
+
timeZone: undefined,
|
|
14
45
|
};
|
|
15
46
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* omitting a field inherits the parent's value.
|
|
47
|
+
* 把子配置浅合并到已解析的父配置:子字段仅在显式提供(非 undefined)时覆盖父级,
|
|
48
|
+
* 省略字段继承父级值(就近 wins)。对齐 Semi 嵌套 Context 的继承语义。
|
|
19
49
|
*/
|
|
20
50
|
export function mergeConfig(parent, child) {
|
|
21
51
|
return {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
size: child.size ?? parent.size,
|
|
25
|
-
zIndexBase: child.zIndexBase ?? parent.zIndexBase,
|
|
26
|
-
transition: child.transition ?? parent.transition,
|
|
27
|
-
reducedMotion: child.reducedMotion ?? parent.reducedMotion,
|
|
52
|
+
direction: child.direction ?? parent.direction,
|
|
53
|
+
timeZone: child.timeZone ?? parent.timeZone,
|
|
28
54
|
};
|
|
29
55
|
}
|
|
56
|
+
// --- 时区值层偏移(对齐 Semi utcToZonedTime 语义;不依赖 date-fns,不碰原生 Intl 时区)---
|
|
57
|
+
// Semi 的 timeZone 不是在显示层给格式化器附加 timeZone,而是在【值层】用 date-fns-tz 的
|
|
58
|
+
// utcToZonedTime 把绝对时刻(UTC)转成「目标时区墙上时间」对应的一个 Date,随后底层一律用
|
|
59
|
+
// date-fns format 按该 Date 的本地字段序列化。本库刻意不依赖 date-fns,故用纯偏移换算复刻
|
|
60
|
+
// 该语义:对固定偏移(数字小时 / 'GMT±HH:mm')精确等价;具名 IANA(含夏令时)不支持,
|
|
61
|
+
// 因为无 tz 数据库无从判定,属有意的能力边界(demo 仅用 GMT± / 数字,与 Semi demo 一致)。
|
|
62
|
+
const GMT_STRING_REG = /^GMT([-+])(\d{2}):(\d{2})$/;
|
|
63
|
+
/**
|
|
64
|
+
* 把 timeZone(数字=距 UTC 的小时偏移 | 'GMT±HH:mm')解析成「分钟偏移」;无法解析(含具名
|
|
65
|
+
* IANA 标识、非法串)返回 undefined,调用方据此回退到不做时区转换(用本地时区)。
|
|
66
|
+
*/
|
|
67
|
+
export function parseTimeZoneOffsetMinutes(tz) {
|
|
68
|
+
if (typeof tz === 'number') {
|
|
69
|
+
return Number.isFinite(tz) ? Math.round(tz * 60) : undefined;
|
|
70
|
+
}
|
|
71
|
+
const matches = tz.match(GMT_STRING_REG);
|
|
72
|
+
if (!matches)
|
|
73
|
+
return undefined;
|
|
74
|
+
const sign = matches[1] === '-' ? -1 : 1;
|
|
75
|
+
const hours = parseInt(matches[2] ?? '0', 10);
|
|
76
|
+
const minutes = parseInt(matches[3] ?? '0', 10);
|
|
77
|
+
return sign * (hours * 60 + minutes);
|
|
78
|
+
}
|
|
30
79
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
80
|
+
* 把一个绝对时刻(Date)转成「目标时区墙上时间」对应的 Date —— 该 Date 的本地字段
|
|
81
|
+
* (getHours/getFullYear…) 即目标时区的墙上时间。对齐 Semi utcToZonedTime(固定偏移场景):
|
|
82
|
+
* 消费方随后用现有的本地字段序列化(getHours 等 / Intl 不传 timeZone)即得到该时区的显示文案。
|
|
83
|
+
* timeZone 无法解析(具名 IANA / 非法)时原样返回入参 Date,等价于不做时区转换。
|
|
33
84
|
*/
|
|
34
|
-
export function
|
|
35
|
-
if (
|
|
36
|
-
return
|
|
37
|
-
|
|
85
|
+
export function zonedWallTime(date, tz) {
|
|
86
|
+
if (tz == null)
|
|
87
|
+
return date;
|
|
88
|
+
const offsetMinutes = parseTimeZoneOffsetMinutes(tz);
|
|
89
|
+
if (offsetMinutes === undefined)
|
|
90
|
+
return date;
|
|
91
|
+
// date.getTime() 是 UTC 毫秒;加上目标时区偏移,再用「负本地偏移」抵消,使得读出的
|
|
92
|
+
// 本地字段恰好等于目标时区墙上时间。等价于 date-fns-tz utcToZonedTime 的固定偏移分支。
|
|
93
|
+
const localOffsetMinutes = date.getTimezoneOffset(); // 本地相对 UTC,东区为负
|
|
94
|
+
const deltaMinutes = offsetMinutes + localOffsetMinutes;
|
|
95
|
+
return new Date(date.getTime() + deltaMinutes * 60_000);
|
|
38
96
|
}
|
|
39
97
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
98
|
+
* 注册 media query 的 match/unmatch 回调,返回注销函数。
|
|
99
|
+
* 逐字对齐 Semi `_utils` 的 registerMediaQuery:SSR(无 window)返回 noop;
|
|
100
|
+
* 优先 addEventListener,回退老浏览器 addListener;callInInit 默认立即回调一次。
|
|
43
101
|
*/
|
|
44
|
-
export function
|
|
45
|
-
if (typeof
|
|
46
|
-
|
|
47
|
-
|
|
102
|
+
export function registerMediaQuery(media, { match, unmatch, callInInit = true }) {
|
|
103
|
+
if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {
|
|
104
|
+
const mediaQueryList = window.matchMedia(media);
|
|
105
|
+
const handlerMediaChange = (e) => {
|
|
106
|
+
if (e.matches) {
|
|
107
|
+
match?.(e);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
unmatch?.(e);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
if (callInInit)
|
|
114
|
+
handlerMediaChange(mediaQueryList);
|
|
115
|
+
if (Object.prototype.hasOwnProperty.call(mediaQueryList, 'addEventListener')) {
|
|
116
|
+
mediaQueryList.addEventListener('change', handlerMediaChange);
|
|
117
|
+
return () => mediaQueryList.removeEventListener('change', handlerMediaChange);
|
|
118
|
+
}
|
|
119
|
+
mediaQueryList.addListener(handlerMediaChange);
|
|
120
|
+
return () => mediaQueryList.removeListener(handlerMediaChange);
|
|
121
|
+
}
|
|
122
|
+
return () => undefined;
|
|
48
123
|
}
|
|
49
124
|
//# sourceMappingURL=config-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-provider.js","sourceRoot":"","sources":["../src/config-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config-provider.js","sourceRoot":"","sources":["../src/config-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,76 +1,139 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { mergeConfig, DEFAULT_CONFIG,
|
|
1
|
+
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { mergeConfig, DEFAULT_CONFIG, defaultResponsiveMap, EMPTY_SCREENS, registerMediaQuery, zonedWallTime, parseTimeZoneOffsetMinutes, } from './config-provider.js';
|
|
3
3
|
describe('mergeConfig', () => {
|
|
4
4
|
it('returns parent values when child provides nothing', () => {
|
|
5
5
|
expect(mergeConfig(DEFAULT_CONFIG, {})).toEqual(DEFAULT_CONFIG);
|
|
6
6
|
});
|
|
7
7
|
it('overrides only explicitly-provided fields', () => {
|
|
8
|
-
const merged = mergeConfig(DEFAULT_CONFIG, {
|
|
9
|
-
expect(merged.
|
|
10
|
-
expect(merged.
|
|
11
|
-
expect(merged.size).toBe('default'); // inherited
|
|
8
|
+
const merged = mergeConfig(DEFAULT_CONFIG, { direction: 'rtl' });
|
|
9
|
+
expect(merged.direction).toBe('rtl');
|
|
10
|
+
expect(merged.timeZone).toBeUndefined(); // inherited
|
|
12
11
|
});
|
|
13
12
|
it('omitted fields inherit the parent (not overwritten)', () => {
|
|
14
|
-
const parent = { ...DEFAULT_CONFIG,
|
|
15
|
-
// child omits
|
|
16
|
-
const merged = mergeConfig(parent, {
|
|
17
|
-
expect(merged.
|
|
18
|
-
expect(merged.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
size: 'small',
|
|
28
|
-
zIndexBase: 1000,
|
|
29
|
-
transition: true,
|
|
30
|
-
reducedMotion: 'auto',
|
|
31
|
-
});
|
|
13
|
+
const parent = { ...DEFAULT_CONFIG, direction: 'rtl', timeZone: 'Asia/Shanghai' };
|
|
14
|
+
// child omits both → they inherit
|
|
15
|
+
const merged = mergeConfig(parent, {});
|
|
16
|
+
expect(merged.direction).toBe('rtl');
|
|
17
|
+
expect(merged.timeZone).toBe('Asia/Shanghai');
|
|
18
|
+
});
|
|
19
|
+
it('nested merge: inner only overrides timeZone, keeps outer direction', () => {
|
|
20
|
+
const outer = mergeConfig(DEFAULT_CONFIG, { direction: 'rtl' });
|
|
21
|
+
const inner = mergeConfig(outer, { timeZone: 'GMT+08:00' });
|
|
22
|
+
expect(inner).toEqual({ direction: 'rtl', timeZone: 'GMT+08:00' });
|
|
23
|
+
});
|
|
24
|
+
it('accepts numeric timeZone', () => {
|
|
25
|
+
expect(mergeConfig(DEFAULT_CONFIG, { timeZone: -9.5 }).timeZone).toBe(-9.5);
|
|
32
26
|
});
|
|
33
|
-
it('
|
|
34
|
-
|
|
35
|
-
expect(merged.zIndexBase).toBe(2000);
|
|
36
|
-
expect(merged.transition).toBe(false);
|
|
37
|
-
// transition:false must override (not be treated as "missing" by ??)
|
|
38
|
-
expect(mergeConfig({ ...DEFAULT_CONFIG, transition: false }, {}).transition).toBe(false);
|
|
39
|
-
});
|
|
40
|
-
it('default reducedMotion is auto; inherits and overrides', () => {
|
|
41
|
-
expect(DEFAULT_CONFIG.reducedMotion).toBe('auto');
|
|
42
|
-
expect(mergeConfig(DEFAULT_CONFIG, {}).reducedMotion).toBe('auto');
|
|
43
|
-
expect(mergeConfig(DEFAULT_CONFIG, { reducedMotion: true }).reducedMotion).toBe(true);
|
|
44
|
-
// reducedMotion:false must override auto (not be treated as missing by ??)
|
|
45
|
-
expect(mergeConfig({ ...DEFAULT_CONFIG, reducedMotion: 'auto' }, { reducedMotion: false }).reducedMotion).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
it('theme=auto inherits/overrides like other fields', () => {
|
|
48
|
-
expect(mergeConfig(DEFAULT_CONFIG, { theme: 'auto' }).theme).toBe('auto');
|
|
49
|
-
// inner auto over outer dark wins (nearest)
|
|
50
|
-
const outer = mergeConfig(DEFAULT_CONFIG, { theme: 'dark' });
|
|
51
|
-
expect(mergeConfig(outer, { theme: 'auto' }).theme).toBe('auto');
|
|
27
|
+
it('default direction is ltr', () => {
|
|
28
|
+
expect(DEFAULT_CONFIG.direction).toBe('ltr');
|
|
52
29
|
});
|
|
53
30
|
});
|
|
54
|
-
describe('
|
|
55
|
-
it('
|
|
56
|
-
expect(
|
|
57
|
-
expect(
|
|
58
|
-
expect(
|
|
59
|
-
expect(
|
|
31
|
+
describe('parseTimeZoneOffsetMinutes', () => {
|
|
32
|
+
it('数字小时偏移 → 分钟', () => {
|
|
33
|
+
expect(parseTimeZoneOffsetMinutes(8)).toBe(480);
|
|
34
|
+
expect(parseTimeZoneOffsetMinutes(-5)).toBe(-300);
|
|
35
|
+
expect(parseTimeZoneOffsetMinutes(0)).toBe(0);
|
|
36
|
+
expect(parseTimeZoneOffsetMinutes(5.5)).toBe(330);
|
|
60
37
|
});
|
|
61
|
-
it('
|
|
62
|
-
expect(
|
|
63
|
-
expect(
|
|
38
|
+
it("'GMT±HH:mm' → 分钟", () => {
|
|
39
|
+
expect(parseTimeZoneOffsetMinutes('GMT+08:00')).toBe(480);
|
|
40
|
+
expect(parseTimeZoneOffsetMinutes('GMT-08:00')).toBe(-480);
|
|
41
|
+
expect(parseTimeZoneOffsetMinutes('GMT+05:30')).toBe(330);
|
|
42
|
+
expect(parseTimeZoneOffsetMinutes('GMT+00:00')).toBe(0);
|
|
43
|
+
});
|
|
44
|
+
it('具名 IANA / 非法串 → undefined(回退不转换)', () => {
|
|
45
|
+
expect(parseTimeZoneOffsetMinutes('Asia/Shanghai')).toBeUndefined();
|
|
46
|
+
expect(parseTimeZoneOffsetMinutes('UTC')).toBeUndefined();
|
|
47
|
+
expect(parseTimeZoneOffsetMinutes('nonsense')).toBeUndefined();
|
|
48
|
+
expect(parseTimeZoneOffsetMinutes(Number.NaN)).toBeUndefined();
|
|
64
49
|
});
|
|
65
50
|
});
|
|
66
|
-
describe('
|
|
67
|
-
it('
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
expect(
|
|
51
|
+
describe('zonedWallTime', () => {
|
|
52
|
+
it('墙上时间字段等于目标时区当地时间(东八区与西八区相差 16h)', () => {
|
|
53
|
+
// 2020-02-13T13:08:25.265Z(UTC)
|
|
54
|
+
const utc = new Date(1581599305265);
|
|
55
|
+
const east8 = zonedWallTime(utc, 'GMT+08:00');
|
|
56
|
+
const west8 = zonedWallTime(utc, 'GMT-08:00');
|
|
57
|
+
// 东八区当地 = UTC+8 = 21:08:25;西八区 = UTC-8 = 05:08:25
|
|
58
|
+
expect(east8.getHours() - west8.getHours()).toBe(16);
|
|
59
|
+
// 用 UTC 字段读回:east8 读出的 UTC 字段即东八区墙上时间
|
|
60
|
+
expect(east8.getTime() - west8.getTime()).toBe(16 * 60 * 60 * 1000);
|
|
61
|
+
});
|
|
62
|
+
it('无法解析的时区原样返回入参(不做转换)', () => {
|
|
63
|
+
const d = new Date(1581599305265);
|
|
64
|
+
expect(zonedWallTime(d, 'Asia/Shanghai')).toBe(d);
|
|
65
|
+
expect(zonedWallTime(d, undefined)).toBe(d);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('defaultResponsiveMap', () => {
|
|
69
|
+
it('mirrors Semi breakpoints', () => {
|
|
70
|
+
expect(defaultResponsiveMap).toEqual({
|
|
71
|
+
xs: '(max-width: 575px)',
|
|
72
|
+
sm: '(min-width: 576px)',
|
|
73
|
+
md: '(min-width: 768px)',
|
|
74
|
+
lg: '(min-width: 992px)',
|
|
75
|
+
xl: '(min-width: 1200px)',
|
|
76
|
+
xxl: '(min-width: 1600px)',
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
it('EMPTY_SCREENS all false', () => {
|
|
80
|
+
expect(Object.values(EMPTY_SCREENS).every((v) => v === false)).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('registerMediaQuery', () => {
|
|
84
|
+
let listeners;
|
|
85
|
+
let matchesValue;
|
|
86
|
+
let addSpy;
|
|
87
|
+
let removeSpy;
|
|
88
|
+
beforeEach(() => {
|
|
89
|
+
listeners = [];
|
|
90
|
+
matchesValue = false;
|
|
91
|
+
addSpy = vi.fn((_type, cb) => listeners.push(cb));
|
|
92
|
+
removeSpy = vi.fn();
|
|
93
|
+
// registerMediaQuery 读的是 window.matchMedia;core 单测在 node 环境无 window,
|
|
94
|
+
// 显式注入一个带 matchMedia 的 window(无 addListener,走 addEventListener 分支)。
|
|
95
|
+
vi.stubGlobal('window', {
|
|
96
|
+
matchMedia: vi.fn((_media) => ({
|
|
97
|
+
get matches() {
|
|
98
|
+
return matchesValue;
|
|
99
|
+
},
|
|
100
|
+
addEventListener: addSpy,
|
|
101
|
+
removeEventListener: removeSpy,
|
|
102
|
+
})),
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
afterEach(() => {
|
|
106
|
+
vi.unstubAllGlobals();
|
|
107
|
+
});
|
|
108
|
+
it('callInInit fires immediately with current state', () => {
|
|
109
|
+
const match = vi.fn();
|
|
110
|
+
const unmatch = vi.fn();
|
|
111
|
+
matchesValue = true;
|
|
112
|
+
registerMediaQuery('(min-width: 768px)', { match, unmatch });
|
|
113
|
+
expect(match).toHaveBeenCalledTimes(1);
|
|
114
|
+
expect(unmatch).not.toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
it('callInInit=false does not fire on register', () => {
|
|
117
|
+
const match = vi.fn();
|
|
118
|
+
registerMediaQuery('(min-width: 768px)', { match, callInInit: false });
|
|
119
|
+
expect(match).not.toHaveBeenCalled();
|
|
120
|
+
});
|
|
121
|
+
it('change event dispatches match/unmatch and unregister removes listener', () => {
|
|
122
|
+
const match = vi.fn();
|
|
123
|
+
const unmatch = vi.fn();
|
|
124
|
+
const off = registerMediaQuery('(min-width: 768px)', { match, unmatch, callInInit: false });
|
|
125
|
+
listeners.forEach((cb) => cb({ matches: true }));
|
|
126
|
+
expect(match).toHaveBeenCalledTimes(1);
|
|
127
|
+
listeners.forEach((cb) => cb({ matches: false }));
|
|
128
|
+
expect(unmatch).toHaveBeenCalledTimes(1);
|
|
129
|
+
off();
|
|
130
|
+
expect(removeSpy).toHaveBeenCalledTimes(1);
|
|
131
|
+
});
|
|
132
|
+
it('SSR-safe: no window returns noop', () => {
|
|
133
|
+
vi.stubGlobal('window', undefined);
|
|
134
|
+
const off = registerMediaQuery('(min-width: 768px)', { match: vi.fn() });
|
|
135
|
+
expect(typeof off).toBe('function');
|
|
136
|
+
expect(() => off()).not.toThrow();
|
|
74
137
|
});
|
|
75
138
|
});
|
|
76
139
|
//# sourceMappingURL=config-provider.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-provider.test.js","sourceRoot":"","sources":["../src/config-provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config-provider.test.js","sourceRoot":"","sources":["../src/config-provider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createCropper — framework-agnostic geometry engine for the Cropper component.
|
|
3
|
+
* Ported 逐行 from Semi 的 semi-foundation/cropper/foundation.js (CropperFoundation).
|
|
4
|
+
* See specs/components/show/Cropper.spec.md §3.
|
|
5
|
+
*
|
|
6
|
+
* 纯几何/状态:容器/图片/裁切框坐标换算、8 角点 resize(自由 + aspectRatio 约束)、
|
|
7
|
+
* 裁切框拖拽、图片拖拽、滚轮缩放(min/maxZoom 钳制)、resize 重排、坐标→canvas。
|
|
8
|
+
* 所有 DOM 读取(container/img 尺寸、bounding rect)经 adapter 注入,
|
|
9
|
+
* document 级 mousemove/mouseup 绑定由 svelte 渲染层负责;本模块只算不碰 DOM 监听。
|
|
10
|
+
*
|
|
11
|
+
* 坐标系:以裁切容器左上角为原点,x 向右、y 向下。centerPoint 存的是几何中心。
|
|
12
|
+
*/
|
|
13
|
+
/** 2D 点。 */
|
|
14
|
+
export interface Point {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
}
|
|
18
|
+
/** 图片的固有信息(原始像素尺寸 + 初始适配缩放)。 */
|
|
19
|
+
export interface CropperImageData {
|
|
20
|
+
originalWidth: number;
|
|
21
|
+
originalHeight: number;
|
|
22
|
+
/** 图片加载后为适配容器所做的初始缩放(naturalWidth * scale = 显示宽)。 */
|
|
23
|
+
scale: number;
|
|
24
|
+
}
|
|
25
|
+
/** 图片当前的显示态(显示宽高 + 中心点,随缩放/拖拽/旋转变化)。 */
|
|
26
|
+
export interface CropperImageState {
|
|
27
|
+
width: number;
|
|
28
|
+
height: number;
|
|
29
|
+
centerPoint: Point;
|
|
30
|
+
}
|
|
31
|
+
/** 裁切框当前态。 */
|
|
32
|
+
export interface CropperBox {
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
centerPoint: Point;
|
|
36
|
+
}
|
|
37
|
+
/** 容器尺寸。 */
|
|
38
|
+
export interface ContainerData {
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
}
|
|
42
|
+
/** 角点方向:4 角 + 4 边中点。 */
|
|
43
|
+
export type CropperCorner = 'tl' | 'tm' | 'tr' | 'ml' | 'mr' | 'bl' | 'bm' | 'br';
|
|
44
|
+
/** 裁切框形状。 */
|
|
45
|
+
export type CropperShape = 'rect' | 'round' | 'roundRect';
|
|
46
|
+
/** 角点全集与圆形(round)时仅保留的 4 个边中点角点。 */
|
|
47
|
+
export declare const CROPPER_CORNERS: readonly CropperCorner[];
|
|
48
|
+
export declare const CROPPER_ROUND_CORNERS: readonly CropperCorner[];
|
|
49
|
+
export declare const CROPPER_SHAPES: readonly CropperShape[];
|
|
50
|
+
/** adapter:渲染层注入的 DOM 读取 + 变更通知。core 只调、不持有 DOM 引用。 */
|
|
51
|
+
export interface CropperAdapter {
|
|
52
|
+
/** 返回裁切容器元素(读 clientWidth/clientHeight/getBoundingClientRect)。 */
|
|
53
|
+
getContainer: () => {
|
|
54
|
+
clientWidth: number;
|
|
55
|
+
clientHeight: number;
|
|
56
|
+
getBoundingClientRect: () => DOMRect;
|
|
57
|
+
} | null;
|
|
58
|
+
/** 返回原始 <img> 元素(getCropperCanvas 绘制时用)。 */
|
|
59
|
+
getImg: () => HTMLImageElement | null;
|
|
60
|
+
/** zoom 变化通知(映射 onZoomChange)。 */
|
|
61
|
+
notifyZoomChange: (zoom: number) => void;
|
|
62
|
+
}
|
|
63
|
+
/** core 需消费的 props(默认值语义对齐 Semi defaultProps)。 */
|
|
64
|
+
export interface CropperFoundationProps {
|
|
65
|
+
src?: string | undefined;
|
|
66
|
+
/** 受控裁切比例。设置后角点 resize 走 aspect 约束分支。 */
|
|
67
|
+
aspectRatio?: number | undefined;
|
|
68
|
+
/** 图片加载时裁切框初始比例,默认 1(仅 aspectRatio 未设时生效)。 */
|
|
69
|
+
defaultAspectRatio: number;
|
|
70
|
+
fill: string;
|
|
71
|
+
maxZoom: number;
|
|
72
|
+
minZoom: number;
|
|
73
|
+
zoomStep: number;
|
|
74
|
+
}
|
|
75
|
+
/** core 维护的响应式状态(渲染层订阅)。 */
|
|
76
|
+
export interface CropperFoundationState {
|
|
77
|
+
imgData: CropperImageState;
|
|
78
|
+
cropperBox: CropperBox;
|
|
79
|
+
zoom: number;
|
|
80
|
+
rotate: number;
|
|
81
|
+
loaded: boolean;
|
|
82
|
+
}
|
|
83
|
+
/** getMiddle — 将 value 钳制到 [min, max]。(Semi cropper.utils.getMiddle) */
|
|
84
|
+
export declare function getMiddle(value: number, [min, max]: [number, number]): number;
|
|
85
|
+
/**
|
|
86
|
+
* getAspectHW — 在给定 (width, height) 外接框内取满足 aspect(=w/h) 的最大内接矩形宽高。
|
|
87
|
+
* (Semi cropper.utils.getAspectHW)
|
|
88
|
+
*/
|
|
89
|
+
export declare function getAspectHW(width: number, height: number, aspect: number): [number, number];
|
|
90
|
+
/** 每个方向的 resize 参数(自由 resize 分支用)。 */
|
|
91
|
+
export declare function getMoveParamByDir(dir: CropperCorner): {
|
|
92
|
+
paramX: number;
|
|
93
|
+
paramY: number;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* createCropperFoundation — 构造几何引擎实例。
|
|
97
|
+
* 状态经 `getState()` 读、`setState()` 写(渲染层将其桥接到框架响应式)。
|
|
98
|
+
*/
|
|
99
|
+
export declare function createCropperFoundation(options: {
|
|
100
|
+
adapter: CropperAdapter;
|
|
101
|
+
getProps: () => Partial<CropperFoundationProps>;
|
|
102
|
+
getState: () => CropperFoundationState;
|
|
103
|
+
setState: (patch: Partial<CropperFoundationState>) => void;
|
|
104
|
+
}): {
|
|
105
|
+
getContainerData: () => {
|
|
106
|
+
width: number;
|
|
107
|
+
height: number;
|
|
108
|
+
};
|
|
109
|
+
getImageMeta: () => {
|
|
110
|
+
originalWidth: number;
|
|
111
|
+
originalHeight: number;
|
|
112
|
+
/** 图片加载后为适配容器所做的初始缩放(naturalWidth * scale = 显示宽)。 */
|
|
113
|
+
scale: number;
|
|
114
|
+
};
|
|
115
|
+
getBoxMoveDir: () => "" | CropperCorner;
|
|
116
|
+
getRangeX: () => [number, number];
|
|
117
|
+
getRangeY: () => [number, number];
|
|
118
|
+
init: () => void;
|
|
119
|
+
handleResize: () => void;
|
|
120
|
+
getImgDataWhenResize: (ratio: number) => CropperImageState;
|
|
121
|
+
getCropperBoxWhenResize: (ratio: number, newContainerData: ContainerData) => CropperBox;
|
|
122
|
+
handleImageLoad: (target: {
|
|
123
|
+
naturalWidth: number;
|
|
124
|
+
naturalHeight: number;
|
|
125
|
+
}) => void;
|
|
126
|
+
handleWheel: (e: {
|
|
127
|
+
deltaY: number;
|
|
128
|
+
clientX: number;
|
|
129
|
+
clientY: number;
|
|
130
|
+
preventDefault?: () => void;
|
|
131
|
+
}) => void;
|
|
132
|
+
handleCornerMouseDown: (dir: CropperCorner) => void;
|
|
133
|
+
handleCornerMove: (clientX: number, clientY: number) => void;
|
|
134
|
+
handleCornerMouseUp: () => void;
|
|
135
|
+
getRangeForAspectChange: () => void;
|
|
136
|
+
handleCropperBoxMouseDown: (clientX: number, clientY: number) => void;
|
|
137
|
+
handleCropperBoxMouseMove: (clientX: number, clientY: number) => void;
|
|
138
|
+
handleCropperBoxMouseUp: () => void;
|
|
139
|
+
handleImgMoveStart: (clientX: number, clientY: number) => void;
|
|
140
|
+
handleImgMove: (clientX: number, clientY: number) => void;
|
|
141
|
+
handleImgMoveUp: () => void;
|
|
142
|
+
computeControlledImgData: (nextRotate: number, nextZoom: number) => CropperImageState;
|
|
143
|
+
getCropperCanvas: () => HTMLCanvasElement;
|
|
144
|
+
computePreview: (previewContainerInitSize: {
|
|
145
|
+
width: number;
|
|
146
|
+
height: number;
|
|
147
|
+
}, props: {
|
|
148
|
+
width: number;
|
|
149
|
+
height: number;
|
|
150
|
+
translateX: number;
|
|
151
|
+
translateY: number;
|
|
152
|
+
rotate: number;
|
|
153
|
+
}) => {
|
|
154
|
+
imgWidth: number;
|
|
155
|
+
imgHeight: number;
|
|
156
|
+
translateX: number;
|
|
157
|
+
translateY: number;
|
|
158
|
+
rotate: number;
|
|
159
|
+
containerWidth: number;
|
|
160
|
+
containerHeight: number;
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
export type CropperFoundation = ReturnType<typeof createCropperFoundation>;
|
|
164
|
+
//# sourceMappingURL=cropper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cropper.d.ts","sourceRoot":"","sources":["../src/cropper.ts"],"names":[],"mappings":"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"}
|