@akairos/pipeline 0.18.1 → 0.19.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 (217) hide show
  1. package/ARTICLE-THEMES.md +2 -0
  2. package/README.md +27 -4
  3. package/package.json +7 -5
  4. package/src/adapter-loader.ts +24 -4
  5. package/src/adapter-types.ts +14 -0
  6. package/src/article-theme.test.ts +55 -0
  7. package/src/article-theme.ts +10 -2
  8. package/src/commands/article-theme.ts +1 -1
  9. package/src/commands/init.ts +2 -0
  10. package/src/commands/publish.ts +1 -1
  11. package/src/commands/typeset-assets-sync.test.ts +12 -1
  12. package/src/commands/wechat-export.ts +9 -4
  13. package/src/plugin-runner.ts +10 -4
  14. package/src/plugin-runtime.test.ts +19 -0
  15. package/src/plugin-runtime.ts +11 -2
  16. package/src/providers/index.ts +4 -2
  17. package/src/runtime-package.ts +13 -6
  18. package/src/wechat-preview/assets/browser-dist/.vite/manifest.json +1280 -5
  19. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  20. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  21. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  22. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  23. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  24. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  25. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  26. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  27. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  28. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  29. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  30. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  31. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  32. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  33. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  34. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  35. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  36. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  37. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  38. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  39. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  40. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  41. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  42. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  43. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  44. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  45. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  46. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  47. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  48. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  49. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  50. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  51. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  52. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  53. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  54. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  55. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  56. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  57. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  58. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  59. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  60. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  61. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  62. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  63. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  64. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  65. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  66. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  67. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  68. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  69. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  70. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  71. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  72. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  73. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  74. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  75. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  76. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  77. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  78. package/src/wechat-preview/assets/browser-dist/assets/apl-B4CMkyY2.js +1 -0
  79. package/src/wechat-preview/assets/browser-dist/assets/asciiarmor-Df11BRmG.js +1 -0
  80. package/src/wechat-preview/assets/browser-dist/assets/asn1-EdZsLKOL.js +1 -0
  81. package/src/wechat-preview/assets/browser-dist/assets/asterisk-B-8jnY81.js +1 -0
  82. package/src/wechat-preview/assets/browser-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  83. package/src/wechat-preview/assets/browser-dist/assets/clike-B9uivgTg.js +1 -0
  84. package/src/wechat-preview/assets/browser-dist/assets/clojure-BMjYHr_A.js +1 -0
  85. package/src/wechat-preview/assets/browser-dist/assets/cmake-BQqOBYOt.js +1 -0
  86. package/src/wechat-preview/assets/browser-dist/assets/cobol-CWcv1MsR.js +1 -0
  87. package/src/wechat-preview/assets/browser-dist/assets/coffeescript-S37ZYGWr.js +1 -0
  88. package/src/wechat-preview/assets/browser-dist/assets/commonlisp-DBKNyK5s.js +1 -0
  89. package/src/wechat-preview/assets/browser-dist/assets/crystal-SjHAIU92.js +1 -0
  90. package/src/wechat-preview/assets/browser-dist/assets/css-BnMrqG3P.js +1 -0
  91. package/src/wechat-preview/assets/browser-dist/assets/cypher-C_CwsFkJ.js +1 -0
  92. package/src/wechat-preview/assets/browser-dist/assets/d-pRatUO7H.js +1 -0
  93. package/src/wechat-preview/assets/browser-dist/assets/diff-DbItnlRl.js +1 -0
  94. package/src/wechat-preview/assets/browser-dist/assets/dockerfile-BKs6k2Af.js +1 -0
  95. package/src/wechat-preview/assets/browser-dist/assets/dtd-DF_7sFjM.js +1 -0
  96. package/src/wechat-preview/assets/browser-dist/assets/dylan-DwRh75JA.js +1 -0
  97. package/src/wechat-preview/assets/browser-dist/assets/ebnf-CDyGwa7X.js +1 -0
  98. package/src/wechat-preview/assets/browser-dist/assets/ecl-Cabwm37j.js +1 -0
  99. package/src/wechat-preview/assets/browser-dist/assets/eiffel-CnydiIhH.js +1 -0
  100. package/src/wechat-preview/assets/browser-dist/assets/elm-vLlmbW-K.js +1 -0
  101. package/src/wechat-preview/assets/browser-dist/assets/erlang-BNw1qcRV.js +1 -0
  102. package/src/wechat-preview/assets/browser-dist/assets/factor-kuTfRLto.js +1 -0
  103. package/src/wechat-preview/assets/browser-dist/assets/fcl-Kvtd6kyn.js +1 -0
  104. package/src/wechat-preview/assets/browser-dist/assets/forth-Ffai-XNe.js +1 -0
  105. package/src/wechat-preview/assets/browser-dist/assets/fortran-DYz_wnZ1.js +1 -0
  106. package/src/wechat-preview/assets/browser-dist/assets/gas-Bneqetm1.js +1 -0
  107. package/src/wechat-preview/assets/browser-dist/assets/gherkin-heZmZLOM.js +1 -0
  108. package/src/wechat-preview/assets/browser-dist/assets/groovy-D9Dt4D0W.js +1 -0
  109. package/src/wechat-preview/assets/browser-dist/assets/haskell-Cw1EW3IL.js +1 -0
  110. package/src/wechat-preview/assets/browser-dist/assets/haxe-H-WmDvRZ.js +1 -0
  111. package/src/wechat-preview/assets/browser-dist/assets/http-DBlCnlav.js +1 -0
  112. package/src/wechat-preview/assets/browser-dist/assets/idl-BEugSyMb.js +1 -0
  113. package/src/wechat-preview/assets/browser-dist/assets/index-B13lCSuc.js +1 -0
  114. package/src/wechat-preview/assets/browser-dist/assets/index-BDdU9pNh.js +1 -0
  115. package/src/wechat-preview/assets/browser-dist/assets/index-BFLGVgsp.js +1 -0
  116. package/src/wechat-preview/assets/browser-dist/assets/index-BHJY0B4E.js +8 -0
  117. package/src/wechat-preview/assets/browser-dist/assets/index-BOnKEJxh.js +7 -0
  118. package/src/wechat-preview/assets/browser-dist/assets/index-BPmBcGI-.js +1 -0
  119. package/src/wechat-preview/assets/browser-dist/assets/index-BTVIa90Y.js +1 -0
  120. package/src/wechat-preview/assets/browser-dist/assets/index-BYV6TA8f.js +1 -0
  121. package/src/wechat-preview/assets/browser-dist/assets/index-BlVpb0dF.js +1 -0
  122. package/src/wechat-preview/assets/browser-dist/assets/index-BqKARoyW.js +1 -0
  123. package/src/wechat-preview/assets/browser-dist/assets/index-BzHql5Rp.js +20 -0
  124. package/src/wechat-preview/assets/browser-dist/assets/index-CPFEJ9fX.js +1 -0
  125. package/src/wechat-preview/assets/browser-dist/assets/index-CdxKyTX6.js +1 -0
  126. package/src/wechat-preview/assets/browser-dist/assets/index-CyXDvcwY.js +1 -0
  127. package/src/wechat-preview/assets/browser-dist/assets/index-DA7Z4paG.js +13 -0
  128. package/src/wechat-preview/assets/browser-dist/assets/index-DDQGWU_D.js +3 -0
  129. package/src/wechat-preview/assets/browser-dist/assets/index-DENMoE5l.js +1 -0
  130. package/src/wechat-preview/assets/browser-dist/assets/index-D_EI5vFS.js +1 -0
  131. package/src/wechat-preview/assets/browser-dist/assets/index-DpuVrwze.js +1 -0
  132. package/src/wechat-preview/assets/browser-dist/assets/index-IBlhKHQr.js +8 -0
  133. package/src/wechat-preview/assets/browser-dist/assets/index-ifI5svkD.js +2 -0
  134. package/src/wechat-preview/assets/browser-dist/assets/index-vRiJxvj2.js +1 -0
  135. package/src/wechat-preview/assets/browser-dist/assets/javascript-iXu5QeM3.js +1 -0
  136. package/src/wechat-preview/assets/browser-dist/assets/julia-DuME0IfC.js +1 -0
  137. package/src/wechat-preview/assets/browser-dist/assets/livescript-BwQOo05w.js +1 -0
  138. package/src/wechat-preview/assets/browser-dist/assets/lua-VAEuO923.js +1 -0
  139. package/src/wechat-preview/assets/browser-dist/assets/mathematica-DTrFuWx2.js +1 -0
  140. package/src/wechat-preview/assets/browser-dist/assets/mbox-CNhZ1qSd.js +1 -0
  141. package/src/wechat-preview/assets/browser-dist/assets/mirc-CjQqDB4T.js +1 -0
  142. package/src/wechat-preview/assets/browser-dist/assets/mllike-CXdrOF99.js +1 -0
  143. package/src/wechat-preview/assets/browser-dist/assets/modelica-Dc1JOy9r.js +1 -0
  144. package/src/wechat-preview/assets/browser-dist/assets/mscgen-BA5vi2Kp.js +1 -0
  145. package/src/wechat-preview/assets/browser-dist/assets/mumps-BT43cFF4.js +1 -0
  146. package/src/wechat-preview/assets/browser-dist/assets/nginx-DdIZxoE0.js +1 -0
  147. package/src/wechat-preview/assets/browser-dist/assets/nsis-LY0VT_u5.js +1 -0
  148. package/src/wechat-preview/assets/browser-dist/assets/ntriples-BfvgReVJ.js +1 -0
  149. package/src/wechat-preview/assets/browser-dist/assets/octave-Ck1zUtKM.js +1 -0
  150. package/src/wechat-preview/assets/browser-dist/assets/oz-BzwKVEFT.js +1 -0
  151. package/src/wechat-preview/assets/browser-dist/assets/pascal--L3eBynH.js +1 -0
  152. package/src/wechat-preview/assets/browser-dist/assets/perl-CdXCOZ3F.js +1 -0
  153. package/src/wechat-preview/assets/browser-dist/assets/pig-CevX1Tat.js +1 -0
  154. package/src/wechat-preview/assets/browser-dist/assets/powershell-CFHJl5sT.js +1 -0
  155. package/src/wechat-preview/assets/browser-dist/assets/properties-C78fOPTZ.js +1 -0
  156. package/src/wechat-preview/assets/browser-dist/assets/protobuf-ChK-085T.js +1 -0
  157. package/src/wechat-preview/assets/browser-dist/assets/pug-DeIclll2.js +1 -0
  158. package/src/wechat-preview/assets/browser-dist/assets/puppet-DMA9R1ak.js +1 -0
  159. package/src/wechat-preview/assets/browser-dist/assets/python-BuPzkPfP.js +1 -0
  160. package/src/wechat-preview/assets/browser-dist/assets/q-pXgVlZs6.js +1 -0
  161. package/src/wechat-preview/assets/browser-dist/assets/r-B6wPVr8A.js +1 -0
  162. package/src/wechat-preview/assets/browser-dist/assets/rpm-CTu-6PCP.js +1 -0
  163. package/src/wechat-preview/assets/browser-dist/assets/ruby-BK5aLJev.js +1 -0
  164. package/src/wechat-preview/assets/browser-dist/assets/sas-B4kiWyti.js +1 -0
  165. package/src/wechat-preview/assets/browser-dist/assets/scheme-C41bIUwD.js +1 -0
  166. package/src/wechat-preview/assets/browser-dist/assets/shell-CjFT_Tl9.js +1 -0
  167. package/src/wechat-preview/assets/browser-dist/assets/sieve-C3Gn_uJK.js +1 -0
  168. package/src/wechat-preview/assets/browser-dist/assets/simple-mode-GW_nhZxv.js +1 -0
  169. package/src/wechat-preview/assets/browser-dist/assets/smalltalk-CnHTOXQT.js +1 -0
  170. package/src/wechat-preview/assets/browser-dist/assets/solr-DehyRSwq.js +1 -0
  171. package/src/wechat-preview/assets/browser-dist/assets/sparql-DkYu6x3z.js +1 -0
  172. package/src/wechat-preview/assets/browser-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  173. package/src/wechat-preview/assets/browser-dist/assets/sql-D0XecflT.js +1 -0
  174. package/src/wechat-preview/assets/browser-dist/assets/stex-C3f8Ysf7.js +1 -0
  175. package/src/wechat-preview/assets/browser-dist/assets/style-Cif_gYUW.css +1 -0
  176. package/src/wechat-preview/assets/browser-dist/assets/stylus-B533Al4x.js +1 -0
  177. package/src/wechat-preview/assets/browser-dist/assets/swift-BzpIVaGY.js +1 -0
  178. package/src/wechat-preview/assets/browser-dist/assets/tcl-DVfN8rqt.js +1 -0
  179. package/src/wechat-preview/assets/browser-dist/assets/textile-CnDTJFAw.js +1 -0
  180. package/src/wechat-preview/assets/browser-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  181. package/src/wechat-preview/assets/browser-dist/assets/tiki-DGYXhP31.js +1 -0
  182. package/src/wechat-preview/assets/browser-dist/assets/toml-Bm5Em-hy.js +1 -0
  183. package/src/wechat-preview/assets/browser-dist/assets/troff-wAsdV37c.js +1 -0
  184. package/src/wechat-preview/assets/browser-dist/assets/ttcn-CfJYG6tj.js +1 -0
  185. package/src/wechat-preview/assets/browser-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  186. package/src/wechat-preview/assets/browser-dist/assets/turtle-B1tBg_DP.js +1 -0
  187. package/src/wechat-preview/assets/browser-dist/assets/vb-CmGdzxic.js +1 -0
  188. package/src/wechat-preview/assets/browser-dist/assets/vbscript-BuJXcnF6.js +1 -0
  189. package/src/wechat-preview/assets/browser-dist/assets/velocity-D8B20fx6.js +1 -0
  190. package/src/wechat-preview/assets/browser-dist/assets/verilog-C6RDOZhf.js +1 -0
  191. package/src/wechat-preview/assets/browser-dist/assets/vhdl-lSbBsy5d.js +1 -0
  192. package/src/wechat-preview/assets/browser-dist/assets/webidl-ZXfAyPTL.js +1 -0
  193. package/src/wechat-preview/assets/browser-dist/assets/{wechat-renderer-GgNrlSLi.js → wechat-renderer-CcHuq7M-.js} +83 -61
  194. package/src/wechat-preview/assets/browser-dist/assets/xquery-DzFWVndE.js +1 -0
  195. package/src/wechat-preview/assets/browser-dist/assets/yacas-BJ4BC0dw.js +1 -0
  196. package/src/wechat-preview/assets/browser-dist/assets/z80-Hz9HOZM7.js +1 -0
  197. package/src/wechat-preview/assets/browser-dist/editor-export.js +1 -1
  198. package/src/wechat-preview/assets/browser-dist/src/wechat-preview/browser/studio/studio.html +215 -165
  199. package/src/wechat-preview/assets/browser-dist/studio.js +1148 -237
  200. package/src/wechat-preview/browser/studio/color-palettes.ts +28 -0
  201. package/src/wechat-preview/browser/studio/config-manager.ts +49 -0
  202. package/src/wechat-preview/browser/studio/milkdown-article-menu.ts +251 -0
  203. package/src/wechat-preview/browser/studio/myno-editor.ts +122 -0
  204. package/src/wechat-preview/browser/studio/studio.css +493 -250
  205. package/src/wechat-preview/browser/studio/studio.html +213 -163
  206. package/src/wechat-preview/browser/studio/studio.ts +684 -211
  207. package/src/wechat-preview/browser/studio/style-packs.ts +201 -0
  208. package/src/wechat-preview/browser/studio/syntax-presets.test.ts +10 -32
  209. package/src/wechat-preview/browser/studio/syntax-presets.ts +19 -357
  210. package/src/wechat-preview/fixtures/all-nodes.md +2 -11
  211. package/src/wechat-preview/index.ts +35 -14
  212. package/src/wechat-preview/server/http.ts +64 -8
  213. package/src/wechat-preview/server/studio.test.ts +60 -1
  214. package/src/wechat-preview/wechat-export.integration.test.ts +49 -8
  215. package/src/wechat-preview/wechat-renderer.ts +134 -11
  216. package/src/workflow.test.ts +2 -0
  217. package/src/wechat-preview/assets/browser-dist/assets/style-C9-YtTIm.css +0 -1
