@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
@@ -1,49 +1,124 @@
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
  */
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
- theme: 'light',
9
- dir: 'ltr',
10
- size: 'default',
11
- zIndexBase: 1000,
12
- transition: true,
13
- reducedMotion: 'auto',
43
+ direction: 'ltr',
44
+ timeZone: undefined,
14
45
  };
15
46
  /**
16
- * Shallow-merge a child config over a resolved parent: each field of `child`
17
- * overrides the parent only when explicitly provided (not undefined), so
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
- theme: child.theme ?? parent.theme,
23
- dir: child.dir ?? parent.dir,
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
- * 把配置主题解析为实际落到 DOM 的主题:'auto' 时跟随系统是否偏好暗色,
32
- * 其余原样返回。纯函数(红线 #2),不读 window,系统态由调用方注入。
80
+ * 把一个绝对时刻(Date)转成「目标时区墙上时间」对应的 Date —— 该 Date 的本地字段
81
+ * (getHours/getFullYear…) 即目标时区的墙上时间。对齐 Semi utcToZonedTime(固定偏移场景):
82
+ * 消费方随后用现有的本地字段序列化(getHours 等 / Intl 不传 timeZone)即得到该时区的显示文案。
83
+ * timeZone 无法解析(具名 IANA / 非法)时原样返回入参 Date,等价于不做时区转换。
33
84
  */
34
- export function resolveAppliedTheme(theme, systemPrefersDark) {
35
- if (theme === 'auto')
36
- return systemPrefersDark ? 'dark' : 'light';
37
- return theme;
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
- * 解析最终是否降级动画:显式 boolean 优先,'auto' 跟随系统
41
- * prefers-reduced-motion。纯函数(红线 #2),系统态由调用方注入。
42
- * 返回 true 表示应降级(reduce)。
98
+ * 注册 media query 的 match/unmatch 回调,返回注销函数。
99
+ * 逐字对齐 Semi `_utils` 的 registerMediaQuery:SSR(无 window)返回 noop;
100
+ * 优先 addEventListener,回退老浏览器 addListener;callInInit 默认立即回调一次。
43
101
  */
44
- export function resolveReducedMotion(input, systemReduced) {
45
- if (typeof input === 'boolean')
46
- return input;
47
- return systemReduced;
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;;;;;GAKG;AAqCH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAsB,EAAE,KAAkB;IACpE,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QAClC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;QAC/B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QACjD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QACjD,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa;KAC3D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB,EAAE,iBAA0B;IAChF,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAyB,EAAE,aAAsB;IACpF,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,aAAa,CAAC;AACvB,CAAC"}
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, resolveAppliedTheme, resolveReducedMotion, } from './config-provider.js';
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, { theme: 'dark' });
9
- expect(merged.theme).toBe('dark');
10
- expect(merged.dir).toBe('ltr'); // inherited
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, theme: 'dark', size: 'large' };
15
- // child omits theme/size entirely → they inherit
16
- const merged = mergeConfig(parent, { dir: 'rtl' });
17
- expect(merged.theme).toBe('dark'); // inherited
18
- expect(merged.dir).toBe('rtl'); // overridden
19
- expect(merged.size).toBe('large'); // inherited
20
- });
21
- it('nested merge: inner only overrides dir, keeps outer theme/locale-adjacent fields', () => {
22
- const outer = mergeConfig(DEFAULT_CONFIG, { theme: 'dark', size: 'small' });
23
- const inner = mergeConfig(outer, { dir: 'rtl' });
24
- expect(inner).toEqual({
25
- theme: 'dark',
26
- dir: 'rtl',
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('merges numeric and boolean fields', () => {
34
- const merged = mergeConfig(DEFAULT_CONFIG, { zIndexBase: 2000, transition: false });
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('resolveAppliedTheme', () => {
55
- it('passes through light/dark regardless of system', () => {
56
- expect(resolveAppliedTheme('light', true)).toBe('light');
57
- expect(resolveAppliedTheme('light', false)).toBe('light');
58
- expect(resolveAppliedTheme('dark', false)).toBe('dark');
59
- expect(resolveAppliedTheme('dark', true)).toBe('dark');
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('auto follows system prefers-color-scheme', () => {
62
- expect(resolveAppliedTheme('auto', true)).toBe('dark');
63
- expect(resolveAppliedTheme('auto', false)).toBe('light');
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('resolveReducedMotion', () => {
67
- it('explicit boolean wins over system', () => {
68
- expect(resolveReducedMotion(true, false)).toBe(true);
69
- expect(resolveReducedMotion(false, true)).toBe(false);
70
- });
71
- it('auto follows system prefers-reduced-motion', () => {
72
- expect(resolveReducedMotion('auto', true)).toBe(true);
73
- expect(resolveReducedMotion('auto', false)).toBe(false);
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":"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"}
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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"}