@fecommunity/reactpress-toolkit 3.0.0 → 3.1.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 (500) hide show
  1. package/README.md +194 -309
  2. package/dist/admin/index.d.ts +2 -0
  3. package/dist/admin/index.js +18 -0
  4. package/dist/admin/permissions.d.ts +5 -0
  5. package/dist/admin/permissions.js +33 -0
  6. package/dist/admin/registry.d.ts +62 -0
  7. package/dist/admin/registry.js +79 -0
  8. package/dist/api/HttpClient.d.ts +2 -2
  9. package/dist/api/HttpClient.js +1 -1
  10. package/dist/api/Smtp.d.ts +17 -0
  11. package/dist/api/Smtp.js +15 -0
  12. package/dist/api/instance.d.ts +1 -1
  13. package/dist/api/instance.js +3 -3
  14. package/dist/app/createReactPressApp.d.ts +88 -0
  15. package/dist/app/createReactPressApp.js +262 -0
  16. package/dist/app/createThemeApp.d.ts +6 -0
  17. package/dist/app/createThemeApp.js +47 -0
  18. package/dist/app/devChunkRecovery.d.ts +2 -0
  19. package/dist/app/devChunkRecovery.js +68 -0
  20. package/dist/app/index.d.ts +39 -0
  21. package/dist/app/index.js +11 -0
  22. package/dist/config/env.js +29 -15
  23. package/dist/config/global.d.ts +7 -1
  24. package/dist/config/global.js +9 -3
  25. package/dist/config/i18n.js +27 -11
  26. package/dist/config/index.d.ts +3 -3
  27. package/dist/config/index.js +6 -5
  28. package/dist/{locales → config/locales}/en.json +31 -3
  29. package/dist/{locales → config/locales}/zh.json +31 -3
  30. package/dist/dev/index.d.ts +3 -0
  31. package/dist/dev/index.js +12 -0
  32. package/dist/dev/portRedirect.d.ts +20 -0
  33. package/dist/dev/portRedirect.js +93 -0
  34. package/dist/dev/vitePortRedirectPlugin.d.ts +24 -0
  35. package/dist/dev/vitePortRedirectPlugin.js +40 -0
  36. package/dist/extension/branding-mods.d.ts +10 -0
  37. package/dist/extension/branding-mods.js +65 -0
  38. package/dist/extension/configuration/defaults.d.ts +3 -0
  39. package/dist/extension/configuration/defaults.js +32 -0
  40. package/dist/extension/configuration/formily.d.ts +10 -0
  41. package/dist/extension/configuration/formily.js +170 -0
  42. package/dist/extension/configuration/index.d.ts +7 -0
  43. package/dist/extension/configuration/index.js +28 -0
  44. package/dist/extension/configuration/paths.d.ts +4 -0
  45. package/dist/extension/configuration/paths.js +50 -0
  46. package/dist/extension/configuration/presets/twentytwentyfive.d.ts +7 -0
  47. package/dist/extension/configuration/presets/twentytwentyfive.js +94 -0
  48. package/dist/extension/configuration/resolve.d.ts +24 -0
  49. package/dist/extension/configuration/resolve.js +98 -0
  50. package/dist/extension/configuration/types.d.ts +68 -0
  51. package/dist/extension/configuration/types.js +3 -0
  52. package/dist/extension/configuration/validate.d.ts +8 -0
  53. package/dist/extension/configuration/validate.js +21 -0
  54. package/dist/extension/index.d.ts +9 -0
  55. package/dist/extension/index.js +35 -0
  56. package/dist/extension/manifest-normalize.d.ts +5 -0
  57. package/dist/extension/manifest-normalize.js +75 -0
  58. package/dist/extension/node.d.ts +2 -0
  59. package/dist/extension/node.js +6 -0
  60. package/dist/extension/presets/twentytwentyfive-appearance.d.ts +10 -0
  61. package/dist/extension/presets/twentytwentyfive-appearance.js +193 -0
  62. package/dist/extension/presets/twentytwentyfive-customizer.d.ts +19 -0
  63. package/dist/extension/presets/twentytwentyfive-customizer.js +199 -0
  64. package/dist/extension/preview.d.ts +46 -0
  65. package/dist/extension/preview.js +92 -0
  66. package/dist/extension/site-notices.d.ts +19 -0
  67. package/dist/extension/site-notices.js +88 -0
  68. package/dist/extension/site-settings.d.ts +37 -0
  69. package/dist/extension/site-settings.js +144 -0
  70. package/dist/extension/theme-admin-locale.d.ts +11 -0
  71. package/dist/extension/theme-admin-locale.io.d.ts +2 -0
  72. package/dist/extension/theme-admin-locale.io.js +54 -0
  73. package/dist/extension/theme-admin-locale.js +81 -0
  74. package/dist/extension/theme.d.ts +89 -0
  75. package/dist/extension/theme.js +93 -0
  76. package/dist/extension/twentytwentyfive-vars.d.ts +7 -0
  77. package/dist/extension/twentytwentyfive-vars.js +100 -0
  78. package/dist/index.d.ts +15 -7
  79. package/dist/index.js +44 -22
  80. package/dist/plugin/admin/index.d.ts +2 -0
  81. package/dist/plugin/admin/index.js +18 -0
  82. package/dist/plugin/admin/permissions.d.ts +5 -0
  83. package/dist/plugin/admin/permissions.js +33 -0
  84. package/dist/plugin/admin/registry.d.ts +62 -0
  85. package/dist/plugin/admin/registry.js +79 -0
  86. package/dist/plugin/client/client.d.ts +14 -0
  87. package/dist/plugin/client/client.js +95 -0
  88. package/dist/plugin/client/index.d.ts +4 -0
  89. package/dist/plugin/client/index.js +11 -0
  90. package/dist/plugin/client/runtime.d.ts +18 -0
  91. package/dist/plugin/client/runtime.js +30 -0
  92. package/dist/plugin/dev/index.d.ts +4 -0
  93. package/dist/plugin/dev/index.js +16 -0
  94. package/dist/plugin/dev/portRedirect.d.ts +26 -0
  95. package/dist/plugin/dev/portRedirect.js +111 -0
  96. package/dist/plugin/dev/vitePortRedirectPlugin.d.ts +24 -0
  97. package/dist/plugin/dev/vitePortRedirectPlugin.js +40 -0
  98. package/dist/plugin/index.d.ts +9 -0
  99. package/dist/plugin/index.js +48 -0
  100. package/dist/plugin/react/client.d.ts +14 -0
  101. package/dist/plugin/react/client.js +95 -0
  102. package/dist/plugin/react/index.d.ts +2 -0
  103. package/dist/plugin/react/index.js +18 -0
  104. package/dist/plugin/react/runtime.d.ts +18 -0
  105. package/dist/plugin/react/runtime.js +30 -0
  106. package/dist/primitives/AntdStyleTransitionFix.d.ts +2 -0
  107. package/dist/primitives/AntdStyleTransitionFix.js +16 -0
  108. package/dist/primitives/Badge.d.ts +7 -0
  109. package/dist/primitives/Badge.js +9 -0
  110. package/dist/primitives/Button.d.ts +10 -0
  111. package/dist/primitives/Button.js +38 -0
  112. package/dist/primitives/ColorModeToggle.d.ts +8 -0
  113. package/dist/primitives/ColorModeToggle.js +13 -0
  114. package/dist/primitives/IconButton.d.ts +7 -0
  115. package/dist/primitives/IconButton.js +13 -0
  116. package/dist/primitives/ScrollToTarget.d.ts +9 -0
  117. package/dist/primitives/ScrollToTarget.js +48 -0
  118. package/dist/primitives/Separator.d.ts +7 -0
  119. package/dist/primitives/Separator.js +9 -0
  120. package/dist/primitives/Skeleton.d.ts +7 -0
  121. package/dist/primitives/Skeleton.js +9 -0
  122. package/dist/primitives/Slot.d.ts +10 -0
  123. package/dist/primitives/Slot.js +25 -0
  124. package/dist/primitives/Spinner.d.ts +6 -0
  125. package/dist/primitives/Spinner.js +9 -0
  126. package/dist/primitives/animation/ConditionTransition.d.ts +8 -0
  127. package/dist/primitives/animation/ConditionTransition.js +13 -0
  128. package/dist/primitives/animation/ListTrail.d.ts +10 -0
  129. package/dist/primitives/animation/ListTrail.js +14 -0
  130. package/dist/primitives/animation/Opacity.d.ts +3 -0
  131. package/dist/primitives/animation/Opacity.js +10 -0
  132. package/dist/primitives/animation/Spring.d.ts +9 -0
  133. package/dist/primitives/animation/Spring.js +29 -0
  134. package/dist/primitives/animation/index.d.ts +7 -0
  135. package/dist/primitives/animation/index.js +11 -0
  136. package/dist/primitives/cn.d.ts +4 -0
  137. package/dist/primitives/cn.js +7 -0
  138. package/dist/primitives/icons.d.ts +4 -0
  139. package/dist/primitives/icons.js +15 -0
  140. package/dist/primitives/index.d.ts +22 -0
  141. package/dist/primitives/index.js +44 -0
  142. package/dist/react/client.d.ts +14 -0
  143. package/dist/react/client.js +95 -0
  144. package/dist/react/index.d.ts +4 -0
  145. package/dist/react/index.js +11 -0
  146. package/dist/react/runtime.d.ts +18 -0
  147. package/dist/react/runtime.js +30 -0
  148. package/dist/theme/antdDocument.d.ts +18 -0
  149. package/dist/theme/antdDocument.js +59 -0
  150. package/dist/theme/api/api-data.d.ts +2 -0
  151. package/dist/theme/api/api-data.js +8 -0
  152. package/dist/theme/api/api.d.ts +28 -0
  153. package/dist/theme/api/api.js +27 -0
  154. package/dist/theme/api/httpClient.d.ts +24 -0
  155. package/dist/theme/api/httpClient.js +83 -0
  156. package/dist/theme/api/json.d.ts +1 -0
  157. package/dist/theme/api/json.js +5 -0
  158. package/dist/theme/api/jsonp.d.ts +1 -0
  159. package/dist/theme/api/jsonp.js +5 -0
  160. package/dist/theme/api-data.d.ts +12 -0
  161. package/dist/theme/api-data.js +22 -0
  162. package/dist/theme/api.d.ts +28 -0
  163. package/dist/theme/api.js +27 -0
  164. package/dist/theme/appearance.d.ts +4 -0
  165. package/dist/theme/appearance.js +16 -0
  166. package/dist/theme/assets.d.ts +2 -0
  167. package/dist/theme/assets.js +27 -0
  168. package/dist/theme/authSession.d.ts +16 -0
  169. package/dist/theme/authSession.js +92 -0
  170. package/dist/theme/build/antdDocument.d.ts +145 -0
  171. package/dist/theme/build/antdDocument.js +70 -0
  172. package/dist/theme/build/next-config.d.ts +17 -0
  173. package/dist/theme/build/next-config.js +100 -0
  174. package/dist/theme/build/node.d.ts +2 -0
  175. package/dist/theme/build/node.js +6 -0
  176. package/dist/theme/colorMode.d.ts +12 -0
  177. package/dist/theme/colorMode.js +45 -0
  178. package/dist/theme/commentAuthor.d.ts +17 -0
  179. package/dist/theme/commentAuthor.js +48 -0
  180. package/dist/theme/content/archiveSlim.d.ts +7 -0
  181. package/dist/theme/content/archiveSlim.js +38 -0
  182. package/dist/theme/content/articleSlim.d.ts +10 -0
  183. package/dist/theme/content/articleSlim.js +35 -0
  184. package/dist/theme/content/assets.d.ts +8 -0
  185. package/dist/theme/content/assets.js +74 -0
  186. package/dist/theme/content/carouselArticles.d.ts +10 -0
  187. package/dist/theme/content/carouselArticles.js +39 -0
  188. package/dist/theme/content/excerpt.d.ts +15 -0
  189. package/dist/theme/content/excerpt.js +42 -0
  190. package/dist/theme/content/nav.d.ts +10 -0
  191. package/dist/theme/content/nav.js +30 -0
  192. package/dist/theme/content/seo.d.ts +6 -0
  193. package/dist/theme/content/seo.js +12 -0
  194. package/dist/theme/createAntdApp.d.ts +106 -0
  195. package/dist/theme/createAntdApp.js +175 -0
  196. package/dist/theme/createApp.d.ts +10 -0
  197. package/dist/theme/createApp.js +141 -0
  198. package/dist/theme/createCatalogApp.d.ts +108 -0
  199. package/dist/theme/createCatalogApp.js +168 -0
  200. package/dist/theme/customizer.d.ts +1 -0
  201. package/dist/theme/customizer.js +5 -0
  202. package/dist/theme/excerpt.d.ts +16 -0
  203. package/dist/theme/excerpt.js +31 -0
  204. package/dist/theme/extension/branding-mods.d.ts +10 -0
  205. package/dist/theme/extension/branding-mods.js +65 -0
  206. package/dist/theme/extension/configuration/defaults.d.ts +3 -0
  207. package/dist/theme/extension/configuration/defaults.js +32 -0
  208. package/dist/theme/extension/configuration/formily.d.ts +10 -0
  209. package/dist/theme/extension/configuration/formily.js +170 -0
  210. package/dist/theme/extension/configuration/index.d.ts +7 -0
  211. package/dist/theme/extension/configuration/index.js +28 -0
  212. package/dist/theme/extension/configuration/paths.d.ts +1 -0
  213. package/dist/theme/extension/configuration/paths.js +7 -0
  214. package/dist/theme/extension/configuration/presets/twentytwentyfive.d.ts +7 -0
  215. package/dist/theme/extension/configuration/presets/twentytwentyfive.js +94 -0
  216. package/dist/theme/extension/configuration/resolve.d.ts +24 -0
  217. package/dist/theme/extension/configuration/resolve.js +98 -0
  218. package/dist/theme/extension/configuration/types.d.ts +68 -0
  219. package/dist/theme/extension/configuration/types.js +3 -0
  220. package/dist/theme/extension/configuration/validate.d.ts +8 -0
  221. package/dist/theme/extension/configuration/validate.js +21 -0
  222. package/dist/theme/extension/index.d.ts +11 -0
  223. package/dist/theme/extension/index.js +38 -0
  224. package/dist/theme/extension/manifest-normalize.d.ts +5 -0
  225. package/dist/theme/extension/manifest-normalize.js +75 -0
  226. package/dist/theme/extension/presets/twentytwentyfive-appearance.d.ts +10 -0
  227. package/dist/theme/extension/presets/twentytwentyfive-appearance.js +193 -0
  228. package/dist/theme/extension/preview.d.ts +46 -0
  229. package/dist/theme/extension/preview.js +92 -0
  230. package/dist/theme/extension/site-notices.d.ts +19 -0
  231. package/dist/theme/extension/site-notices.js +88 -0
  232. package/dist/theme/extension/site-settings.d.ts +37 -0
  233. package/dist/theme/extension/site-settings.js +144 -0
  234. package/dist/theme/extension/siteNav.d.ts +18 -0
  235. package/dist/theme/extension/siteNav.js +17 -0
  236. package/dist/theme/extension/theme-admin-locale.d.ts +11 -0
  237. package/dist/theme/extension/theme-admin-locale.io.d.ts +2 -0
  238. package/dist/theme/extension/theme-admin-locale.io.js +54 -0
  239. package/dist/theme/extension/theme-admin-locale.js +68 -0
  240. package/dist/theme/extension/theme.d.ts +89 -0
  241. package/dist/theme/extension/theme.js +93 -0
  242. package/dist/theme/extension/twentytwentyfive-vars.d.ts +9 -0
  243. package/dist/theme/extension/twentytwentyfive-vars.js +103 -0
  244. package/dist/theme/fetch.d.ts +134 -0
  245. package/dist/theme/fetch.js +241 -0
  246. package/dist/theme/format.d.ts +16 -0
  247. package/dist/theme/format.js +48 -0
  248. package/dist/theme/httpClient.d.ts +20 -0
  249. package/dist/theme/httpClient.js +89 -0
  250. package/dist/theme/index.d.ts +63 -0
  251. package/dist/theme/index.js +226 -0
  252. package/dist/theme/json.d.ts +1 -0
  253. package/dist/theme/json.js +17 -0
  254. package/dist/theme/jsonp.d.ts +8 -0
  255. package/dist/theme/jsonp.js +27 -0
  256. package/dist/theme/locale.d.ts +23 -0
  257. package/dist/theme/locale.js +55 -0
  258. package/dist/theme/nav.d.ts +10 -0
  259. package/dist/theme/nav.js +30 -0
  260. package/dist/theme/next-config.d.ts +2 -0
  261. package/dist/theme/next-config.js +18 -0
  262. package/dist/theme/node.d.ts +2 -0
  263. package/dist/theme/node.js +18 -0
  264. package/dist/theme/preview/preview-config.d.ts +13 -0
  265. package/dist/theme/preview/preview-config.js +65 -0
  266. package/dist/theme/preview/preview-draft.d.ts +19 -0
  267. package/dist/theme/preview/preview-draft.js +51 -0
  268. package/dist/theme/preview/preview-mods.d.ts +16 -0
  269. package/dist/theme/preview/preview-mods.js +78 -0
  270. package/dist/theme/preview-config.d.ts +13 -0
  271. package/dist/theme/preview-config.js +65 -0
  272. package/dist/theme/preview-draft.d.ts +19 -0
  273. package/dist/theme/preview-draft.js +51 -0
  274. package/dist/theme/preview-mods.d.ts +16 -0
  275. package/dist/theme/preview-mods.js +78 -0
  276. package/dist/theme/providers/index.d.ts +118 -0
  277. package/dist/theme/providers/index.js +251 -0
  278. package/dist/theme/providers/setup.d.ts +124 -0
  279. package/dist/theme/providers/setup.js +29 -0
  280. package/dist/theme/runtime.d.ts +18 -0
  281. package/dist/theme/runtime.js +19 -0
  282. package/dist/theme/seo.d.ts +6 -0
  283. package/dist/theme/seo.js +12 -0
  284. package/dist/theme/server.d.ts +65 -0
  285. package/dist/theme/server.js +177 -0
  286. package/dist/theme/setting.d.ts +12 -0
  287. package/dist/theme/setting.js +42 -0
  288. package/dist/theme/ssr/bootstrap.d.ts +48 -0
  289. package/dist/theme/ssr/bootstrap.js +112 -0
  290. package/dist/theme/ssr/fetch.d.ts +134 -0
  291. package/dist/theme/ssr/fetch.js +264 -0
  292. package/dist/theme/ssr/format.d.ts +3 -0
  293. package/dist/theme/ssr/format.js +8 -0
  294. package/dist/theme/ssr/pageProps.d.ts +62 -0
  295. package/dist/theme/ssr/pageProps.js +138 -0
  296. package/dist/theme/ssr/setting.d.ts +12 -0
  297. package/dist/theme/ssr/setting.js +42 -0
  298. package/dist/theme/ssr/slimBootstrap.d.ts +11 -0
  299. package/dist/theme/ssr/slimBootstrap.js +75 -0
  300. package/dist/theme/ssr/static.d.ts +10 -0
  301. package/dist/theme/ssr/static.js +17 -0
  302. package/dist/theme/ssr/templates.d.ts +35 -0
  303. package/dist/theme/ssr/templates.js +50 -0
  304. package/dist/theme/static.d.ts +10 -0
  305. package/dist/theme/static.js +17 -0
  306. package/dist/theme/templates.d.ts +27 -0
  307. package/dist/theme/templates.js +38 -0
  308. package/dist/theme/ui-optional.d.ts +1 -0
  309. package/dist/theme/ui-optional.js +21 -0
  310. package/dist/theme/visitor/appearance.d.ts +4 -0
  311. package/dist/theme/visitor/appearance.js +16 -0
  312. package/dist/theme/visitor/authSession.d.ts +16 -0
  313. package/dist/theme/visitor/authSession.js +92 -0
  314. package/dist/theme/visitor/colorMode.d.ts +17 -0
  315. package/dist/theme/visitor/colorMode.js +59 -0
  316. package/dist/theme/visitor/commentAuthor.d.ts +16 -0
  317. package/dist/theme/visitor/commentAuthor.js +45 -0
  318. package/dist/theme/visitor/i18n.d.ts +4 -0
  319. package/dist/theme/visitor/i18n.js +28 -0
  320. package/dist/theme/visitor/locale.d.ts +23 -0
  321. package/dist/theme/visitor/locale.js +72 -0
  322. package/dist/theme/visitor/runtime.d.ts +18 -0
  323. package/dist/theme/visitor/runtime.js +19 -0
  324. package/dist/theme/visitor/visitorLocale.d.ts +11 -0
  325. package/dist/theme/visitor/visitorLocale.js +56 -0
  326. package/dist/theme/visitorLocale.d.ts +6 -0
  327. package/dist/theme/visitorLocale.js +39 -0
  328. package/dist/types/index.d.ts +79 -68
  329. package/dist/ui/AntdStyleTransitionFix.d.ts +5 -0
  330. package/dist/ui/AntdStyleTransitionFix.js +16 -0
  331. package/dist/ui/ArchiveEmptyState.d.ts +13 -0
  332. package/dist/ui/ArchiveEmptyState.js +8 -0
  333. package/dist/ui/ArchivePageLayout.d.ts +10 -0
  334. package/dist/ui/ArchivePageLayout.js +8 -0
  335. package/dist/ui/ArticleCard.d.ts +27 -0
  336. package/dist/ui/ArticleCard.js +16 -0
  337. package/dist/ui/ArticleList.d.ts +14 -0
  338. package/dist/ui/ArticleList.js +16 -0
  339. package/dist/ui/BaseGlobalStyles.d.ts +5 -0
  340. package/dist/ui/BaseGlobalStyles.js +18 -0
  341. package/dist/ui/LocaleSwitcher.d.ts +7 -0
  342. package/dist/ui/LocaleSwitcher.js +15 -0
  343. package/dist/ui/NavMenu.d.ts +16 -0
  344. package/dist/ui/NavMenu.js +8 -0
  345. package/dist/ui/NotFoundPanel.d.ts +11 -0
  346. package/dist/ui/NotFoundPanel.js +8 -0
  347. package/dist/ui/PageHeader.d.ts +10 -0
  348. package/dist/ui/PageHeader.js +8 -0
  349. package/dist/ui/SiteBranding.d.ts +10 -0
  350. package/dist/ui/SiteBranding.js +14 -0
  351. package/dist/ui/SiteDocument.d.ts +20 -0
  352. package/dist/ui/SiteDocument.js +13 -0
  353. package/dist/ui/SiteDocumentFallback.d.ts +8 -0
  354. package/dist/ui/SiteDocumentFallback.js +9 -0
  355. package/dist/ui/SiteLogo.d.ts +6 -0
  356. package/dist/ui/SiteLogo.js +16 -0
  357. package/dist/ui/SiteTagline.d.ts +7 -0
  358. package/dist/ui/SiteTagline.js +15 -0
  359. package/dist/ui/TaxonomyList.d.ts +25 -0
  360. package/dist/ui/TaxonomyList.js +30 -0
  361. package/dist/ui/ThemeCssVars.d.ts +2 -0
  362. package/dist/ui/ThemeCssVars.js +85 -0
  363. package/dist/ui/ThemeLayout.d.ts +13 -0
  364. package/dist/ui/ThemeLayout.js +11 -0
  365. package/dist/ui/components/AntdStyleTransitionFix.d.ts +5 -0
  366. package/dist/ui/components/AntdStyleTransitionFix.js +16 -0
  367. package/dist/ui/components/ArchiveEmptyState.d.ts +13 -0
  368. package/dist/ui/components/ArchiveEmptyState.js +8 -0
  369. package/dist/ui/components/ArchivePageLayout.d.ts +10 -0
  370. package/dist/ui/components/ArchivePageLayout.js +8 -0
  371. package/dist/ui/components/ArticleCard.d.ts +27 -0
  372. package/dist/ui/components/ArticleCard.js +16 -0
  373. package/dist/ui/components/ArticleList.d.ts +14 -0
  374. package/dist/ui/components/ArticleList.js +16 -0
  375. package/dist/ui/components/BaseGlobalStyles.d.ts +5 -0
  376. package/dist/ui/components/BaseGlobalStyles.js +18 -0
  377. package/dist/ui/components/LocaleSwitcher.d.ts +10 -0
  378. package/dist/ui/components/LocaleSwitcher.js +11 -0
  379. package/dist/ui/components/NavMenu.d.ts +16 -0
  380. package/dist/ui/components/NavMenu.js +8 -0
  381. package/dist/ui/components/NotFoundPanel.d.ts +11 -0
  382. package/dist/ui/components/NotFoundPanel.js +8 -0
  383. package/dist/ui/components/PageHeader.d.ts +10 -0
  384. package/dist/ui/components/PageHeader.js +8 -0
  385. package/dist/ui/components/RouteProgress.d.ts +9 -0
  386. package/dist/ui/components/RouteProgress.js +40 -0
  387. package/dist/ui/components/SiteAnalytics.d.ts +5 -0
  388. package/dist/ui/components/SiteAnalytics.js +42 -0
  389. package/dist/ui/components/SiteBranding.d.ts +10 -0
  390. package/dist/ui/components/SiteBranding.js +14 -0
  391. package/dist/ui/components/SiteDocument.d.ts +20 -0
  392. package/dist/ui/components/SiteDocument.js +13 -0
  393. package/dist/ui/components/SiteDocumentFallback.d.ts +8 -0
  394. package/dist/ui/components/SiteDocumentFallback.js +9 -0
  395. package/dist/ui/components/SiteLogo.d.ts +8 -0
  396. package/dist/ui/components/SiteLogo.js +23 -0
  397. package/dist/ui/components/SiteSeo.d.ts +13 -0
  398. package/dist/ui/components/SiteSeo.js +19 -0
  399. package/dist/ui/components/SiteTagline.d.ts +7 -0
  400. package/dist/ui/components/SiteTagline.js +15 -0
  401. package/dist/ui/components/TaxonomyList.d.ts +25 -0
  402. package/dist/ui/components/TaxonomyList.js +30 -0
  403. package/dist/ui/components/ThemeCssVars.d.ts +2 -0
  404. package/dist/ui/components/ThemeCssVars.js +85 -0
  405. package/dist/ui/components/ThemeLayout.d.ts +13 -0
  406. package/dist/ui/components/ThemeLayout.js +11 -0
  407. package/dist/ui/components/content/ArticleReader.d.ts +45 -0
  408. package/dist/ui/components/content/ArticleReader.js +23 -0
  409. package/dist/ui/components/content/ArticleToc.d.ts +21 -0
  410. package/dist/ui/components/content/ArticleToc.js +75 -0
  411. package/dist/ui/components/content/HtmlContent.d.ts +15 -0
  412. package/dist/ui/components/content/HtmlContent.js +237 -0
  413. package/dist/ui/components/content/Image.d.ts +9 -0
  414. package/dist/ui/components/content/Image.js +13 -0
  415. package/dist/ui/components/content/ImageViewer.d.ts +8 -0
  416. package/dist/ui/components/content/ImageViewer.js +33 -0
  417. package/dist/ui/components/content/LocaleTime.d.ts +9 -0
  418. package/dist/ui/components/content/LocaleTime.js +63 -0
  419. package/dist/ui/components/content/index.d.ts +14 -0
  420. package/dist/ui/components/content/index.js +18 -0
  421. package/dist/ui/components/toolbar/LocaleToggleButton.d.ts +8 -0
  422. package/dist/ui/components/toolbar/LocaleToggleButton.js +18 -0
  423. package/dist/ui/components/toolbar/ThemeToggleButton.d.ts +7 -0
  424. package/dist/ui/components/toolbar/ThemeToggleButton.js +10 -0
  425. package/dist/ui/components/toolbar/ToolbarIconButton.d.ts +7 -0
  426. package/dist/ui/components/toolbar/ToolbarIconButton.js +22 -0
  427. package/dist/ui/components/toolbar/constants.d.ts +5 -0
  428. package/dist/ui/components/toolbar/constants.js +8 -0
  429. package/dist/ui/components/toolbar/icons.d.ts +17 -0
  430. package/dist/ui/components/toolbar/icons.js +44 -0
  431. package/dist/ui/components/toolbar/index.d.ts +9 -0
  432. package/dist/ui/components/toolbar/index.js +25 -0
  433. package/dist/ui/components/toolbar/locale-label.d.ts +3 -0
  434. package/dist/ui/components/toolbar/locale-label.js +19 -0
  435. package/dist/ui/context/LocaleContext.d.ts +15 -0
  436. package/dist/ui/context/LocaleContext.js +59 -0
  437. package/dist/ui/context/ReactPressProvider.d.ts +3 -0
  438. package/dist/ui/context/ReactPressProvider.js +10 -0
  439. package/dist/ui/context/SiteCatalogContext.d.ts +41 -0
  440. package/dist/ui/context/SiteCatalogContext.js +60 -0
  441. package/dist/ui/context/ThemeRuntimeContext.d.ts +21 -0
  442. package/dist/ui/context/ThemeRuntimeContext.js +59 -0
  443. package/dist/ui/context/index.d.ts +8 -0
  444. package/dist/ui/context/index.js +26 -0
  445. package/dist/ui/context/siteCatalogTypes.d.ts +64 -0
  446. package/dist/ui/context/siteCatalogTypes.js +20 -0
  447. package/dist/ui/context/types.d.ts +34 -0
  448. package/dist/ui/context/types.js +2 -0
  449. package/dist/ui/hooks/index.d.ts +12 -0
  450. package/dist/ui/hooks/index.js +29 -0
  451. package/dist/ui/hooks/useAsyncLoading.d.ts +4 -0
  452. package/dist/ui/hooks/useAsyncLoading.js +31 -0
  453. package/dist/ui/hooks/useForceUpdate.d.ts +2 -0
  454. package/dist/ui/hooks/useForceUpdate.js +11 -0
  455. package/dist/ui/hooks/useNavActive.d.ts +5 -0
  456. package/dist/ui/hooks/useNavActive.js +11 -0
  457. package/dist/ui/hooks/usePagination.d.ts +34 -0
  458. package/dist/ui/hooks/usePagination.js +55 -0
  459. package/dist/ui/hooks/useReportArticleView.d.ts +4 -0
  460. package/dist/ui/hooks/useReportArticleView.js +40 -0
  461. package/dist/ui/hooks/useReportPageView.d.ts +11 -0
  462. package/dist/ui/hooks/useReportPageView.js +28 -0
  463. package/dist/ui/hooks/useRouteParam.d.ts +5 -0
  464. package/dist/ui/hooks/useRouteParam.js +15 -0
  465. package/dist/ui/hooks/useToggle.d.ts +2 -0
  466. package/dist/ui/hooks/useToggle.js +17 -0
  467. package/dist/ui/hooks/useWarningOnExit.d.ts +5 -0
  468. package/dist/ui/hooks/useWarningOnExit.js +59 -0
  469. package/dist/ui/index.d.ts +43 -0
  470. package/dist/ui/index.js +87 -0
  471. package/dist/utils/api-envelope.d.ts +14 -0
  472. package/dist/utils/api-envelope.js +31 -0
  473. package/dist/utils/clipboard.d.ts +2 -0
  474. package/dist/utils/clipboard.js +24 -0
  475. package/dist/utils/cookie.d.ts +2 -0
  476. package/dist/utils/cookie.js +15 -0
  477. package/dist/utils/date.d.ts +4 -0
  478. package/dist/utils/date.js +45 -0
  479. package/dist/utils/email.d.ts +3 -0
  480. package/dist/utils/email.js +9 -0
  481. package/dist/utils/error.d.ts +7 -0
  482. package/dist/utils/error.js +26 -0
  483. package/dist/utils/image.d.ts +7 -0
  484. package/dist/utils/image.js +34 -0
  485. package/dist/utils/index.d.ts +15 -33
  486. package/dist/utils/index.js +37 -57
  487. package/dist/utils/json.d.ts +2 -0
  488. package/dist/utils/json.js +18 -0
  489. package/dist/utils/jsonp.d.ts +8 -0
  490. package/dist/utils/jsonp.js +27 -0
  491. package/dist/utils/object.d.ts +7 -0
  492. package/dist/utils/object.js +63 -0
  493. package/dist/utils/setting.d.ts +12 -0
  494. package/dist/utils/setting.js +13 -0
  495. package/dist/utils/string.d.ts +4 -0
  496. package/dist/utils/string.js +15 -0
  497. package/dist/utils/viewport.d.ts +3 -0
  498. package/dist/utils/viewport.js +14 -0
  499. package/package.json +129 -16
  500. package/LICENSE +0 -21
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.HtmlContent = HtmlContent;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const react_1 = require("react");
39
+ const clipboard_1 = require("../../../utils/clipboard");
40
+ function addLineNumbers(html) {
41
+ const text = html.replace(/\r\n/g, '\n').replace(/\r/g, '\n').replace(/\n$/, '');
42
+ let num = 1;
43
+ let result = `<span class="ln-num" data-num="${num}"></span>${text}`;
44
+ result = result.replace(/\n/g, () => {
45
+ num += 1;
46
+ return `\n<span class="ln-num" data-num="${num}"></span>`;
47
+ });
48
+ return `<span class="ln-bg"></span>${result}`;
49
+ }
50
+ function highlightCodeElement(hljs, el) {
51
+ if (typeof hljs.highlightElement === 'function') {
52
+ hljs.highlightElement(el);
53
+ return;
54
+ }
55
+ hljs.highlightBlock?.(el);
56
+ }
57
+ function languageLabel(className) {
58
+ const match = className.match(/\blanguage-([\w-]+)\b/);
59
+ if (!match)
60
+ return null;
61
+ return match[1];
62
+ }
63
+ function resolveCodeLanguage(className, plainText, hljs) {
64
+ const fromClass = languageLabel(className);
65
+ if (fromClass && fromClass !== 'plaintext')
66
+ return fromClass;
67
+ if (hljs?.highlightAuto && plainText.trim()) {
68
+ try {
69
+ const { language } = hljs.highlightAuto(plainText);
70
+ if (language && language !== 'plaintext')
71
+ return language;
72
+ }
73
+ catch {
74
+ /* ignore auto-detect failures */
75
+ }
76
+ }
77
+ return 'code';
78
+ }
79
+ function showCopyFeedback(btn, pre, copyLabel, successLabel) {
80
+ const prev = btn.getAttribute('data-rp-copy-timer');
81
+ if (prev)
82
+ window.clearTimeout(Number(prev));
83
+ btn.textContent = '✓';
84
+ btn.setAttribute('aria-label', successLabel);
85
+ btn.classList.add('rp-copy-code-btn--copied');
86
+ pre.classList.add('rp-code-copy-active');
87
+ const timerId = window.setTimeout(() => {
88
+ btn.textContent = copyLabel;
89
+ btn.setAttribute('aria-label', copyLabel);
90
+ btn.classList.remove('rp-copy-code-btn--copied');
91
+ pre.classList.remove('rp-code-copy-active');
92
+ btn.removeAttribute('data-rp-copy-timer');
93
+ }, 1200);
94
+ btn.setAttribute('data-rp-copy-timer', String(timerId));
95
+ }
96
+ function bindCopyButton(btn, pre, el, copyLabel, copySuccessLabel, onCopy) {
97
+ if (!btn.classList.contains('rp-copy-code-btn--copied')) {
98
+ btn.textContent = copyLabel;
99
+ btn.setAttribute('aria-label', copyLabel);
100
+ }
101
+ btn.onclick = () => {
102
+ if (!(0, clipboard_1.copyToClipboard)(el.innerText))
103
+ return;
104
+ if (copySuccessLabel) {
105
+ showCopyFeedback(btn, pre, copyLabel, copySuccessLabel);
106
+ }
107
+ onCopy?.();
108
+ };
109
+ }
110
+ function ensureToolbar(pre, el) {
111
+ let toolbar = pre.querySelector(':scope > .rp-code-toolbar');
112
+ if (!toolbar) {
113
+ toolbar = document.createElement('div');
114
+ toolbar.className = 'rp-code-toolbar';
115
+ pre.insertBefore(toolbar, el);
116
+ pre
117
+ .querySelectorAll(':scope > .rp-code-window-dots, :scope > .rp-copy-code-btn, :scope > .rp-code-lang')
118
+ .forEach((node) => {
119
+ toolbar?.appendChild(node);
120
+ });
121
+ }
122
+ return toolbar;
123
+ }
124
+ function updateLanguageLabel(toolbar, lang) {
125
+ const langEl = toolbar.querySelector('.rp-code-lang');
126
+ if (langEl) {
127
+ langEl.textContent = lang;
128
+ return;
129
+ }
130
+ const langLabel = document.createElement('span');
131
+ langLabel.className = 'rp-code-lang';
132
+ langLabel.textContent = lang;
133
+ const copyBtn = toolbar.querySelector('.rp-copy-code-btn');
134
+ if (copyBtn) {
135
+ toolbar.insertBefore(langLabel, copyBtn);
136
+ }
137
+ else {
138
+ toolbar.appendChild(langLabel);
139
+ }
140
+ }
141
+ function enhanceCodeBlocks(root, copyLabel, copySuccessLabel, onCopy, hljs) {
142
+ root.querySelectorAll('pre code').forEach((block) => {
143
+ const el = block;
144
+ const pre = el.parentElement;
145
+ if (!pre)
146
+ return;
147
+ const plainText = pre.getAttribute('data-rp-plain') ??
148
+ (el.className.includes('hljsln') ? el.innerText : el.textContent ?? '');
149
+ if (!pre.getAttribute('data-rp-plain') && plainText) {
150
+ pre.setAttribute('data-rp-plain', plainText);
151
+ }
152
+ if (hljs && !el.className.includes('hljs')) {
153
+ if (el.className.includes('hljsln')) {
154
+ el.textContent = el.innerText;
155
+ el.className = el.className.replace(/\bhljsln\b/g, '').trim();
156
+ }
157
+ highlightCodeElement(hljs, el);
158
+ }
159
+ if (!el.className.includes('hljsln')) {
160
+ el.innerHTML = addLineNumbers(el.innerHTML);
161
+ el.className += ' hljsln';
162
+ }
163
+ const toolbar = ensureToolbar(pre, el);
164
+ const copyBtn = toolbar.querySelector('.rp-copy-code-btn');
165
+ if (!copyBtn) {
166
+ const newBtn = document.createElement('button');
167
+ newBtn.type = 'button';
168
+ newBtn.className = 'rp-copy-code-btn';
169
+ toolbar.appendChild(newBtn);
170
+ bindCopyButton(newBtn, pre, el, copyLabel, copySuccessLabel, onCopy);
171
+ }
172
+ else {
173
+ bindCopyButton(copyBtn, pre, el, copyLabel, copySuccessLabel, onCopy);
174
+ }
175
+ if (!toolbar.querySelector('.rp-code-window-dots')) {
176
+ const colorGroup = document.createElement('span');
177
+ colorGroup.className = 'rp-code-window-dots';
178
+ ['#dc3545', '#FFBD2E', '#27C93F'].forEach((color) => {
179
+ const dot = document.createElement('i');
180
+ dot.style.backgroundColor = color;
181
+ colorGroup.appendChild(dot);
182
+ });
183
+ toolbar.insertBefore(colorGroup, toolbar.firstChild);
184
+ }
185
+ updateLanguageLabel(toolbar, resolveCodeLanguage(el.className, plainText, hljs));
186
+ });
187
+ }
188
+ /** Render HTML article body with optional code highlight and copy buttons. */
189
+ function HtmlContent({ content, className = 'rp-html-content markdown', copyLabel = 'Copy', copySuccessLabel, onCopy, highlightCode = true, }) {
190
+ const ref = (0, react_1.useRef)(null);
191
+ const onCopyRef = (0, react_1.useRef)(onCopy);
192
+ const copySuccessLabelRef = (0, react_1.useRef)(copySuccessLabel);
193
+ const useInitialHtmlRef = (0, react_1.useRef)(true);
194
+ onCopyRef.current = onCopy;
195
+ copySuccessLabelRef.current = copySuccessLabel;
196
+ (0, react_1.useLayoutEffect)(() => {
197
+ const root = ref.current;
198
+ if (!root || !content)
199
+ return undefined;
200
+ let cancelled = false;
201
+ const runEnhance = (hljs) => {
202
+ if (cancelled)
203
+ return;
204
+ const contentChanged = root.getAttribute('data-rp-content') !== content;
205
+ const missingBody = !root.querySelector('pre, p, h1, h2, h3, h4, h5, h6, ul, ol, blockquote, table');
206
+ if (contentChanged || missingBody) {
207
+ root.innerHTML = content;
208
+ root.setAttribute('data-rp-content', content);
209
+ }
210
+ root.querySelectorAll('img:not([alt])').forEach((img) => {
211
+ img.setAttribute('alt', '');
212
+ });
213
+ useInitialHtmlRef.current = false;
214
+ enhanceCodeBlocks(root, copyLabel, copySuccessLabelRef.current, () => onCopyRef.current?.(), hljs);
215
+ };
216
+ if (!highlightCode) {
217
+ runEnhance(null);
218
+ return () => {
219
+ cancelled = true;
220
+ };
221
+ }
222
+ runEnhance(null);
223
+ void Promise.resolve().then(() => __importStar(require('highlight.js'))).then((mod) => {
224
+ const loaded = mod.default ?? mod;
225
+ runEnhance(loaded);
226
+ })
227
+ .catch(() => {
228
+ runEnhance(null);
229
+ });
230
+ return () => {
231
+ cancelled = true;
232
+ };
233
+ }, [content, copyLabel, copySuccessLabel, highlightCode]);
234
+ return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: className, "data-rp-component": "html-content", suppressHydrationWarning: true, ...(useInitialHtmlRef.current && content
235
+ ? { dangerouslySetInnerHTML: { __html: content } }
236
+ : {}) }));
237
+ }
@@ -0,0 +1,9 @@
1
+ import type { ImgHTMLAttributes } from 'react';
2
+ import type { ImageVariant } from '../../../utils/image';
3
+ export type { ImageVariant };
4
+ export interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src'> {
5
+ url?: string | null;
6
+ size?: ImageVariant;
7
+ }
8
+ /** 按上传变体尺寸渲染 `<img>`,`url` + `size` 外其余属性透传。 */
9
+ export declare function Image({ url, size, alt, ...rest }: ImageProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Image = Image;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const image_1 = require("../../../utils/image");
6
+ /** 按上传变体尺寸渲染 `<img>`,`url` + `size` 外其余属性透传。 */
7
+ function Image({ url, size = 'medium', alt = '', ...rest }) {
8
+ const src = (0, image_1.resolveImageUrl)(url, size);
9
+ if (!src) {
10
+ return null;
11
+ }
12
+ return (0, jsx_runtime_1.jsx)("img", { src: src, alt: alt, ...rest });
13
+ }
@@ -0,0 +1,8 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ export interface ImageViewerProps {
3
+ /** CSS selector for the container whose images should be zoomable. */
4
+ containerSelector: string;
5
+ children?: ReactNode;
6
+ }
7
+ /** Wrap content and enable viewerjs image zoom (peer dep in theme). */
8
+ export declare function ImageViewer({ containerSelector, children }: ImageViewerProps): ReactElement;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImageViewer = ImageViewer;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ /** Wrap content and enable viewerjs image zoom (peer dep in theme). */
7
+ function ImageViewer({ containerSelector, children }) {
8
+ (0, react_1.useEffect)(() => {
9
+ let Viewer;
10
+ try {
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ const mod = require('viewerjs');
13
+ Viewer = (mod?.default ?? mod);
14
+ if (typeof Viewer !== 'function') {
15
+ return undefined;
16
+ }
17
+ }
18
+ catch {
19
+ return undefined;
20
+ }
21
+ const el = document.querySelector(containerSelector);
22
+ if (!el)
23
+ return undefined;
24
+ const viewer = new Viewer(el, { inline: false });
25
+ const io = new MutationObserver(() => viewer.update());
26
+ io.observe(el, { childList: true, subtree: true });
27
+ return () => {
28
+ io.disconnect();
29
+ viewer.destroy();
30
+ };
31
+ }, [containerSelector]);
32
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
33
+ }
@@ -0,0 +1,9 @@
1
+ export interface LocaleTimeProps {
2
+ date: string | number | Date;
3
+ format?: string;
4
+ /** Show relative time (client-only after mount). */
5
+ timeago?: boolean;
6
+ locale?: string;
7
+ }
8
+ /** Locale-aware `<time>` — absolute date or relative timeago. */
9
+ export declare function LocaleTime({ date, timeago, format, locale, }: LocaleTimeProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocaleTime = LocaleTime;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const date_1 = require("../../../utils/date");
7
+ const minuteCallbacks = [];
8
+ if (typeof window !== 'undefined') {
9
+ window.setInterval(() => {
10
+ minuteCallbacks.forEach((cb) => cb());
11
+ }, 60000);
12
+ }
13
+ function subscribeMinuteTick(fn) {
14
+ minuteCallbacks.push(fn);
15
+ return () => {
16
+ const idx = minuteCallbacks.indexOf(fn);
17
+ if (idx >= 0)
18
+ minuteCallbacks.splice(idx, 1);
19
+ };
20
+ }
21
+ function formatTimeago(date, locale) {
22
+ try {
23
+ const rtf = new Intl.RelativeTimeFormat(locale.startsWith('zh') ? 'zh-CN' : locale, {
24
+ numeric: 'auto',
25
+ });
26
+ const diffMs = date.getTime() - Date.now();
27
+ const diffMin = Math.round(diffMs / 60000);
28
+ if (Math.abs(diffMin) < 60)
29
+ return rtf.format(diffMin, 'minute');
30
+ const diffHour = Math.round(diffMin / 60);
31
+ if (Math.abs(diffHour) < 24)
32
+ return rtf.format(diffHour, 'hour');
33
+ const diffDay = Math.round(diffHour / 24);
34
+ return rtf.format(diffDay, 'day');
35
+ }
36
+ catch {
37
+ return (0, date_1.formatPublishDateShort)(date);
38
+ }
39
+ }
40
+ /** Locale-aware `<time>` — absolute date or relative timeago. */
41
+ function LocaleTime({ date, timeago, format, locale = 'zh', }) {
42
+ const [, tick] = (0, react_1.useState)(0);
43
+ const unsub = (0, react_1.useRef)(null);
44
+ (0, react_1.useEffect)(() => {
45
+ if (!timeago)
46
+ return undefined;
47
+ unsub.current = subscribeMinuteTick(() => tick((n) => n + 1));
48
+ return () => unsub.current?.();
49
+ }, [timeago]);
50
+ const parsed = new Date(date);
51
+ let absolute;
52
+ if (format === 'MM-dd') {
53
+ absolute = (0, date_1.formatDate)(parsed, 'MM-DD');
54
+ }
55
+ else if (format === 'short' || format === 'yyyy-MM-dd' || !format) {
56
+ absolute = (0, date_1.formatPublishDateShort)(parsed);
57
+ }
58
+ else {
59
+ absolute = (0, date_1.formatPublishDate)(parsed, {}, locale.startsWith('zh') ? 'zh-CN' : locale);
60
+ }
61
+ const showTimeago = Boolean(timeago && typeof window !== 'undefined');
62
+ return ((0, jsx_runtime_1.jsx)("time", { dateTime: absolute, suppressHydrationWarning: timeago, children: showTimeago ? formatTimeago(parsed, locale) : absolute }));
63
+ }
@@ -0,0 +1,14 @@
1
+ export type { ArticleReaderArticle, ArticleReaderProps } from './ArticleReader';
2
+ export { ArticleReader } from './ArticleReader';
3
+ export type { ArticleTocProps, TocItem } from './ArticleToc';
4
+ export { ArticleToc, parseArticleToc } from './ArticleToc';
5
+ export type { HtmlContentProps } from './HtmlContent';
6
+ export { HtmlContent } from './HtmlContent';
7
+ export type { ImageProps } from './Image';
8
+ export { Image } from './Image';
9
+ export type { ImageVariant } from '../../../utils/image';
10
+ export { resolveImageUrl } from '../../../utils/image';
11
+ export type { ImageViewerProps } from './ImageViewer';
12
+ export { ImageViewer } from './ImageViewer';
13
+ export type { LocaleTimeProps } from './LocaleTime';
14
+ export { LocaleTime } from './LocaleTime';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocaleTime = exports.ImageViewer = exports.resolveImageUrl = exports.Image = exports.HtmlContent = exports.parseArticleToc = exports.ArticleToc = exports.ArticleReader = void 0;
4
+ var ArticleReader_1 = require("./ArticleReader");
5
+ Object.defineProperty(exports, "ArticleReader", { enumerable: true, get: function () { return ArticleReader_1.ArticleReader; } });
6
+ var ArticleToc_1 = require("./ArticleToc");
7
+ Object.defineProperty(exports, "ArticleToc", { enumerable: true, get: function () { return ArticleToc_1.ArticleToc; } });
8
+ Object.defineProperty(exports, "parseArticleToc", { enumerable: true, get: function () { return ArticleToc_1.parseArticleToc; } });
9
+ var HtmlContent_1 = require("./HtmlContent");
10
+ Object.defineProperty(exports, "HtmlContent", { enumerable: true, get: function () { return HtmlContent_1.HtmlContent; } });
11
+ var Image_1 = require("./Image");
12
+ Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return Image_1.Image; } });
13
+ var image_1 = require("../../../utils/image");
14
+ Object.defineProperty(exports, "resolveImageUrl", { enumerable: true, get: function () { return image_1.resolveImageUrl; } });
15
+ var ImageViewer_1 = require("./ImageViewer");
16
+ Object.defineProperty(exports, "ImageViewer", { enumerable: true, get: function () { return ImageViewer_1.ImageViewer; } });
17
+ var LocaleTime_1 = require("./LocaleTime");
18
+ Object.defineProperty(exports, "LocaleTime", { enumerable: true, get: function () { return LocaleTime_1.LocaleTime; } });
@@ -0,0 +1,8 @@
1
+ import { type ToolbarIconButtonProps } from './ToolbarIconButton';
2
+ export interface LocaleToggleButtonProps extends Omit<ToolbarIconButtonProps, 'children' | 'onClick' | 'onChange'> {
3
+ locale: string;
4
+ locales: string[];
5
+ onLocaleChange: (locale: string) => void;
6
+ }
7
+ /** Click to cycle locales. Shows zh/en translation bubble icons (like theme sun/moon). */
8
+ export declare function LocaleToggleButton({ locale, locales, onLocaleChange, size, title, ...rest }: LocaleToggleButtonProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocaleToggleButton = LocaleToggleButton;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const icons_1 = require("./icons");
6
+ const locale_label_1 = require("./locale-label");
7
+ const ToolbarIconButton_1 = require("./ToolbarIconButton");
8
+ /** Click to cycle locales. Shows zh/en translation bubble icons (like theme sun/moon). */
9
+ function LocaleToggleButton({ locale, locales, onLocaleChange, size = 20, title, ...rest }) {
10
+ if (locales.length < 2)
11
+ return null;
12
+ const next = (0, locale_label_1.nextLocale)(locale, locales);
13
+ const resolvedTitle = title ?? `${(0, locale_label_1.localeToggleLabel)(locale)} · → ${(0, locale_label_1.localeToggleLabel)(next)}`;
14
+ return ((0, jsx_runtime_1.jsx)(ToolbarIconButton_1.ToolbarIconButton, { size: size, onClick: () => {
15
+ if (next !== locale)
16
+ onLocaleChange(next);
17
+ }, title: resolvedTitle, suppressHydrationWarning: true, "data-rp-component": "locale-toggle", "data-locale": locale, ...rest, children: (0, jsx_runtime_1.jsx)(icons_1.LocaleActiveIcon, { locale: locale, size: size }) }));
18
+ }
@@ -0,0 +1,7 @@
1
+ import { type ToolbarIconButtonProps } from './ToolbarIconButton';
2
+ export interface ThemeToggleButtonProps extends Omit<ToolbarIconButtonProps, 'children' | 'onClick'> {
3
+ isDark: boolean;
4
+ onToggle: () => void;
5
+ }
6
+ /** Click to switch light/dark. Shows sun in light mode, moon in dark mode. */
7
+ export declare function ThemeToggleButton({ isDark, onToggle, size, ...rest }: ThemeToggleButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeToggleButton = ThemeToggleButton;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const icons_1 = require("./icons");
6
+ const ToolbarIconButton_1 = require("./ToolbarIconButton");
7
+ /** Click to switch light/dark. Shows sun in light mode, moon in dark mode. */
8
+ function ThemeToggleButton({ isDark, onToggle, size = 20, ...rest }) {
9
+ return ((0, jsx_runtime_1.jsx)(ToolbarIconButton_1.ToolbarIconButton, { size: size, onClick: onToggle, suppressHydrationWarning: true, "data-rp-component": "theme-toggle", ...rest, children: isDark ? (0, jsx_runtime_1.jsx)(icons_1.MoonIcon, { size: size }) : (0, jsx_runtime_1.jsx)(icons_1.SunIcon, { size: size }) }));
10
+ }
@@ -0,0 +1,7 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ export declare const RP_TOOLBAR_BTN_CLASS = "rp-toolbar-btn";
3
+ export interface ToolbarIconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'children'> {
4
+ children: ReactNode;
5
+ size?: number;
6
+ }
7
+ export declare function ToolbarIconButton({ children, className, style, ...rest }: ToolbarIconButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RP_TOOLBAR_BTN_CLASS = void 0;
4
+ exports.ToolbarIconButton = ToolbarIconButton;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ exports.RP_TOOLBAR_BTN_CLASS = 'rp-toolbar-btn';
7
+ const baseStyle = {
8
+ display: 'inline-flex',
9
+ alignItems: 'center',
10
+ justifyContent: 'center',
11
+ margin: 0,
12
+ padding: 0,
13
+ border: 'none',
14
+ background: 'transparent',
15
+ color: 'inherit',
16
+ cursor: 'pointer',
17
+ lineHeight: 0,
18
+ flexShrink: 0,
19
+ };
20
+ function ToolbarIconButton({ children, className, style, ...rest }) {
21
+ return ((0, jsx_runtime_1.jsx)("button", { type: "button", className: [exports.RP_TOOLBAR_BTN_CLASS, className].filter(Boolean).join(' '), style: { ...baseStyle, ...style }, ...rest, children: children }));
22
+ }
@@ -0,0 +1,5 @@
1
+ /** Shared toolbar icon size for theme/admin header controls. */
2
+ export declare const TOOLBAR_ICON_SIZE = 20;
3
+ /** Hit area for header toolbar buttons (search / theme / locale / user). */
4
+ export declare const TOOLBAR_HIT_SIZE = 32;
5
+ export declare const RP_TOOLBAR_GLYPH_CLASS = "rp-toolbar-glyph";
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RP_TOOLBAR_GLYPH_CLASS = exports.TOOLBAR_HIT_SIZE = exports.TOOLBAR_ICON_SIZE = void 0;
4
+ /** Shared toolbar icon size for theme/admin header controls. */
5
+ exports.TOOLBAR_ICON_SIZE = 20;
6
+ /** Hit area for header toolbar buttons (search / theme / locale / user). */
7
+ exports.TOOLBAR_HIT_SIZE = 32;
8
+ exports.RP_TOOLBAR_GLYPH_CLASS = 'rp-toolbar-glyph';
@@ -0,0 +1,17 @@
1
+ import type { SVGProps } from 'react';
2
+ type IconProps = Pick<SVGProps<SVGSVGElement>, 'className'> & {
3
+ size?: number;
4
+ };
5
+ export declare function SunIcon({ size, className }: IconProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function MoonIcon({ size, className }: IconProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function LanguagesIcon({ size, className }: IconProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function SearchIcon({ size, className }: IconProps): import("react/jsx-runtime").JSX.Element;
9
+ /** 中文态:气泡内「中」,右下角「A」。 */
10
+ export declare function LocaleZhToggleIcon(props: IconProps): import("react/jsx-runtime").JSX.Element;
11
+ /** 英文态:气泡内「A」,右下角「中」。 */
12
+ export declare function LocaleEnToggleIcon(props: IconProps): import("react/jsx-runtime").JSX.Element;
13
+ /** Active locale — switches between zh/en translation bubble icons. */
14
+ export declare function LocaleActiveIcon({ locale, size, className, }: IconProps & {
15
+ locale: string;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SunIcon = SunIcon;
4
+ exports.MoonIcon = MoonIcon;
5
+ exports.LanguagesIcon = LanguagesIcon;
6
+ exports.SearchIcon = SearchIcon;
7
+ exports.LocaleZhToggleIcon = LocaleZhToggleIcon;
8
+ exports.LocaleEnToggleIcon = LocaleEnToggleIcon;
9
+ exports.LocaleActiveIcon = LocaleActiveIcon;
10
+ const jsx_runtime_1 = require("react/jsx-runtime");
11
+ const constants_1 = require("./constants");
12
+ function glyphClass(className) {
13
+ return [constants_1.RP_TOOLBAR_GLYPH_CLASS, className].filter(Boolean).join(' ');
14
+ }
15
+ function SunIcon({ size = 20, className }) {
16
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: glyphClass(className), "aria-hidden": true, children: [(0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "4" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 2v2" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 20v2" }), (0, jsx_runtime_1.jsx)("path", { d: "M4.93 4.93l1.41 1.41" }), (0, jsx_runtime_1.jsx)("path", { d: "M17.66 17.66l1.41 1.41" }), (0, jsx_runtime_1.jsx)("path", { d: "M2 12h2" }), (0, jsx_runtime_1.jsx)("path", { d: "M20 12h2" }), (0, jsx_runtime_1.jsx)("path", { d: "M6.34 17.66l-1.41 1.41" }), (0, jsx_runtime_1.jsx)("path", { d: "M19.07 4.93l-1.41 1.41" })] }));
17
+ }
18
+ function MoonIcon({ size = 20, className }) {
19
+ return ((0, jsx_runtime_1.jsx)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: glyphClass(className), "aria-hidden": true, children: (0, jsx_runtime_1.jsx)("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" }) }));
20
+ }
21
+ function LanguagesIcon({ size = 20, className }) {
22
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: glyphClass(className), "aria-hidden": true, children: [(0, jsx_runtime_1.jsx)("path", { d: "m5 8 6 6" }), (0, jsx_runtime_1.jsx)("path", { d: "m4 14 6-6 2-3" }), (0, jsx_runtime_1.jsx)("path", { d: "M2 5h12" }), (0, jsx_runtime_1.jsx)("path", { d: "M7 2h1" }), (0, jsx_runtime_1.jsx)("path", { d: "m22 22-5-10-5 10" }), (0, jsx_runtime_1.jsx)("path", { d: "M14 18h6" })] }));
23
+ }
24
+ function SearchIcon({ size = 20, className }) {
25
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: glyphClass(className), "aria-hidden": true, children: [(0, jsx_runtime_1.jsx)("circle", { cx: "11", cy: "11", r: "8" }), (0, jsx_runtime_1.jsx)("path", { d: "m21 21-4.35-4.35" })] }));
26
+ }
27
+ function TranslationToggleIcon({ primaryGlyph, secondaryGlyph, primarySize = 10, secondarySize = 7.5, size = 20, className, }) {
28
+ return ((0, jsx_runtime_1.jsxs)("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: glyphClass(className), "aria-hidden": true, children: [(0, jsx_runtime_1.jsx)("path", { d: "M2.5 2h14.5a1.5 1.5 0 0 1 1.5 1.5v9.5a1.5 1.5 0 0 1-1.5 1.5H8.5L5 18.5V14H2.5a1.5 1.5 0 0 1-1.5-1.5V3.5A1.5 1.5 0 0 1 2.5 2z" }), (0, jsx_runtime_1.jsx)("text", { x: "10", y: "10.5", textAnchor: "middle", dominantBaseline: "middle", fill: "currentColor", stroke: "none", fontSize: primarySize, fontWeight: "600", fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif", children: primaryGlyph }), (0, jsx_runtime_1.jsx)("text", { x: "18.5", y: "19.5", textAnchor: "middle", dominantBaseline: "middle", fill: "currentColor", stroke: "none", fontSize: secondarySize, fontWeight: "600", fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif", children: secondaryGlyph })] }));
29
+ }
30
+ /** 中文态:气泡内「中」,右下角「A」。 */
31
+ function LocaleZhToggleIcon(props) {
32
+ return ((0, jsx_runtime_1.jsx)(TranslationToggleIcon, { primaryGlyph: "\u4E2D", secondaryGlyph: "A", ...props }));
33
+ }
34
+ /** 英文态:气泡内「A」,右下角「中」。 */
35
+ function LocaleEnToggleIcon(props) {
36
+ return ((0, jsx_runtime_1.jsx)(TranslationToggleIcon, { primaryGlyph: "A", secondaryGlyph: "\u4E2D", ...props }));
37
+ }
38
+ /** Active locale — switches between zh/en translation bubble icons. */
39
+ function LocaleActiveIcon({ locale, size = 20, className, }) {
40
+ if (locale === 'en') {
41
+ return (0, jsx_runtime_1.jsx)(LocaleEnToggleIcon, { size: size, className: className });
42
+ }
43
+ return (0, jsx_runtime_1.jsx)(LocaleZhToggleIcon, { size: size, className: className });
44
+ }
@@ -0,0 +1,9 @@
1
+ export { TOOLBAR_HIT_SIZE, TOOLBAR_ICON_SIZE, RP_TOOLBAR_GLYPH_CLASS } from './constants';
2
+ export { LanguagesIcon, LocaleActiveIcon, LocaleEnToggleIcon, LocaleZhToggleIcon, MoonIcon, SearchIcon, SunIcon } from './icons';
3
+ export { localeToggleLabel, nextLocale } from './locale-label';
4
+ export type { LocaleToggleButtonProps } from './LocaleToggleButton';
5
+ export { LocaleToggleButton } from './LocaleToggleButton';
6
+ export type { ThemeToggleButtonProps } from './ThemeToggleButton';
7
+ export { ThemeToggleButton } from './ThemeToggleButton';
8
+ export type { ToolbarIconButtonProps } from './ToolbarIconButton';
9
+ export { RP_TOOLBAR_BTN_CLASS, ToolbarIconButton } from './ToolbarIconButton';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolbarIconButton = exports.RP_TOOLBAR_BTN_CLASS = exports.ThemeToggleButton = exports.LocaleToggleButton = exports.nextLocale = exports.localeToggleLabel = exports.SunIcon = exports.SearchIcon = exports.MoonIcon = exports.LocaleZhToggleIcon = exports.LocaleEnToggleIcon = exports.LocaleActiveIcon = exports.LanguagesIcon = exports.RP_TOOLBAR_GLYPH_CLASS = exports.TOOLBAR_ICON_SIZE = exports.TOOLBAR_HIT_SIZE = void 0;
4
+ var constants_1 = require("./constants");
5
+ Object.defineProperty(exports, "TOOLBAR_HIT_SIZE", { enumerable: true, get: function () { return constants_1.TOOLBAR_HIT_SIZE; } });
6
+ Object.defineProperty(exports, "TOOLBAR_ICON_SIZE", { enumerable: true, get: function () { return constants_1.TOOLBAR_ICON_SIZE; } });
7
+ Object.defineProperty(exports, "RP_TOOLBAR_GLYPH_CLASS", { enumerable: true, get: function () { return constants_1.RP_TOOLBAR_GLYPH_CLASS; } });
8
+ var icons_1 = require("./icons");
9
+ Object.defineProperty(exports, "LanguagesIcon", { enumerable: true, get: function () { return icons_1.LanguagesIcon; } });
10
+ Object.defineProperty(exports, "LocaleActiveIcon", { enumerable: true, get: function () { return icons_1.LocaleActiveIcon; } });
11
+ Object.defineProperty(exports, "LocaleEnToggleIcon", { enumerable: true, get: function () { return icons_1.LocaleEnToggleIcon; } });
12
+ Object.defineProperty(exports, "LocaleZhToggleIcon", { enumerable: true, get: function () { return icons_1.LocaleZhToggleIcon; } });
13
+ Object.defineProperty(exports, "MoonIcon", { enumerable: true, get: function () { return icons_1.MoonIcon; } });
14
+ Object.defineProperty(exports, "SearchIcon", { enumerable: true, get: function () { return icons_1.SearchIcon; } });
15
+ Object.defineProperty(exports, "SunIcon", { enumerable: true, get: function () { return icons_1.SunIcon; } });
16
+ var locale_label_1 = require("./locale-label");
17
+ Object.defineProperty(exports, "localeToggleLabel", { enumerable: true, get: function () { return locale_label_1.localeToggleLabel; } });
18
+ Object.defineProperty(exports, "nextLocale", { enumerable: true, get: function () { return locale_label_1.nextLocale; } });
19
+ var LocaleToggleButton_1 = require("./LocaleToggleButton");
20
+ Object.defineProperty(exports, "LocaleToggleButton", { enumerable: true, get: function () { return LocaleToggleButton_1.LocaleToggleButton; } });
21
+ var ThemeToggleButton_1 = require("./ThemeToggleButton");
22
+ Object.defineProperty(exports, "ThemeToggleButton", { enumerable: true, get: function () { return ThemeToggleButton_1.ThemeToggleButton; } });
23
+ var ToolbarIconButton_1 = require("./ToolbarIconButton");
24
+ Object.defineProperty(exports, "RP_TOOLBAR_BTN_CLASS", { enumerable: true, get: function () { return ToolbarIconButton_1.RP_TOOLBAR_BTN_CLASS; } });
25
+ Object.defineProperty(exports, "ToolbarIconButton", { enumerable: true, get: function () { return ToolbarIconButton_1.ToolbarIconButton; } });
@@ -0,0 +1,3 @@
1
+ /** Compact label for locale toggle buttons (current language at a glance). */
2
+ export declare function localeToggleLabel(locale: string): string;
3
+ export declare function nextLocale(current: string, locales: string[]): string;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.localeToggleLabel = localeToggleLabel;
4
+ exports.nextLocale = nextLocale;
5
+ const LOCALE_TOGGLE_LABELS = {
6
+ zh: '中',
7
+ en: 'EN',
8
+ };
9
+ /** Compact label for locale toggle buttons (current language at a glance). */
10
+ function localeToggleLabel(locale) {
11
+ return LOCALE_TOGGLE_LABELS[locale] ?? locale.slice(0, 2).toUpperCase();
12
+ }
13
+ function nextLocale(current, locales) {
14
+ if (locales.length < 2)
15
+ return current;
16
+ const index = locales.indexOf(current);
17
+ const nextIndex = index >= 0 ? (index + 1) % locales.length : 0;
18
+ return locales[nextIndex] ?? current;
19
+ }