ranui 0.1.10-alpha.9 → 0.2.0-alpha.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 (326) hide show
  1. package/README.md +397 -0
  2. package/README.zh-CN.md +216 -37
  3. package/dist/assets/image/failImage.d.ts +2 -0
  4. package/dist/bin/generate-component-api.d.ts +1 -0
  5. package/dist/bin/generate-style-docs.d.ts +1 -0
  6. package/dist/build/config.bundle.d.ts +2 -0
  7. package/dist/build/config.d.ts +3 -0
  8. package/dist/build/config.es.d.ts +2 -0
  9. package/dist/build/config.umd.d.ts +1 -0
  10. package/dist/builder.d.ts +11 -0
  11. package/dist/builder.js +39 -0
  12. package/dist/button-DukaD6uL.js +117 -0
  13. package/dist/button.js +3 -5
  14. package/dist/card-DQUJoDUQ.js +60 -0
  15. package/dist/card.js +5 -0
  16. package/dist/checkbox-iHZQb-yQ.js +94 -0
  17. package/dist/checkbox.js +3 -5
  18. package/dist/colorpicker-Ch67dWa_.js +302 -0
  19. package/dist/colorpicker.js +3 -9
  20. package/dist/components/button/index.d.ts +44 -0
  21. package/dist/components/card/index.d.ts +21 -0
  22. package/dist/components/checkbox/index.d.ts +35 -0
  23. package/dist/components/colorpicker/index.d.ts +88 -0
  24. package/dist/components/dropdown/index.d.ts +32 -0
  25. package/dist/components/form/index.d.ts +15 -0
  26. package/dist/components/icon/index.d.ts +58 -0
  27. package/dist/components/image/index.d.ts +25 -0
  28. package/dist/components/input/index.d.ts +229 -0
  29. package/dist/components/link/index.d.ts +21 -0
  30. package/dist/components/loading/index.d.ts +76 -0
  31. package/dist/components/math/index.d.ts +16 -0
  32. package/dist/components/message/container.d.ts +8 -0
  33. package/dist/components/message/index.d.ts +32 -0
  34. package/dist/components/modal/index.d.ts +100 -0
  35. package/dist/components/player/core/constants.d.ts +5 -0
  36. package/dist/components/player/core/controller.d.ts +33 -0
  37. package/dist/components/player/core/events.d.ts +10 -0
  38. package/dist/components/player/core/fullscreen.d.ts +5 -0
  39. package/dist/components/player/core/levels.d.ts +20 -0
  40. package/dist/components/player/core/media.d.ts +50 -0
  41. package/dist/components/player/core/playback.d.ts +14 -0
  42. package/dist/components/player/core/progress.d.ts +2 -0
  43. package/dist/components/player/core/state.d.ts +27 -0
  44. package/dist/components/player/core/view.d.ts +39 -0
  45. package/dist/components/player/index.d.ts +277 -0
  46. package/dist/components/popover/content/index.d.ts +12 -0
  47. package/dist/components/popover/index.d.ts +95 -0
  48. package/dist/components/progress/index.d.ts +40 -0
  49. package/dist/components/radar/index.d.ts +52 -0
  50. package/dist/components/route/index.d.ts +26 -0
  51. package/dist/components/router/index.d.ts +24 -0
  52. package/dist/components/scratch/index.d.ts +19 -0
  53. package/dist/components/section/index.d.ts +23 -0
  54. package/dist/components/select/dropdown-item/index.d.ts +21 -0
  55. package/dist/components/select/index.d.ts +135 -0
  56. package/dist/components/select/option/index.d.ts +19 -0
  57. package/dist/components/skeleton/index.d.ts +13 -0
  58. package/dist/components/tab/index.d.ts +58 -0
  59. package/dist/components/tabpane/index.d.ts +33 -0
  60. package/dist/demo/i18n.d.ts +4 -0
  61. package/dist/demo/index.d.ts +3 -0
  62. package/dist/demo/register-icons.d.ts +1 -0
  63. package/dist/dropdown-C5362qTy.js +82 -0
  64. package/dist/dropdown.js +6 -0
  65. package/dist/events-C59wGdni.js +30 -0
  66. package/dist/factory-BdsO0dEW.js +165 -0
  67. package/dist/form-05Lxxl3D.js +44 -0
  68. package/dist/form.js +5 -0
  69. package/dist/icon-DmoEnao5.js +165 -0
  70. package/dist/icon.js +4 -4
  71. package/dist/{index-KS2nvVcO.js → image-6GayFDqX.js} +58 -71
  72. package/dist/image.js +3 -2
  73. package/dist/index.cjs +35 -0
  74. package/dist/index.d.ts +277 -114
  75. package/dist/index.iife.js +306 -0
  76. package/dist/index.js +78 -38
  77. package/dist/input-DoraIb3x.js +198 -0
  78. package/dist/input.js +2 -3
  79. package/dist/katex-es-Bpesphgp.js +23682 -0
  80. package/dist/katex-es-Cnq5Pk8K.cjs +261 -0
  81. package/dist/link-BW-gvrpN.js +77 -0
  82. package/dist/link.js +6 -0
  83. package/dist/loading-Mko22ncl.js +206 -0
  84. package/dist/loading.js +4 -6
  85. package/dist/math-B5PpSnFR.js +52 -0
  86. package/dist/math.js +2 -4
  87. package/dist/message-CQENvkoi.js +137 -0
  88. package/dist/message.js +3 -4
  89. package/dist/mocks-CMGoftIc.js +179 -0
  90. package/dist/modal-DruDj3AB.js +350 -0
  91. package/dist/modal.js +3 -2
  92. package/dist/player-CvfmwWUa.js +13536 -0
  93. package/dist/player.js +3 -6
  94. package/dist/playwright.config.d.ts +2 -0
  95. package/dist/plugins/load-svg.d.ts +9 -0
  96. package/dist/popover-BCvHwLZb.js +213 -0
  97. package/dist/popover.js +3 -5
  98. package/dist/progress-BWkNf2J5.js +123 -0
  99. package/dist/progress.js +3 -5
  100. package/dist/radar-CWsawt2g.js +181 -0
  101. package/dist/radar.js +3 -4
  102. package/dist/ranui.css +1 -0
  103. package/dist/route-BY_E6-2C.js +88 -0
  104. package/dist/route.js +6 -0
  105. package/dist/router-BDcv4F-2.js +79 -0
  106. package/dist/router.js +6 -0
  107. package/dist/scratch-Dbd9G6Q6.js +60 -0
  108. package/dist/scratch.js +4 -0
  109. package/dist/section-CNTvgdQ-.js +63 -0
  110. package/dist/section.js +5 -0
  111. package/dist/select-BmhCUTLb.js +433 -0
  112. package/dist/select.js +3 -8
  113. package/dist/signal-XHfNsQNW.js +57 -0
  114. package/dist/skeleton-DPv9nFhL.js +32 -0
  115. package/dist/skeleton.js +3 -2
  116. package/dist/ssg.js +21 -0
  117. package/dist/ssr-DSGwPtEd.js +34 -0
  118. package/dist/ssr-stream.d.ts +1 -0
  119. package/dist/ssr-stream.js +87 -0
  120. package/dist/ssr.d.ts +1 -0
  121. package/dist/ssr.js +7 -0
  122. package/dist/style.d.ts +1 -0
  123. package/dist/style.js +0 -0
  124. package/dist/tab-C9swK-hm.js +185 -0
  125. package/dist/tab.js +3 -4
  126. package/dist/tabpane-B_M-Jokw.js +87 -0
  127. package/dist/tabpane.js +3 -2
  128. package/dist/test/e2e/button.spec.d.ts +1 -0
  129. package/dist/test/e2e/checkbox.spec.d.ts +1 -0
  130. package/dist/test/e2e/helpers.d.ts +13 -0
  131. package/dist/test/e2e/icon.spec.d.ts +1 -0
  132. package/dist/test/e2e/image.spec.d.ts +1 -0
  133. package/dist/test/e2e/input.spec.d.ts +1 -0
  134. package/dist/test/e2e/loading.spec.d.ts +1 -0
  135. package/dist/test/e2e/message.spec.d.ts +1 -0
  136. package/dist/test/e2e/modal.spec.d.ts +1 -0
  137. package/dist/test/e2e/popover.spec.d.ts +1 -0
  138. package/dist/test/e2e/progress.spec.d.ts +1 -0
  139. package/dist/test/e2e/radar.spec.d.ts +1 -0
  140. package/dist/test/e2e/select.spec.d.ts +1 -0
  141. package/dist/test/e2e/skeleton.spec.d.ts +1 -0
  142. package/dist/test/e2e/tab.spec.d.ts +1 -0
  143. package/dist/test/e2e/visual/colorpicker.spec.d.ts +1 -0
  144. package/dist/test/e2e/visual/components.spec.d.ts +1 -0
  145. package/dist/test/e2e/visual/player.spec.d.ts +1 -0
  146. package/dist/test/integration/composition.test.d.ts +23 -0
  147. package/dist/test/setup.d.ts +0 -0
  148. package/dist/test/ssr/builder.core.ssr.test.d.ts +1 -0
  149. package/dist/test/ssr/builder.factory.ssr.test.d.ts +1 -0
  150. package/dist/test/ssr/builder.mocks.test.d.ts +1 -0
  151. package/dist/test/ssr/components/button.test.d.ts +1 -0
  152. package/dist/test/ssr/css-vars.test.d.ts +1 -0
  153. package/dist/test/ssr/registry.test.d.ts +1 -0
  154. package/dist/test/ssr/router.ssg.test.d.ts +2 -0
  155. package/dist/test/ssr/snapshots/button.test.d.ts +1 -0
  156. package/dist/test/ssr/stream.test.d.ts +2 -0
  157. package/dist/test/ssr/theme.tokens.ssr.test.d.ts +1 -0
  158. package/dist/test/unit/builder.core.browser.test.d.ts +1 -0
  159. package/dist/test/unit/builder.escape.test.d.ts +1 -0
  160. package/dist/test/unit/builder.selectors.test.d.ts +1 -0
  161. package/dist/test/unit/button.contract.test.d.ts +1 -0
  162. package/dist/test/unit/card.contract.test.d.ts +1 -0
  163. package/dist/test/unit/checkbox.contract.test.d.ts +1 -0
  164. package/dist/test/unit/colorpicker.color.utils.test.d.ts +1 -0
  165. package/dist/test/unit/colorpicker.contract.test.d.ts +1 -0
  166. package/dist/test/unit/colorpicker.methods.test.d.ts +1 -0
  167. package/dist/test/unit/component.helpers.test.d.ts +1 -0
  168. package/dist/test/unit/dropdown-item.contract.test.d.ts +1 -0
  169. package/dist/test/unit/dropdown.contract.test.d.ts +1 -0
  170. package/dist/test/unit/form.contract.test.d.ts +1 -0
  171. package/dist/test/unit/helpers/component.d.ts +3 -0
  172. package/dist/test/unit/helpers/dom.d.ts +2 -0
  173. package/dist/test/unit/icon.contract.test.d.ts +1 -0
  174. package/dist/test/unit/image.contract.test.d.ts +1 -0
  175. package/dist/test/unit/input.contract.test.d.ts +1 -0
  176. package/dist/test/unit/link.contract.test.d.ts +1 -0
  177. package/dist/test/unit/loading.contract.test.d.ts +1 -0
  178. package/dist/test/unit/math.contract.test.d.ts +1 -0
  179. package/dist/test/unit/message.component.test.d.ts +1 -0
  180. package/dist/test/unit/message.container.test.d.ts +1 -0
  181. package/dist/test/unit/modal.contract.test.d.ts +1 -0
  182. package/dist/test/unit/option.contract.test.d.ts +1 -0
  183. package/dist/test/unit/package-exports.source.test.d.ts +1 -0
  184. package/dist/test/unit/player-controls.test.d.ts +1 -0
  185. package/dist/test/unit/player-core.test.d.ts +1 -0
  186. package/dist/test/unit/player-event-handlers.test.d.ts +1 -0
  187. package/dist/test/unit/player-events.test.d.ts +1 -0
  188. package/dist/test/unit/player-fullscreen.test.d.ts +1 -0
  189. package/dist/test/unit/player-interactions.test.d.ts +1 -0
  190. package/dist/test/unit/player-levels.test.d.ts +1 -0
  191. package/dist/test/unit/player-media.test.d.ts +1 -0
  192. package/dist/test/unit/player-playback.test.d.ts +1 -0
  193. package/dist/test/unit/player.contract.test.d.ts +1 -0
  194. package/dist/test/unit/popover-accessibility.test.d.ts +1 -0
  195. package/dist/test/unit/popover.contract.test.d.ts +2 -0
  196. package/dist/test/unit/progress.contract.test.d.ts +1 -0
  197. package/dist/test/unit/radar.contract.test.d.ts +1 -0
  198. package/dist/test/unit/route.contract.test.d.ts +1 -0
  199. package/dist/test/unit/router.contract.test.d.ts +2 -0
  200. package/dist/test/unit/scratch.contract.test.d.ts +1 -0
  201. package/dist/test/unit/select-accessibility.test.d.ts +1 -0
  202. package/dist/test/unit/select-option.contract.test.d.ts +1 -0
  203. package/dist/test/unit/select.contract.test.d.ts +1 -0
  204. package/dist/test/unit/skeleton.contract.test.d.ts +1 -0
  205. package/dist/test/unit/ssr.test.d.ts +1 -0
  206. package/dist/test/unit/tab.contract.test.d.ts +2 -0
  207. package/dist/test/unit/theme.semantic-tokens.test.d.ts +1 -0
  208. package/dist/test/unit/theme.skin-tokens.test.d.ts +1 -0
  209. package/dist/test/unit/utils.dom.test.d.ts +1 -0
  210. package/dist/test/unit/utils.error.test.d.ts +1 -0
  211. package/dist/test/unit/utils.i18n.test.d.ts +1 -0
  212. package/dist/test/unit/utils.image.test.d.ts +1 -0
  213. package/dist/test/unit/utils.math.test.d.ts +1 -0
  214. package/dist/test/unit/utils.router.test.d.ts +1 -0
  215. package/dist/test/unit/utils.signal.test.d.ts +1 -0
  216. package/dist/test/unit/utils.ssr-stream.test.d.ts +1 -0
  217. package/dist/test/unit/utils.style.test.d.ts +1 -0
  218. package/dist/test/unit/utils.theme.test.d.ts +1 -0
  219. package/dist/test/unit/utils.tween.test.d.ts +1 -0
  220. package/dist/tsconfig.json +8 -8
  221. package/dist/typings.d.ts +163 -114
  222. package/dist/utils/builder/core.d.ts +70 -0
  223. package/dist/utils/builder/env.d.ts +1 -0
  224. package/dist/utils/builder/escape.d.ts +2 -0
  225. package/dist/utils/builder/events.d.ts +55 -0
  226. package/dist/utils/builder/factory.d.ts +18 -0
  227. package/dist/utils/builder/index.d.ts +9 -0
  228. package/dist/utils/builder/mocks.d.ts +62 -0
  229. package/dist/utils/builder/selectors.d.ts +4 -0
  230. package/dist/utils/builder/signal.d.ts +87 -0
  231. package/dist/utils/color.d.ts +52 -0
  232. package/dist/utils/component.d.ts +16 -0
  233. package/dist/utils/dom.d.ts +39 -0
  234. package/dist/utils/error.d.ts +6 -0
  235. package/dist/utils/i18n/index.d.ts +53 -0
  236. package/dist/utils/i18n.js +88 -0
  237. package/dist/utils/image.d.ts +39 -0
  238. package/dist/utils/index.d.ts +8 -0
  239. package/dist/utils/math.d.ts +26 -0
  240. package/dist/utils/router/index.d.ts +128 -0
  241. package/dist/utils/router.js +197 -0
  242. package/dist/utils/ssg.d.ts +49 -0
  243. package/dist/utils/ssr-registry.d.ts +8 -0
  244. package/dist/utils/ssr-stream.d.ts +23 -0
  245. package/dist/utils/ssr.d.ts +17 -0
  246. package/dist/utils/style.d.ts +12 -0
  247. package/dist/utils/theme.d.ts +9 -0
  248. package/dist/utils/tween.d.ts +21 -0
  249. package/dist/utils/video.d.ts +40 -0
  250. package/dist/utils-D4pPF77E.js +689 -0
  251. package/dist/vite.config.d.ts +6 -0
  252. package/dist/vitest.config.d.ts +2 -0
  253. package/dist/vitest.config.ssr.d.ts +2 -0
  254. package/docs/COMPONENTS.md +326 -0
  255. package/docs/DESIGN.md +182 -0
  256. package/docs/style-tokens-public.md +880 -0
  257. package/package.json +136 -77
  258. package/typings.d.ts +163 -114
  259. package/dist/_commonjs-dynamic-modules-DLbDWi6a.js +0 -12
  260. package/dist/add-user-BN1JlY7e.js +0 -4
  261. package/dist/arrow-down-B_hCY3Wt.js +0 -662
  262. package/dist/book-nTEFXU2x.js +0 -4
  263. package/dist/check-circle-fill-B_pd8ZSs.js +0 -4
  264. package/dist/check-circle-szyAJiap.js +0 -4
  265. package/dist/close-CFnkhudp.js +0 -4
  266. package/dist/close-circle-CwmuN2C6.js +0 -4
  267. package/dist/close-circle-fill-jSqPPw9i.js +0 -4
  268. package/dist/colz-DJZvo_8B.js +0 -232
  269. package/dist/docx-CHkPTdGU.js +0 -3665
  270. package/dist/drop-4j4abxje.js +0 -36
  271. package/dist/eye-D_mEt17f.js +0 -4
  272. package/dist/eye-close-BVr3NJtg.js +0 -4
  273. package/dist/home-BUQ4USMk.js +0 -4
  274. package/dist/iconShadowless.js +0 -6
  275. package/dist/index-15M0olqa.js +0 -204
  276. package/dist/index-1v568_nq.js +0 -140
  277. package/dist/index-B897keW5.js +0 -279
  278. package/dist/index-BZR0HaP2.js +0 -40
  279. package/dist/index-B_GuEcTd.js +0 -9575
  280. package/dist/index-Bc2Bcl8D.js +0 -63701
  281. package/dist/index-C4Sv0T51.js +0 -495
  282. package/dist/index-C6RcMHoH.js +0 -187
  283. package/dist/index-C9z10IgG.js +0 -103
  284. package/dist/index-CFjEuvBW.js +0 -308
  285. package/dist/index-CGEx9VOA.js +0 -17106
  286. package/dist/index-CGYfjKUV.js +0 -72
  287. package/dist/index-CQTJoWhb.js +0 -19
  288. package/dist/index-CiWwvEMM.js +0 -511
  289. package/dist/index-CkM9ENTf.js +0 -496
  290. package/dist/index-CtVOgBDk.js +0 -659
  291. package/dist/index-D4qUro5V.js +0 -279
  292. package/dist/index-D4y9c1Dj.js +0 -310
  293. package/dist/index-DAxs7Dd2.js +0 -119
  294. package/dist/index-DC5EA657.js +0 -91
  295. package/dist/index-DJZmDHz-.js +0 -146
  296. package/dist/index-D_CA5VDZ.js +0 -158
  297. package/dist/index-WfFw4LJT.js +0 -490
  298. package/dist/index-mhFL9MJp.js +0 -320
  299. package/dist/info-circle-COnL5bTJ.js +0 -4
  300. package/dist/info-circle-fill-CFeVMdci.js +0 -4
  301. package/dist/inputShadowless.js +0 -6
  302. package/dist/jszip.min-Dhs3nUkD.js +0 -2346
  303. package/dist/katex-es-B5r5vt3m.js +0 -14628
  304. package/dist/loading-Dcc5RApI.js +0 -4
  305. package/dist/loading-scene-BMc2wqKm.js +0 -4
  306. package/dist/lock-Cr7BnmWN.js +0 -4
  307. package/dist/message-D36_Zo2l.js +0 -4
  308. package/dist/pdf-Cx0VWKFo.js +0 -118
  309. package/dist/power-off-lQRbiBak.js +0 -4
  310. package/dist/preview-CJbz9GjO.js +0 -4
  311. package/dist/preview.js +0 -7
  312. package/dist/selectShadowless.js +0 -564
  313. package/dist/setting-DemlgzVC.js +0 -4
  314. package/dist/shadowless.js +0 -8
  315. package/dist/sprite-CH2zLtZy.js +0 -141
  316. package/dist/style.css +0 -1
  317. package/dist/team-tl4NJXPC.js +0 -4
  318. package/dist/umd/index.umd.cjs +0 -60
  319. package/dist/umd/shadowless/shadowless.umd.cjs +0 -1
  320. package/dist/umd/shadowless/style.css +0 -1
  321. package/dist/umd/style.css +0 -1
  322. package/dist/unlock-CeU74z9n.js +0 -4
  323. package/dist/user-B-eVXwuk.js +0 -4
  324. package/dist/warning-circle-DDUgEDIv.js +0 -4
  325. package/dist/warning-circle-fill-lODUKz0i.js +0 -4
  326. package/readme.md +0 -195