@@ -0,0 +1,201 @@
1
+ export interface StylePack {
2
+ id: string;
3
+ name: string;
4
+ subtitle: string;
5
+ description: string;
6
+ swatch: string[]; // 预览色块:主色、文字、强调
7
+ theme: {
8
+ fontSize: string;
9
+ lineHeight: string;
10
+ letterSpacing: string;
11
+ paragraphSpacing: string;
12
+ brandColor: string;
13
+ textColor: string;
14
+ h2Color: string;
15
+ h3Color: string;
16
+ quoteColor: string;
17
+ dividerColor: string;
18
+ h2Preset: string;
19
+ h3Preset: string;
20
+ numberedHeadings: boolean;
21
+ };
22
+ }
23
+
24
+ export const STYLE_PACKS: StylePack[] = [
25
+ {
26
+ id: "rouge",
27
+ name: "典雅胭脂",
28
+ subtitle: "人文 · 专栏",
29
+ description: "经典温润的胭脂粉主色与柔和灰调,视觉层次细腻典雅,适合生活方式与深度专栏。",
30
+ swatch: ["#ca6093", "#292526", "#e8c9d7"],
31
+ theme: {
32
+ fontSize: "16",
33
+ lineHeight: "1.84",
34
+ letterSpacing: "0.012",
35
+ paragraphSpacing: "1.18",
36
+ brandColor: "#ca6093",
37
+ textColor: "#292526",
38
+ h2Color: "#1f1b1c",
39
+ h3Color: "#5c5658",
40
+ quoteColor: "#e8c9d7",
41
+ dividerColor: "#e2dcdf",
42
+ h2Preset: "pillar",
43
+ h3Preset: "left-bar",
44
+ numberedHeadings: false,
45
+ },
46
+ },
47
+ {
48
+ id: "paper",
49
+ name: "极简纸墨",
50
+ subtitle: "随笔 · 深度阅读",
51
+ description: "纯粹的纸墨黑白基底,无多余装饰,让读者的注意力百分之百沉浸于文字本身。",
52
+ swatch: ["#18181b", "#27272a", "#e4e4e7"],
53
+ theme: {
54
+ fontSize: "16",
55
+ lineHeight: "1.88",
56
+ letterSpacing: "0.015",
57
+ paragraphSpacing: "1.25",
58
+ brandColor: "#18181b",
59
+ textColor: "#27272a",
60
+ h2Color: "#09090b",
61
+ h3Color: "#52525b",
62
+ quoteColor: "#a1a1aa",
63
+ dividerColor: "#e4e4e7",
64
+ h2Preset: "plain",
65
+ h3Preset: "dot-prefix",
66
+ numberedHeadings: false,
67
+ },
68
+ },
69
+ {
70
+ id: "slate",
71
+ name: "冷灰高雅",
72
+ subtitle: "科技 · 商业研报",
73
+ description: "冷调石板灰蓝搭配深邃沉稳字色,尽显克制与理性,适合行业研究、分析与数码资讯。",
74
+ swatch: ["#2563eb", "#1e293b", "#cbd5e1"],
75
+ theme: {
76
+ fontSize: "16",
77
+ lineHeight: "1.82",
78
+ letterSpacing: "0.01",
79
+ paragraphSpacing: "1.2",
80
+ brandColor: "#2563eb",
81
+ textColor: "#1e293b",
82
+ h2Color: "#0f172a",
83
+ h3Color: "#475569",
84
+ quoteColor: "#93c5fd",
85
+ dividerColor: "#cbd5e1",
86
+ h2Preset: "bottom-line",
87
+ h3Preset: "left-bar",
88
+ numberedHeadings: true,
89
+ },
90
+ },
91
+ {
92
+ id: "mint",
93
+ name: "薄荷清晨",
94
+ subtitle: "清新 · 工具指南",
95
+ description: "高辨识度的翠绿搭配反差色底标题,清晰爽朗,适合效率工具技巧与知识教程。",
96
+ swatch: ["#059669", "#1f2937", "#a7f3d0"],
97
+ theme: {
98
+ fontSize: "16",
99
+ lineHeight: "1.84",
100
+ letterSpacing: "0.012",
101
+ paragraphSpacing: "1.18",
102
+ brandColor: "#059669",
103
+ textColor: "#1f2937",
104
+ h2Color: "#111827",
105
+ h3Color: "#374151",
106
+ quoteColor: "#6ee7b7",
107
+ dividerColor: "#d1fae5",
108
+ h2Preset: "contrast-green",
109
+ h3Preset: "bottom-line",
110
+ numberedHeadings: false,
111
+ },
112
+ },
113
+ {
114
+ id: "violet",
115
+ name: "极光深紫",
116
+ subtitle: "前沿 · 创意设计",
117
+ description: "亮眼的极光紫与柔和渐变胶囊,科技感与潮流感兼具,专为 AI 前沿与前卫思想打造。",
118
+ swatch: ["#7c3aed", "#1e1b4b", "#ddd6fe"],
119
+ theme: {
120
+ fontSize: "16",
121
+ lineHeight: "1.82",
122
+ letterSpacing: "0.012",
123
+ paragraphSpacing: "1.2",
124
+ brandColor: "#7c3aed",
125
+ textColor: "#1e1b4b",
126
+ h2Color: "#0f0d24",
127
+ h3Color: "#4338ca",
128
+ quoteColor: "#c4b5fd",
129
+ dividerColor: "#e0e7ff",
130
+ h2Preset: "gradient-pill",
131
+ h3Preset: "tag-style",
132
+ numberedHeadings: false,
133
+ },
134
+ },
135
+ {
136
+ id: "corporate",
137
+ name: "商业经典",
138
+ subtitle: "企业 · 权威快讯",
139
+ description: "成熟稳健的宝石蓝主色,搭配左侧强调柱,权威严谨,适合机构官微与新闻快报。",
140
+ swatch: ["#0284c7", "#1e293b", "#bae6fd"],
141
+ theme: {
142
+ fontSize: "16",
143
+ lineHeight: "1.84",
144
+ letterSpacing: "0.012",
145
+ paragraphSpacing: "1.18",
146
+ brandColor: "#0284c7",
147
+ textColor: "#1e293b",
148
+ h2Color: "#0f172a",
149
+ h3Color: "#334155",
150
+ quoteColor: "#7dd3fc",
151
+ dividerColor: "#e2e8f0",
152
+ h2Preset: "pillar",
153
+ h3Preset: "left-bar",
154
+ numberedHeadings: true,
155
+ },
156
+ },
157
+ {
158
+ id: "amber",
159
+ name: "暖柿陶土",
160
+ subtitle: "温暖 · 人文深度",
161
+ description: "秋日暖柿与陶土红调,温润燕麦底色与咖啡深墨,温润包容,手机长文夜读极度舒适。",
162
+ swatch: ["#c25e2e", "#2b2623", "#f5ece4"],
163
+ theme: {
164
+ fontSize: "16",
165
+ lineHeight: "1.84",
166
+ letterSpacing: "0.015",
167
+ paragraphSpacing: "1.22",
168
+ brandColor: "#c25e2e",
169
+ textColor: "#2b2623",
170
+ h2Color: "#1f1b18",
171
+ h3Color: "#573d2d",
172
+ quoteColor: "#d9825b",
173
+ dividerColor: "#ece2d8",
174
+ h2Preset: "pillar",
175
+ h3Preset: "left-bar",
176
+ numberedHeadings: false,
177
+ },
178
+ },
179
+ {
180
+ id: "iris",
181
+ name: "鸢尾极光",
182
+ subtitle: "科技 · 现代界面",
183
+ description: "Linear 级现代靛蓝紫,搭配深邃冷夜文字与柔光色块,兼具理性逻辑与前沿审美。",
184
+ swatch: ["#6366f1", "#1e1b4b", "#e0e7ff"],
185
+ theme: {
186
+ fontSize: "16",
187
+ lineHeight: "1.82",
188
+ letterSpacing: "0.012",
189
+ paragraphSpacing: "1.2",
190
+ brandColor: "#6366f1",
191
+ textColor: "#1e1b4b",
192
+ h2Color: "#0f0e26",
193
+ h3Color: "#4338ca",
194
+ quoteColor: "#a5b4fc",
195
+ dividerColor: "#e0e7ff",
196
+ h2Preset: "gradient-pill",
197
+ h3Preset: "tag-style",
198
+ numberedHeadings: false,
199
+ },
200
+ },
201
+ ];
@@ -2,34 +2,21 @@ import { describe, expect, test } from "bun:test";
2
2
  import { SYNTAX_CATEGORIES, buildCombinedPresetsCss } from "./syntax-presets";
