silvery 0.21.0 → 0.23.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 (224) hide show
  1. package/README.md +1 -1
  2. package/dist/{Text-Lq0dmj8-.mjs → Text-Ci6UCSTL.mjs} +46 -48
  3. package/dist/Text-Ci6UCSTL.mjs.map +1 -0
  4. package/dist/{render-string-DkQacASz.mjs → ag-q9lRlKlt.mjs} +5322 -4259
  5. package/dist/ag-q9lRlKlt.mjs.map +1 -0
  6. package/dist/{animation-ZMN2_XKv.mjs → animation-CZ4x2R7C.mjs} +1 -1
  7. package/dist/{animation-ZMN2_XKv.mjs.map → animation-CZ4x2R7C.mjs.map} +1 -1
  8. package/dist/{ansi-D1KQMAbf.mjs → ansi-CLmIMnop.mjs} +1 -1
  9. package/dist/{ansi-D1KQMAbf.mjs.map → ansi-CLmIMnop.mjs.map} +1 -1
  10. package/dist/{ansi-2Xn0yatP.d.mts → ansi-zmNzgkPB.d.mts} +1 -1
  11. package/dist/{ansi-2Xn0yatP.d.mts.map → ansi-zmNzgkPB.d.mts.map} +1 -1
  12. package/dist/{backend-B-WYLUib.mjs → backend-DSiSIc-h.mjs} +2 -2
  13. package/dist/{backend-B-WYLUib.mjs.map → backend-DSiSIc-h.mjs.map} +1 -1
  14. package/dist/chain-bridge-CkYcMxlq.mjs +4149 -0
  15. package/dist/chain-bridge-CkYcMxlq.mjs.map +1 -0
  16. package/dist/{chunk-BSw8zbkd.mjs → chunk-BEJ448es.mjs} +1 -3
  17. package/dist/cli-VNqUKlXw.mjs +4 -0
  18. package/dist/{context-BU5LkkIy.mjs → context-CEhuD1R_.mjs} +1 -1
  19. package/dist/{context-BU5LkkIy.mjs.map → context-CEhuD1R_.mjs.map} +1 -1
  20. package/dist/devtools-BF4IMumr.mjs +2 -0
  21. package/dist/{devtools-DcQjgyjL.mjs → devtools-td2AjFwc.mjs} +5 -5
  22. package/dist/{devtools-DcQjgyjL.mjs.map → devtools-td2AjFwc.mjs.map} +1 -1
  23. package/dist/{easing-BI-ASGMO.d.mts → easing-C5MrdO7V.d.mts} +1 -1
  24. package/dist/{easing-BI-ASGMO.d.mts.map → easing-C5MrdO7V.d.mts.map} +1 -1
  25. package/dist/{eta-CJlGH06n.mjs → eta-BwYWEjfS.mjs} +1 -1
  26. package/dist/{eta-CJlGH06n.mjs.map → eta-BwYWEjfS.mjs.map} +1 -1
  27. package/dist/{flexily-zero-adapter-C4lW_Ov5.mjs → flexily-zero-adapter-DktX3HsX.mjs} +1 -1
  28. package/dist/{flexily-zero-adapter-C3Vj0fPt.mjs → flexily-zero-adapter-VoBGHG14.mjs} +1 -1
  29. package/dist/{flexily-zero-adapter-C3Vj0fPt.mjs.map → flexily-zero-adapter-VoBGHG14.mjs.map} +1 -1
  30. package/dist/hit-registry-D_nxOivS.d.mts +71 -0
  31. package/dist/hit-registry-D_nxOivS.d.mts.map +1 -0
  32. package/dist/{UPNG-DosRPdF4.mjs → image-CIF75xMr.mjs} +891 -6
  33. package/dist/image-CIF75xMr.mjs.map +1 -0
  34. package/dist/{index-CSQf13CI.d.mts → index-377zdPLP.d.mts} +35 -12
  35. package/dist/index-377zdPLP.d.mts.map +1 -0
  36. package/dist/{index-Cl9KKjQ_.d.mts → index-BcSr0RAQ.d.mts} +8670 -10659
  37. package/dist/index-BcSr0RAQ.d.mts.map +1 -0
  38. package/dist/{index-XbNrPhWl.d.mts → index-DLnpxDAm.d.mts} +2 -2
  39. package/dist/{index-XbNrPhWl.d.mts.map → index-DLnpxDAm.d.mts.map} +1 -1
  40. package/dist/{index-BUMxS65f.d.mts → index-DlNmckTq.d.mts} +2 -2
  41. package/dist/{index-BUMxS65f.d.mts.map → index-DlNmckTq.d.mts.map} +1 -1
  42. package/dist/index.d.mts +12 -8
  43. package/dist/index.d.mts.map +1 -1
  44. package/dist/index.mjs +18 -15
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/{layout-engine-C2px0RJE.mjs → layout-engine-BgR58vL0.mjs} +3 -3
  47. package/dist/{layout-engine-C2px0RJE.mjs.map → layout-engine-BgR58vL0.mjs.map} +1 -1
  48. package/dist/{layout-engine-C07LEXWT.mjs → layout-engine-DNjTha8f.mjs} +1 -1
  49. package/dist/{layout-signals-Cnw6xk8Q.mjs → layout-signals-CGYbHmxy.mjs} +146 -23
  50. package/dist/layout-signals-CGYbHmxy.mjs.map +1 -0
  51. package/dist/{bound-term-0sPrrzH1.d.mts → mouse-events-B2z5tbsL.d.mts} +780 -379
  52. package/dist/mouse-events-B2z5tbsL.d.mts.map +1 -0
  53. package/dist/{mouse-events-Dki3ISIp.mjs → mouse-events-WQ2h-uqG.mjs} +45 -10
  54. package/dist/mouse-events-WQ2h-uqG.mjs.map +1 -0
  55. package/dist/{multi-progress-DHZ2xUT2.d.mts → multi-progress-BaEFfHKP.d.mts} +2 -2
  56. package/dist/{multi-progress-DHZ2xUT2.d.mts.map → multi-progress-BaEFfHKP.d.mts.map} +1 -1
  57. package/dist/{multi-progress-CIRjrzma.mjs → multi-progress-zCWHEm9P.mjs} +3 -3
  58. package/dist/{multi-progress-CIRjrzma.mjs.map → multi-progress-zCWHEm9P.mjs.map} +1 -1
  59. package/dist/{node-CjM5Rt-M.mjs → node-CJ3J_rW-.mjs} +1 -1
  60. package/dist/{node-CjM5Rt-M.mjs.map → node-CJ3J_rW-.mjs.map} +1 -1
  61. package/dist/{progress-DB_Xo071.mjs → progress-6vJ7nxUg.mjs} +4 -4
  62. package/dist/{progress-DB_Xo071.mjs.map → progress-6vJ7nxUg.mjs.map} +1 -1
  63. package/dist/{progress-bar-oJwq22CR.mjs → progress-bar-BlFNsZL8.mjs} +4 -4
  64. package/dist/{progress-bar-oJwq22CR.mjs.map → progress-bar-BlFNsZL8.mjs.map} +1 -1
  65. package/dist/{reconciler-DldIJB93.mjs → reconciler--_-biN23.mjs} +190 -134
  66. package/dist/reconciler--_-biN23.mjs.map +1 -0
  67. package/dist/{render-string-BcoCpjCB.mjs → render-string-DaghHpLN.mjs} +1 -1
  68. package/dist/render-string-DtHZP0cU.mjs +215 -0
  69. package/dist/render-string-DtHZP0cU.mjs.map +1 -0
  70. package/dist/runtime.d.mts +4 -3
  71. package/dist/runtime.mjs +4 -3
  72. package/dist/schemes-DWQPxXAi.mjs +2516 -0
  73. package/dist/{schemes-JjNp4aSl.mjs.map → schemes-DWQPxXAi.mjs.map} +1 -1
  74. package/dist/{spinner-D9lrHr8s.mjs → spinner-B50hILqx.mjs} +19 -4
  75. package/dist/{spinner-D9lrHr8s.mjs.map → spinner-B50hILqx.mjs.map} +1 -1
  76. package/dist/{spinner-CZINHpkV.d.mts → spinner-DN10UfF0.d.mts} +2 -2
  77. package/dist/{spinner-CZINHpkV.d.mts.map → spinner-DN10UfF0.d.mts.map} +1 -1
  78. package/dist/{src-BNTToU7l.mjs → src-B8lf1kiR.mjs} +1507 -1166
  79. package/dist/src-B8lf1kiR.mjs.map +1 -0
  80. package/dist/{src-5w9QR6_8.mjs → src-BOLdi3WG.mjs} +105 -237
  81. package/dist/src-BOLdi3WG.mjs.map +1 -0
  82. package/dist/{src-BR4xNwdG.mjs → src-BXeTHHlL.mjs} +20240 -25437
  83. package/dist/src-BXeTHHlL.mjs.map +1 -0
  84. package/dist/{src-DKp-_OFG.mjs → src-BqeBFB3X.mjs} +90 -47
  85. package/dist/src-BqeBFB3X.mjs.map +1 -0
  86. package/dist/src-DbqcSrhy.mjs +3901 -0
  87. package/dist/src-DbqcSrhy.mjs.map +1 -0
  88. package/dist/{steps-Bp2uNqnn.d.mts → steps-B2kBmFpb.d.mts} +1 -1
  89. package/dist/{steps-Bp2uNqnn.d.mts.map → steps-B2kBmFpb.d.mts.map} +1 -1
  90. package/dist/{svg-Cz0UXcDj.mjs → svg-NmV9dgB9.mjs} +1 -1
  91. package/dist/{svg-Cz0UXcDj.mjs.map → svg-NmV9dgB9.mjs.map} +1 -1
  92. package/dist/{svg-g1D6ErwR.d.mts → svg-VUr78l5d.d.mts} +1 -1
  93. package/dist/{svg-g1D6ErwR.d.mts.map → svg-VUr78l5d.d.mts.map} +1 -1
  94. package/dist/term.d.mts +2 -2
  95. package/dist/term.mjs +3 -8
  96. package/dist/test.d.mts +673 -0
  97. package/dist/test.d.mts.map +1 -0
  98. package/dist/test.mjs +2829 -0
  99. package/dist/test.mjs.map +1 -0
  100. package/dist/theme.d.mts +2 -2
  101. package/dist/theme.d.mts.map +1 -1
  102. package/dist/theme.mjs +3 -8
  103. package/dist/{types-kt_fKR37.d.mts → types-D_E0FbqA.d.mts} +1 -1
  104. package/dist/{types-kt_fKR37.d.mts.map → types-D_E0FbqA.d.mts.map} +1 -1
  105. package/dist/ui/animation.d.mts +2 -2
  106. package/dist/ui/animation.mjs +1 -1
  107. package/dist/ui/ansi.d.mts +1 -1
  108. package/dist/ui/ansi.mjs +1 -1
  109. package/dist/ui/cli.d.mts +3 -3
  110. package/dist/ui/cli.mjs +5 -5
  111. package/dist/ui/image.d.mts +1 -1
  112. package/dist/ui/image.mjs +1 -1
  113. package/dist/ui/progress.d.mts +4 -4
  114. package/dist/ui/progress.mjs +4 -4
  115. package/dist/ui/react.d.mts +1 -1
  116. package/dist/ui/react.mjs +2 -2
  117. package/dist/ui/recording-chrome-react.d.mts +1 -1
  118. package/dist/ui/recording-chrome-react.mjs +2 -2
  119. package/dist/ui/recording-chrome.d.mts +1 -1
  120. package/dist/ui/recording-chrome.mjs +1 -1
  121. package/dist/ui/utils.mjs +1 -1
  122. package/dist/ui/wrappers.d.mts +2 -2
  123. package/dist/ui/wrappers.mjs +1 -1
  124. package/dist/ui.d.mts +6 -6
  125. package/dist/ui.mjs +7 -7
  126. package/dist/unicode-CxyxVGmB.mjs +11077 -0
  127. package/dist/unicode-CxyxVGmB.mjs.map +1 -0
  128. package/dist/{useLatest-DRDDVwjh.d.mts → useLatest-UOvWy0ZW.d.mts} +2 -2
  129. package/dist/{useLatest-DRDDVwjh.d.mts.map → useLatest-UOvWy0ZW.d.mts.map} +1 -1
  130. package/dist/useLayout-D5cE8OCI.mjs +424 -0
  131. package/dist/useLayout-D5cE8OCI.mjs.map +1 -0
  132. package/dist/{with-text-input-YeohVLeo.d.mts → with-text-input-DLoSCBrm.d.mts} +3 -3
  133. package/dist/{with-text-input-YeohVLeo.d.mts.map → with-text-input-DLoSCBrm.d.mts.map} +1 -1
  134. package/dist/wrap-measurer-registration-IV2HtcCd.d.mts +3106 -0
  135. package/dist/wrap-measurer-registration-IV2HtcCd.d.mts.map +1 -0
  136. package/dist/{wrapper-C70ATkVv.mjs → wrapper-CD29afOs.mjs} +59 -17
  137. package/dist/wrapper-CD29afOs.mjs.map +1 -0
  138. package/dist/{wrappers-BCUYITrY.mjs → wrappers-CInBJm44.mjs} +18 -8
  139. package/dist/wrappers-CInBJm44.mjs.map +1 -0
  140. package/dist/{yoga-adapter-BnZX1PAY.mjs → yoga-adapter-9uab5Qn-.mjs} +2 -2
  141. package/dist/{yoga-adapter-BnZX1PAY.mjs.map → yoga-adapter-9uab5Qn-.mjs.map} +1 -1
  142. package/dist/yoga-adapter-yqTl1aXK.mjs +2 -0
  143. package/package.json +59 -14
  144. package/dist/Text-Lq0dmj8-.mjs.map +0 -1
  145. package/dist/UPNG-Bo33r8rA.mjs +0 -3
  146. package/dist/UPNG-DosRPdF4.mjs.map +0 -1
  147. package/dist/__vite-browser-external-2447137e-D_JM6skp.mjs +0 -6
  148. package/dist/__vite-browser-external-2447137e-D_JM6skp.mjs.map +0 -1
  149. package/dist/ansi-yC4RyBNY.mjs +0 -22441
  150. package/dist/ansi-yC4RyBNY.mjs.map +0 -1
  151. package/dist/apng-CR08rIaH.mjs +0 -58
  152. package/dist/apng-CR08rIaH.mjs.map +0 -1
  153. package/dist/apng-DaHfVaVI.mjs +0 -3
  154. package/dist/assets/resvgjs.darwin-arm64-BtufyGW1.node +0 -0
  155. package/dist/assets/skia.darwin-arm64-DQs5sT6N.node +0 -0
  156. package/dist/backends-CUtan80W.mjs +0 -3
  157. package/dist/backends-DIVYzKqd.mjs +0 -1083
  158. package/dist/backends-DIVYzKqd.mjs.map +0 -1
  159. package/dist/bound-term-0sPrrzH1.d.mts.map +0 -1
  160. package/dist/canvas-1v7dPT-_.mjs +0 -3
  161. package/dist/canvas-CSuPOMNt.mjs +0 -1442
  162. package/dist/canvas-CSuPOMNt.mjs.map +0 -1
  163. package/dist/cli-dvo0r2fs.mjs +0 -4
  164. package/dist/compare-CQodSH4G.mjs +0 -376
  165. package/dist/compare-CQodSH4G.mjs.map +0 -1
  166. package/dist/compare-DHlcxEYA.mjs +0 -3
  167. package/dist/devtools-CJdt5H0X.mjs +0 -2
  168. package/dist/fonts-BFmhXDv7.mjs +0 -88
  169. package/dist/fonts-BFmhXDv7.mjs.map +0 -1
  170. package/dist/gif-C_AjaT9d.mjs +0 -188
  171. package/dist/gif-C_AjaT9d.mjs.map +0 -1
  172. package/dist/gif-DaC4XrxA.mjs +0 -3
  173. package/dist/gifenc-BOUT-KFB.mjs +0 -730
  174. package/dist/gifenc-BOUT-KFB.mjs.map +0 -1
  175. package/dist/image-C2Birh2x.mjs +0 -1252
  176. package/dist/image-C2Birh2x.mjs.map +0 -1
  177. package/dist/index-CSQf13CI.d.mts.map +0 -1
  178. package/dist/index-Cl9KKjQ_.d.mts.map +0 -1
  179. package/dist/key-mapping-CS-YD_cD.mjs +0 -132
  180. package/dist/key-mapping-CS-YD_cD.mjs.map +0 -1
  181. package/dist/key-mapping-Yn-Jgrij.mjs +0 -3
  182. package/dist/layout-signals-Cnw6xk8Q.mjs.map +0 -1
  183. package/dist/mouse-events-Dki3ISIp.mjs.map +0 -1
  184. package/dist/playwright-D5YiZcNS.mjs +0 -76397
  185. package/dist/playwright-D5YiZcNS.mjs.map +0 -1
  186. package/dist/png-codec-Dp84742B.mjs +0 -36
  187. package/dist/png-codec-Dp84742B.mjs.map +0 -1
  188. package/dist/png-codec-QwOtJ8Zs.mjs +0 -3
  189. package/dist/rasterizer-BRXrDdWx.mjs +0 -3
  190. package/dist/rasterizer-CpEhJvdR.mjs +0 -296
  191. package/dist/rasterizer-CpEhJvdR.mjs.map +0 -1
  192. package/dist/reconciler-DldIJB93.mjs.map +0 -1
  193. package/dist/render-string-DkQacASz.mjs.map +0 -1
  194. package/dist/resvg-js-DkOndZI3.mjs +0 -203
  195. package/dist/resvg-js-DkOndZI3.mjs.map +0 -1
  196. package/dist/schemes-JjNp4aSl.mjs +0 -2611
  197. package/dist/src-5w9QR6_8.mjs.map +0 -1
  198. package/dist/src-BNTToU7l.mjs.map +0 -1
  199. package/dist/src-BR4xNwdG.mjs.map +0 -1
  200. package/dist/src-DKp-_OFG.mjs.map +0 -1
  201. package/dist/src-bt8wSrfJ.mjs +0 -258
  202. package/dist/src-bt8wSrfJ.mjs.map +0 -1
  203. package/dist/src-e33Y6kNJ.mjs +0 -3
  204. package/dist/src-iDwu25UD.mjs +0 -1814
  205. package/dist/src-iDwu25UD.mjs.map +0 -1
  206. package/dist/svg-15lZZzxq.mjs +0 -486
  207. package/dist/svg-15lZZzxq.mjs.map +0 -1
  208. package/dist/svg-DY72a4HK.mjs +0 -3
  209. package/dist/term.mjs.map +0 -1
  210. package/dist/theme.mjs.map +0 -1
  211. package/dist/ui/display.d.mts +0 -35
  212. package/dist/ui/display.d.mts.map +0 -1
  213. package/dist/ui/display.mjs +0 -123
  214. package/dist/ui/display.mjs.map +0 -1
  215. package/dist/ui/input.d.mts +0 -184
  216. package/dist/ui/input.d.mts.map +0 -1
  217. package/dist/ui/input.mjs +0 -285
  218. package/dist/ui/input.mjs.map +0 -1
  219. package/dist/wrapper-C70ATkVv.mjs.map +0 -1
  220. package/dist/wrappers-BCUYITrY.mjs.map +0 -1
  221. package/dist/yoga-adapter-DxgsQ_gg.mjs +0 -2
  222. package/dist/zipBundle-3nqeDRtm.mjs +0 -3
  223. package/dist/zipBundle-VNAYFmqJ.mjs +0 -2003
  224. package/dist/zipBundle-VNAYFmqJ.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-DKp-_OFG.mjs","names":[],"sources":["../../../node_modules/.bun/alien-signals@3.1.2/node_modules/alien-signals/esm/system.mjs","../../../node_modules/.bun/alien-signals@3.1.2/node_modules/alien-signals/esm/index.mjs","../packages/signals/src/index.ts"],"sourcesContent":["export const ReactiveFlags = {\n None: 0,\n Mutable: 1,\n Watching: 2,\n RecursedCheck: 4,\n Recursed: 8,\n Dirty: 16,\n Pending: 32,\n};\nexport function createReactiveSystem({ update, notify, unwatched, }) {\n return {\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate,\n };\n function link(dep, sub, version) {\n const prevDep = sub.depsTail;\n if (prevDep !== undefined && prevDep.dep === dep) {\n return;\n }\n const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps;\n if (nextDep !== undefined && nextDep.dep === dep) {\n nextDep.version = version;\n sub.depsTail = nextDep;\n return;\n }\n const prevSub = dep.subsTail;\n if (prevSub !== undefined && prevSub.version === version && prevSub.sub === sub) {\n return;\n }\n const newLink = sub.depsTail\n = dep.subsTail\n = {\n version,\n dep,\n sub,\n prevDep,\n nextDep,\n prevSub,\n nextSub: undefined,\n };\n if (nextDep !== undefined) {\n nextDep.prevDep = newLink;\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = newLink;\n }\n else {\n sub.deps = newLink;\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = newLink;\n }\n else {\n dep.subs = newLink;\n }\n }\n function unlink(link, sub = link.sub) {\n const dep = link.dep;\n const prevDep = link.prevDep;\n const nextDep = link.nextDep;\n const nextSub = link.nextSub;\n const prevSub = link.prevSub;\n if (nextDep !== undefined) {\n nextDep.prevDep = prevDep;\n }\n else {\n sub.depsTail = prevDep;\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = nextDep;\n }\n else {\n sub.deps = nextDep;\n }\n if (nextSub !== undefined) {\n nextSub.prevSub = prevSub;\n }\n else {\n dep.subsTail = prevSub;\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = nextSub;\n }\n else if ((dep.subs = nextSub) === undefined) {\n unwatched(dep);\n }\n return nextDep;\n }\n function propagate(link) {\n let next = link.nextSub;\n let stack;\n top: do {\n const sub = link.sub;\n let flags = sub.flags;\n if (!(flags & (4 | 8 | 16 | 32))) {\n sub.flags = flags | 32;\n }\n else if (!(flags & (4 | 8))) {\n flags = 0;\n }\n else if (!(flags & 4)) {\n sub.flags = (flags & ~8) | 32;\n }\n else if (!(flags & (16 | 32)) && isValidLink(link, sub)) {\n sub.flags = flags | (8 | 32);\n flags &= 1;\n }\n else {\n flags = 0;\n }\n if (flags & 2) {\n notify(sub);\n }\n if (flags & 1) {\n const subSubs = sub.subs;\n if (subSubs !== undefined) {\n const nextSub = (link = subSubs).nextSub;\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack };\n next = nextSub;\n }\n continue;\n }\n }\n if ((link = next) !== undefined) {\n next = link.nextSub;\n continue;\n }\n while (stack !== undefined) {\n link = stack.value;\n stack = stack.prev;\n if (link !== undefined) {\n next = link.nextSub;\n continue top;\n }\n }\n break;\n } while (true);\n }\n function checkDirty(link, sub) {\n let stack;\n let checkDepth = 0;\n let dirty = false;\n top: do {\n const dep = link.dep;\n const flags = dep.flags;\n if (sub.flags & 16) {\n dirty = true;\n }\n else if ((flags & (1 | 16)) === (1 | 16)) {\n if (update(dep)) {\n const subs = dep.subs;\n if (subs.nextSub !== undefined) {\n shallowPropagate(subs);\n }\n dirty = true;\n }\n }\n else if ((flags & (1 | 32)) === (1 | 32)) {\n if (link.nextSub !== undefined || link.prevSub !== undefined) {\n stack = { value: link, prev: stack };\n }\n link = dep.deps;\n sub = dep;\n ++checkDepth;\n continue;\n }\n if (!dirty) {\n const nextDep = link.nextDep;\n if (nextDep !== undefined) {\n link = nextDep;\n continue;\n }\n }\n while (checkDepth--) {\n const firstSub = sub.subs;\n const hasMultipleSubs = firstSub.nextSub !== undefined;\n if (hasMultipleSubs) {\n link = stack.value;\n stack = stack.prev;\n }\n else {\n link = firstSub;\n }\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) {\n shallowPropagate(firstSub);\n }\n sub = link.sub;\n continue;\n }\n dirty = false;\n }\n else {\n sub.flags &= ~32;\n }\n sub = link.sub;\n const nextDep = link.nextDep;\n if (nextDep !== undefined) {\n link = nextDep;\n continue top;\n }\n }\n return dirty;\n } while (true);\n }\n function shallowPropagate(link) {\n do {\n const sub = link.sub;\n const flags = sub.flags;\n if ((flags & (32 | 16)) === 32) {\n sub.flags = flags | 16;\n if ((flags & (2 | 4)) === 2) {\n notify(sub);\n }\n }\n } while ((link = link.nextSub) !== undefined);\n }\n function isValidLink(checkLink, sub) {\n let link = sub.depsTail;\n while (link !== undefined) {\n if (link === checkLink) {\n return true;\n }\n link = link.prevDep;\n }\n return false;\n }\n}\n","import { createReactiveSystem } from './system.mjs';\nlet cycle = 0;\nlet batchDepth = 0;\nlet notifyIndex = 0;\nlet queuedLength = 0;\nlet activeSub;\nconst queued = [];\nconst { link, unlink, propagate, checkDirty, shallowPropagate, } = createReactiveSystem({\n update(node) {\n if (node.depsTail !== undefined) {\n return updateComputed(node);\n }\n else {\n return updateSignal(node);\n }\n },\n notify(effect) {\n let insertIndex = queuedLength;\n let firstInsertedIndex = insertIndex;\n do {\n queued[insertIndex++] = effect;\n effect.flags &= ~2;\n effect = effect.subs?.sub;\n if (effect === undefined || !(effect.flags & 2)) {\n break;\n }\n } while (true);\n queuedLength = insertIndex;\n while (firstInsertedIndex < --insertIndex) {\n const left = queued[firstInsertedIndex];\n queued[firstInsertedIndex++] = queued[insertIndex];\n queued[insertIndex] = left;\n }\n },\n unwatched(node) {\n if (!(node.flags & 1)) {\n effectScopeOper.call(node);\n }\n else if (node.depsTail !== undefined) {\n node.depsTail = undefined;\n node.flags = 1 | 16;\n purgeDeps(node);\n }\n },\n});\nexport function getActiveSub() {\n return activeSub;\n}\nexport function setActiveSub(sub) {\n const prevSub = activeSub;\n activeSub = sub;\n return prevSub;\n}\nexport function getBatchDepth() {\n return batchDepth;\n}\nexport function startBatch() {\n ++batchDepth;\n}\nexport function endBatch() {\n if (!--batchDepth) {\n flush();\n }\n}\nexport function isSignal(fn) {\n return fn.name === 'bound ' + signalOper.name;\n}\nexport function isComputed(fn) {\n return fn.name === 'bound ' + computedOper.name;\n}\nexport function isEffect(fn) {\n return fn.name === 'bound ' + effectOper.name;\n}\nexport function isEffectScope(fn) {\n return fn.name === 'bound ' + effectScopeOper.name;\n}\nexport function signal(initialValue) {\n return signalOper.bind({\n currentValue: initialValue,\n pendingValue: initialValue,\n subs: undefined,\n subsTail: undefined,\n flags: 1,\n });\n}\nexport function computed(getter) {\n return computedOper.bind({\n value: undefined,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 0,\n getter: getter,\n });\n}\nexport function effect(fn) {\n const e = {\n fn,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 2 | 4,\n };\n const prevSub = setActiveSub(e);\n if (prevSub !== undefined) {\n link(e, prevSub, 0);\n }\n try {\n e.fn();\n }\n finally {\n activeSub = prevSub;\n e.flags &= ~4;\n }\n return effectOper.bind(e);\n}\nexport function effectScope(fn) {\n const e = {\n deps: undefined,\n depsTail: undefined,\n subs: undefined,\n subsTail: undefined,\n flags: 0,\n };\n const prevSub = setActiveSub(e);\n if (prevSub !== undefined) {\n link(e, prevSub, 0);\n }\n try {\n fn();\n }\n finally {\n activeSub = prevSub;\n }\n return effectScopeOper.bind(e);\n}\nexport function trigger(fn) {\n const sub = {\n deps: undefined,\n depsTail: undefined,\n flags: 2,\n };\n const prevSub = setActiveSub(sub);\n try {\n fn();\n }\n finally {\n activeSub = prevSub;\n let link = sub.deps;\n while (link !== undefined) {\n const dep = link.dep;\n link = unlink(link, sub);\n const subs = dep.subs;\n if (subs !== undefined) {\n sub.flags = 0;\n propagate(subs);\n shallowPropagate(subs);\n }\n }\n if (!batchDepth) {\n flush();\n }\n }\n}\nfunction updateComputed(c) {\n ++cycle;\n c.depsTail = undefined;\n c.flags = 1 | 4;\n const prevSub = setActiveSub(c);\n try {\n const oldValue = c.value;\n return oldValue !== (c.value = c.getter(oldValue));\n }\n finally {\n activeSub = prevSub;\n c.flags &= ~4;\n purgeDeps(c);\n }\n}\nfunction updateSignal(s) {\n s.flags = 1;\n return s.currentValue !== (s.currentValue = s.pendingValue);\n}\nfunction run(e) {\n const flags = e.flags;\n if (flags & 16\n || (flags & 32\n && checkDirty(e.deps, e))) {\n ++cycle;\n e.depsTail = undefined;\n e.flags = 2 | 4;\n const prevSub = setActiveSub(e);\n try {\n e.fn();\n }\n finally {\n activeSub = prevSub;\n e.flags &= ~4;\n purgeDeps(e);\n }\n }\n else {\n e.flags = 2;\n }\n}\nfunction flush() {\n try {\n while (notifyIndex < queuedLength) {\n const effect = queued[notifyIndex];\n queued[notifyIndex++] = undefined;\n run(effect);\n }\n }\n finally {\n while (notifyIndex < queuedLength) {\n const effect = queued[notifyIndex];\n queued[notifyIndex++] = undefined;\n effect.flags |= 2 | 8;\n }\n notifyIndex = 0;\n queuedLength = 0;\n }\n}\nfunction computedOper() {\n const flags = this.flags;\n if (flags & 16\n || (flags & 32\n && (checkDirty(this.deps, this)\n || (this.flags = flags & ~32, false)))) {\n if (updateComputed(this)) {\n const subs = this.subs;\n if (subs !== undefined) {\n shallowPropagate(subs);\n }\n }\n }\n else if (!flags) {\n this.flags = 1 | 4;\n const prevSub = setActiveSub(this);\n try {\n this.value = this.getter();\n }\n finally {\n activeSub = prevSub;\n this.flags &= ~4;\n }\n }\n const sub = activeSub;\n if (sub !== undefined) {\n link(this, sub, cycle);\n }\n return this.value;\n}\nfunction signalOper(...value) {\n if (value.length) {\n if (this.pendingValue !== (this.pendingValue = value[0])) {\n this.flags = 1 | 16;\n const subs = this.subs;\n if (subs !== undefined) {\n propagate(subs);\n if (!batchDepth) {\n flush();\n }\n }\n }\n }\n else {\n if (this.flags & 16) {\n if (updateSignal(this)) {\n const subs = this.subs;\n if (subs !== undefined) {\n shallowPropagate(subs);\n }\n }\n }\n let sub = activeSub;\n while (sub !== undefined) {\n if (sub.flags & (1 | 2)) {\n link(this, sub, cycle);\n break;\n }\n sub = sub.subs?.sub;\n }\n return this.currentValue;\n }\n}\nfunction effectOper() {\n effectScopeOper.call(this);\n}\nfunction effectScopeOper() {\n this.depsTail = undefined;\n this.flags = 0;\n purgeDeps(this);\n const sub = this.subs;\n if (sub !== undefined) {\n unlink(sub);\n }\n}\nfunction purgeDeps(sub) {\n const depsTail = sub.depsTail;\n let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps;\n while (dep !== undefined) {\n dep = unlink(dep, sub);\n }\n}\n","/**\n * @silvery/signals — Reactive signals for silvery.\n *\n * Thin wrapper around alien-signals providing:\n * - signal(value) — create a reactive value (call to read, call with arg to write)\n * - computed(fn) — derived reactive value that recomputes on dependency changes\n * - effect(fn) — side effect that re-runs when dependencies change\n * - effectScope(fn) — group effects for collective disposal\n * - batch(fn) — batch multiple signal updates into one notification\n * - watch(read, onChange) — change-only subscription (skips the seed fire)\n *\n * @packageDocumentation\n */\n\nexport {\n signal,\n computed,\n effect,\n effectScope,\n startBatch,\n endBatch,\n trigger,\n isSignal,\n isComputed,\n isEffect,\n isEffectScope,\n getActiveSub,\n setActiveSub,\n getBatchDepth,\n} from \"alien-signals\"\n\nimport { effect, startBatch, endBatch } from \"alien-signals\"\n\n/**\n * A reactive value — callable getter/setter.\n *\n * - `sig()` reads the current value (and subscribes the active effect/computed).\n * - `sig(next)` writes a new value; subscribers re-run only if `next !== current`.\n *\n * Matches the return shape of `signal<T>(initial)` from alien-signals, so any\n * `signal()` result is assignable to `Signal<T>`.\n */\nexport type Signal<T> = {\n (): T\n (value: T): void\n}\n\n/**\n * A read-only reactive value — callable getter that subscribes the active\n * effect/computed but cannot be written to. Matches the return shape of\n * `computed<T>(fn)` from alien-signals.\n */\nexport type ReadSignal<T> = () => T\n\n/** Batch multiple signal updates, notifying subscribers once at the end. */\nexport function batch(fn: () => void): void {\n startBatch()\n try {\n fn()\n } finally {\n endBatch()\n }\n}\n\n/**\n * Options for {@link watch}.\n */\nexport interface WatchOptions<T> {\n /** If true, fire `onChange` on the seed read with `(next, next)`. Default false (change-only). */\n immediate?: boolean\n /** Equality predicate — handler fires only when `equals(next, prev)` is false. Default `Object.is`. */\n equals?: (a: T, b: T) => boolean\n}\n\n/**\n * Subscribe to signal changes via an imperative callback.\n *\n * alien-signals' `effect()` runs once eagerly to establish dependencies,\n * which means a plain `effect(() => handler(sig()))` fires with the seed\n * value. `watch()` swallows that first fire and only calls `onChange` when\n * the value actually changes — matching the old `.subscribe(handler)`\n * semantic consumers often want.\n *\n * ```ts\n * const stop = watch(\n * () => size.snapshot(),\n * (next, prev) => { emit({ cols: next.cols, rows: next.rows }) },\n * )\n * // stop() to unsubscribe\n * ```\n *\n * Returns the effect's stop function.\n */\nexport function watch<T>(\n read: () => T,\n onChange: (next: T, prev: T) => void,\n opts: WatchOptions<T> = {},\n): () => void {\n const equals = opts.equals ?? Object.is\n let seeded = false\n let prev!: T\n return effect(() => {\n const next = read()\n if (!seeded) {\n seeded = true\n prev = next\n if (opts.immediate) onChange(next, next)\n return\n }\n if (equals(next, prev)) return\n const old = prev\n prev = next\n onChange(next, old)\n })\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1,258 +0,0 @@