@@ -0,0 +1,62 @@
1
+ /**
2
+ * A minimal mock of DocumentFragment for SSR environments.
3
+ */
4
+ export declare class DocumentFragmentMock {
5
+ childrenList: (HTMLElementMock | string)[];
6
+ appendChild(node: any): any;
7
+ serialize(): string;
8
+ querySelector(selector: string): HTMLElementMock | null;
9
+ querySelectorAll(selector: string): HTMLElementMock[];
10
+ }
11
+ /**
12
+ * A robust mock of HTMLElement for SSR environments.
13
+ */
14
+ export declare class HTMLElementMock {
15
+ tagName: string;
16
+ attributes: Map<string, string>;
17
+ inlineStyles: Map<string, string>;
18
+ childrenList: (HTMLElementMock | string | DocumentFragmentMock)[];
19
+ shadowRoot: ShadowRootMock | null;
20
+ textContent: string | null;
21
+ content?: DocumentFragmentMock;
22
+ private eventListeners;
23
+ style: {
24
+ setProperty: (k: string, v: string) => void;
25
+ removeProperty: (k: string) => boolean;
26
+ };
27
+ classList: {
28
+ add: (...names: string[]) => void;
29
+ remove: (...names: string[]) => void;
30
+ toggle: (name: string) => void;
31
+ contains: (name: string) => boolean;
32
+ };
33
+ private _innerHTML;
34
+ get innerHTML(): string;
35
+ set innerHTML(value: string);
36
+ constructor(tag?: string);
37
+ get hidden(): boolean;
38
+ set hidden(val: boolean);
39
+ setAttribute(k: string, v: string): void;
40
+ getAttribute(k: string): string | null;
41
+ removeAttribute(k: string): void;
42
+ hasAttribute(k: string): boolean;
43
+ appendChild(node: any): any;
44
+ attachShadow(options: ShadowRootInit): ShadowRoot;
45
+ querySelector(selector: string): HTMLElementMock | null;
46
+ querySelectorAll(selector: string): HTMLElementMock[];
47
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject): void;
48
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject): void;
49
+ dispatchEvent(event: Event): boolean;
50
+ serialize(tagNameOverride?: string): string;
51
+ }
52
+ export declare class ShadowRootMock {
53
+ host: HTMLElementMock;
54
+ options: ShadowRootInit;
55
+ childrenList: (HTMLElementMock | string | DocumentFragmentMock)[];
56
+ adoptedStyleSheets: string[];
57
+ constructor(host: HTMLElementMock, options: ShadowRootInit);
58
+ appendChild(node: any): any;
59
+ querySelector(selector: string): HTMLElementMock | null;
60
+ querySelectorAll(selector: string): HTMLElementMock[];
61
+ serialize(): string;
62
+ }
@@ -0,0 +1,4 @@
1
+ import type { DocumentFragmentMock, HTMLElementMock } from './mocks';
2
+ export type MockNode = HTMLElementMock | DocumentFragmentMock | string;
3
+ export declare const matchSelector: (node: HTMLElementMock, selector: string) => boolean;
4
+ export declare const collectMatches: (nodes: MockNode[], selector: string, result: HTMLElementMock[]) => void;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Reactive primitives — signal / createEffect / computed / batch
3
+ *
4
+ * Design reference: SwiftUI @Observable + Solid.js fine-grained reactivity
5
+ *
6
+ * SwiftUI's core model: View = f(State)
7
+ * @State / @Observable — reactive source (≈ signal)
8
+ * body — pure function of state, auto-tracks reads (≈ createEffect)
9
+ * computed property — derived, cached (≈ computed)
10
+ *
11
+ * Two improvements over a naive signal implementation, both borrowed from Solid.js:
12
+ *
13
+ * 1. Stale subscription cleanup
14
+ * Before each re-run, an effect removes itself from every signal it previously
15
+ * subscribed to, then re-subscribes only to signals read in this run.
16
+ * Without this, conditional reads leave permanent ghost subscriptions that
17
+ * trigger effects for signals they no longer care about.
18
+ *
19
+ * 2. Batching
20
+ * batch(fn) defers all effect executions until fn returns, then flushes once.
21
+ * Mirrors SwiftUI's automatic coalescing of mutations in the same event handler.
22
+ * Without this, setting two signals triggers each dependent effect twice.
23
+ */
24
+ export type Getter<T> = () => T;
25
+ export type Setter<T> = (value: T | ((prev: T) => T)) => void;
26
+ export interface SignalOptions<T> {
27
+ /** Custom equality check. Defaults to Object.is. Return true to skip update. */
28
+ equals?: (prev: T, next: T) => boolean;
29
+ }
30
+ /**
31
+ * Create a reactive value. Returns a [getter, setter] tuple.
32
+ *
33
+ * const [count, setCount] = signal(0);
34
+ * count() // read — auto-tracks inside createEffect / computed
35
+ * setCount(1) // write — notifies dependents; skips if value unchanged
36
+ * setCount(n => n + 1) // updater function form
37
+ */
38
+ export declare function signal<T>(initial: T, options?: SignalOptions<T>): [Getter<T>, Setter<T>];
39
+ /**
40
+ * Run fn immediately and re-run it whenever any signal read inside it changes.
41
+ * Returns a dispose function that stops the effect and cleans up subscriptions.
42
+ *
43
+ * Before each re-run, the effect removes itself from every signal it previously
44
+ * subscribed to (stale-subscription cleanup), then re-subscribes only to signals
45
+ * read in the new run.
46
+ *
47
+ * fn may return a cleanup function — called before each re-run and on dispose.
48
+ *
49
+ * const dispose = createEffect(() => {
50
+ * document.title = `Count: ${count()}`;
51
+ * return () => { document.title = ''; }; // optional cleanup
52
+ * });
53
+ *
54
+ * dispose(); // stop tracking, remove from all signals
55
+ */
56
+ export declare function createEffect(fn: () => void | (() => void)): () => void;
57
+ /**
58
+ * Derived read-only signal. Recomputes when its dependencies change.
59
+ *
60
+ * const [firstName, setFirstName] = signal('Jane');
61
+ * const [lastName, setLastName] = signal('Doe');
62
+ * const fullName = computed(() => `${firstName()} ${lastName()}`);
63
+ *
64
+ * fullName() // 'Jane Doe'
65
+ * setFirstName('John');
66
+ * fullName() // 'John Doe'
67
+ */
68
+ export declare function computed<T>(fn: () => T): Getter<T>;
69
+ /**
70
+ * Run multiple signal writes as a single atomic update.
71
+ * All effects are deferred until fn returns, then flushed once (deduplicated).
72
+ *
73
+ * Mirrors SwiftUI's automatic coalescing of mutations within the same event handler.
74
+ *
75
+ * // Without batch: each setter triggers effects independently (2 runs)
76
+ * setFirstName('John');
77
+ * setLastName('Smith');
78
+ *
79
+ * // With batch: one flush after both writes (1 run)
80
+ * batch(() => {
81
+ * setFirstName('John');
82
+ * setLastName('Smith');
83
+ * });
84
+ *
85
+ * Nested batch() calls are safe — inner calls are absorbed by the outer batch.
86
+ */
87
+ export declare function batch(fn: () => void): void;
@@ -0,0 +1,52 @@
1
+ export declare const hsv2hsl: (h: number, s: number, v: number) => {
2
+ h: number;
3
+ s: number;
4
+ l: number;
5
+ };
6
+ export declare const hex2alpha: (aa: string) => number;
7
+ export declare const hex2hsl: (hex: string) => {
8
+ h: number;
9
+ s: number;
10
+ l: number;
11
+ };
12
+ export declare const hex2hsv: (hex: string) => {
13
+ h: number;
14
+ s: number;
15
+ v: number;
16
+ };
17
+ export declare const hex2rgb: (hex: string) => {
18
+ r: number;
19
+ g: number;
20
+ b: number;
21
+ };
22
+ export declare const rgb2hsv: (r: number, g: number, b: number) => {
23
+ h: number;
24
+ s: number;
25
+ v: number;
26
+ };
27
+ export declare const hsl2hsv: (h: number, s: number, l: number) => {
28
+ h: number;
29
+ s: number;
30
+ v: number;
31
+ };
32
+ export declare const hsl2rgb: (h: number, s: number, l: number) => {
33
+ r: number;
34
+ g: number;
35
+ b: number;
36
+ };
37
+ export declare const hsv2rgb: (h: number, s: number, v: number) => {
38
+ r: number;
39
+ g: number;
40
+ b: number;
41
+ };
42
+ export declare const rgb2hex: (r: number, g: number, b: number) => string;
43
+ export declare const rgba: (r: number, g: number, b: number, a: number) => string;
44
+ export declare const rgba2hex: (r: number, g: number, b: number, a: number) => string;
45
+ export declare const rgba2rgb: (r: number, g: number, b: number, a: number) => {
46
+ r: number;
47
+ g: number;
48
+ b: number;
49
+ };
50
+ export declare const HEX_COLOR_REGEX: RegExp;
51
+ export declare const RGB_REGEX: RegExp;
52
+ export declare const RGBA_REGEX: RegExp;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Honour the user's "reduce motion" OS setting in every component. Adopted into
3
+ * each shadow root (last, so it overrides the component's own transitions), and
4
+ * scoped to the shadow tree by `*`. Only active when the user has the preference set.
5
+ */
6
+ export declare const REDUCED_MOTION_CSS: string;
7
+ export declare const ensureShadowRoot: (host: HTMLElement, cssText?: string, options?: ShadowRootInit) => ShadowRoot;
8
+ export declare const ensureShadowElement: <T extends HTMLElement>(root: ShadowRoot, selector: string, factory: () => T) => T;
9
+ export declare const getStringAttribute: (element: HTMLElement, name: string, fallback?: string) => string;
10
+ export declare const setStringAttribute: (element: HTMLElement, name: string, value: string | null | undefined, options?: {
11
+ removeEmpty?: boolean;
12
+ }) => void;
13
+ export declare const setBooleanAttribute: (element: HTMLElement, name: string, value: boolean, options?: {
14
+ aria?: string;
15
+ }) => void;
16
+ export declare const syncSheetAttribute: (host: HTMLElement, root: ShadowRoot, name: string, oldValue: string | null, newValue: string | null) => void;
@@ -0,0 +1,39 @@
1
+ export declare const falseList: (string | boolean | null | undefined)[];
2
+ /**
3
+ * @description: 判断这个元素上是否有 disabled 属性
4
+ * @param {Element} element
5
+ * @return {*}
6
+ */
7
+ export declare const isDisabled: (element: Element) => boolean;
8
+ /**
9
+ * @description: 查询指定元素的子级元素,删除他们的某一个指定 class
10
+ * @param {Element} parent
11
+ * @param {string} deleteClass
12
+ */
13
+ export declare const removeClassToElementChild: (parent: Element, deleteClass: string) => void;
14
+ /**
15
+ * @description: 创建 icon 的文档示例
16
+ */
17
+ export declare const createIconList: () => void;
18
+ /**
19
+ * @description: 动态加载脚本
20
+ */
21
+ export declare const loadScript: ({ type, content }: {
22
+ type: string;
23
+ content: string;
24
+ }) => Promise<{
25
+ success: boolean;
26
+ }>;
27
+ /**
28
+ * 转义 HTML 特殊字符,防止 XSS
29
+ */
30
+ export declare const escapeHtml: (unsafe: any) => string;
31
+ /**
32
+ * 极简的声明式模板实现
33
+ * 将模板字符串解析为 DocumentFragment,并对动态部分进行转义防止 XSS
34
+ */
35
+ export declare const html: (strings: TemplateStringsArray, ...values: any[]) => DocumentFragment;
36
+ /**
37
+ * 根据文件扩展名获取 MIME 类型
38
+ */
39
+ export declare function getMimeTypeFromExtension(fileName: string): string;
@@ -0,0 +1,6 @@
1
+ export interface CustomErrorType {
2
+ new (m?: string): {
3
+ message: string;
4
+ };
5
+ }
6
+ export declare function createCustomError(msg?: string): CustomErrorType;
@@ -0,0 +1,53 @@
1
+ export type MessageDict = Record<string, string>;
2
+ export type LocaleMessages = Record<string, MessageDict>;
3
+ export type TranslateParams = Record<string, string | number>;
4
+ export type LocaleChangeHandler = (locale: string) => void;
5
+ export interface I18nConfig {
6
+ /** Initial locale. Overridden by a persisted choice when `persist` is on. */
7
+ locale?: string;
8
+ /** Locale used when a key is missing in the active locale. Defaults to 'en'. */
9
+ fallbackLocale?: string;
10
+ /** Locale → key → string. */
11
+ messages?: LocaleMessages;
12
+ /** Persist the active locale to localStorage. Defaults to false. */
13
+ persist?: boolean;
14
+ /** localStorage key used when `persist` is on. Defaults to 'ran-locale'. */
15
+ storageKey?: string;
16
+ /** Seed the initial locale from `navigator.language` when nothing else applies. */
17
+ detectNavigator?: boolean;
18
+ }
19
+ export declare class I18nCore {
20
+ private _locale;
21
+ private _fallback;
22
+ private _messages;
23
+ private _persist;
24
+ private _storageKey;
25
+ private _handlers;
26
+ constructor(config?: I18nConfig);
27
+ private _resolveInitialLocale;
28
+ /** The active locale. */
29
+ get locale(): string;
30
+ getLocale(): string;
31
+ /** Switch locale; persists (when enabled) and notifies subscribers. No-op if unchanged. */
32
+ setLocale(locale: string): void;
33
+ /** Merge a dictionary into a locale (creating it if needed). */
34
+ addMessages(locale: string, dict: MessageDict): void;
35
+ getMessages(locale?: string): MessageDict;
36
+ /** Locales that have a dictionary registered. */
37
+ get availableLocales(): string[];
38
+ /**
39
+ * Translate a key against the active locale, falling back to the fallback
40
+ * locale and finally the key itself. `{param}` placeholders are interpolated.
41
+ */
42
+ t(key: string, params?: TranslateParams): string;
43
+ private _interpolate;
44
+ /** Subscribe to locale changes. Returns an unsubscribe function. */
45
+ onChange(handler: LocaleChangeHandler): () => void;
46
+ private _notify;
47
+ /** Remove all subscribers. */
48
+ destroy(): void;
49
+ }
50
+ /** Create and register the global i18n singleton. */
51
+ export declare function createI18n(config?: I18nConfig): I18nCore;
52
+ /** Return the active global i18n instance, or null if none was created. */
53
+ export declare function useI18n(): I18nCore | null;
@@ -0,0 +1,88 @@
1
+ var l = "ran-locale", n = (e) => {
2
+ if (typeof localStorage > "u") return null;
3
+ try {
4
+ return localStorage.getItem(e);
5
+ } catch {
6
+ return null;
7
+ }
8
+ }, i = (e, t) => {
9
+ if (!(typeof localStorage > "u"))
10
+ try {
11
+ localStorage.setItem(e, t);
12
+ } catch {
13
+ }
14
+ }, o = (e) => {
15
+ if (typeof navigator > "u" || !navigator.language) return null;
16
+ const t = navigator.language.toLowerCase();
17
+ return e.find((s) => s.toLowerCase() === t) ?? e.find((s) => t.startsWith(s.toLowerCase())) ?? e.find((s) => t.startsWith(`${s.toLowerCase()}-`)) ?? null;
18
+ }, _ = class {
19
+ _locale;
20
+ _fallback;
21
+ _messages;
22
+ _persist;
23
+ _storageKey;
24
+ _handlers = /* @__PURE__ */ new Set();
25
+ constructor(e = {}) {
26
+ this._messages = { ...e.messages }, this._fallback = e.fallbackLocale ?? "en", this._persist = e.persist ?? !1, this._storageKey = e.storageKey ?? l, this._locale = this._resolveInitialLocale(e);
27
+ }
28
+ _resolveInitialLocale(e) {
29
+ const t = Object.keys(this._messages), s = this._persist ? n(this._storageKey) : null;
30
+ if (s && (this._messages[s] || t.length === 0)) return s;
31
+ if (e.locale) return e.locale;
32
+ if (e.detectNavigator) {
33
+ const r = o(t);
34
+ if (r) return r;
35
+ }
36
+ return this._fallback;
37
+ }
38
+ get locale() {
39
+ return this._locale;
40
+ }
41
+ getLocale() {
42
+ return this._locale;
43
+ }
44
+ setLocale(e) {
45
+ e !== this._locale && (this._locale = e, this._persist && i(this._storageKey, e), this._notify());
46
+ }
47
+ addMessages(e, t) {
48
+ this._messages[e] = {
49
+ ...this._messages[e],
50
+ ...t
51
+ };
52
+ }
53
+ getMessages(e = this._locale) {
54
+ return this._messages[e] ?? {};
55
+ }
56
+ get availableLocales() {
57
+ return Object.keys(this._messages);
58
+ }
59
+ t(e, t) {
60
+ const s = this._messages[this._locale]?.[e] ?? this._messages[this._fallback]?.[e] ?? e;
61
+ return this._interpolate(s, t);
62
+ }
63
+ _interpolate(e, t) {
64
+ return t ? e.replace(/\{(\w+)\}/g, (s, r) => t[r] != null ? String(t[r]) : s) : e;
65
+ }
66
+ onChange(e) {
67
+ return this._handlers.add(e), () => {
68
+ this._handlers.delete(e);
69
+ };
70
+ }
71
+ _notify() {
72
+ for (const e of this._handlers) e(this._locale);
73
+ }
74
+ destroy() {
75
+ this._handlers.clear();
76
+ }
77
+ }, a = null;
78
+ function h(e = {}) {
79
+ return a = new _(e), a;
80
+ }
81
+ function c() {
82
+ return a;
83
+ }
84
+ export {
85
+ _ as I18nCore,
86
+ h as createI18n,
87
+ c as useI18n
88
+ };
@@ -0,0 +1,39 @@
1
+ type ImgType = HTMLImageElement | HTMLCanvasElement;
2
+ /**
3
+ * 根据路径获取图片对象
4
+ * @param { string } src 图片路径
5
+ * @returns { Promise<HTMLImageElement> } 图片标签
6
+ */
7
+ export declare const getImage: (src: string) => Promise<ImgType>;
8
+ /**
9
+ * 切割圆角
10
+ * @param img 将要裁剪的图片对象
11
+ * @param radius 裁剪的圆角半径
12
+ * @returns 返回一个离屏 canvas 用于渲染
13
+ */
14
+ export declare const cutRound: (img: ImgType, radius: number) => ImgType;
15
+ /**
16
+ * 透明度
17
+ * @param img 将要处理的图片对象
18
+ * @param opacity 透明度
19
+ * @returns 返回一个离屏 canvas 用于渲染
20
+ */
21
+ export declare const opacity: (img: ImgType, opacity: number) => ImgType;
22
+ /**
23
+ * 权重矩阵
24
+ * @param radius 模糊半径
25
+ * @param sigma
26
+ * @returns 返回一个权重和为1的矩阵
27
+ */
28
+ export declare const getMatrix: (radius: number, sigma?: number) => number[];
29
+ /**
30
+ * 高斯模糊
31
+ * @param img 将要处理的图片对象
32
+ * @param radius 模糊半径
33
+ * @returns 返回一个离屏 canvas 用于渲染
34
+ */
35
+ export declare const blur: (img: ImgType) => ImgType;
36
+ export declare const getBase64Image: (imageFile: File) => Promise<{
37
+ base64: string | ArrayBuffer | null;
38
+ }>;
39
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from './builder';
2
+ export { falseList, isDisabled, removeClassToElementChild, createIconList, loadScript, html, getMimeTypeFromExtension, } from './dom';
3
+ export * from './error';
4
+ export { signal, createEffect, computed, batch } from './builder/signal';
5
+ export * from './ssr';
6
+ export * from './video';
7
+ export * from './component';
8
+ export * from './theme';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 转换为运算角度
3
+ * @param { number } deg 数学角度
4
+ * @return { number } 运算角度
5
+ */
6
+ export declare const getAngle: (deg: number) => number;
7
+ /**
8
+ * 根据角度计算圆上的点
9
+ * @param { number } deg 运算角度
10
+ * @param { number } r 半径
11
+ * @return { Array<number> } 坐标 [x, y]
12
+ */
13
+ export declare const getArcPointerByDeg: (deg: number, r: number) => [number, number];
14
+ /**
15
+ * 根据点计算切线方程
16
+ * @param { number } x 横坐标
17
+ * @param { number } y 纵坐标
18
+ * @return { Array<number> } [斜率,常数]
19
+ */
20
+ export declare const getTangentByPointer: (x: number, y: number) => Array<number>;
21
+ export declare const fanShapedByArc: (ctx: CanvasRenderingContext2D, maxRadius: number, start: number, end: number, gutter: number) => void;
22
+ export declare const roundRectByArc: (ctx: CanvasRenderingContext2D, ...[x, y, w, h, r]: number[]) => void;
23
+ /**
24
+ * 创建线性渐变色
25
+ */
26
+ export declare const getLinearGradient: (ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, background: string) => void;
@@ -0,0 +1,128 @@
1
+ export interface RouteConfig {
2
+ path: string;
3
+ exact?: boolean;
4
+ meta?: Record<string, unknown>;
5
+ children?: RouteConfig[];
6
+ }
7
+ export type ViewTransitionMode = 'spa' | 'mpa' | 'both';
8
+ export interface RouterConfig {
9
+ mode?: 'history' | 'hash';
10
+ base?: string;
11
+ routes?: RouteConfig[];
12
+ /**
13
+ * Enable View Transitions API.
14
+ *
15
+ * - `'spa'` / `true` — wraps same-document DOM updates in document.startViewTransition().
16
+ * - `'mpa'` — injects `@view-transition { navigation: auto }` for cross-document
17
+ * transitions; hooks pageswap/pagereveal for customization.
18
+ * - `'both'` — spa + mpa combined; best for apps that do both client-side and
19
+ * full-page navigation.
20
+ *
21
+ * Gracefully degrades when the API is not supported.
22
+ */
23
+ viewTransition?: boolean | ViewTransitionMode;
24
+ }
25
+ export interface RouteLocation {
26
+ path: string;
27
+ params: Record<string, string>;
28
+ query: Record<string, string>;
29
+ fullPath: string;
30
+ }
31
+ export type NavigationGuard = (to: RouteLocation, from: RouteLocation | null, next: (redirect?: string | false) => void) => void;
32
+ export type RouteChangeHandler = (to: RouteLocation, from: RouteLocation | null) => void;
33
+ export interface PageSwapEvent extends Event {
34
+ readonly viewTransition: ViewTransitionHandle | null;
35
+ readonly activation: NavigationActivation | null;
36
+ }
37
+ export interface PageRevealEvent extends Event {
38
+ readonly viewTransition: ViewTransitionHandle | null;
39
+ }
40
+ interface NavigationActivation {
41
+ readonly entry: unknown;
42
+ readonly from: unknown;
43
+ readonly navigationType: string;
44
+ }
45
+ interface ViewTransitionHandle {
46
+ readonly ready: Promise<void>;
47
+ readonly finished: Promise<void>;
48
+ readonly updateCallbackDone: Promise<void>;
49
+ skipTransition(): void;
50
+ types?: Set<string>;
51
+ }
52
+ export interface RouterComponentElement extends HTMLElement {
53
+ _syncRoutes(): void;
54
+ }
55
+ export declare function getSSGPath(): string | null;
56
+ export declare function setSSGPath(path: string): void;
57
+ export declare function clearSSGPath(): void;
58
+ export declare class RouterCore {
59
+ private readonly _mode;
60
+ private readonly _base;
61
+ private readonly _routes;
62
+ private readonly _vtMode;
63
+ private readonly _beforeGuards;
64
+ private readonly _afterGuards;
65
+ private readonly _changeHandlers;
66
+ private readonly _pageSwapHandlers;
67
+ private readonly _pageRevealHandlers;
68
+ private readonly _components;
69
+ private _current;
70
+ private _mpaActive;
71
+ constructor(config?: RouterConfig);
72
+ get mode(): 'history' | 'hash';
73
+ get base(): string;
74
+ get routes(): RouteConfig[];
75
+ get currentRoute(): RouteLocation | null;
76
+ private _matchConfigPath;
77
+ /** Return the first RouteConfig whose path matches the given URL path, or null. */
78
+ matchRoute(path: string): RouteConfig | null;
79
+ /** Return all route paths declared in the router config — used to enumerate SSG pages. */
80
+ getStaticPaths(): string[];
81
+ private _enableMpa;
82
+ private _disableMpa;
83
+ private _onPageSwap;
84
+ private _onPageReveal;
85
+ _bind(component: RouterComponentElement): void;
86
+ _unbind(component: RouterComponentElement): void;
87
+ _buildLocation(path: string): RouteLocation;
88
+ _getCurrentPath(): string;
89
+ _notify(): void;
90
+ private _navigate;
91
+ push(path: string): Promise<void>;
92
+ replace(path: string): Promise<void>;
93
+ back(): void;
94
+ forward(): void;
95
+ go(delta: number): void;
96
+ /** Tear down MPA listeners and injected CSS. Call when the router is no longer needed. */
97
+ destroy(): void;
98
+ /** Register a navigation guard. Returns an unsubscribe function. */
99
+ beforeEach(guard: NavigationGuard): () => void;
100
+ /** Register a post-navigation hook. Returns an unsubscribe function. */
101
+ afterEach(handler: RouteChangeHandler): () => void;
102
+ /** Subscribe to route changes. Returns an unsubscribe function. */
103
+ onRouteChange(handler: RouteChangeHandler): () => void;
104
+ /**
105
+ * Subscribe to the cross-document `pageswap` event (fires on the outgoing page).
106
+ * Only active when viewTransition is 'mpa' or 'both'.
107
+ * Returns an unsubscribe function.
108
+ */
109
+ onPageSwap(handler: (e: PageSwapEvent) => void): () => void;
110
+ /**
111
+ * Subscribe to the cross-document `pagereveal` event (fires on the incoming page).
112
+ * Only active when viewTransition is 'mpa' or 'both'.
113
+ * Returns an unsubscribe function.
114
+ */
115
+ onPageReveal(handler: (e: PageRevealEvent) => void): () => void;
116
+ }
117
+ /** Create and register a global RouterCore instance. */
118
+ export declare function createRouter(config?: RouterConfig): RouterCore;
119
+ /** Return the current global RouterCore instance, or null if none was created. */
120
+ export declare function useRouter(): RouterCore | null;
121
+ /**
122
+ * Standalone helper — enable cross-document View Transitions without a router.
123
+ * Injects `@view-transition { navigation: auto }` once and returns a cleanup function.
124
+ *
125
+ * Useful for pure MPA sites that don't need a JS router at all.
126
+ */
127
+ export declare function enableMpaViewTransitions(): () => void;
128
+ export {};