@akairos/myno 0.0.0-stage → 0.2.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 (231) hide show
  1. package/README.md +28 -2
  2. package/dist/.vite/manifest.json +1266 -0
  3. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/assets/apl-B4CMkyY2.js +1 -0
  63. package/dist/assets/asciiarmor-Df11BRmG.js +1 -0
  64. package/dist/assets/asn1-EdZsLKOL.js +1 -0
  65. package/dist/assets/asterisk-B-8jnY81.js +1 -0
  66. package/dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  67. package/dist/assets/clike-B9uivgTg.js +1 -0
  68. package/dist/assets/clojure-BMjYHr_A.js +1 -0
  69. package/dist/assets/cmake-BQqOBYOt.js +1 -0
  70. package/dist/assets/cobol-CWcv1MsR.js +1 -0
  71. package/dist/assets/coffeescript-S37ZYGWr.js +1 -0
  72. package/dist/assets/commonlisp-DBKNyK5s.js +1 -0
  73. package/dist/assets/crystal-SjHAIU92.js +1 -0
  74. package/dist/assets/css-BnMrqG3P.js +1 -0
  75. package/dist/assets/cypher-C_CwsFkJ.js +1 -0
  76. package/dist/assets/d-pRatUO7H.js +1 -0
  77. package/dist/assets/diff-DbItnlRl.js +1 -0
  78. package/dist/assets/dockerfile-BKs6k2Af.js +1 -0
  79. package/dist/assets/dtd-DF_7sFjM.js +1 -0
  80. package/dist/assets/dylan-DwRh75JA.js +1 -0
  81. package/dist/assets/ebnf-CDyGwa7X.js +1 -0
  82. package/dist/assets/ecl-Cabwm37j.js +1 -0
  83. package/dist/assets/eiffel-CnydiIhH.js +1 -0
  84. package/dist/assets/elm-vLlmbW-K.js +1 -0
  85. package/dist/assets/erlang-BNw1qcRV.js +1 -0
  86. package/dist/assets/factor-kuTfRLto.js +1 -0
  87. package/dist/assets/fcl-Kvtd6kyn.js +1 -0
  88. package/dist/assets/forth-Ffai-XNe.js +1 -0
  89. package/dist/assets/fortran-DYz_wnZ1.js +1 -0
  90. package/dist/assets/gas-Bneqetm1.js +1 -0
  91. package/dist/assets/gherkin-heZmZLOM.js +1 -0
  92. package/dist/assets/groovy-D9Dt4D0W.js +1 -0
  93. package/dist/assets/haskell-Cw1EW3IL.js +1 -0
  94. package/dist/assets/haxe-H-WmDvRZ.js +1 -0
  95. package/dist/assets/http-DBlCnlav.js +1 -0
  96. package/dist/assets/idl-BEugSyMb.js +1 -0
  97. package/dist/assets/index-6xZjfNBY.js +1 -0
  98. package/dist/assets/index-7jqFg9Mv.js +13 -0
  99. package/dist/assets/index-AdP2vXVD.js +1 -0
  100. package/dist/assets/index-BHPv-A3N.js +1 -0
  101. package/dist/assets/index-BL9wSBtZ.js +1 -0
  102. package/dist/assets/index-BjawAflQ.js +1 -0
  103. package/dist/assets/index-C0JZnjgf.js +3 -0
  104. package/dist/assets/index-C1vHAMos.js +1 -0
  105. package/dist/assets/index-CAXLlEvK.js +1 -0
  106. package/dist/assets/index-CDgREgYC.js +2 -0
  107. package/dist/assets/index-CIYtVPt-.js +1 -0
  108. package/dist/assets/index-CddMuxp_.js +6 -0
  109. package/dist/assets/index-CmlqrlxY.js +7 -0
  110. package/dist/assets/index-Crr2UUqW.js +1 -0
  111. package/dist/assets/index-D3-l1kuh.js +1 -0
  112. package/dist/assets/index-D5AbviI1.js +1 -0
  113. package/dist/assets/index-D8eibMZn.js +1 -0
  114. package/dist/assets/index-DLh7eEmr.js +1 -0
  115. package/dist/assets/index-Q5rzr3Yl.js +1 -0
  116. package/dist/assets/index-RrNfwOco.js +1 -0
  117. package/dist/assets/index-kgpju2R2.js +1 -0
  118. package/dist/assets/index-qjQPn-9r.js +1 -0
  119. package/dist/assets/javascript-iXu5QeM3.js +1 -0
  120. package/dist/assets/julia-DuME0IfC.js +1 -0
  121. package/dist/assets/livescript-BwQOo05w.js +1 -0
  122. package/dist/assets/lua-VAEuO923.js +1 -0
  123. package/dist/assets/mathematica-DTrFuWx2.js +1 -0
  124. package/dist/assets/mbox-CNhZ1qSd.js +1 -0
  125. package/dist/assets/mirc-CjQqDB4T.js +1 -0
  126. package/dist/assets/mllike-CXdrOF99.js +1 -0
  127. package/dist/assets/modelica-Dc1JOy9r.js +1 -0
  128. package/dist/assets/mscgen-BA5vi2Kp.js +1 -0
  129. package/dist/assets/mumps-BT43cFF4.js +1 -0
  130. package/dist/assets/nginx-DdIZxoE0.js +1 -0
  131. package/dist/assets/nsis-LY0VT_u5.js +1 -0
  132. package/dist/assets/ntriples-BfvgReVJ.js +1 -0
  133. package/dist/assets/octave-Ck1zUtKM.js +1 -0
  134. package/dist/assets/oz-BzwKVEFT.js +1 -0
  135. package/dist/assets/pascal--L3eBynH.js +1 -0
  136. package/dist/assets/perl-CdXCOZ3F.js +1 -0
  137. package/dist/assets/pig-CevX1Tat.js +1 -0
  138. package/dist/assets/powershell-CFHJl5sT.js +1 -0
  139. package/dist/assets/properties-C78fOPTZ.js +1 -0
  140. package/dist/assets/protobuf-ChK-085T.js +1 -0
  141. package/dist/assets/pug-DeIclll2.js +1 -0
  142. package/dist/assets/puppet-DMA9R1ak.js +1 -0
  143. package/dist/assets/python-BuPzkPfP.js +1 -0
  144. package/dist/assets/q-pXgVlZs6.js +1 -0
  145. package/dist/assets/r-B6wPVr8A.js +1 -0
  146. package/dist/assets/rpm-CTu-6PCP.js +1 -0
  147. package/dist/assets/ruby-BK5aLJev.js +1 -0
  148. package/dist/assets/sas-B4kiWyti.js +1 -0
  149. package/dist/assets/scheme-C41bIUwD.js +1 -0
  150. package/dist/assets/shell-CjFT_Tl9.js +1 -0
  151. package/dist/assets/sieve-C3Gn_uJK.js +1 -0
  152. package/dist/assets/simple-mode-GW_nhZxv.js +1 -0
  153. package/dist/assets/smalltalk-CnHTOXQT.js +1 -0
  154. package/dist/assets/solr-DehyRSwq.js +1 -0
  155. package/dist/assets/sparql-DkYu6x3z.js +1 -0
  156. package/dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  157. package/dist/assets/sql-D0XecflT.js +1 -0
  158. package/dist/assets/stex-C3f8Ysf7.js +1 -0
  159. package/dist/assets/style-Cif_gYUW.css +1 -0
  160. package/dist/assets/style-DG6dI-L6.css +1 -0
  161. package/dist/assets/stylus-B533Al4x.js +1 -0
  162. package/dist/assets/swift-BzpIVaGY.js +1 -0
  163. package/dist/assets/tcl-DVfN8rqt.js +1 -0
  164. package/dist/assets/textile-CnDTJFAw.js +1 -0
  165. package/dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  166. package/dist/assets/tiki-DGYXhP31.js +1 -0
  167. package/dist/assets/toml-Bm5Em-hy.js +1 -0
  168. package/dist/assets/troff-wAsdV37c.js +1 -0
  169. package/dist/assets/ttcn-CfJYG6tj.js +1 -0
  170. package/dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  171. package/dist/assets/turtle-B1tBg_DP.js +1 -0
  172. package/dist/assets/vb-CmGdzxic.js +1 -0
  173. package/dist/assets/vbscript-BuJXcnF6.js +1 -0
  174. package/dist/assets/velocity-D8B20fx6.js +1 -0
  175. package/dist/assets/verilog-C6RDOZhf.js +1 -0
  176. package/dist/assets/vhdl-lSbBsy5d.js +1 -0
  177. package/dist/assets/webidl-ZXfAyPTL.js +1 -0
  178. package/dist/assets/xquery-DzFWVndE.js +1 -0
  179. package/dist/assets/yacas-BJ4BC0dw.js +1 -0
  180. package/dist/assets/z80-Hz9HOZM7.js +1 -0
  181. package/dist/editor/article-menu.d.ts +36 -0
  182. package/dist/editor/article-menu.d.ts.map +1 -0
  183. package/dist/editor/article-menu.js +251 -0
  184. package/dist/editor/article-menu.js.map +1 -0
  185. package/dist/editor/image-upload.d.ts +9 -0
  186. package/dist/editor/image-upload.d.ts.map +1 -0
  187. package/dist/editor/image-upload.js +65 -0
  188. package/dist/editor/image-upload.js.map +1 -0
  189. package/dist/editor/index.d.ts +4 -0
  190. package/dist/editor/index.d.ts.map +1 -0
  191. package/dist/editor/index.js +4 -0
  192. package/dist/editor/index.js.map +1 -0
  193. package/dist/editor/myno-editor.d.ts +35 -0
  194. package/dist/editor/myno-editor.d.ts.map +1 -0
  195. package/dist/editor/myno-editor.js +117 -0
  196. package/dist/editor/myno-editor.js.map +1 -0
  197. package/dist/index.d.ts +8 -0
  198. package/dist/index.d.ts.map +1 -0
  199. package/dist/index.js +8 -0
  200. package/dist/index.js.map +1 -0
  201. package/dist/src/studio/studio.html +342 -0
  202. package/dist/studio/color-palettes.d.ts +16 -0
  203. package/dist/studio/color-palettes.d.ts.map +1 -0
  204. package/dist/studio/color-palettes.js +129 -0
  205. package/dist/studio/color-palettes.js.map +1 -0
  206. package/dist/studio/config-manager.d.ts +34 -0
  207. package/dist/studio/config-manager.d.ts.map +1 -0
  208. package/dist/studio/config-manager.js +30 -0
  209. package/dist/studio/config-manager.js.map +1 -0
  210. package/dist/studio/studio.d.ts +2 -0
  211. package/dist/studio/studio.d.ts.map +1 -0
  212. package/dist/studio/studio.js +1031 -0
  213. package/dist/studio/studio.js.map +1 -0
  214. package/dist/studio/style-packs.d.ts +24 -0
  215. package/dist/studio/style-packs.d.ts.map +1 -0
  216. package/dist/studio/style-packs.js +179 -0
  217. package/dist/studio/style-packs.js.map +1 -0
  218. package/dist/studio/syntax-presets.d.ts +16 -0
  219. package/dist/studio/syntax-presets.d.ts.map +1 -0
  220. package/dist/studio/syntax-presets.js +408 -0
  221. package/dist/studio/syntax-presets.js.map +1 -0
  222. package/dist/studio/themes.d.ts +32 -0
  223. package/dist/studio/themes.d.ts.map +1 -0
  224. package/dist/studio/themes.js +153 -0
  225. package/dist/studio/themes.js.map +1 -0
  226. package/dist/studio/wechat-renderer.d.ts +59 -0
  227. package/dist/studio/wechat-renderer.d.ts.map +1 -0
  228. package/dist/studio/wechat-renderer.js +797 -0
  229. package/dist/studio/wechat-renderer.js.map +1 -0
  230. package/dist/studio.js +2359 -0
  231. package/package.json +49 -4