1
- import { n as __esmMin } from "./chunk-BSw8zbkd.mjs";
2
- import { c as init_fonts, o as bundledFontFiles } from "./fonts-BFmhXDv7.mjs";
3
- import { createRequire } from "node:module";
4
- import { existsSync, readFileSync } from "node:fs";
5
- //#region ../termless/packages/swash-render/src/index.ts
6
- /**
7
- * `@termless/swash-render` — pure-native swash text rasterizer for termless.
8
- *
9
- * swash (github.com/dfrg/swash — the cosmic-text / Linebender lineage) is a
10
- * pure-Rust, browser-grade headless text rasterizer: full shaping, TrueType +
11
- * CFF outlines, and **color emoji** across sbix / CBDT / COLR. termless's
12
- * `canvas` (Skia via `@napi-rs/canvas`) and `resvg` renderers both lose the
13
- * system color-emoji table and fall back to monochrome line-art; swash reads
14
- * the color tables directly, so 📁 / 📋 / ✅ render in full color.
15
- *
16
- * This package is the **cell-grid path**: swash does shaping + glyph
17
- * rasterization only, so the binding ports the fixed-pitch grid walk (per-cell
18
- * fg/bg, wide-char advance) — see `native/src/lib.rs`. termless already owns
19
- * the cell grid (it feeds both canvas and resvg), so the public entry point
20
- * here is {@link renderCells}: a {@link TerminalReadable} in, RGBA out.
21
- *
22
- * The native `.node` binary must be built first (phase 1 ships macOS-arm64;
23
- * cross-platform prebuilds are a later phase):
24
- *
25
- * cd packages/swash-render && bun run build:native && bun run postbuild:native
26
- */
27
- function isFileMusl(path) {
28
- return path.includes("libc.musl-") || path.includes("ld-musl-");
29
- }
30
- function isMuslLinux() {
31
- if (process.platform !== "linux") return false;
32
- try {
33
- if (readFileSync("/usr/bin/ldd", "utf8").includes("musl")) return true;
34
- } catch {}
35
- const report = typeof process.report?.getReport === "function" ? process.report.getReport() : null;
36
- if (report?.header && "glibcVersionRuntime" in report.header) return false;
37
- if (Array.isArray(report?.sharedObjects)) return report.sharedObjects.some(isFileMusl);
38
- return false;
39
- }
40
- function nativePlatformSuffix(platform = process.platform, arch = process.arch, musl = isMuslLinux()) {
41
- if (platform === "darwin") {
42
- if (arch === "arm64") return "darwin-arm64";
43
- if (arch === "x64") return "darwin-x64";
44
- }
45
- if (platform === "win32") {
46
- if (arch === "arm64") return "win32-arm64-msvc";
47
- if (arch === "x64") return "win32-x64-msvc";
48
- }
49
- if (platform === "linux") {
50
- const abi = musl ? "musl" : "gnu";
51
- if (arch === "arm64") return `linux-arm64-${abi}`;
52
- if (arch === "x64") return `linux-x64-${abi}`;
53
- }
54
- return null;
55
- }
56
- function nativeLoadCandidates(platform = process.platform, arch = process.arch, musl = isMuslLinux()) {
57
- const candidates = ["../termless-swash-render.node"];
58
- const suffix = nativePlatformSuffix(platform, arch, musl);
59
- if (suffix) {
60
- candidates.push(`../termless-swash-render.${suffix}.node`);
61
- candidates.push(`@termless/swash-render-${suffix}`);
62
- }
63
- return candidates;
64
- }
65
- /** @internal — exposed for loader contract tests. */
66
- function _swashNativeLoadCandidatesForTesting(platform, arch, musl = false) {
67
- return nativeLoadCandidates(platform, arch, musl);
68
- }
69
- /** @internal — reset cached load state for tests. */
70
- function _resetSwashRenderNativeForTesting() {
71
- nativeModule = null;
72
- loadError = null;
73
- }
74
- /**
75
- * Load the native swash-render `.node` addon. Throws a clear, actionable
76
- * error if the binary is missing. Supports the legacy local build
77
- * (`termless-swash-render.node`), napi-rs platform-suffixed prebuilds, and the
78
- * optional platform-package layout used by napi-rs native packages.
79
- */
80
- function loadSwashRenderNative() {
81
- if (nativeModule) return nativeModule;
82
- if (loadError) throw loadError;
83
- const require = createRequire(import.meta.url);
84
- const errors = [];
85
- const override = process.env.NAPI_RS_NATIVE_LIBRARY_PATH;
86
- if (override) try {
87
- nativeModule = require(override);
88
- return nativeModule;
89
- } catch (e) {
90
- errors.push(`${override}: ${e instanceof Error ? e.message : String(e)}`);
91
- }
92
- for (const candidate of nativeLoadCandidates()) try {
93
- nativeModule = require(candidate);
94
- return nativeModule;
95
- } catch (e) {
96
- errors.push(`${candidate}: ${e instanceof Error ? e.message : String(e)}`);
97
- }
98
- const tried = nativeLoadCandidates().map((c) => ` - ${c}`).join("\n");
99
- const original = errors.length ? `\n\nLoad attempts:\n${errors.map((e) => ` - ${e}`).join("\n")}` : "";
100
- loadError = /* @__PURE__ */ new Error(`Failed to load @termless/swash-render native module.
101
- Install the matching optional prebuild package, or build a local prebuild:
102
- cd packages/swash-render && bun run build:prebuild
103
-
104
- Tried:\n${tried}${original}`);
105
- throw loadError;
106
- }
107
- /** Whether the native swash binding is present and loadable. */
108
- function swashRenderAvailable() {
109
- try {
110
- loadSwashRenderNative();
111
- return true;
112
- } catch {
113
- return false;
114
- }
115
- }
116
- /** Direct native render — low-level. Most callers want {@link renderCells}. */
117
- function nativeRender(opts) {
118
- return loadSwashRenderNative().render(opts);
119
- }
120
- /**
121
- * The system color-emoji face. swash needs a *color* font for emoji ink;
122
- * termless's bundled `NotoEmoji-Regular.ttf` is monochrome, so the swash
123
- * path layers the platform color-emoji face on top of the bundled chain.
124
- */
125
- function colorEmojiFont() {
126
- for (const c of [
127
- {
128
- path: "/System/Library/Fonts/Apple Color Emoji.ttc",
129
- index: 0
130
- },
131
- {
132
- path: "/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf",
133
- index: 0
134
- },
135
- {
136
- path: "/usr/share/fonts/noto/NotoColorEmoji.ttf",
137
- index: 0
138
- },
139
- {
140
- path: "C:\\Windows\\Fonts\\seguiemj.ttf",
141
- index: 0
142
- }
143
- ]) if (existsSync(c.path)) return {
144
- data: readFileSync(c.path),
145
- index: c.index
146
- };
147
- return null;
148
- }
149
- /**
150
- * The swash font fallback chain.
151
- *
152
- * Per-glyph fallback resolves to the *first* face in the chain that covers a
153
- * codepoint, so order is load-bearing. The platform color-emoji face is
154
- * inserted **before** the bundled monochrome `NotoEmoji-Regular.ttf` —
155
- * otherwise the mono face shadows it and emoji render as monochrome ink (the
156
- * exact failure the spike's control catches). Order:
157
- *
158
- * 1. JetBrains Mono — primary monospace face
159
- * 2. Noto Sans Symbols 2 — terminal symbol glyphs
160
- * 3. <platform color emoji> — color emoji (preferred over mono)
161
- * 4. Noto Emoji (mono) — emoji fallback when no color face exists
162
- */
163
- function swashFontChain() {
164
- if (cachedFonts) return cachedFonts;
165
- const color = colorEmojiFont();
166
- const fonts = [];
167
- for (const file of bundledFontFiles()) {
168
- if (color && /NotoEmoji/i.test(file)) fonts.push(color);
169
- fonts.push({
170
- data: readFileSync(file),
171
- index: 0
172
- });
173
- }
174
- if (color && !fonts.includes(color)) fonts.push(color);
175
- cachedFonts = fonts;
176
- return fonts;
177
- }
178
- function packRgb(c) {
179
- if (!c) return -1;
180
- return (c.r & 255) << 16 | (c.g & 255) << 8 | c.b & 255;
181
- }
182
- /** Flatten a termless {@link Cell} to a {@link SwashCell}, honoring inverse. */
183
- function toSwashCell(cell) {
184
- let fg = packRgb(cell.fg);
185
- let bg = packRgb(cell.bg);
186
- if (cell.inverse) {
187
- const f = fg === -1 ? DEFAULT_FG : fg;
188
- fg = bg === -1 ? DEFAULT_BG : bg;
189
- bg = f;
190
- }
191
- return {
192
- text: cell.continuation ? "" : cell.char,
193
- fg,
194
- bg,
195
- bold: cell.bold,
196
- wide: cell.wide,
197
- continuation: cell.continuation
198
- };
199
- }
200
- /**
201
- * Rasterize a terminal's current cell grid into an RGBA bitmap via swash.
202
- *
203
- * This is the high-fidelity path: the cell grid is fed straight to swash
204
- * (no SVG round-trip), so color-emoji glyphs composite their native color
205
- * bitmaps. Mirrors how `screenshotSvg` reads a {@link TerminalReadable}.
206
- */
207
- function renderCells(terminal, opts = {}) {
208
- const lines = terminal.getLines();
209
- const rows = lines.length;
210
- const cols = lines.reduce((m, line) => Math.max(m, line.length), 0);
211
- const cellHeight = opts.cellHeight ?? DEFAULT_CELL_HEIGHT;
212
- const blank = {
213
- text: "",
214
- fg: -1,
215
- bg: -1,
216
- bold: false,
217
- wide: false,
218
- continuation: false
219
- };
220
- const cells = [];
221
- for (let row = 0; row < rows; row++) {
222
- const line = lines[row] ?? [];
223
- for (let col = 0; col < cols; col++) {
224
- const cell = line[col];
225
- cells.push(cell ? toSwashCell(cell) : { ...blank });
226
- }
227
- }
228
- return nativeRender({
229
- cells,
230
- cols,
231
- rows,
232
- cellWidth: opts.cellWidth ?? DEFAULT_CELL_WIDTH,
233
- cellHeight,
234
- fontSize: opts.fontSize ?? cellHeight * DEFAULT_FONT_SIZE_RATIO,
235
- baseline: opts.baseline ?? cellHeight * DEFAULT_BASELINE_RATIO,
236
- fonts: opts.fonts ?? swashFontChain(),
237
- defaultFg: opts.defaultFg ?? DEFAULT_FG,
238
- defaultBg: opts.defaultBg ?? DEFAULT_BG,
239
- padding: opts.padding ?? 0
240
- });
241
- }
242
- var nativeModule, loadError, cachedFonts, DEFAULT_FG, DEFAULT_BG, DEFAULT_CELL_HEIGHT, DEFAULT_CELL_WIDTH, DEFAULT_FONT_SIZE_RATIO, DEFAULT_BASELINE_RATIO;
243
- //#endregion
244
- __esmMin((() => {
245
- init_fonts();
246
- nativeModule = null;
247
- loadError = null;
248
- cachedFonts = null;
249
- DEFAULT_FG = 13948116;
250
- DEFAULT_BG = 1973790;
251
- DEFAULT_CELL_HEIGHT = 20;
252
- DEFAULT_CELL_WIDTH = 9.6;
253
- DEFAULT_FONT_SIZE_RATIO = 17 / 20;
254
- DEFAULT_BASELINE_RATIO = .835;
255
- }))();
256
- export { _resetSwashRenderNativeForTesting, _swashNativeLoadCandidatesForTesting, loadSwashRenderNative, nativeRender, renderCells, swashFontChain, swashRenderAvailable };
257
-
258
- //# sourceMappingURL=src-bt8wSrfJ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-bt8wSrfJ.mjs","names":[],"sources":["../../termless/packages/swash-render/src/index.ts"],"sourcesContent":["/**\n * `@termless/swash-render` — pure-native swash text rasterizer for termless.\n *\n * swash (github.com/dfrg/swash — the cosmic-text / Linebender lineage) is a\n * pure-Rust, browser-grade headless text rasterizer: full shaping, TrueType +\n * CFF outlines, and **color emoji** across sbix / CBDT / COLR. termless's\n * `canvas` (Skia via `@napi-rs/canvas`) and `resvg` renderers both lose the\n * system color-emoji table and fall back to monochrome line-art; swash reads\n * the color tables directly, so 📁 / 📋 / ✅ render in full color.\n *\n * This package is the **cell-grid path**: swash does shaping + glyph\n * rasterization only, so the binding ports the fixed-pitch grid walk (per-cell\n * fg/bg, wide-char advance) — see `native/src/lib.rs`. termless already owns\n * the cell grid (it feeds both canvas and resvg), so the public entry point\n * here is {@link renderCells}: a {@link TerminalReadable} in, RGBA out.\n *\n * The native `.node` binary must be built first (phase 1 ships macOS-arm64;\n * cross-platform prebuilds are a later phase):\n *\n * cd packages/swash-render && bun run build:native && bun run postbuild:native\n */\n\nimport { createRequire } from \"node:module\"\nimport { bundledFontFiles } from \"../../../src/render/fonts.ts\"\nimport { readFileSync, existsSync } from \"node:fs\"\nimport type { TerminalReadable, Cell, RGB } from \"../../../src/terminal/types.ts\"\n\n// ===========================================================================\n// Native module\n// ===========================================================================\n\n/** A single cell flattened for the napi boundary. */\nexport interface SwashCell {\n text: string\n /** Packed `0xRRGGBB`, or `-1` for \"default fg\". */\n fg: number\n /** Packed `0xRRGGBB`, or `-1` for \"default bg\". */\n bg: number\n bold: boolean\n wide: boolean\n continuation: boolean\n}\n\n/** One font in the fallback chain. */\nexport interface SwashFont {\n data: Buffer\n index: number\n}\n\n/** Inputs for one {@link nativeRender} call. */\nexport interface SwashRenderOptions {\n cells: SwashCell[]\n cols: number\n rows: number\n cellWidth: number\n cellHeight: number\n fontSize: number\n baseline: number\n fonts: SwashFont[]\n /** Default fg `0xRRGGBB`. */\n defaultFg: number\n /** Default bg `0xRRGGBB`. */\n defaultBg: number\n padding: number\n}\n\n/** An RGBA bitmap produced by the swash renderer. */\nexport interface SwashBitmap {\n pixels: Buffer\n width: number\n height: number\n}\n\ninterface NativeModule {\n render(opts: SwashRenderOptions): SwashBitmap\n}\n\nlet nativeModule: NativeModule | null = null\nlet loadError: Error | null = null\n\nfunction isFileMusl(path: string): boolean {\n return path.includes(\"libc.musl-\") || path.includes(\"ld-musl-\")\n}\n\nfunction isMuslLinux(): boolean {\n if (process.platform !== \"linux\") return false\n try {\n if (readFileSync(\"/usr/bin/ldd\", \"utf8\").includes(\"musl\")) return true\n } catch {\n // Fall through to Node's process report when /usr/bin/ldd is absent.\n }\n const report =\n typeof process.report?.getReport === \"function\"\n ? (process.report.getReport() as { header?: { glibcVersionRuntime?: string }; sharedObjects?: string[] })\n : null\n if (report?.header && \"glibcVersionRuntime\" in report.header) return false\n if (Array.isArray(report?.sharedObjects)) return report.sharedObjects.some(isFileMusl)\n return false\n}\n\nfunction nativePlatformSuffix(\n platform: NodeJS.Platform = process.platform,\n arch: NodeJS.Architecture = process.arch,\n musl = isMuslLinux(),\n): string | null {\n if (platform === \"darwin\") {\n if (arch === \"arm64\") return \"darwin-arm64\"\n if (arch === \"x64\") return \"darwin-x64\"\n }\n if (platform === \"win32\") {\n if (arch === \"arm64\") return \"win32-arm64-msvc\"\n if (arch === \"x64\") return \"win32-x64-msvc\"\n }\n if (platform === \"linux\") {\n const abi = musl ? \"musl\" : \"gnu\"\n if (arch === \"arm64\") return `linux-arm64-${abi}`\n if (arch === \"x64\") return `linux-x64-${abi}`\n }\n return null\n}\n\nfunction nativeLoadCandidates(\n platform: NodeJS.Platform = process.platform,\n arch: NodeJS.Architecture = process.arch,\n musl = isMuslLinux(),\n): string[] {\n const candidates = [\"../termless-swash-render.node\"]\n const suffix = nativePlatformSuffix(platform, arch, musl)\n if (suffix) {\n candidates.push(`../termless-swash-render.${suffix}.node`)\n candidates.push(`@termless/swash-render-${suffix}`)\n }\n return candidates\n}\n\n/** @internal — exposed for loader contract tests. */\nexport function _swashNativeLoadCandidatesForTesting(\n platform: NodeJS.Platform,\n arch: NodeJS.Architecture,\n musl = false,\n): string[] {\n return nativeLoadCandidates(platform, arch, musl)\n}\n\n/** @internal — reset cached load state for tests. */\nexport function _resetSwashRenderNativeForTesting(): void {\n nativeModule = null\n loadError = null\n}\n\n/**\n * Load the native swash-render `.node` addon. Throws a clear, actionable\n * error if the binary is missing. Supports the legacy local build\n * (`termless-swash-render.node`), napi-rs platform-suffixed prebuilds, and the\n * optional platform-package layout used by napi-rs native packages.\n */\nexport function loadSwashRenderNative(): NativeModule {\n if (nativeModule) return nativeModule\n if (loadError) throw loadError\n const require = createRequire(import.meta.url)\n const errors: string[] = []\n const override = process.env.NAPI_RS_NATIVE_LIBRARY_PATH\n if (override) {\n try {\n nativeModule = require(override) as NativeModule\n return nativeModule\n } catch (e) {\n errors.push(`${override}: ${e instanceof Error ? e.message : String(e)}`)\n }\n }\n for (const candidate of nativeLoadCandidates()) {\n try {\n nativeModule = require(candidate) as NativeModule\n return nativeModule\n } catch (e) {\n errors.push(`${candidate}: ${e instanceof Error ? e.message : String(e)}`)\n }\n }\n const tried = nativeLoadCandidates()\n .map((c) => ` - ${c}`)\n .join(\"\\n\")\n const original = errors.length ? `\\n\\nLoad attempts:\\n${errors.map((e) => ` - ${e}`).join(\"\\n\")}` : \"\"\n loadError = new Error(\n \"Failed to load @termless/swash-render native module.\\n\" +\n \"Install the matching optional prebuild package, or build a local prebuild:\\n\" +\n \" cd packages/swash-render && bun run build:prebuild\\n\\n\" +\n `Tried:\\n${tried}${original}`,\n )\n throw loadError\n}\n\n/** Whether the native swash binding is present and loadable. */\nexport function swashRenderAvailable(): boolean {\n try {\n loadSwashRenderNative()\n return true\n } catch {\n return false\n }\n}\n\n/** Direct native render — low-level. Most callers want {@link renderCells}. */\nexport function nativeRender(opts: SwashRenderOptions): SwashBitmap {\n return loadSwashRenderNative().render(opts)\n}\n\n// ===========================================================================\n// Font set\n// ===========================================================================\n\n/**\n * The system color-emoji face. swash needs a *color* font for emoji ink;\n * termless's bundled `NotoEmoji-Regular.ttf` is monochrome, so the swash\n * path layers the platform color-emoji face on top of the bundled chain.\n */\nfunction colorEmojiFont(): SwashFont | null {\n const candidates: Array<{ path: string; index: number }> = [\n { path: \"/System/Library/Fonts/Apple Color Emoji.ttc\", index: 0 },\n { path: \"/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf\", index: 0 },\n { path: \"/usr/share/fonts/noto/NotoColorEmoji.ttf\", index: 0 },\n { path: \"C:\\\\Windows\\\\Fonts\\\\seguiemj.ttf\", index: 0 },\n ]\n for (const c of candidates) {\n if (existsSync(c.path)) return { data: readFileSync(c.path), index: c.index }\n }\n return null\n}\n\nlet cachedFonts: SwashFont[] | null = null\n\n/**\n * The swash font fallback chain.\n *\n * Per-glyph fallback resolves to the *first* face in the chain that covers a\n * codepoint, so order is load-bearing. The platform color-emoji face is\n * inserted **before** the bundled monochrome `NotoEmoji-Regular.ttf` —\n * otherwise the mono face shadows it and emoji render as monochrome ink (the\n * exact failure the spike's control catches). Order:\n *\n * 1. JetBrains Mono — primary monospace face\n * 2. Noto Sans Symbols 2 — terminal symbol glyphs\n * 3. <platform color emoji> — color emoji (preferred over mono)\n * 4. Noto Emoji (mono) — emoji fallback when no color face exists\n */\nexport function swashFontChain(): SwashFont[] {\n if (cachedFonts) return cachedFonts\n const color = colorEmojiFont()\n const fonts: SwashFont[] = []\n for (const file of bundledFontFiles()) {\n // Splice the color-emoji face in just before the bundled mono-emoji face.\n if (color && /NotoEmoji/i.test(file)) {\n fonts.push(color)\n }\n fonts.push({ data: readFileSync(file), index: 0 })\n }\n // If the bundled mono-emoji face was absent, still append the color face.\n if (color && !fonts.includes(color)) fonts.push(color)\n cachedFonts = fonts\n return fonts\n}\n\n// ===========================================================================\n// Cell-grid path\n// ===========================================================================\n\nconst DEFAULT_FG = 0xd4d4d4\nconst DEFAULT_BG = 0x1e1e1e\nconst DEFAULT_CELL_HEIGHT = 20\nconst DEFAULT_CELL_WIDTH = 9.6\nconst DEFAULT_FONT_SIZE_RATIO = 17 / 20\nconst DEFAULT_BASELINE_RATIO = 0.835\n\nfunction packRgb(c: RGB | null): number {\n if (!c) return -1\n return ((c.r & 0xff) << 16) | ((c.g & 0xff) << 8) | (c.b & 0xff)\n}\n\n/** Flatten a termless {@link Cell} to a {@link SwashCell}, honoring inverse. */\nfunction toSwashCell(cell: Cell): SwashCell {\n let fg = packRgb(cell.fg)\n let bg = packRgb(cell.bg)\n if (cell.inverse) {\n // Inverse swaps fg/bg; a default channel resolves to the theme color so\n // the swap stays visible (otherwise `-1`↔`-1` would be a no-op).\n const f = fg === -1 ? DEFAULT_FG : fg\n const b = bg === -1 ? DEFAULT_BG : bg\n fg = b\n bg = f\n }\n return {\n text: cell.continuation ? \"\" : cell.char,\n fg,\n bg,\n bold: cell.bold,\n wide: cell.wide,\n continuation: cell.continuation,\n }\n}\n\n/** Options for {@link renderCells}. */\nexport interface RenderCellsOptions {\n /** Cell advance width in px (monospace pitch). Default 9.6. */\n cellWidth?: number\n /** Cell box height in px (line height). Default 20. */\n cellHeight?: number\n /** Glyph render size in px. Default `cellHeight * 0.85`. */\n fontSize?: number\n /** Baseline offset from the cell-box top in px. Default `cellHeight * 0.835`. */\n baseline?: number\n /** Padding on every side in px. Default 0. */\n padding?: number\n /** Default foreground `0xRRGGBB`. Default `0xd4d4d4`. */\n defaultFg?: number\n /** Default background `0xRRGGBB`. Default `0x1e1e1e`. */\n defaultBg?: number\n /** Font fallback chain. Defaults to {@link swashFontChain}. */\n fonts?: SwashFont[]\n}\n\n/**\n * Rasterize a terminal's current cell grid into an RGBA bitmap via swash.\n *\n * This is the high-fidelity path: the cell grid is fed straight to swash\n * (no SVG round-trip), so color-emoji glyphs composite their native color\n * bitmaps. Mirrors how `screenshotSvg` reads a {@link TerminalReadable}.\n */\nexport function renderCells(terminal: TerminalReadable, opts: RenderCellsOptions = {}): SwashBitmap {\n const lines = terminal.getLines()\n const rows = lines.length\n const cols = lines.reduce((m, line) => Math.max(m, line.length), 0)\n const cellHeight = opts.cellHeight ?? DEFAULT_CELL_HEIGHT\n const blank: SwashCell = { text: \"\", fg: -1, bg: -1, bold: false, wide: false, continuation: false }\n const cells: SwashCell[] = []\n for (let row = 0; row < rows; row++) {\n const line = lines[row] ?? []\n for (let col = 0; col < cols; col++) {\n const cell = line[col]\n cells.push(cell ? toSwashCell(cell) : { ...blank })\n }\n }\n return nativeRender({\n cells,\n cols,\n rows,\n cellWidth: opts.cellWidth ?? DEFAULT_CELL_WIDTH,\n cellHeight,\n fontSize: opts.fontSize ?? cellHeight * DEFAULT_FONT_SIZE_RATIO,\n baseline: opts.baseline ?? cellHeight * DEFAULT_BASELINE_RATIO,\n fonts: opts.fonts ?? swashFontChain(),\n defaultFg: opts.defaultFg ?? DEFAULT_FG,\n defaultBg: opts.defaultBg ?? DEFAULT_BG,\n padding: opts.padding ?? 0,\n })\n}\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { c as cellsToAnsi, o as renderAnsiPng, s as renderTerminalPng, t as init_src } from "./src-iDwu25UD.mjs";
2
- init_src();
3
- export { cellsToAnsi, renderAnsiPng, renderTerminalPng };