3
3
 
4
4
  describe("syntax presets module", () => {
5
- test("defines comprehensive markdown categories including h1, p, table, code, callout, etc.", () => {
5
+ test("only multi-preset categories remain; single-style nodes are covered by article.css", () => {
6
6
  const keys = SYNTAX_CATEGORIES.map((c) => c.key);
7
- expect(keys).toContain("h1");
8
7
  expect(keys).toContain("h2");
9
8
  expect(keys).toContain("h3");
10
- expect(keys).toContain("h4");
11
- expect(keys).toContain("p");
12
- expect(keys).toContain("strong");
13
- expect(keys).toContain("del");
14
- expect(keys).toContain("mark");
15
- expect(keys).toContain("inline-code");
16
- expect(keys).toContain("code-block");
17
9
  expect(keys).toContain("blockquote");
18
- expect(keys).toContain("list");
19
- expect(keys).toContain("task-list");
20
10
  expect(keys).toContain("divider");
21
- expect(keys).toContain("link");
22
- expect(keys).toContain("image");
23
- expect(keys).toContain("table");
24
- expect(keys).toContain("callout");
25
- expect(keys).toContain("kbd");
26
- expect(keys).toContain("badge");
11
+ expect(keys).toContain("article-card");
12
+ expect(keys).not.toContain("h1");
13
+ expect(keys).not.toContain("p");
27
14
  });
28
15
 
29
16
  test("h2 category includes pillar, bottom-line, gradient-pill, contrast-green, card-tag, and plain presets", () => {
30
17
  const h2Cat = SYNTAX_CATEGORIES.find((c) => c.key === "h2");
31
18
  expect(h2Cat).toBeDefined();
32
- const presetIds = h2Cat!.presets!.map((p) => p.id);
19
+ const presetIds = h2Cat!.presets.map((p) => p.id);
33
20
  expect(presetIds).toContain("pillar");
34
21
  expect(presetIds).toContain("bottom-line");
35
22
  expect(presetIds).toContain("gradient-pill");
@@ -38,18 +25,6 @@ describe("syntax presets module", () => {
38
25
  expect(presetIds).toContain("plain");
39
26
  });
40
27
 
41
- test("single-syntax categories provide baseline CSS and descriptions", () => {
42
- const h1Cat = SYNTAX_CATEGORIES.find((c) => c.key === "h1");
43
- expect(h1Cat?.css).toContain(".milkdown .editor h1");
44
- expect(h1Cat?.description).toBeTruthy();
45
-
46
- const tableCat = SYNTAX_CATEGORIES.find((c) => c.key === "table");
47
- expect(tableCat?.css).toContain(".milkdown .editor table");
48
-
49
- const codeCat = SYNTAX_CATEGORIES.find((c) => c.key === "code-block");
50
- expect(codeCat?.css).toContain(".milkdown .editor pre");
51
- });
52
-
53
28
  test("buildCombinedPresetsCss generates valid aggregated CSS blocks", () => {
54
29
  const css = buildCombinedPresetsCss({
55
30
  h2: "gradient-pill",
@@ -66,9 +41,12 @@ describe("syntax presets module", () => {
66
41
  expect(css).toContain("dashed");
67
42
  });
68
43
 
69
- test("buildCombinedPresetsCss falls back to default preset when key missing", () => {
44
+ test("buildCombinedPresetsCss falls back to default preset when key missing or unknown", () => {
70
45
  const css = buildCombinedPresetsCss({});
71
46
  expect(css).toContain(".milkdown .editor h2");
72
- expect(css).toContain("border-left: 2.5px solid");
47
+ expect(css).toContain("border-left: 4px solid");
48
+
49
+ expect(buildCombinedPresetsCss({ h2: "bottom-line" })).toContain("padding-bottom: 0.45em");
50
+ expect(buildCombinedPresetsCss({ h2: "no-such-preset" })).toContain("border-left: 4px solid");
73
51
  });
74
52
  });