@@ -0,0 +1,408 @@
1
+ /** 仅收录存在多个可选预设的语法节点;单一样式的节点直接由 article.css 提供。 */
2
+ export const SYNTAX_CATEGORIES = [
3
+ {
4
+ key: "h2",
5
+ label: "二级标题 (H2)",
6
+ icon: "📌",
7
+ defaultPresetId: "pillar",
8
+ presets: [
9
+ {
10
+ id: "pillar",
11
+ name: "左侧呼吸柱(推荐)",
12
+ css: `.milkdown .editor h2 {
13
+ margin: 2.8em 0 0.65em;
14
+ padding-left: 9px;
15
+ border-left: 4px solid var(--wx-brand-accent, #ca6093);
16
+ border-bottom: none;
17
+ background: none;
18
+ font-size: 20px;
19
+ font-weight: 700;
20
+ line-height: 1.36;
21
+ letter-spacing: 0.01em;
22
+ color: var(--wx-h2-color, #1f1b1c);
23
+ }`,
24
+ },
25
+ {
26
+ id: "bottom-line",
27
+ name: "极浅底部分割",
28
+ css: `.milkdown .editor h2 {
29
+ margin: 3.0em 0 0.8em;
30
+ padding-bottom: 0.45em;
31
+ padding-left: 0;
32
+ border-left: none;
33
+ border-bottom: 1px solid var(--wx-divider-color, #ebe6e8);
34
+ background: none;
35
+ font-size: 20px;
36
+ font-weight: 700;
37
+ line-height: 1.35;
38
+ letter-spacing: 0.015em;
39
+ color: var(--wx-h2-color, #1f1b1c);
40
+ }`,
41
+ },
42
+ {
43
+ id: "gradient-pill",
44
+ name: "渐变微衬底(背景色块)",
45
+ css: `.milkdown .editor h2 {
46
+ margin: 2.8em 0 0.7em;
47
+ padding: 7px 14px;
48
+ border-left: 3px solid var(--wx-brand-accent, #ca6093);
49
+ border-bottom: none;
50
+ background: linear-gradient(90deg, rgba(202, 96, 147, 0.09) 0%, rgba(202, 96, 147, 0.01) 100%);
51
+ border-radius: 4px;
52
+ font-size: 19px;
53
+ font-weight: 700;
54
+ line-height: 1.38;
55
+ letter-spacing: 0.01em;
56
+ color: var(--wx-h2-color, #1f1b1c);
57
+ }`,
58
+ },
59
+ {
60
+ id: "contrast-green",
61
+ name: "反差色绿底(白字反色块)",
62
+ css: `.milkdown .editor h2 {
63
+ margin: 2.8em 0 0.8em;
64
+ padding: 8px 14px;
65
+ background-color: #1f7a4d;
66
+ border-left: none;
67
+ border-bottom: none;
68
+ border-radius: 4px;
69
+ color: #ffffff;
70
+ font-size: 18px;
71
+ font-weight: 700;
72
+ line-height: 1.36;
73
+ letter-spacing: 0.02em;
74
+ }
75
+ .milkdown .editor h2 span {
76
+ color: #ffffff;
77
+ }`,
78
+ },
79
+ {
80
+ id: "card-tag",
81
+ name: "温润小卡片",
82
+ css: `.milkdown .editor h2 {
83
+ margin: 2.7em 0 0.75em;
84
+ padding: 6px 12px;
85
+ border-left: none;
86
+ border-bottom: none;
87
+ background-color: var(--wx-soft-surface, #faf8f9);
88
+ border-radius: 4px;
89
+ font-size: 18px;
90
+ font-weight: 700;
91
+ line-height: 1.4;
92
+ letter-spacing: 0.01em;
93
+ color: var(--wx-h2-color, #1f1b1c);
94
+ }`,
95
+ },
96
+ {
97
+ id: "plain",
98
+ name: "经典纯文字",
99
+ css: `.milkdown .editor h2 {
100
+ margin: 2.7em 0 0.7em;
101
+ padding: 0;
102
+ border-left: none;
103
+ border-bottom: none;
104
+ background: none;
105
+ font-size: 20px;
106
+ font-weight: 700;
107
+ line-height: 1.38;
108
+ letter-spacing: 0.005em;
109
+ color: var(--wx-h2-color, #1f1b1c);
110
+ }`,
111
+ },
112
+ ],
113
+ },
114
+ {
115
+ key: "h3",
116
+ label: "三级标题 (H3)",
117
+ icon: "🔹",
118
+ defaultPresetId: "plain",
119
+ presets: [
120
+ {
121
+ id: "plain",
122
+ name: "经典纯文字(默认)",
123
+ css: `.milkdown .editor h3 {
124
+ margin: 1.55em 0 0.4em;
125
+ padding-left: 0;
126
+ border-left: none;
127
+ background: none;
128
+ font-size: 16px;
129
+ font-weight: 700;
130
+ line-height: 1.48;
131
+ letter-spacing: 0.02em;
132
+ color: var(--wx-h3-color, #5c5658);
133
+ }`,
134
+ },
135
+ {
136
+ id: "left-bar",
137
+ name: "左侧微短线",
138
+ css: `.milkdown .editor h3 {
139
+ margin: 1.6em 0 0.45em;
140
+ padding-left: 7px;
141
+ border-left: 2px solid var(--wx-brand-accent, #ca6093);
142
+ background: none;
143
+ font-size: 16px;
144
+ font-weight: 700;
145
+ line-height: 1.45;
146
+ letter-spacing: 0.015em;
147
+ color: var(--wx-h3-color, #5c5658);
148
+ }`,
149
+ },
150
+ {
151
+ id: "badge",
152
+ name: "胶囊小微标",
153
+ css: `.milkdown .editor h3 {
154
+ display: inline-block;
155
+ margin: 1.6em 0 0.45em;
156
+ padding: 3px 8px;
157
+ border-left: none;
158
+ background-color: var(--wx-soft-surface, #faf8f9);
159
+ border-radius: 3px;
160
+ font-size: 15px;
161
+ font-weight: 700;
162
+ line-height: 1.4;
163
+ color: var(--wx-brand-ink, #ca6093);
164
+ }`,
165
+ },
166
+ ],
167
+ },
168
+ {
169
+ key: "blockquote",
170
+ label: "引用块 (Blockquote)",
171
+ icon: "💬",
172
+ defaultPresetId: "left-border",
173
+ presets: [
174
+ {
175
+ id: "left-border",
176
+ name: "经典左单线(默认)",
177
+ css: `.milkdown .editor blockquote {
178
+ margin: 1.6em 0;
179
+ padding: 10px 16px;
180
+ border: none;
181
+ border-left: 3px solid var(--wx-blockquote-border, #ca6093);
182
+ border-radius: 0 4px 4px 0;
183
+ background-color: var(--wx-soft-surface, #fbfafb);
184
+ }`,
185
+ },
186
+ {
187
+ id: "tint-card",
188
+ name: "全包裹微卡片",
189
+ css: `.milkdown .editor blockquote {
190
+ margin: 1.6em 0;
191
+ padding: 12px 18px;
192
+ border: 1px solid var(--wx-divider-color, #ebe6e8);
193
+ border-radius: 6px;
194
+ background-color: var(--wx-soft-surface, #fbfafb);
195
+ }`,
196
+ },
197
+ {
198
+ id: "minimal-indent",
199
+ name: "极简纯缩进",
200
+ css: `.milkdown .editor blockquote {
201
+ margin: 1.5em 0;
202
+ padding: 6px 0 6px 16px;
203
+ border: none;
204
+ border-left: 2px solid rgba(0, 0, 0, 0.15);
205
+ border-radius: 0;
206
+ background: none;
207
+ }`,
208
+ },
209
+ ],
210
+ },
211
+ {
212
+ key: "divider",
213
+ label: "分割线 (Divider)",
214
+ icon: "➖",
215
+ defaultPresetId: "hairline",
216
+ presets: [
217
+ {
218
+ id: "hairline",
219
+ name: "极细实线(默认)",
220
+ css: `.milkdown .editor hr,
221
+ .milkdown .editor [data-wechat-node="divider"] {
222
+ margin: 2.4em 0;
223
+ width: 100%;
224
+ border: none;
225
+ border-top: 1px solid var(--wx-divider-color, #e2dcdf);
226
+ }`,
227
+ },
228
+ {
229
+ id: "dashed",
230
+ name: "极简虚线",
231
+ css: `.milkdown .editor hr,
232
+ .milkdown .editor [data-wechat-node="divider"] {
233
+ margin: 2.4em 0;
234
+ width: 100%;
235
+ border: none;
236
+ border-top: 1px dashed var(--wx-divider-color, #d4cecf);
237
+ }`,
238
+ },
239
+ {
240
+ id: "short-center",
241
+ name: "居中短呼吸线",
242
+ css: `.milkdown .editor hr,
243
+ .milkdown .editor [data-wechat-node="divider"] {
244
+ margin: 2.8em auto;
245
+ width: 36%;
246
+ border: none;
247
+ border-top: 1px solid var(--wx-divider-color, #e2dcdf);
248
+ }`,
249
+ },
250
+ ],
251
+ },
252
+ {
253
+ key: "article-card",
254
+ label: "篇章结构卡片 (INTRO / CTA)",
255
+ icon: "🎴",
256
+ defaultPresetId: "magazine",
257
+ presets: [
258
+ {
259
+ id: "magazine",
260
+ name: "杂志编者按(推荐)",
261
+ css: `.milkdown .editor section[data-wechat-node="article-card"],
262
+ .milkdown .editor .wechat-article-card {
263
+ margin: 1.8em 0;
264
+ padding: 16px 20px;
265
+ border-radius: 10px;
266
+ box-sizing: border-box;
267
+ }
268
+ .milkdown .editor .wechat-article-card-intro {
269
+ background-color: var(--wx-soft-surface, #faf8f9);
270
+ border: 1px solid var(--wx-divider, #eae4e7);
271
+ }
272
+ .milkdown .editor .wechat-article-card-cta {
273
+ background-color: var(--brand-bg, rgba(202, 96, 147, 0.04));
274
+ border: 1px dashed var(--wx-brand-accent, #ca6093);
275
+ text-align: center;
276
+ }
277
+ .milkdown .editor span[data-wechat-node="card-eyebrow-badge"],
278
+ .milkdown .editor .wechat-card-eyebrow-badge {
279
+ background-color: var(--brand-bg, rgba(202, 96, 147, 0.08));
280
+ }
281
+ .milkdown .editor .wechat-article-card p {
282
+ margin: 0.4em 0;
283
+ font-size: 13px;
284
+ line-height: 1.72;
285
+ color: var(--wx-text-soft, #555555);
286
+ }
287
+ .milkdown .editor .wechat-intro-meta {
288
+ margin: 4px 0 10px 0 !important;
289
+ padding-bottom: 8px;
290
+ border-bottom: 1px solid var(--wx-divider, #f0ebed);
291
+ font-size: 12px !important;
292
+ color: var(--wx-muted-color, #756b6e) !important;
293
+ }
294
+ .milkdown .editor .wechat-intro-meta strong {
295
+ color: var(--wx-brand-accent, #ca6093);
296
+ }
297
+ .milkdown .editor .wechat-intro-guide {
298
+ margin-top: 10px !important;
299
+ padding-top: 8px;
300
+ border-top: 1px dashed rgba(202, 96, 147, 0.25);
301
+ font-size: 12px !important;
302
+ color: var(--wx-brand-accent, #ca6093) !important;
303
+ }`,
304
+ },
305
+ {
306
+ id: "top-line",
307
+ name: "顶部色彩微线",
308
+ css: `.milkdown .editor section[data-wechat-node="article-card"],
309
+ .milkdown .editor .wechat-article-card {
310
+ margin: 1.8em 0;
311
+ padding: 16px 20px;
312
+ border-radius: 8px;
313
+ box-sizing: border-box;
314
+ }
315
+ .milkdown .editor .wechat-article-card-intro {
316
+ background-color: #ffffff;
317
+ border: 1px solid var(--wx-divider, #eae4e7);
318
+ border-top: 3px solid var(--wx-brand-accent, #ca6093);
319
+ }
320
+ .milkdown .editor .wechat-article-card-cta {
321
+ background-color: var(--brand-bg, rgba(202, 96, 147, 0.04));
322
+ border: 1px dashed var(--wx-brand-accent, #ca6093);
323
+ text-align: center;
324
+ }
325
+ .milkdown .editor span[data-wechat-node="card-eyebrow-badge"],
326
+ .milkdown .editor .wechat-card-eyebrow-badge {
327
+ background-color: var(--brand-bg, rgba(202, 96, 147, 0.08));
328
+ }
329
+ .milkdown .editor .wechat-article-card p {
330
+ margin: 0.4em 0;
331
+ font-size: 13px;
332
+ line-height: 1.72;
333
+ color: var(--wx-text-soft, #555555);
334
+ }
335
+ .milkdown .editor .wechat-intro-meta {
336
+ margin: 4px 0 10px 0 !important;
337
+ padding-bottom: 8px;
338
+ border-bottom: 1px solid var(--wx-divider, #f0ebed);
339
+ font-size: 12px !important;
340
+ color: var(--wx-muted-color, #756b6e) !important;
341
+ }
342
+ .milkdown .editor .wechat-intro-meta strong {
343
+ color: var(--wx-brand-accent, #ca6093);
344
+ }
345
+ .milkdown .editor .wechat-intro-guide {
346
+ margin-top: 10px !important;
347
+ padding-top: 8px;
348
+ border-top: 1px dashed rgba(202, 96, 147, 0.25);
349
+ font-size: 12px !important;
350
+ color: var(--wx-brand-accent, #ca6093) !important;
351
+ }`,
352
+ },
353
+ {
354
+ id: "minimal",
355
+ name: "极简纯白框",
356
+ css: `.milkdown .editor section[data-wechat-node="article-card"],
357
+ .milkdown .editor .wechat-article-card {
358
+ margin: 1.8em 0;
359
+ padding: 16px 20px;
360
+ border-radius: 6px;
361
+ box-sizing: border-box;
362
+ }
363
+ .milkdown .editor .wechat-article-card-intro {
364
+ background-color: #ffffff;
365
+ border: 1px solid var(--wx-divider, #eae4e7);
366
+ }
367
+ .milkdown .editor .wechat-article-card-cta {
368
+ background-color: #ffffff;
369
+ border: 1px dashed var(--wx-divider, #dadce0);
370
+ text-align: center;
371
+ }
372
+ .milkdown .editor .wechat-article-card p {
373
+ margin: 0.4em 0;
374
+ font-size: 13px;
375
+ line-height: 1.72;
376
+ color: var(--wx-text-soft, #555555);
377
+ }
378
+ .milkdown .editor .wechat-intro-meta {
379
+ margin: 4px 0 10px 0 !important;
380
+ padding-bottom: 8px;
381
+ border-bottom: 1px solid var(--wx-divider, #f0ebed);
382
+ font-size: 12px !important;
383
+ color: var(--wx-muted-color, #756b6e) !important;
384
+ }
385
+ .milkdown .editor .wechat-intro-meta strong {
386
+ color: var(--wx-brand-accent, #ca6093);
387
+ }
388
+ .milkdown .editor .wechat-intro-guide {
389
+ margin-top: 10px !important;
390
+ padding-top: 8px;
391
+ border-top: 1px dashed rgba(202, 96, 147, 0.25);
392
+ font-size: 12px !important;
393
+ color: var(--wx-brand-accent, #ca6093) !important;
394
+ }`,
395
+ },
396
+ ],
397
+ },
398
+ ];
399
+ export function buildCombinedPresetsCss(selected) {
400
+ const cssBlocks = [];
401
+ for (const cat of SYNTAX_CATEGORIES) {
402
+ const preset = cat.presets.find((p) => p.id === (selected[cat.key] || cat.defaultPresetId)) ||
403
+ cat.presets[0];
404
+ cssBlocks.push(`/* [${cat.label}] - ${preset.name} */\n${preset.css.trim()}`);
405
+ }
406
+ return cssBlocks.join("\n\n");
407
+ }
408
+ //# sourceMappingURL=syntax-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-presets.js","sourceRoot":"","sources":["../../src/studio/syntax-presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface WechatExportTheme {
2
+ containerStyle: string;
3
+ footerText: string;
4
+ footerStyle: string;
5
+ fontFamily: string;
6
+ bodyColor: string;
7
+ mutedColor: string;
8
+ /** Major section heading (H2); slightly deeper than body */
9
+ h2Color: string;
10
+ /** In-section heading (H3); between body and muted */
11
+ h3Color: string;
12
+ primaryColor: string;
13
+ dividerColor: string;
14
+ blockquoteBorderColor: string;
15
+ bodyLineHeight: string;
16
+ bodyLetterSpacing: string;
17
+ /** 正文字号与段落间距;未设置时沿用共享样式。 */
18
+ bodyFontSize?: string;
19
+ bodyParagraphSpacing?: string;
20
+ }
21
+ export interface WechatPreviewTheme {
22
+ name: string;
23
+ account: string;
24
+ editorVars: Record<string, string>;
25
+ exportTheme: WechatExportTheme;
26
+ }
27
+ export declare function getWechatPreviewTheme(account: string, overrides?: {
28
+ editorVars?: Record<string, string>;
29
+ exportTheme?: Partial<WechatExportTheme>;
30
+ }): WechatPreviewTheme;
31
+ export declare function getWechatPreviewStyleName(account: string): string;
32
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/studio/themes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,iBAAiB,CAAC;CAChC;AA0JD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE;IACV,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC1C,GACA,kBAAkB,CAYpB;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,153 @@
1
+ const BASE_EDITOR_VARS = {
2
+ "--background": "0 0% 100%",
3
+ "--foreground": "240 10% 3.9%",
4
+ "--card": "0 0% 100%",
5
+ "--card-foreground": "240 10% 3.9%",
6
+ "--muted": "240 4.8% 95.9%",
7
+ "--muted-foreground": "240 3.8% 46.1%",
8
+ "--primary-foreground": "0 0% 100%",
9
+ "--border": "240 5.9% 90%",
10
+ };
11
+ function buildContainerStyle(options) {
12
+ return [
13
+ "max-width: 100%",
14
+ "margin: 0",
15
+ "padding: 10px 4px 30px",
16
+ `background: ${options.background}`,
17
+ "box-sizing: border-box",
18
+ `font-family: ${options.fontFamily}`,
19
+ "font-size: 16px",
20
+ `color: ${options.color}`,
21
+ "overflow-wrap: break-word",
22
+ "word-break: break-word",
23
+ `line-height: ${options.lineHeight ?? "1.84"}`,
24
+ `letter-spacing: ${options.letterSpacing ?? "0.012em"}`,
25
+ "-webkit-text-size-adjust: 100%",
26
+ ].join("; ");
27
+ }
28
+ function buildFooterStyle(color) {
29
+ return [
30
+ "margin-top: 32px",
31
+ "text-align: center",
32
+ "font-size: 12px",
33
+ "line-height: 1.6",
34
+ "letter-spacing: 0.08em",
35
+ `color: ${color}`,
36
+ ].join("; ");
37
+ }
38
+ const THEMES = {
39
+ default: {
40
+ name: "sage-journal",
41
+ account: "default",
42
+ editorVars: {
43
+ ...BASE_EDITOR_VARS,
44
+ "--primary": "220 9% 10%",
45
+ "--ring": "220 9% 10%",
46
+ "--accent": "210 14% 96%",
47
+ "--accent-foreground": "220 9% 10%",
48
+ "--muted": "210 14% 96%",
49
+ "--muted-foreground": "215 8% 42%",
50
+ "--border": "220 10% 86%",
51
+ "--brand": "#ca6093",
52
+ "--brand-soft": "#ca6093",
53
+ "--brand-bg": "rgba(202, 96, 147, 0.08)",
54
+ "--brand-bg-deep": "rgba(202, 96, 147, 0.12)",
55
+ "--text": "#292526",
56
+ "--text-soft": "#6f696b",
57
+ "--text-mid": "#4d484a",
58
+ "--divider": "#e2dcdf",
59
+ "--bg-page": "#ffffff",
60
+ "--bg-warm": "#faf7f8",
61
+ },
62
+ exportTheme: {
63
+ containerStyle: buildContainerStyle({
64
+ background: "#ffffff",
65
+ color: "#292526",
66
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans SC', sans-serif",
67
+ lineHeight: "1.84",
68
+ letterSpacing: "0.012em",
69
+ }),
70
+ footerText: "公众号 · 早早集市",
71
+ footerStyle: buildFooterStyle("#716a6d"),
72
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans SC', sans-serif",
73
+ bodyColor: "#292526",
74
+ mutedColor: "#6f696b",
75
+ h2Color: "#1f1b1c",
76
+ h3Color: "#5c5658",
77
+ primaryColor: "#a94473",
78
+ dividerColor: "#e2dcdf",
79
+ blockquoteBorderColor: "#ca6093",
80
+ bodyLineHeight: "1.84",
81
+ bodyLetterSpacing: "0.012em",
82
+ },
83
+ },
84
+ ancientone: {
85
+ name: "rose-ledger",
86
+ account: "ancientone",
87
+ editorVars: {
88
+ ...BASE_EDITOR_VARS,
89
+ "--primary": "337 38% 58%",
90
+ "--ring": "337 38% 58%",
91
+ "--accent": "337 30% 96%",
92
+ "--accent-foreground": "337 28% 22%",
93
+ "--muted": "338 25% 97%",
94
+ "--border": "337 20% 88%",
95
+ "--brand": "#b86f86",
96
+ "--brand-soft": "#b86f86",
97
+ "--brand-bg": "rgba(184, 111, 134, 0.08)",
98
+ "--brand-bg-deep": "rgba(184, 111, 134, 0.12)",
99
+ "--text": "#30292b",
100
+ "--text-soft": "#756b6e",
101
+ "--text-mid": "#534a4d",
102
+ "--divider": "#dfd7da",
103
+ "--bg-page": "#fefefe",
104
+ "--bg-warm": "#faf7f8",
105
+ },
106
+ exportTheme: {
107
+ containerStyle: buildContainerStyle({
108
+ background: "#fefefe",
109
+ color: "#30292b",
110
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans SC', sans-serif",
111
+ lineHeight: "1.85",
112
+ letterSpacing: "0.015em",
113
+ }),
114
+ footerText: "公众号 · 古一软件",
115
+ footerStyle: buildFooterStyle("#756b6e"),
116
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Source Han Sans SC', sans-serif",
117
+ bodyColor: "#30292b",
118
+ mutedColor: "#756b6e",
119
+ h2Color: "#241f21",
120
+ h3Color: "#61585b",
121
+ primaryColor: "#8f4d63",
122
+ dividerColor: "#dfd7da",
123
+ blockquoteBorderColor: "#b86f86",
124
+ bodyLineHeight: "1.85",
125
+ bodyLetterSpacing: "0.015em",
126
+ },
127
+ },
128
+ };
129
+ function definedValues(obj) {
130
+ const result = {};
131
+ for (const key of Object.keys(obj)) {
132
+ if (obj[key] !== undefined) {
133
+ result[key] = obj[key];
134
+ }
135
+ }
136
+ return result;
137
+ }
138
+ export function getWechatPreviewTheme(account, overrides) {
139
+ const base = THEMES[account] ?? THEMES.default;
140
+ if (!overrides)
141
+ return base;
142
+ const hasEditorVars = overrides.editorVars && Object.keys(overrides.editorVars).length > 0;
143
+ const hasExportTheme = overrides.exportTheme && Object.keys(definedValues(overrides.exportTheme)).length > 0;
144
+ return {
145
+ ...base,
146
+ editorVars: hasEditorVars ? { ...base.editorVars, ...overrides.editorVars } : base.editorVars,
147
+ exportTheme: hasExportTheme ? { ...base.exportTheme, ...definedValues(overrides.exportTheme) } : base.exportTheme,
148
+ };
149
+ }
150
+ export function getWechatPreviewStyleName(account) {
151
+ return getWechatPreviewTheme(account).name;
152
+ }
153
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/studio/themes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { WechatExportTheme } from "./themes";
2
+ export type WechatElementKind = "image" | "code-block" | "inline-code" | "heading" | "paragraph" | "emphasis" | "blockquote" | "link" | "list" | "table" | "divider" | "hard-break" | "article";
3
+ export interface WechatLinkReference {
4
+ index: number;
5
+ text: string;
6
+ url: string;
7
+ }
8
+ export interface WechatRenderContext {
9
+ document: Document;
10
+ root: HTMLElement;
11
+ theme: WechatExportTheme;
12
+ references: WechatLinkReference[];
13
+ structure?: ArticleStructure;
14
+ strictImageDecode?: boolean;
15
+ }
16
+ /** 模板仅声明有限的结构变化,不注入脚本或任意 HTML。 */
17
+ export interface ArticleStructure {
18
+ numberedHeadings?: boolean;
19
+ headingLabel?: string;
20
+ quoteLabel?: string;
21
+ headerImageUrl?: string | null;
22
+ calloutPresets?: Record<string, {
23
+ title?: string;
24
+ icon?: string;
25
+ }>;
26
+ }
27
+ export interface WechatElementRenderer {
28
+ kind: WechatElementKind | string;
29
+ selector: string;
30
+ /** Optional selector used after CSS has been inlined. Defaults to selector. */
31
+ finalizeSelector?: string;
32
+ prepare?: (element: HTMLElement, context: WechatRenderContext) => void | Promise<void>;
33
+ finalize?: (element: HTMLElement, context: WechatRenderContext) => void;
34
+ }
35
+ export type WechatRendererOverrides = (Partial<Record<WechatElementKind, WechatElementRenderer>> & {
36
+ extraRenderers?: WechatElementRenderer[];
37
+ }) | Record<string, WechatElementRenderer>;
38
+ export interface RenderWechatHtmlInput {
39
+ structure?: ArticleStructure;
40
+ semanticHtml: string;
41
+ baseCss: string;
42
+ customCss?: string;
43
+ editorVars?: Record<string, string>;
44
+ theme: WechatExportTheme;
45
+ renderers?: WechatRendererOverrides;
46
+ strictImageDecode?: boolean;
47
+ }
48
+ /** Normalize URL for reference dedupe (same target → one footnote entry). */
49
+ export declare function normalizeReferenceUrl(href: string): string;
50
+ /**
51
+ * Register or reuse a related-link reference for an external URL.
52
+ * Same URL (even with different anchor text) maps to one index.
53
+ */
54
+ export declare function resolveLinkReference(href: string, text: string, references: WechatLinkReference[]): WechatLinkReference;
55
+ export declare function createWechatRendererRegistry(overrides?: WechatRendererOverrides): WechatElementRenderer[];
56
+ export declare function buildWechatThemeCss(editorVars: Record<string, string>, theme: WechatExportTheme): string;
57
+ /** 完成图片缩放后,将文章样式内联为公众号 HTML。 */
58
+ export declare function renderWechatHtml(input: RenderWechatHtmlInput): Promise<string>;
59
+ //# sourceMappingURL=wechat-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wechat-renderer.d.ts","sourceRoot":"","sources":["../../src/studio/wechat-renderer.ts"],"names":[],"mappings":"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"}