buninu-linux 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 (621) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES/Bun-LICENSE.md +84 -0
  3. package/LICENSES/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  4. package/LICENSES/GPL-2.0.txt +338 -0
  5. package/LICENSES/GPL-3.0.txt +674 -0
  6. package/LICENSES/LGPL-2.1.txt +501 -0
  7. package/LICENSES/Linux-syscall-note.txt +25 -0
  8. package/LICENSES/musl-COPYRIGHT.txt +193 -0
  9. package/NOTICE.md +184 -0
  10. package/README.md +537 -0
  11. package/build-image.sh +44 -0
  12. package/build-uki.sh +75 -0
  13. package/fetch-alpine.sh +80 -0
  14. package/fetch-bun.sh +41 -0
  15. package/fetch-plus-build.sh +11 -0
  16. package/hello/build-hello.sh +14 -0
  17. package/hello/hello.c +50 -0
  18. package/index.js +235 -0
  19. package/initramfs/bin/sh +3 -0
  20. package/initramfs/buninu/.bashrc +11 -0
  21. package/initramfs/buninu/ARCHITECTURE.md +452 -0
  22. package/initramfs/buninu/CHANGELOG.md +580 -0
  23. package/initramfs/buninu/LICENSE +21 -0
  24. package/initramfs/buninu/README.md +1161 -0
  25. package/initramfs/buninu/apps/bun/make-bunBin.sh +99 -0
  26. package/initramfs/buninu/apps/bunmsh/CHANGELOG.md +493 -0
  27. package/initramfs/buninu/apps/bunmsh/LICENSE +21 -0
  28. package/initramfs/buninu/apps/bunmsh/LICENSE-MICRO +58 -0
  29. package/initramfs/buninu/apps/bunmsh/LICENSE-MKSH +295 -0
  30. package/initramfs/buninu/apps/bunmsh/PORTING.md +192 -0
  31. package/initramfs/buninu/apps/bunmsh/README.md +1042 -0
  32. package/initramfs/buninu/apps/bunmsh/bunmsh +7 -0
  33. package/initramfs/buninu/apps/bunmsh/bunshell.md +61 -0
  34. package/initramfs/buninu/apps/bunmsh/help/README.md +2237 -0
  35. package/initramfs/buninu/apps/bunmsh/help/alias.md +22 -0
  36. package/initramfs/buninu/apps/bunmsh/help/basename.md +38 -0
  37. package/initramfs/buninu/apps/bunmsh/help/builtin.md +25 -0
  38. package/initramfs/buninu/apps/bunmsh/help/bun.md +27 -0
  39. package/initramfs/buninu/apps/bunmsh/help/bunmsh.md +47 -0
  40. package/initramfs/buninu/apps/bunmsh/help/cat.md +31 -0
  41. package/initramfs/buninu/apps/bunmsh/help/catfancy.md +35 -0
  42. package/initramfs/buninu/apps/bunmsh/help/cd.md +22 -0
  43. package/initramfs/buninu/apps/bunmsh/help/chmod.md +27 -0
  44. package/initramfs/buninu/apps/bunmsh/help/clear.md +21 -0
  45. package/initramfs/buninu/apps/bunmsh/help/colon.md +22 -0
  46. package/initramfs/buninu/apps/bunmsh/help/command.md +27 -0
  47. package/initramfs/buninu/apps/bunmsh/help/cp.md +28 -0
  48. package/initramfs/buninu/apps/bunmsh/help/curl.md +181 -0
  49. package/initramfs/buninu/apps/bunmsh/help/cut.md +25 -0
  50. package/initramfs/buninu/apps/bunmsh/help/date.md +25 -0
  51. package/initramfs/buninu/apps/bunmsh/help/dirname.md +25 -0
  52. package/initramfs/buninu/apps/bunmsh/help/echo.md +25 -0
  53. package/initramfs/buninu/apps/bunmsh/help/env.md +27 -0
  54. package/initramfs/buninu/apps/bunmsh/help/eval.md +22 -0
  55. package/initramfs/buninu/apps/bunmsh/help/exec.md +22 -0
  56. package/initramfs/buninu/apps/bunmsh/help/exit.md +21 -0
  57. package/initramfs/buninu/apps/bunmsh/help/export.md +22 -0
  58. package/initramfs/buninu/apps/bunmsh/help/false.md +22 -0
  59. package/initramfs/buninu/apps/bunmsh/help/find.md +33 -0
  60. package/initramfs/buninu/apps/bunmsh/help/getopts.md +28 -0
  61. package/initramfs/buninu/apps/bunmsh/help/grep.md +34 -0
  62. package/initramfs/buninu/apps/bunmsh/help/head.md +27 -0
  63. package/initramfs/buninu/apps/bunmsh/help/kill.md +43 -0
  64. package/initramfs/buninu/apps/bunmsh/help/ln.md +28 -0
  65. package/initramfs/buninu/apps/bunmsh/help/ls.md +37 -0
  66. package/initramfs/buninu/apps/bunmsh/help/lsbun.md +29 -0
  67. package/initramfs/buninu/apps/bunmsh/help/lsfancy.md +37 -0
  68. package/initramfs/buninu/apps/bunmsh/help/md5sum.md +21 -0
  69. package/initramfs/buninu/apps/bunmsh/help/mkdir.md +27 -0
  70. package/initramfs/buninu/apps/bunmsh/help/mktemp.md +26 -0
  71. package/initramfs/buninu/apps/bunmsh/help/mv.md +26 -0
  72. package/initramfs/buninu/apps/bunmsh/help/print.md +30 -0
  73. package/initramfs/buninu/apps/bunmsh/help/printf.md +25 -0
  74. package/initramfs/buninu/apps/bunmsh/help/pspa.md +38 -0
  75. package/initramfs/buninu/apps/bunmsh/help/pspac.md +57 -0
  76. package/initramfs/buninu/apps/bunmsh/help/pwd.md +21 -0
  77. package/initramfs/buninu/apps/bunmsh/help/read.md +27 -0
  78. package/initramfs/buninu/apps/bunmsh/help/readonly.md +27 -0
  79. package/initramfs/buninu/apps/bunmsh/help/realpath.md +21 -0
  80. package/initramfs/buninu/apps/bunmsh/help/rm.md +33 -0
  81. package/initramfs/buninu/apps/bunmsh/help/rmdir.md +27 -0
  82. package/initramfs/buninu/apps/bunmsh/help/sed.md +29 -0
  83. package/initramfs/buninu/apps/bunmsh/help/seq.md +29 -0
  84. package/initramfs/buninu/apps/bunmsh/help/serve.md +50 -0
  85. package/initramfs/buninu/apps/bunmsh/help/set.md +26 -0
  86. package/initramfs/buninu/apps/bunmsh/help/sha256sum.md +21 -0
  87. package/initramfs/buninu/apps/bunmsh/help/shift.md +23 -0
  88. package/initramfs/buninu/apps/bunmsh/help/sleep.md +25 -0
  89. package/initramfs/buninu/apps/bunmsh/help/sort.md +29 -0
  90. package/initramfs/buninu/apps/bunmsh/help/source.md +23 -0
  91. package/initramfs/buninu/apps/bunmsh/help/tab.md +30 -0
  92. package/initramfs/buninu/apps/bunmsh/help/tac.md +29 -0
  93. package/initramfs/buninu/apps/bunmsh/help/tail.md +27 -0
  94. package/initramfs/buninu/apps/bunmsh/help/tee.md +25 -0
  95. package/initramfs/buninu/apps/bunmsh/help/test.md +30 -0
  96. package/initramfs/buninu/apps/bunmsh/help/time.md +29 -0
  97. package/initramfs/buninu/apps/bunmsh/help/touch.md +26 -0
  98. package/initramfs/buninu/apps/bunmsh/help/tr.md +26 -0
  99. package/initramfs/buninu/apps/bunmsh/help/true.md +22 -0
  100. package/initramfs/buninu/apps/bunmsh/help/type.md +21 -0
  101. package/initramfs/buninu/apps/bunmsh/help/umask.md +22 -0
  102. package/initramfs/buninu/apps/bunmsh/help/unalias.md +28 -0
  103. package/initramfs/buninu/apps/bunmsh/help/uname.md +31 -0
  104. package/initramfs/buninu/apps/bunmsh/help/unset.md +28 -0
  105. package/initramfs/buninu/apps/bunmsh/help/wc.md +27 -0
  106. package/initramfs/buninu/apps/bunmsh/help/whence.md +26 -0
  107. package/initramfs/buninu/apps/bunmsh/help/which.md +41 -0
  108. package/initramfs/buninu/apps/bunmsh/help/yes.md +23 -0
  109. package/initramfs/buninu/apps/bunmsh/index.js +7 -0
  110. package/initramfs/buninu/apps/bunmsh/package.json +30 -0
  111. package/initramfs/buninu/apps/bunmsh/serve.js +468 -0
  112. package/initramfs/buninu/apps/bunmsh/single-exe/README.md +402 -0
  113. package/initramfs/buninu/apps/bunmsh/single-exe/assetsHelper.js +371 -0
  114. package/initramfs/buninu/apps/bunmsh/single-exe/assetsLoader.mjs +85 -0
  115. package/initramfs/buninu/apps/bunmsh/single-exe/assetsPacker.js +218 -0
  116. package/initramfs/buninu/apps/bunmsh/single-exe/compiled.js +527 -0
  117. package/initramfs/buninu/apps/bunmsh/single-exe/entry.mjs +17 -0
  118. package/initramfs/buninu/apps/bunmsh/src/cat-fancy.js +117 -0
  119. package/initramfs/buninu/apps/bunmsh/src/cat-operands.js +31 -0
  120. package/initramfs/buninu/apps/bunmsh/src/completion.js +363 -0
  121. package/initramfs/buninu/apps/bunmsh/src/curl.js +1191 -0
  122. package/initramfs/buninu/apps/bunmsh/src/environment.js +61 -0
  123. package/initramfs/buninu/apps/bunmsh/src/fancy-ls.js +186 -0
  124. package/initramfs/buninu/apps/bunmsh/src/find.js +119 -0
  125. package/initramfs/buninu/apps/bunmsh/src/history.js +198 -0
  126. package/initramfs/buninu/apps/bunmsh/src/main.js +850 -0
  127. package/initramfs/buninu/apps/bunmsh/src/mouse.js +103 -0
  128. package/initramfs/buninu/apps/bunmsh/src/shell.js +3932 -0
  129. package/initramfs/buninu/apps/bunmsh/test/catfancy.test.js +102 -0
  130. package/initramfs/buninu/apps/bunmsh/test/curl.test.js +335 -0
  131. package/initramfs/buninu/apps/bunmsh/test/reference-source.sh +1 -0
  132. package/initramfs/buninu/apps/bunmsh/test/reference.test.js +817 -0
  133. package/initramfs/buninu/apps/bunmsh/test/serve/README.md +3 -0
  134. package/initramfs/buninu/apps/bunmsh/test/serve/bad.json +1 -0
  135. package/initramfs/buninu/apps/bunmsh/test/serve/data.json +1 -0
  136. package/initramfs/buninu/apps/bunmsh/test/serve/data.json5 +1 -0
  137. package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonc +2 -0
  138. package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonl +2 -0
  139. package/initramfs/buninu/apps/bunmsh/test/serve/data.ndjson +1 -0
  140. package/initramfs/buninu/apps/bunmsh/test/serve/data.toml +3 -0
  141. package/initramfs/buninu/apps/bunmsh/test/serve/data.ts +15 -0
  142. package/initramfs/buninu/apps/bunmsh/test/serve/data.xml +1 -0
  143. package/initramfs/buninu/apps/bunmsh/test/serve/data.yaml +3 -0
  144. package/initramfs/buninu/apps/bunmsh/test/serve/data.yml +1 -0
  145. package/initramfs/buninu/apps/bunmsh/test/serve.test.js +241 -0
  146. package/initramfs/buninu/apps/bunmsh/test/shell.test.js +2092 -0
  147. package/initramfs/buninu/apps/bunmsh/test/shell1.test.js +1087 -0
  148. package/initramfs/buninu/apps/bunmsh/test/shell2.test.js +457 -0
  149. package/initramfs/buninu/apps/bunmsh/test/shell3.test.js +741 -0
  150. package/initramfs/buninu/apps/bunmsh/test/t.sh +12 -0
  151. package/initramfs/buninu/apps/bunx/bunx.js +172 -0
  152. package/initramfs/buninu/apps/cmdlist +48 -0
  153. package/initramfs/buninu/apps/jsgotty/LICENSE +23 -0
  154. package/initramfs/buninu/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
  155. package/initramfs/buninu/apps/jsgotty/NOTICE +21 -0
  156. package/initramfs/buninu/apps/jsgotty/README.en.md +294 -0
  157. package/initramfs/buninu/apps/jsgotty/README.md +296 -0
  158. package/initramfs/buninu/apps/jsgotty/client.mjs +700 -0
  159. package/initramfs/buninu/apps/jsgotty/env.sh +2 -0
  160. package/initramfs/buninu/apps/jsgotty/gotty.js +3334 -0
  161. package/initramfs/buninu/apps/jsgotty/node_modules/.package-lock.json +35 -0
  162. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
  163. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
  164. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
  165. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
  166. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
  167. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  168. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
  169. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
  170. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
  171. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
  172. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
  173. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
  174. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
  175. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
  176. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
  177. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
  178. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
  179. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
  180. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
  181. package/initramfs/buninu/apps/jsgotty/node_modules/ws/LICENSE +20 -0
  182. package/initramfs/buninu/apps/jsgotty/node_modules/ws/README.md +548 -0
  183. package/initramfs/buninu/apps/jsgotty/node_modules/ws/browser.js +8 -0
  184. package/initramfs/buninu/apps/jsgotty/node_modules/ws/index.js +22 -0
  185. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
  186. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
  187. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
  188. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
  189. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
  190. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
  191. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
  192. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
  193. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
  194. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
  195. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
  196. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
  197. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
  198. package/initramfs/buninu/apps/jsgotty/node_modules/ws/package.json +70 -0
  199. package/initramfs/buninu/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
  200. package/initramfs/buninu/apps/jsgotty/package-lock.json +46 -0
  201. package/initramfs/buninu/apps/jsgotty/package.json +19 -0
  202. package/initramfs/buninu/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
  203. package/initramfs/buninu/apps/jsgotty/patches/windowsTerminal.js +204 -0
  204. package/initramfs/buninu/apps/jsgotty/rz.js +199 -0
  205. package/initramfs/buninu/apps/jsgotty/single-exe/README.md +384 -0
  206. package/initramfs/buninu/apps/jsgotty/single-exe/assetsHelper.js +371 -0
  207. package/initramfs/buninu/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
  208. package/initramfs/buninu/apps/jsgotty/single-exe/assetsPacker.js +218 -0
  209. package/initramfs/buninu/apps/jsgotty/single-exe/compiled.js +498 -0
  210. package/initramfs/buninu/apps/jsgotty/single-exe/entry.mjs +23 -0
  211. package/initramfs/buninu/apps/jsgotty/single-exe/packAssets.sh +7 -0
  212. package/initramfs/buninu/apps/jsgotty/static/css/index.css +13 -0
  213. package/initramfs/buninu/apps/jsgotty/static/css/kitty.css +61 -0
  214. package/initramfs/buninu/apps/jsgotty/static/css/xterm.css +218 -0
  215. package/initramfs/buninu/apps/jsgotty/static/css/xterm_customize.css +35 -0
  216. package/initramfs/buninu/apps/jsgotty/static/favicon.ico +0 -0
  217. package/initramfs/buninu/apps/jsgotty/static/help.md +125 -0
  218. package/initramfs/buninu/apps/jsgotty/static/icon.svg +66 -0
  219. package/initramfs/buninu/apps/jsgotty/static/icon_192.png +0 -0
  220. package/initramfs/buninu/apps/jsgotty/static/index.html +164 -0
  221. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js +31537 -0
  222. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
  223. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.map +1 -0
  224. package/initramfs/buninu/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
  225. package/initramfs/buninu/apps/jsgotty/static/js/kitty.js +1101 -0
  226. package/initramfs/buninu/apps/jsgotty/static/js/windows_bridge.js +194 -0
  227. package/initramfs/buninu/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
  228. package/initramfs/buninu/apps/jsgotty/static/js/zmodem.js +1 -0
  229. package/initramfs/buninu/apps/jsgotty/static/manifest.json +15 -0
  230. package/initramfs/buninu/apps/jsgotty/sz.js +273 -0
  231. package/initramfs/buninu/apps/jsgotty/tests/kitty-order.test.js +58 -0
  232. package/initramfs/buninu/apps/jsgotty/tests/websocket-origin.test.js +54 -0
  233. package/initramfs/buninu/apps/jsgotty/viu.mjs +422 -0
  234. package/initramfs/buninu/apps/jsgotty/wgotty +62 -0
  235. package/initramfs/buninu/apps/jsgotty/windows-bridge-node.js +60 -0
  236. package/initramfs/buninu/apps/jsgotty/zmodem-node.js +262 -0
  237. package/initramfs/buninu/apps/jsmdcui/CHANGELOG.md +1118 -0
  238. package/initramfs/buninu/apps/jsmdcui/LICENSE +22 -0
  239. package/initramfs/buninu/apps/jsmdcui/README.md +1283 -0
  240. package/initramfs/buninu/apps/jsmdcui/cdp-maze.js +141 -0
  241. package/initramfs/buninu/apps/jsmdcui/clean.sh +9 -0
  242. package/initramfs/buninu/apps/jsmdcui/demos/basic.jpg +0 -0
  243. package/initramfs/buninu/apps/jsmdcui/demos/chinese.md +32 -0
  244. package/initramfs/buninu/apps/jsmdcui/demos/event.md +170 -0
  245. package/initramfs/buninu/apps/jsmdcui/demos/good.jpg +0 -0
  246. package/initramfs/buninu/apps/jsmdcui/demos/image-processor.md +366 -0
  247. package/initramfs/buninu/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
  248. package/initramfs/buninu/apps/jsmdcui/demos/img-change.md +73 -0
  249. package/initramfs/buninu/apps/jsmdcui/demos/imgtool-zh.md +298 -0
  250. package/initramfs/buninu/apps/jsmdcui/demos/imgtool.md +298 -0
  251. package/initramfs/buninu/apps/jsmdcui/demos/maze.md +149 -0
  252. package/initramfs/buninu/apps/jsmdcui/demos/reactive.md +40 -0
  253. package/initramfs/buninu/apps/jsmdcui/demos/reader.md +513 -0
  254. package/initramfs/buninu/apps/jsmdcui/demos/select.md +63 -0
  255. package/initramfs/buninu/apps/jsmdcui/demos/todo-zh.md +190 -0
  256. package/initramfs/buninu/apps/jsmdcui/demos/todo.md +191 -0
  257. package/initramfs/buninu/apps/jsmdcui/edit +9 -0
  258. package/initramfs/buninu/apps/jsmdcui/jsmdcui.sh +16 -0
  259. package/initramfs/buninu/apps/jsmdcui/llm-maze.txt +94 -0
  260. package/initramfs/buninu/apps/jsmdcui/package.json +29 -0
  261. package/initramfs/buninu/apps/jsmdcui/project_structure.txt +35 -0
  262. package/initramfs/buninu/apps/jsmdcui/runmd.mjs +1140 -0
  263. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
  264. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
  265. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
  266. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
  267. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
  268. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
  269. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
  270. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
  271. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
  272. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
  273. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
  274. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
  275. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
  276. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
  277. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
  278. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
  279. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
  280. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
  281. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
  282. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
  283. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
  284. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
  285. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
  286. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
  287. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
  288. package/initramfs/buninu/apps/jsmdcui/runtime/help/actions.md +161 -0
  289. package/initramfs/buninu/apps/jsmdcui/runtime/help/cdp.md +130 -0
  290. package/initramfs/buninu/apps/jsmdcui/runtime/help/colors.md +421 -0
  291. package/initramfs/buninu/apps/jsmdcui/runtime/help/commands.md +161 -0
  292. package/initramfs/buninu/apps/jsmdcui/runtime/help/copypaste.md +149 -0
  293. package/initramfs/buninu/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
  294. package/initramfs/buninu/apps/jsmdcui/runtime/help/help.md +1283 -0
  295. package/initramfs/buninu/apps/jsmdcui/runtime/help/keybindings.md +355 -0
  296. package/initramfs/buninu/apps/jsmdcui/runtime/help/linter.md +90 -0
  297. package/initramfs/buninu/apps/jsmdcui/runtime/help/options.md +709 -0
  298. package/initramfs/buninu/apps/jsmdcui/runtime/help/plugins.md +544 -0
  299. package/initramfs/buninu/apps/jsmdcui/runtime/help/tutorial.md +112 -0
  300. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1263 -0
  301. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +203 -0
  302. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
  303. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
  304. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
  305. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
  306. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
  307. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
  308. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
  309. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
  310. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
  311. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
  312. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
  313. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
  314. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/README.md +63 -0
  315. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
  316. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
  317. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
  318. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
  319. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
  320. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
  321. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
  322. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
  323. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
  324. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
  325. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
  326. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
  327. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
  328. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
  329. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
  330. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
  331. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
  332. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
  333. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
  334. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
  335. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
  336. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
  337. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
  338. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
  339. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
  340. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
  341. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
  342. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
  343. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
  344. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
  345. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
  346. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
  347. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
  348. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
  349. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
  350. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
  351. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
  352. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
  353. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
  354. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
  355. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
  356. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
  357. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
  358. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
  359. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
  360. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
  361. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
  362. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
  363. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
  364. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
  365. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
  366. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
  367. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
  368. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
  369. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
  370. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
  371. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
  372. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
  373. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
  374. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
  375. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
  376. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
  377. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
  378. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
  379. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
  380. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
  381. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
  382. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
  383. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
  384. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
  385. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
  386. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
  387. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
  388. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
  389. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
  390. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
  391. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
  392. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
  393. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
  394. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
  395. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
  396. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
  397. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
  398. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
  399. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
  400. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/markdown.yaml +65 -0
  401. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
  402. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
  403. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
  404. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
  405. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
  406. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
  407. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
  408. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
  409. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
  410. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
  411. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
  412. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
  413. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
  414. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
  415. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
  416. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
  417. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
  418. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
  419. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
  420. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
  421. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
  422. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
  423. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
  424. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
  425. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
  426. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
  427. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
  428. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
  429. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
  430. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
  431. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
  432. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
  433. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
  434. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
  435. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
  436. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
  437. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
  438. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
  439. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
  440. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
  441. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
  442. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
  443. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
  444. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
  445. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
  446. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
  447. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
  448. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
  449. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
  450. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
  451. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
  452. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
  453. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
  454. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
  455. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
  456. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
  457. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
  458. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
  459. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
  460. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
  461. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
  462. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
  463. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
  464. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
  465. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
  466. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
  467. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
  468. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
  469. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
  470. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
  471. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
  472. package/initramfs/buninu/apps/jsmdcui/single-exe/README.md +396 -0
  473. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsHelper.js +371 -0
  474. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
  475. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsPacker.js +218 -0
  476. package/initramfs/buninu/apps/jsmdcui/single-exe/compiled.js +498 -0
  477. package/initramfs/buninu/apps/jsmdcui/single-exe/entry.mjs +17 -0
  478. package/initramfs/buninu/apps/jsmdcui/single-exe/packAssets.sh +7 -0
  479. package/initramfs/buninu/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
  480. package/initramfs/buninu/apps/jsmdcui/src/buffer/backup.js +165 -0
  481. package/initramfs/buninu/apps/jsmdcui/src/buffer/buffer.js +126 -0
  482. package/initramfs/buninu/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
  483. package/initramfs/buninu/apps/jsmdcui/src/buffer/loc.js +38 -0
  484. package/initramfs/buninu/apps/jsmdcui/src/buffer/message.js +29 -0
  485. package/initramfs/buninu/apps/jsmdcui/src/build-args.js +40 -0
  486. package/initramfs/buninu/apps/jsmdcui/src/config/clean.js +172 -0
  487. package/initramfs/buninu/apps/jsmdcui/src/config/colorscheme.js +99 -0
  488. package/initramfs/buninu/apps/jsmdcui/src/config/config.js +125 -0
  489. package/initramfs/buninu/apps/jsmdcui/src/config/defaults.js +109 -0
  490. package/initramfs/buninu/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
  491. package/initramfs/buninu/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
  492. package/initramfs/buninu/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
  493. package/initramfs/buninu/apps/jsmdcui/src/cui/identity.mjs +26 -0
  494. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
  495. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
  496. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
  497. package/initramfs/buninu/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
  498. package/initramfs/buninu/apps/jsmdcui/src/cui/rpc.mjs +1554 -0
  499. package/initramfs/buninu/apps/jsmdcui/src/cui/server.mjs +128 -0
  500. package/initramfs/buninu/apps/jsmdcui/src/cui/table-render.mjs +286 -0
  501. package/initramfs/buninu/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
  502. package/initramfs/buninu/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
  503. package/initramfs/buninu/apps/jsmdcui/src/cui/template-components.mjs +253 -0
  504. package/initramfs/buninu/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
  505. package/initramfs/buninu/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
  506. package/initramfs/buninu/apps/jsmdcui/src/display/ansi-style.js +60 -0
  507. package/initramfs/buninu/apps/jsmdcui/src/highlight/highlighter.js +243 -0
  508. package/initramfs/buninu/apps/jsmdcui/src/highlight/parser.js +225 -0
  509. package/initramfs/buninu/apps/jsmdcui/src/index.js +9586 -0
  510. package/initramfs/buninu/apps/jsmdcui/src/lua/engine.js +68 -0
  511. package/initramfs/buninu/apps/jsmdcui/src/platform/archive.js +50 -0
  512. package/initramfs/buninu/apps/jsmdcui/src/platform/clipboard.js +278 -0
  513. package/initramfs/buninu/apps/jsmdcui/src/platform/commands.js +221 -0
  514. package/initramfs/buninu/apps/jsmdcui/src/platform/terminal.js +5 -0
  515. package/initramfs/buninu/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
  516. package/initramfs/buninu/apps/jsmdcui/src/plugins/manager.js +674 -0
  517. package/initramfs/buninu/apps/jsmdcui/src/runtime/encodings.js +10 -0
  518. package/initramfs/buninu/apps/jsmdcui/src/runtime/registry.js +134 -0
  519. package/initramfs/buninu/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
  520. package/initramfs/buninu/apps/jsmdcui/src/screen/events.js +263 -0
  521. package/initramfs/buninu/apps/jsmdcui/src/screen/screen.js +249 -0
  522. package/initramfs/buninu/apps/jsmdcui/src/screen/vt100.js +571 -0
  523. package/initramfs/buninu/apps/jsmdcui/src/shell/shell.js +70 -0
  524. package/initramfs/buninu/apps/jsmdcui/testapp.md +78 -0
  525. package/initramfs/buninu/apps/jsmdcui/tests/assets-helper.test.js +150 -0
  526. package/initramfs/buninu/apps/jsmdcui/tests/backup.test.js +158 -0
  527. package/initramfs/buninu/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
  528. package/initramfs/buninu/apps/jsmdcui/tests/cdp-security.test.js +32 -0
  529. package/initramfs/buninu/apps/jsmdcui/tests/cdp-websocket-test.html +46 -0
  530. package/initramfs/buninu/apps/jsmdcui/tests/cmphex3b64.js +95 -0
  531. package/initramfs/buninu/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
  532. package/initramfs/buninu/apps/jsmdcui/tests/config-settings.test.js +52 -0
  533. package/initramfs/buninu/apps/jsmdcui/tests/demo.test.js +448 -0
  534. package/initramfs/buninu/apps/jsmdcui/tests/docs-sync.test.js +14 -0
  535. package/initramfs/buninu/apps/jsmdcui/tests/fence-events.test.js +1293 -0
  536. package/initramfs/buninu/apps/jsmdcui/tests/heading-ids.test.js +559 -0
  537. package/initramfs/buninu/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
  538. package/initramfs/buninu/apps/jsmdcui/tests/id-collision.test.js +514 -0
  539. package/initramfs/buninu/apps/jsmdcui/tests/jmigt.js +16 -0
  540. package/initramfs/buninu/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
  541. package/initramfs/buninu/apps/jsmdcui/tests/key-event.md +10 -0
  542. package/initramfs/buninu/apps/jsmdcui/tests/kitty-demo.md +184 -0
  543. package/initramfs/buninu/apps/jsmdcui/tests/kitty-images.test.js +288 -0
  544. package/initramfs/buninu/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
  545. package/initramfs/buninu/apps/jsmdcui/tests/platform-commands.test.js +18 -0
  546. package/initramfs/buninu/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
  547. package/initramfs/buninu/apps/jsmdcui/tests/pty-demo.js +492 -0
  548. package/initramfs/buninu/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
  549. package/initramfs/buninu/apps/jsmdcui/tests/table-render.test.js +150 -0
  550. package/initramfs/buninu/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
  551. package/initramfs/buninu/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
  552. package/initramfs/buninu/apps/jsmdcui/tests/template-components.test.js +422 -0
  553. package/initramfs/buninu/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
  554. package/initramfs/buninu/apps/jsmdcui/tests/textarea.md +8 -0
  555. package/initramfs/buninu/apps/jsmdcui/tests/tui-links.test.js +298 -0
  556. package/initramfs/buninu/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
  557. package/initramfs/buninu/apps/jsmdcui/tests/wui.test.js +108 -0
  558. package/initramfs/buninu/apps/jsmdcui/tests/wv-client.js +96 -0
  559. package/initramfs/buninu/apps/jsmdcui/tui +7 -0
  560. package/initramfs/buninu/apps/jsmdcui/wui +9 -0
  561. package/initramfs/buninu/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
  562. package/initramfs/buninu/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
  563. package/initramfs/buninu/apps/musl-la/LICENSE_musl.txt +193 -0
  564. package/initramfs/buninu/apps/musl-la/NOTICE +41 -0
  565. package/initramfs/buninu/apps/musl-la/ld-musl-aarch64.so.1 +0 -0
  566. package/initramfs/buninu/apps/musl-la/libgcc_s.so.1 +0 -0
  567. package/initramfs/buninu/apps/musl-la/libstdc++.so.6 +0 -0
  568. package/initramfs/buninu/apps/musl-la/musl-la.sh +36 -0
  569. package/initramfs/buninu/apps/native-bridge/native-bridge.js +199 -0
  570. package/initramfs/buninu/apps/native-bridge/package.json +8 -0
  571. package/initramfs/buninu/apps/tts/tts.js +214 -0
  572. package/initramfs/buninu/apps/xclip/xclip.js +121 -0
  573. package/initramfs/buninu/apps/xdg-open/xdg-open.js +151 -0
  574. package/initramfs/buninu/bin/bun.bat +37 -0
  575. package/initramfs/buninu/bin/bun.sh +57 -0
  576. package/initramfs/buninu/bin/buninu-help.bat +4 -0
  577. package/initramfs/buninu/bin/buninu-help.sh +7 -0
  578. package/initramfs/buninu/bin/bunmsh.bat +3 -0
  579. package/initramfs/buninu/bin/bunmsh.sh +5 -0
  580. package/initramfs/buninu/bin/bunx.bat +3 -0
  581. package/initramfs/buninu/bin/glow.bat +3 -0
  582. package/initramfs/buninu/bin/glow.sh +5 -0
  583. package/initramfs/buninu/bin/init.js +779 -0
  584. package/initramfs/buninu/bin/install.js +570 -0
  585. package/initramfs/buninu/bin/jmi.bat +3 -0
  586. package/initramfs/buninu/bin/jmi.sh +5 -0
  587. package/initramfs/buninu/bin/jsgotty.bat +3 -0
  588. package/initramfs/buninu/bin/jsgotty.sh +5 -0
  589. package/initramfs/buninu/bin/jsmdcui.bat +11 -0
  590. package/initramfs/buninu/bin/libsh-loader.c +135 -0
  591. package/initramfs/buninu/bin/libsh-loader.so +0 -0
  592. package/initramfs/buninu/bin/multicall.sh +103 -0
  593. package/initramfs/buninu/bin/native-bridge.bat +3 -0
  594. package/initramfs/buninu/bin/rz.bat +3 -0
  595. package/initramfs/buninu/bin/rz.sh +5 -0
  596. package/initramfs/buninu/bin/shc.js +5 -0
  597. package/initramfs/buninu/bin/showimg.bat +3 -0
  598. package/initramfs/buninu/bin/showimg.sh +5 -0
  599. package/initramfs/buninu/bin/switch_to_android.sh +9 -0
  600. package/initramfs/buninu/bin/switch_to_linux.sh +7 -0
  601. package/initramfs/buninu/bin/sz.bat +3 -0
  602. package/initramfs/buninu/bin/sz.sh +5 -0
  603. package/initramfs/buninu/bin/tts.bat +3 -0
  604. package/initramfs/buninu/bin/xclip.bat +3 -0
  605. package/initramfs/buninu/bin/xdg-open.bat +3 -0
  606. package/initramfs/buninu/demo-server.js +64 -0
  607. package/initramfs/buninu/icon.png +0 -0
  608. package/initramfs/buninu/package.json +59 -0
  609. package/initramfs/etc/resolv.conf +1 -0
  610. package/initramfs/init.js +339 -0
  611. package/initramfs/lib/ld-musl-x86_64.so.1 +0 -0
  612. package/initramfs/lib/libc.musl-x86_64.so.1 +0 -0
  613. package/initramfs/lib/libgcc_s.so.1 +0 -0
  614. package/initramfs/lib/libstdc++.so.6 +0 -0
  615. package/initramfs/usr/bin/env +7 -0
  616. package/package.json +42 -0
  617. package/run-qemu.sh +44 -0
  618. package/scripts/fetch.sh +26 -0
  619. package/scripts/pack-initramfs.sh +41 -0
  620. package/test/build-init-bootstrap.sh +23 -0
  621. package/test/init-bootstrap.c +55 -0
@@ -0,0 +1,1554 @@
1
+
2
+
3
+
4
+
5
+
6
+ const crlf="\r\n"
7
+
8
+ let apilist = new Map()
9
+
10
+ // Endpoint every frontend rpc fetch posts to. Returns the previous one.
11
+ let rpcBackend = "rpc"
12
+
13
+ export function switchBackend( endpoint )
14
+ {
15
+ const previous = rpcBackend ;
16
+
17
+ rpcBackend = ( endpoint || "rpc" ) + "" ;
18
+
19
+ return previous ;
20
+ }
21
+
22
+ // rpcBackend starting with "unix"/"UNIX" (e.g. "unix:/path/to/sock") names a
23
+ // Bun unix socket instead of an http path. fetch() rejects the unix: scheme
24
+ // outright, so the request goes to a fixed dummy URL and the real path comes
25
+ // from fetch's `unix` option instead; routing here is by func name in the
26
+ // JSON body, not by HTTP path, so the dummy URL costs nothing.
27
+ const rpcFetchUrl = () =>
28
+ ( rpcBackend.slice(0,4) === "unix" || rpcBackend.slice(0,4) === "UNIX" )
29
+ ? "http://unix/rpc" : rpcBackend ;
30
+
31
+ // decodeURIComponent undoes new URL()'s percent-encoding of the path, which
32
+ // otherwise turns a leading NUL byte (a Linux abstract-namespace socket name,
33
+ // e.g. "unix:\0name") into the three literal characters "%00" instead of the
34
+ // single byte 0x00 Bun's `unix` option needs to actually reach it.
35
+ const rpcFetchOpt = () =>
36
+ ( rpcBackend.slice(0,4) === "unix" || rpcBackend.slice(0,4) === "UNIX" )
37
+ ? { unix: decodeURIComponent(new URL(rpcBackend).pathname) } : {} ;
38
+
39
+ export const jss = JSON.stringify
40
+
41
+ const webMdcuiIdSource = String.raw`[_\p{L}\p{N}][_\p{L}\p{M}\p{N}:-]*`;
42
+ const webMdcuiIdPattern = new RegExp(`^${webMdcuiIdSource}$`, "u");
43
+ const webDollarIdentityPattern = new RegExp(
44
+ `^([A-Za-z_][\\w:-]*)?(?:#(${webMdcuiIdSource}))?((?:\\.[A-Za-z_][\\w:-]*)*)$`,
45
+ "u",
46
+ );
47
+
48
+ function parseDollarIdentity(input, { selector = false } = {})
49
+ {
50
+ const text = String(input ?? "").trim();
51
+ const match = text.match(webDollarIdentityPattern);
52
+ if (!match || (!match[1] && !match[2] && !match[3])) return null;
53
+ if (!selector && !match[1]) return null;
54
+ return {
55
+ tag: match[1] || null,
56
+ id: match[2] || null,
57
+ classes: match[3] ? match[3].slice(1).split(".") : [],
58
+ };
59
+ }
60
+
61
+ function webDollarObjectId(input)
62
+ {
63
+ if (input === null || typeof input !== "object") return null;
64
+ const id = String(input.id ?? "");
65
+ return webMdcuiIdPattern.test(id) ? id : null;
66
+ }
67
+
68
+ function matchesDollarIdentity(identity, selector)
69
+ {
70
+ if (selector.tag && identity.tag !== selector.tag) return false;
71
+ if (selector.id && identity.id !== selector.id) return false;
72
+ return selector.classes.every(name => identity.classes.includes(name));
73
+ }
74
+
75
+ function findMarkdownCodeElement(documentObject, selector)
76
+ {
77
+ for (const code of documentObject?.querySelectorAll?.("pre > code") ?? []) {
78
+ for (const className of code.classList ?? []) {
79
+ if (!className.startsWith("language-")) continue;
80
+ const identity = parseDollarIdentity(className.slice("language-".length));
81
+ if (identity && matchesDollarIdentity(identity, selector)) return code;
82
+ }
83
+ }
84
+ return null;
85
+ }
86
+
87
+ function findWebDollarElement(documentObject, selectorText, selector)
88
+ {
89
+ if (selector?.id) {
90
+ const byId = documentObject?.getElementById?.(selector.id);
91
+ if (byId) {
92
+ const identity = {
93
+ tag: byId.getAttribute?.("data-mdcui-tag")
94
+ || String(byId.tagName ?? "").toLowerCase()
95
+ || null,
96
+ id: byId.id || null,
97
+ classes: [...(byId.classList ?? [])],
98
+ };
99
+ if (matchesDollarIdentity(identity, selector)) return byId;
100
+ }
101
+ }
102
+
103
+ if (!selector?.id) {
104
+ try {
105
+ const direct = documentObject?.querySelector?.(String(selectorText));
106
+ if (direct) return direct;
107
+ } catch {}
108
+ }
109
+
110
+ for (const element of documentObject?.querySelectorAll?.("[data-mdcui-tag]") ?? []) {
111
+ const identity = {
112
+ tag: element.getAttribute?.("data-mdcui-tag") || null,
113
+ id: element.id || null,
114
+ classes: [...(element.classList ?? [])],
115
+ };
116
+ if (matchesDollarIdentity(identity, selector)) return element;
117
+ }
118
+
119
+ return findMarkdownCodeElement(documentObject, selector);
120
+ }
121
+
122
+ function webDollarValue(element)
123
+ {
124
+ if (element && "value" in element) return String(element.value ?? "");
125
+ return String(element?.textContent ?? "").replace(/\n$/, "");
126
+ }
127
+
128
+ function isWebHeading(element)
129
+ {
130
+ return /^h[1-6]$/i.test(String(element?.tagName ?? ""));
131
+ }
132
+
133
+ function semanticWebHeadingHtml(heading)
134
+ {
135
+ const copy = heading?.cloneNode?.(true);
136
+ if (!copy) return String(heading?.innerHTML ?? "");
137
+ for (const toggle of copy.querySelectorAll?.(".mdcui-heading-toggle") ?? [])
138
+ toggle.replaceWith?.(...toggle.childNodes);
139
+ return String(copy.innerHTML ?? "");
140
+ }
141
+
142
+ function firstWebHeadingTextNode(root)
143
+ {
144
+ for (const child of root?.childNodes ?? []) {
145
+ if (child.nodeType === 3 && /\S/u.test(String(child.textContent ?? "")))
146
+ return child;
147
+ const nested = firstWebHeadingTextNode(child);
148
+ if (nested) return nested;
149
+ }
150
+ return null;
151
+ }
152
+
153
+ let webGraphemeSegmenter;
154
+ function firstWebGraphemeCluster(value)
155
+ {
156
+ const input = String(value ?? "");
157
+ if (!input) return "";
158
+
159
+ if (webGraphemeSegmenter === undefined) {
160
+ try {
161
+ webGraphemeSegmenter = typeof Intl === "object"
162
+ && typeof Intl.Segmenter === "function"
163
+ ? new Intl.Segmenter(undefined, { granularity: "grapheme" })
164
+ : null;
165
+ } catch {
166
+ webGraphemeSegmenter = null;
167
+ }
168
+ }
169
+ const segmented = webGraphemeSegmenter
170
+ ?.segment(input)?.[Symbol.iterator]?.().next?.().value?.segment;
171
+ if (segmented) return segmented;
172
+
173
+ const points = [...input];
174
+ let result = points[0] ?? "";
175
+ let index = 1;
176
+ const isExtend = character => {
177
+ const point = character.codePointAt(0);
178
+ return /\p{Mark}/u.test(character)
179
+ || (point >= 0xFE00 && point <= 0xFE0F)
180
+ || (point >= 0xE0100 && point <= 0xE01EF)
181
+ || (point >= 0x1F3FB && point <= 0x1F3FF)
182
+ || (point >= 0xE0020 && point <= 0xE007F);
183
+ };
184
+ const isRegionalIndicator = character => {
185
+ const point = character?.codePointAt?.(0);
186
+ return point >= 0x1F1E6 && point <= 0x1F1FF;
187
+ };
188
+
189
+ if (isRegionalIndicator(points[0]) && isRegionalIndicator(points[1])) {
190
+ result += points[1];
191
+ index = 2;
192
+ }
193
+ while (index < points.length) {
194
+ if (isExtend(points[index])) {
195
+ result += points[index++];
196
+ continue;
197
+ }
198
+ if (points[index] === "\u200D" && index + 1 < points.length) {
199
+ result += points[index] + points[index + 1];
200
+ index += 2;
201
+ continue;
202
+ }
203
+ break;
204
+ }
205
+ return result;
206
+ }
207
+
208
+ function ensureWebHeadingToggle(heading)
209
+ {
210
+ if (!isWebHeading(heading) || !heading.id) return null;
211
+ const existing = heading.querySelector?.(".mdcui-heading-toggle");
212
+ if (existing) {
213
+ if (existing.style) existing.style.cursor = "pointer";
214
+ return existing;
215
+ }
216
+
217
+ const textNode = firstWebHeadingTextNode(heading);
218
+ const text = String(textNode?.textContent ?? "");
219
+ const start = text.search(/\S/u);
220
+ if (!textNode || start < 0) return null;
221
+ const character = firstWebGraphemeCluster(text.slice(start));
222
+ const documentObject = heading.ownerDocument;
223
+ const range = documentObject?.createRange?.();
224
+ const toggle = documentObject?.createElement?.("span");
225
+ if (!range || !toggle) return null;
226
+
227
+ toggle.className = "mdcui-heading-toggle";
228
+ toggle.setAttribute?.("role", "button");
229
+ toggle.setAttribute?.("tabindex", "0");
230
+ toggle.setAttribute?.("aria-expanded", "true");
231
+ if (toggle.style) toggle.style.cursor = "pointer";
232
+ range.setStart(textNode, start);
233
+ range.setEnd(textNode, start + character.length);
234
+ range.surroundContents(toggle);
235
+ return toggle;
236
+ }
237
+
238
+ function webIdStore(documentObject)
239
+ {
240
+ if (!(documentObject?._mdcuiIdStore instanceof Map))
241
+ documentObject._mdcuiIdStore = new Map();
242
+ return documentObject._mdcuiIdStore;
243
+ }
244
+
245
+ function webIdRecord(documentObject, id)
246
+ {
247
+ const store = webIdStore(documentObject);
248
+ let record = store.get(id);
249
+ if (!record) {
250
+ record = {};
251
+ store.set(id, record);
252
+ }
253
+ return record;
254
+ }
255
+
256
+ function compileWebTemplateComponentRender(source, templateType = "md")
257
+ {
258
+ return new Function(
259
+ "data = {}",
260
+ templateType === "js"
261
+ ? String(source ?? "")
262
+ : `return \`${String(source ?? "")}\`;`,
263
+ );
264
+ }
265
+
266
+ export function installWebTemplateComponents(documentObject = globalThis.document)
267
+ {
268
+ const payload = documentObject?.getElementById?.("mdcui-template-components");
269
+ if (!payload || payload.__mdcuiInstalled) return webIdStore(documentObject);
270
+ payload.__mdcuiInstalled = true;
271
+
272
+ let headings;
273
+ try {
274
+ headings = JSON.parse(String(payload.textContent ?? "[]"));
275
+ } catch {
276
+ return webIdStore(documentObject);
277
+ }
278
+ if (!Array.isArray(headings)) return webIdStore(documentObject);
279
+
280
+ for (const item of headings) {
281
+ const id = String(item?.id ?? "");
282
+ if (!id) continue;
283
+ const record = webIdRecord(documentObject, id);
284
+ if (!record.data || typeof record.data !== "object")
285
+ record.data = Object.create(null);
286
+ if (item.data && typeof item.data === "object")
287
+ Object.assign(record.data, item.data);
288
+
289
+ record.components = Array.isArray(item.components)
290
+ ? item.components.map(serialized => {
291
+ const source = String(serialized?.source ?? "");
292
+ const templateType = serialized?.templateType === "js" ? "js" : "md";
293
+ return {
294
+ source,
295
+ templateType,
296
+ initialData: serialized?.initialData ?? null,
297
+ last: String(serialized?.last ?? ""),
298
+ data: record.data,
299
+ id,
300
+ index: Number(serialized?.index) || 0,
301
+ render: compileWebTemplateComponentRender(source, templateType),
302
+ }})
303
+ : [];
304
+ }
305
+ return webIdStore(documentObject);
306
+ }
307
+
308
+ function webUserData(documentObject, id, element)
309
+ {
310
+ if (!documentObject || !id) return undefined;
311
+ const record = webIdRecord(documentObject, id);
312
+ if (!record.data || typeof record.data !== "object")
313
+ record.data = Object.create(null);
314
+ if (element) element.mdcuiData = record.data;
315
+ return record.data;
316
+ }
317
+
318
+ function removeWebUserData(documentObject, id, element, keys)
319
+ {
320
+ if (!documentObject || !id) return;
321
+ const store = webIdStore(documentObject);
322
+ const record = store.get(id);
323
+ if (!record?.data) return;
324
+ if (keys.length === 0) {
325
+ delete record.data;
326
+ if (element) delete element.mdcuiData;
327
+ } else {
328
+ for (const key of keys) delete record.data[key];
329
+ }
330
+ if (Object.keys(record).length === 0) store.delete(id);
331
+ }
332
+
333
+ const renderingWebComponentRecords = new WeakSet();
334
+ const webComponentRenderRevisions = new WeakMap();
335
+
336
+ function webComponentMarkdownHtml(markdown)
337
+ {
338
+ const source = String(markdown ?? "");
339
+ if (typeof Bun !== "undefined" && Bun?.markdown?.html)
340
+ return renderWebComponentMarkdownOnServer(source);
341
+ return fetch(rpcFetchUrl(), { ...rpcFetchOpt(),
342
+ method: "POST",
343
+ headers: { "content-type": "application/json" },
344
+ body: JSON.stringify(["_mdcui_render_markdown", [source]]),
345
+ }).then(response => response.json()).then(result => String(result ?? ""));
346
+ }
347
+
348
+ function renderWebComponentMarkdownOnServer(markdown)
349
+ {
350
+ let html = String(Bun.markdown.html(String(markdown ?? "")));
351
+ html = html.replaceAll(
352
+ 'class="task-list-item-checkbox" disabled',
353
+ 'class="task-list-item-checkbox"',
354
+ );
355
+ return html.replace(
356
+ /<table\b[^>]*>[\s\S]*?<\/table>/giu,
357
+ table => table
358
+ .replace(
359
+ /^<table\b([^>]*)>/iu,
360
+ (opening, attributes) => /\bcontenteditable\s*=/iu.test(attributes)
361
+ ? opening
362
+ : `<table${attributes} contenteditable="true">`,
363
+ )
364
+ .replace(
365
+ /(<t[dh]\b[^>]*>)(\s*)\[( |x|X)\]/giu,
366
+ (whole, opening, whitespace, state) =>
367
+ `${opening}${whitespace}<input type="checkbox"`
368
+ + `${state === " " ? "" : " checked"}>`,
369
+ ),
370
+ );
371
+ }
372
+
373
+ function replaceWebComponentMarkdown(wrapper, component, markdown)
374
+ {
375
+ const revision = (webComponentRenderRevisions.get(component) ?? 0) + 1;
376
+ webComponentRenderRevisions.set(component, revision);
377
+ const converted = webComponentMarkdownHtml(markdown);
378
+ const apply = html => {
379
+ if (webComponentRenderRevisions.get(component) !== revision) return;
380
+ wrapper.innerHTML = String(html ?? "");
381
+ component.last = markdown;
382
+ };
383
+ if (converted && typeof converted.then === "function")
384
+ converted.then(apply).catch(() => {});
385
+ else apply(converted);
386
+ }
387
+
388
+ function renderWebHeadingComponents(documentObject, id)
389
+ {
390
+ const record = webIdStore(documentObject).get(id);
391
+ if (!record || renderingWebComponentRecords.has(record) || !Array.isArray(record.components))
392
+ return;
393
+ renderingWebComponentRecords.add(record);
394
+ try {
395
+ const wrappers = [...(documentObject.querySelectorAll?.(".mdcui-template") ?? [])];
396
+ for (const component of record.components) {
397
+ if (!component || typeof component.render !== "function") continue;
398
+ const rendered = String(component.render.call(component, record.data) ?? "");
399
+ if (rendered === component.last) continue;
400
+ const wrapper = wrappers.find(element =>
401
+ String(element.getAttribute?.("data-mdcui-heading-id") ?? "") === id
402
+ && Number(element.getAttribute?.("data-mdcui-component-index"))
403
+ === component.index
404
+ );
405
+ if (!wrapper) continue;
406
+ replaceWebComponentMarkdown(wrapper, component, rendered);
407
+ }
408
+ } finally {
409
+ renderingWebComponentRecords.delete(record);
410
+ }
411
+ }
412
+
413
+ function hideWebHeadingSection(documentObject, heading)
414
+ {
415
+ if (!isWebHeading(heading) || !heading.id) return false;
416
+ const store = webIdStore(documentObject);
417
+ if (store.get(heading.id)?.headingVisibility?.hidden) return true;
418
+
419
+ const section = heading.parentElement;
420
+ const parent = section?.parentElement;
421
+ if (String(section?.tagName ?? "").toLowerCase() !== "section" || !parent) return false;
422
+
423
+ heading.remove?.();
424
+ parent.insertBefore?.(heading, section);
425
+ section.hidden = true;
426
+ heading.querySelector?.(".mdcui-heading-toggle")
427
+ ?.setAttribute?.("aria-expanded", "false");
428
+ webIdRecord(documentObject, heading.id).headingVisibility = {
429
+ hidden: true,
430
+ section,
431
+ };
432
+ return true;
433
+ }
434
+
435
+ function showWebHeadingSection(documentObject, heading)
436
+ {
437
+ if (!isWebHeading(heading) || !heading.id) return false;
438
+ const store = webIdStore(documentObject);
439
+ const record = store.get(heading.id);
440
+ const state = record?.headingVisibility;
441
+ if (!state?.hidden) return true;
442
+
443
+ const section = state.section;
444
+ section.hidden = false;
445
+ heading.remove?.();
446
+ section.insertBefore?.(heading, section.firstChild ?? null);
447
+ heading.querySelector?.(".mdcui-heading-toggle")
448
+ ?.setAttribute?.("aria-expanded", "true");
449
+ delete record.headingVisibility;
450
+ if (Object.keys(record).length === 0) store.delete(heading.id);
451
+ return true;
452
+ }
453
+
454
+ function firstHeadingList(heading)
455
+ {
456
+ for (let sibling = heading?.nextElementSibling; sibling; sibling = sibling.nextElementSibling) {
457
+ if (isWebHeading(sibling) || String(sibling.tagName ?? "").toLowerCase() === "section")
458
+ break;
459
+ if (sibling.matches?.("ul, ol")) return sibling;
460
+ const list = sibling.querySelector?.("ul, ol");
461
+ if (list) return list;
462
+ }
463
+ return null;
464
+ }
465
+
466
+ function webHeadingImages(heading)
467
+ {
468
+ const images = [];
469
+ for (let sibling = heading?.nextElementSibling; sibling; sibling = sibling.nextElementSibling) {
470
+ if (isWebHeading(sibling) || String(sibling.tagName ?? "").toLowerCase() === "section")
471
+ break;
472
+ if (String(sibling.tagName ?? "").toLowerCase() === "img") images.push(sibling);
473
+ images.push(...(sibling.querySelectorAll?.("img") ?? []));
474
+ }
475
+ return images;
476
+ }
477
+
478
+ function directTaskCheckbox(item)
479
+ {
480
+ for (const checkbox of item?.querySelectorAll?.('input[type="checkbox"]') ?? []) {
481
+ if (checkbox.closest?.("li.task-list-item") === item) return checkbox;
482
+ }
483
+ return null;
484
+ }
485
+
486
+ function webTaskItemValue(item, checkbox)
487
+ {
488
+ const label = checkbox?.closest?.("label");
489
+ if (label && label.closest?.("li.task-list-item") === item)
490
+ return String(label.textContent ?? "").trim();
491
+
492
+ const copy = item.cloneNode?.(true);
493
+ for (const nested of copy?.querySelectorAll?.("ul, ol") ?? []) nested.remove?.();
494
+ for (const input of copy?.querySelectorAll?.('input[type="checkbox"]') ?? []) input.remove?.();
495
+ return String(copy?.textContent ?? "").trim();
496
+ }
497
+
498
+ function webHeadingValue(heading)
499
+ {
500
+ const single = String(heading?.id ?? "").startsWith("select");
501
+ const list = firstHeadingList(heading);
502
+ if (!list) return single ? null : [];
503
+
504
+ const selected = [];
505
+ for (const item of list.children ?? []) {
506
+ if (!item.matches?.("li.task-list-item")) continue;
507
+ const checkbox = directTaskCheckbox(item);
508
+ if (!checkbox?.checked) continue;
509
+ const value = webTaskItemValue(item, checkbox);
510
+ if (single) return value;
511
+ selected.push(value);
512
+ }
513
+ return single ? null : selected;
514
+ }
515
+
516
+ function directWebTaskItems(list)
517
+ {
518
+ const items = [];
519
+ for (const item of list?.children ?? []) {
520
+ if (!item.matches?.("li.task-list-item")) continue;
521
+ if (directTaskCheckbox(item)) items.push(item);
522
+ }
523
+ return items;
524
+ }
525
+
526
+ function webTaskItemSnapshot(item)
527
+ {
528
+ const checkbox = directTaskCheckbox(item);
529
+ return {
530
+ value: webTaskItemValue(item, checkbox),
531
+ checked: Boolean(checkbox?.checked),
532
+ };
533
+ }
534
+
535
+ function normalizedTaskItem(input)
536
+ {
537
+ if (input && typeof input === "object") {
538
+ return {
539
+ value: String(input.value ?? input.label ?? "").replace(/\r?\n/g, " "),
540
+ checked: Boolean(input.checked),
541
+ };
542
+ }
543
+ return {
544
+ value: String(input ?? "").replace(/\r?\n/g, " "),
545
+ checked: false,
546
+ };
547
+ }
548
+
549
+ function normalizedSpliceRange(length, argumentCount, start, deleteCount)
550
+ {
551
+ if (argumentCount === 0) return { start: 0, deleteCount: 0 };
552
+ let relativeStart = Number(start);
553
+ if (Number.isNaN(relativeStart)) relativeStart = 0;
554
+ relativeStart = Math.trunc(relativeStart);
555
+ const actualStart = relativeStart < 0
556
+ ? Math.max(length + relativeStart, 0)
557
+ : Math.min(relativeStart, length);
558
+ if (argumentCount === 1) return { start: actualStart, deleteCount: length - actualStart };
559
+ let requestedDelete = Number(deleteCount);
560
+ if (Number.isNaN(requestedDelete)) requestedDelete = 0;
561
+ requestedDelete = Math.max(0, Math.trunc(requestedDelete));
562
+ return {
563
+ start: actualStart,
564
+ deleteCount: Math.min(requestedDelete, length - actualStart),
565
+ };
566
+ }
567
+
568
+ function appendWebTaskItem(list, input, before = null)
569
+ {
570
+ const documentObject = list?.ownerDocument;
571
+ if (!documentObject?.createElement || !documentObject?.createTextNode) return false;
572
+
573
+ const itemValue = normalizedTaskItem(input);
574
+ const item = documentObject.createElement("li");
575
+ item.classList?.add("task-list-item");
576
+ const label = documentObject.createElement("label");
577
+ const checkbox = documentObject.createElement("input");
578
+ checkbox.type = "checkbox";
579
+ checkbox.classList?.add("task-list-item-checkbox");
580
+ checkbox.checked = itemValue.checked;
581
+ label.append(checkbox, documentObject.createTextNode(itemValue.value));
582
+ item.append(label);
583
+ list.insertBefore(item, before);
584
+ return true;
585
+ }
586
+
587
+ function mutateWebHeadingList(heading, method, args)
588
+ {
589
+ const list = firstHeadingList(heading);
590
+ if (!list) {
591
+ if (method === "push" || method === "unshift") return 0;
592
+ if (method === "splice") return [];
593
+ return undefined;
594
+ }
595
+
596
+ const items = directWebTaskItems(list);
597
+ if (method === "splice") {
598
+ const range = normalizedSpliceRange(items.length, args.length, args[0], args[1]);
599
+ const removed = items
600
+ .slice(range.start, range.start + range.deleteCount)
601
+ .map((item) => webTaskItemValue(item, directTaskCheckbox(item)));
602
+ const before = items[range.start] ?? null;
603
+ for (const input of args.slice(2)) appendWebTaskItem(list, input, before);
604
+ for (const item of items.slice(range.start, range.start + range.deleteCount)) item.remove?.();
605
+ return removed;
606
+ }
607
+ if (method === "pop" || method === "shift") {
608
+ const item = method === "pop" ? items.at(-1) : items[0];
609
+ if (!item) return undefined;
610
+ const value = webTaskItemValue(item, directTaskCheckbox(item));
611
+ item.remove?.();
612
+ return value;
613
+ }
614
+
615
+ if (method === "push") {
616
+ for (const input of args) appendWebTaskItem(list, input);
617
+ } else {
618
+ const before = items[0] ?? list.firstChild ?? null;
619
+ for (const input of args) appendWebTaskItem(list, input, before);
620
+ }
621
+ return directWebTaskItems(list).length;
622
+ }
623
+
624
+ function resizeWebTextarea(element)
625
+ {
626
+ if (!element || String(element.tagName ?? "").toLowerCase() !== "textarea") return;
627
+ try {
628
+ element.style.height = "auto";
629
+ element.style.height = `${element.scrollHeight}px`;
630
+ const lineHeight = Number.parseFloat(
631
+ element.ownerDocument?.defaultView?.getComputedStyle?.(element)?.lineHeight,
632
+ );
633
+ if (Number.isFinite(lineHeight) && lineHeight > 0)
634
+ element.rows = Math.max(1, Math.ceil(element.scrollHeight / lineHeight));
635
+ } catch {}
636
+ }
637
+
638
+ function installWebTextareaResize(target)
639
+ {
640
+ const documentObject = target?.document;
641
+ if (!documentObject || documentObject.__mdcuiTextareaResizeInstalled) return;
642
+ documentObject.__mdcuiTextareaResizeInstalled = true;
643
+ const resizeAll = () => {
644
+ for (const element of documentObject.querySelectorAll?.("textarea[data-mdcui-tag]") ?? [])
645
+ resizeWebTextarea(element);
646
+ };
647
+ documentObject.addEventListener?.("input", event => {
648
+ if (event.target?.matches?.("textarea[data-mdcui-tag]"))
649
+ resizeWebTextarea(event.target);
650
+ });
651
+ target.addEventListener?.("resize", resizeAll);
652
+ if (documentObject.readyState === "loading")
653
+ documentObject.addEventListener?.("DOMContentLoaded", resizeAll, { once: true });
654
+ else
655
+ queueMicrotask(resizeAll);
656
+ }
657
+
658
+ function webLinkActivationEvent(nativeEvent, anchor)
659
+ {
660
+ let defaultPrevented = Boolean(nativeEvent?.defaultPrevented);
661
+ return {
662
+ type: String(nativeEvent?.type ?? "click"),
663
+ target: anchor,
664
+ currentTarget: anchor,
665
+ originalEvent: nativeEvent,
666
+ ctrlKey: Boolean(nativeEvent?.ctrlKey),
667
+ altKey: Boolean(nativeEvent?.altKey),
668
+ shiftKey: Boolean(nativeEvent?.shiftKey),
669
+ metaKey: Boolean(nativeEvent?.metaKey),
670
+ get defaultPrevented() { return defaultPrevented; },
671
+ preventDefault() {
672
+ defaultPrevented = true;
673
+ nativeEvent?.preventDefault?.();
674
+ },
675
+ stopPropagation() { nativeEvent?.stopPropagation?.(); },
676
+ };
677
+ }
678
+
679
+ function reportWebLinkEvaluationError(target, result)
680
+ {
681
+ const message = String(result?.error ?? "Unknown error");
682
+ try {
683
+ (target?.console ?? globalThis.console)?.error?.(
684
+ `[mdcui] javascript link: ${message}`,
685
+ );
686
+ } catch {}
687
+ }
688
+
689
+ function installWebLinkContext(target)
690
+ {
691
+ const documentObject = target?.document;
692
+ if (!documentObject || documentObject.__mdcuiLinkContextInstalled) return;
693
+ documentObject.__mdcuiLinkContextInstalled = true;
694
+ documentObject.addEventListener?.("click", async nativeEvent => {
695
+ if (nativeEvent.defaultPrevented) return;
696
+ const anchor = nativeEvent.target?.closest?.("a[href]");
697
+ const href = anchor?.getAttribute?.("href") ?? "";
698
+ if (!/^javascript:/i.test(href)) return;
699
+ const event = webLinkActivationEvent(nativeEvent, anchor);
700
+ nativeEvent.preventDefault?.();
701
+ const reportedFailures = new Set();
702
+ const reportFailure = result => {
703
+ if (!result || typeof result !== "object" || result.ok !== false) return;
704
+ if (reportedFailures.has(result)) return;
705
+ reportedFailures.add(result);
706
+ reportWebLinkEvaluationError(target, result);
707
+ };
708
+ const result = await evalFront(
709
+ target.__mdcuiFrontModule ?? {},
710
+ decodeJavascriptUrlSource(href),
711
+ { event, target: anchor },
712
+ anchor,
713
+ reportFailure,
714
+ );
715
+ reportFailure(result);
716
+ });
717
+ }
718
+
719
+ function installWebHeadingToggle(target)
720
+ {
721
+ const documentObject = target?.document;
722
+ if (!documentObject || documentObject.__mdcuiHeadingToggleInstalled) return;
723
+ documentObject.__mdcuiHeadingToggleInstalled = true;
724
+
725
+ const decorateAll = () => {
726
+ for (const heading of documentObject.querySelectorAll?.(
727
+ "h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]",
728
+ ) ?? []) ensureWebHeadingToggle(heading);
729
+ };
730
+ if (documentObject.readyState === "loading")
731
+ documentObject.addEventListener?.("DOMContentLoaded", decorateAll, { once: true });
732
+ else
733
+ queueMicrotask(decorateAll);
734
+
735
+ const activate = event => {
736
+ const toggle = event.target?.closest?.(".mdcui-heading-toggle");
737
+ const heading = toggle?.closest?.("h1, h2, h3, h4, h5, h6");
738
+ if (!heading?.id) return;
739
+ event.preventDefault?.();
740
+ event.stopPropagation?.();
741
+ event.stopImmediatePropagation?.();
742
+ createWebDollar(documentObject)(heading).toggle();
743
+ };
744
+ documentObject.addEventListener?.("click", activate, { capture: true });
745
+ documentObject.addEventListener?.("keydown", event => {
746
+ if (event.key === "Enter" || event.key === " ") activate(event);
747
+ }, { capture: true });
748
+ }
749
+
750
+ function webElementChildren(element) {
751
+ return Array.from(element?.children ?? []);
752
+ }
753
+
754
+ function firstWebTableAfterHeading(heading) {
755
+ for (
756
+ let sibling = heading?.nextElementSibling;
757
+ sibling;
758
+ sibling = sibling.nextElementSibling
759
+ ) {
760
+ if (String(sibling.tagName ?? "").toUpperCase() === "TABLE")
761
+ return sibling;
762
+ if (String(sibling.tagName ?? "").toUpperCase() === "SECTION")
763
+ return null;
764
+ const nested = sibling.querySelector?.("table");
765
+ if (nested) return nested;
766
+ }
767
+ return null;
768
+ }
769
+
770
+ function webTableRows(table) {
771
+ if (table?.rows) return Array.from(table.rows);
772
+ const rows = [];
773
+ const visit = (element) => {
774
+ for (const child of webElementChildren(element)) {
775
+ if (String(child.tagName ?? "").toUpperCase() === "TR") rows.push(child);
776
+ else visit(child);
777
+ }
778
+ };
779
+ visit(table);
780
+ return rows;
781
+ }
782
+
783
+ function webRowCells(row) {
784
+ if (row?.cells) return Array.from(row.cells);
785
+ return webElementChildren(row).filter(element =>
786
+ ["TH", "TD"].includes(String(element.tagName ?? "").toUpperCase())
787
+ );
788
+ }
789
+
790
+ function webClosestCell(element) {
791
+ for (let current = element; current; current = current.parentElement) {
792
+ if (["TH", "TD"].includes(String(current.tagName ?? "").toUpperCase()))
793
+ return current;
794
+ }
795
+ return null;
796
+ }
797
+
798
+ function webClosestTable(element) {
799
+ for (let current = element; current; current = current.parentElement) {
800
+ if (String(current.tagName ?? "").toUpperCase() === "TABLE") return current;
801
+ }
802
+ return null;
803
+ }
804
+
805
+ function replaceWebTextNodes(element, value) {
806
+ const textNodes = [];
807
+ const visit = (node) => {
808
+ for (const child of node?.childNodes ?? []) {
809
+ if (child?.nodeType === 3 || (!child?.tagName && "textContent" in child))
810
+ textNodes.push(child);
811
+ else visit(child);
812
+ }
813
+ };
814
+ visit(element);
815
+ if (textNodes.length === 0) {
816
+ element?.append?.(
817
+ element.ownerDocument?.createTextNode?.(String(value ?? "")),
818
+ );
819
+ return;
820
+ }
821
+ textNodes[0].textContent = String(value ?? "");
822
+ for (const node of textNodes.slice(1)) node.textContent = "";
823
+ }
824
+
825
+ function createWebCellSelection(table, row, col) {
826
+ const normalizedRow = Number(row);
827
+ const normalizedCol = Number(col);
828
+ const resolveCell = () => {
829
+ if (
830
+ !Number.isInteger(normalizedRow)
831
+ || !Number.isInteger(normalizedCol)
832
+ || normalizedRow < 0
833
+ || normalizedCol < 0
834
+ ) return null;
835
+ return webRowCells(webTableRows(table)[normalizedRow])[
836
+ normalizedCol
837
+ ] ?? null;
838
+ };
839
+ const neighbor = (rowDelta, colDelta) => {
840
+ if (!resolveCell()) return null;
841
+ const nextRow = normalizedRow + rowDelta;
842
+ const rows = webTableRows(table);
843
+ if (nextRow < 0 || nextRow >= rows.length) return null;
844
+ const nextCol = normalizedCol + colDelta;
845
+ if (nextCol < 0 || nextCol >= webRowCells(rows[nextRow]).length)
846
+ return null;
847
+ return createWebCellSelection(table, nextRow, nextCol);
848
+ };
849
+ const selection = {
850
+ get row() { return normalizedRow; },
851
+ get col() { return normalizedCol; },
852
+ text(...args) {
853
+ const cell = resolveCell();
854
+ if (!cell) return args.length > 0 ? selection : "";
855
+ if (args.length === 0) return String(cell.textContent ?? "");
856
+ replaceWebTextNodes(cell, args[0]);
857
+ return selection;
858
+ },
859
+ val(...args) {
860
+ const cell = resolveCell();
861
+ if (!cell) return args.length > 0 ? selection : "";
862
+ const checkbox = cell.querySelector?.('input[type="checkbox"]');
863
+ if (args.length > 0) {
864
+ if (checkbox) checkbox.checked = Boolean(args[0]);
865
+ return selection;
866
+ }
867
+ return checkbox ? Boolean(checkbox.checked) : String(cell.textContent ?? "");
868
+ },
869
+ left() { return neighbor(0, -1); },
870
+ lt() { return neighbor(0, -1); },
871
+ right() { return neighbor(0, 1); },
872
+ rt() { return neighbor(0, 1); },
873
+ up() { return neighbor(-1, 0); },
874
+ down() { return neighbor(1, 0); },
875
+ dn() { return neighbor(1, 0); },
876
+ };
877
+ return selection;
878
+ }
879
+
880
+ function webCellSelectionFromElement(element) {
881
+ const cell = webClosestCell(element);
882
+ const table = webClosestTable(cell);
883
+ if (!cell || !table) return null;
884
+ const rows = webTableRows(table);
885
+ const row = rows.findIndex(candidate => candidate === cell.parentElement);
886
+ const col = row >= 0
887
+ ? webRowCells(rows[row]).findIndex(candidate => candidate === cell)
888
+ : -1;
889
+ return row >= 0 && col >= 0
890
+ ? createWebCellSelection(table, row, col)
891
+ : null;
892
+ }
893
+
894
+ export function createWebDollar(documentObject = globalThis.document)
895
+ {
896
+ return function $(selectorInput) {
897
+ const objectSelectorId = webDollarObjectId(selectorInput);
898
+ const selectorText = objectSelectorId ? `#${objectSelectorId}` : selectorInput;
899
+ const objectTarget = !objectSelectorId
900
+ && selectorInput !== null
901
+ && typeof selectorInput === "object"
902
+ ? selectorInput
903
+ : null;
904
+ const selector = objectTarget
905
+ ? null
906
+ : parseDollarIdentity(selectorText, { selector: true });
907
+ const selectorId = String(selector?.id ?? "");
908
+ const resolveElement = () =>
909
+ objectTarget ?? findWebDollarElement(documentObject, selectorText, selector);
910
+ const selection = {
911
+ id: selectorId,
912
+ _mdcuiDollarSelection: true,
913
+ html() {
914
+ try {
915
+ const element = resolveElement();
916
+ if (!element) return "";
917
+ return isWebHeading(element)
918
+ ? semanticWebHeadingHtml(element)
919
+ : String(element.innerHTML ?? "");
920
+ } catch {
921
+ return "";
922
+ }
923
+ },
924
+ text(...args) {
925
+ try {
926
+ const element = resolveElement();
927
+ if (!element) return args.length > 0 ? selection : "";
928
+ if (args.length > 0) {
929
+ element.textContent = String(args[0] ?? "");
930
+ if (isWebHeading(element)) ensureWebHeadingToggle(element);
931
+ return selection;
932
+ }
933
+ return String(element.textContent ?? "");
934
+ } catch {
935
+ return args.length > 0 ? selection : "";
936
+ }
937
+ },
938
+ scrollIntoView(...args) {
939
+ const value = args[0];
940
+ const element = resolveElement();
941
+ if (!isWebHeading(element) || typeof element.scrollIntoView !== "function")
942
+ return undefined;
943
+ if (args.length === 0) return element.scrollIntoView();
944
+ if (value === true || value === -1) return element.scrollIntoView(true);
945
+ if (value === false || value === 1) return element.scrollIntoView(false);
946
+ return element.scrollIntoView({
947
+ block: "center",
948
+ inline: "nearest",
949
+ });
950
+ },
951
+ parent() {
952
+ try {
953
+ return webCellSelectionFromElement(resolveElement());
954
+ } catch {
955
+ return null;
956
+ }
957
+ },
958
+ cell(row, col) {
959
+ try {
960
+ const element = resolveElement();
961
+ const table = isWebHeading(element)
962
+ ? firstWebTableAfterHeading(element)
963
+ : null;
964
+ return createWebCellSelection(table, row, col);
965
+ } catch {
966
+ return createWebCellSelection(null, row, col);
967
+ }
968
+ },
969
+ img(index = 0) {
970
+ const normalizedIndex = Math.trunc(Number(index));
971
+ return {
972
+ get src() {
973
+ try {
974
+ if (!Number.isInteger(normalizedIndex) || normalizedIndex < 0) return "";
975
+ const element = resolveElement();
976
+ if (!isWebHeading(element)) return "";
977
+ return String(webHeadingImages(element)[normalizedIndex]?.src ?? "");
978
+ } catch {
979
+ return "";
980
+ }
981
+ },
982
+ };
983
+ },
984
+ show() {
985
+ try {
986
+ const element = resolveElement();
987
+ showWebHeadingSection(documentObject, element);
988
+ } catch {}
989
+ return selection;
990
+ },
991
+ hide() {
992
+ try {
993
+ const element = resolveElement();
994
+ hideWebHeadingSection(documentObject, element);
995
+ } catch {}
996
+ return selection;
997
+ },
998
+ toggle() {
999
+ try {
1000
+ const element = resolveElement();
1001
+ const hidden = webIdStore(documentObject)
1002
+ .get(element?.id)?.headingVisibility?.hidden;
1003
+ if (hidden) showWebHeadingSection(documentObject, element);
1004
+ else hideWebHeadingSection(documentObject, element);
1005
+ } catch {}
1006
+ return selection;
1007
+ },
1008
+ data(...args) {
1009
+ try {
1010
+ const element = resolveElement();
1011
+ const id = element?.id || selector?.id || selectorId;
1012
+ const data = webUserData(documentObject, id, element);
1013
+ if (!data) return args.length === 0 ? undefined : selection;
1014
+ if (args.length === 0) return data;
1015
+ if (args.length === 1) {
1016
+ if (args[0] && typeof args[0] === "object") {
1017
+ Object.assign(data, args[0]);
1018
+ renderWebHeadingComponents(documentObject, id);
1019
+ return selection;
1020
+ }
1021
+ return data[String(args[0])];
1022
+ }
1023
+ data[String(args[0])] = args[1];
1024
+ renderWebHeadingComponents(documentObject, id);
1025
+ return selection;
1026
+ } catch {
1027
+ return args.length <= 1 ? undefined : selection;
1028
+ }
1029
+ },
1030
+ removeData(...keys) {
1031
+ try {
1032
+ const element = resolveElement();
1033
+ const id = element?.id || selector?.id || selectorId;
1034
+ const normalized = keys
1035
+ .flatMap(key => Array.isArray(key) ? key : String(key).split(/\s+/))
1036
+ .filter(Boolean)
1037
+ .map(String);
1038
+ removeWebUserData(documentObject, id, element, normalized);
1039
+ } catch {}
1040
+ return selection;
1041
+ },
1042
+ val(...args) {
1043
+ try {
1044
+ const element = resolveElement();
1045
+ if (!element) return args.length > 0 ? selection : "";
1046
+ if (objectTarget) {
1047
+ if (args.length > 0) {
1048
+ const value = String(args[0] ?? "");
1049
+ if ("value" in element) {
1050
+ element.value = value;
1051
+ resizeWebTextarea(element);
1052
+ } else element.textContent = value;
1053
+ return selection;
1054
+ }
1055
+ return webDollarValue(element);
1056
+ }
1057
+ if (isWebHeading(element)) {
1058
+ if (args.length > 0) return selection;
1059
+ return webHeadingValue(element);
1060
+ }
1061
+ if (!selector) return args.length > 0 ? selection : "";
1062
+ if (args.length > 0) {
1063
+ const value = String(args[0] ?? "");
1064
+ if ("value" in element) {
1065
+ element.value = value;
1066
+ resizeWebTextarea(element);
1067
+ }
1068
+ else element.textContent = value;
1069
+ return selection;
1070
+ }
1071
+ return webDollarValue(element);
1072
+ } catch {
1073
+ return args.length > 0 ? selection : "";
1074
+ }
1075
+ },
1076
+ push(...items) {
1077
+ try {
1078
+ const element = resolveElement();
1079
+ return isWebHeading(element) ? mutateWebHeadingList(element, "push", items) : 0;
1080
+ } catch {
1081
+ return 0;
1082
+ }
1083
+ },
1084
+ pop() {
1085
+ try {
1086
+ const element = resolveElement();
1087
+ return isWebHeading(element) ? mutateWebHeadingList(element, "pop", []) : undefined;
1088
+ } catch {
1089
+ return undefined;
1090
+ }
1091
+ },
1092
+ shift() {
1093
+ try {
1094
+ const element = resolveElement();
1095
+ return isWebHeading(element) ? mutateWebHeadingList(element, "shift", []) : undefined;
1096
+ } catch {
1097
+ return undefined;
1098
+ }
1099
+ },
1100
+ unshift(...items) {
1101
+ try {
1102
+ const element = resolveElement();
1103
+ return isWebHeading(element) ? mutateWebHeadingList(element, "unshift", items) : 0;
1104
+ } catch {
1105
+ return 0;
1106
+ }
1107
+ },
1108
+ splice(...args) {
1109
+ try {
1110
+ const element = resolveElement();
1111
+ return isWebHeading(element) ? mutateWebHeadingList(element, "splice", args) : [];
1112
+ } catch {
1113
+ return [];
1114
+ }
1115
+ },
1116
+ slice(...args) {
1117
+ try {
1118
+ const element = resolveElement();
1119
+ if (!isWebHeading(element)) return [];
1120
+ const list = firstHeadingList(element);
1121
+ if (!list) return [];
1122
+ return directWebTaskItems(list).map(webTaskItemSnapshot).slice(...args);
1123
+ } catch {
1124
+ return [];
1125
+ }
1126
+ },
1127
+ };
1128
+ return selection;
1129
+ };
1130
+ }
1131
+
1132
+ export function installWebDollar(target = globalThis)
1133
+ {
1134
+ if (!target?.document) return target?.$;
1135
+ installWebTemplateComponents(target.document);
1136
+ const $ = createWebDollar(target.document);
1137
+ $.tts = async (text, pitch = 1, speed = 1) => {
1138
+ try {
1139
+ const Utterance = target.SpeechSynthesisUtterance;
1140
+ const synthesis = target.speechSynthesis;
1141
+ if (typeof Utterance !== "function" || !synthesis?.speak)
1142
+ return "Web Speech synthesis is unavailable";
1143
+ const spokenText = String(text ?? "");
1144
+ if (!spokenText) return;
1145
+ const utterance = new Utterance(spokenText);
1146
+ const parsedPitch = Number(pitch);
1147
+ const parsedSpeed = Number(speed);
1148
+ utterance.pitch = Number.isFinite(parsedPitch) && parsedPitch > 0 ? parsedPitch : 1;
1149
+ utterance.rate = Number.isFinite(parsedSpeed) && parsedSpeed > 0 ? parsedSpeed : 1;
1150
+ const characters = [...spokenText];
1151
+ const ascii = characters.filter(character => character.codePointAt(0) < 128).length;
1152
+ utterance.lang = ascii / characters.length > 0.5 ? "en-US" : "zh-TW";
1153
+ return await new Promise(resolve => {
1154
+ utterance.onend = () => resolve();
1155
+ utterance.onerror = event => resolve(
1156
+ event?.error instanceof Error
1157
+ ? event.error.message
1158
+ : `Speech synthesis failed: ${event?.error ?? "unknown error"}`,
1159
+ );
1160
+ synthesis.cancel?.();
1161
+ synthesis.speak(utterance);
1162
+ });
1163
+ } catch (error) {
1164
+ return String(error?.message || error);
1165
+ }
1166
+ };
1167
+ $.tts.stop = () => {
1168
+ try {
1169
+ target.speechSynthesis?.cancel?.();
1170
+ return true;
1171
+ } catch {
1172
+ return false;
1173
+ }
1174
+ };
1175
+ target.$ = $;
1176
+ installWebTextareaResize(target);
1177
+ installWebHeadingToggle(target);
1178
+ installWebLinkContext(target);
1179
+ return $;
1180
+ }
1181
+
1182
+ const loadedWebFrontModules = new WeakSet();
1183
+
1184
+ export async function runWebMdcuiLoad(target = globalThis, frontMod = {})
1185
+ {
1186
+ if (!target?.document || !frontMod || typeof frontMod !== "object") return;
1187
+ if (loadedWebFrontModules.has(frontMod)) return;
1188
+ loadedWebFrontModules.add(frontMod);
1189
+
1190
+ if (target.document.readyState !== "complete") {
1191
+ await new Promise(resolve => {
1192
+ if (typeof target.addEventListener === "function")
1193
+ target.addEventListener("load", resolve, { once: true });
1194
+ else resolve();
1195
+ });
1196
+ }
1197
+ installWebDollar(target);
1198
+ return evalFront(
1199
+ frontMod,
1200
+ "typeof onMdcuiLoad === 'function' ? onMdcuiLoad() : undefined",
1201
+ {},
1202
+ target,
1203
+ result => {
1204
+ if (result?.ok === false)
1205
+ target.console?.error?.(`[mdcui] onMdcuiLoad: ${result.error}`);
1206
+ },
1207
+ );
1208
+ }
1209
+
1210
+ if (typeof globalThis.document !== "undefined")
1211
+ installWebDollar(globalThis);
1212
+
1213
+
1214
+ export async function evalBack(backmod, qjson)
1215
+ {
1216
+
1217
+ try{
1218
+
1219
+ if(qjson?.[0] === "_mdcui_render_markdown")
1220
+ return renderWebComponentMarkdownOnServer(qjson?.[1]?.[0]);
1221
+
1222
+
1223
+
1224
+ /* Contract of requestJson(qjson)
1225
+ type RpcPacket = [
1226
+ func: string,
1227
+ argv: unknown[],
1228
+ envp?: Record<string, unknown>,
1229
+ ];
1230
+ */
1231
+
1232
+ // DiscoverApi ApiCaller
1233
+
1234
+
1235
+ let [ func, argv, envp ] = qjson
1236
+
1237
+ func = (func || '')+'' ;
1238
+
1239
+ if(process.env.RPC_DEBUG)
1240
+ console.log(func);
1241
+
1242
+ if(!apilist.get(backmod))
1243
+ apilist.set(backmod,DiscoverApi(backmod));
1244
+
1245
+ const apilistMod = apilist.get(backmod)
1246
+
1247
+ if(func=="_discover")
1248
+ {
1249
+ return apilistMod ;
1250
+ }
1251
+ else if(apilistMod[func])
1252
+ {
1253
+ if(Array.isArray(argv))
1254
+ return await backmod[func]?.apply?.(envp,argv);
1255
+ else
1256
+ return await ApiCaller(backmod,func,argv,envp);
1257
+ }
1258
+ else
1259
+ {
1260
+ return "Unknown func 未知函式: "+func+
1261
+ crlf+JSON.stringify(argv);
1262
+ }
1263
+
1264
+
1265
+
1266
+ }catch(e)
1267
+ {
1268
+ console.log(e);
1269
+ return (e.stack);
1270
+ }
1271
+
1272
+ } // end of evalBack
1273
+
1274
+
1275
+ const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
1276
+ const frontBindingNamePattern = /^[$_\p{ID_Start}][$\u200C\u200D_\p{ID_Continue}]*$/u;
1277
+ const frontBindingNameValidity = new Map();
1278
+
1279
+ function safeFrontError(e)
1280
+ {
1281
+ return {
1282
+ ok: false,
1283
+ error: e?.stack || String(e),
1284
+ };
1285
+ }
1286
+
1287
+ function isValidFrontBindingName(name)
1288
+ {
1289
+ if (frontBindingNameValidity.has(name))
1290
+ return frontBindingNameValidity.get(name);
1291
+ let valid = frontBindingNamePattern.test(name);
1292
+ if (valid) {
1293
+ try {
1294
+ new AsyncFunction(name, "");
1295
+ } catch {
1296
+ valid = false;
1297
+ }
1298
+ }
1299
+ frontBindingNameValidity.set(name, valid);
1300
+ return valid;
1301
+ }
1302
+
1303
+ function isValidFrontSourceSyntax(source)
1304
+ {
1305
+ try {
1306
+ new AsyncFunction(`return await (${source})`);
1307
+ return true;
1308
+ } catch(error) {
1309
+ if (!(error instanceof SyntaxError)) return false;
1310
+ }
1311
+ try {
1312
+ new AsyncFunction(source);
1313
+ return true;
1314
+ } catch {
1315
+ return false;
1316
+ }
1317
+ }
1318
+
1319
+ function decodeJavascriptUrlSource(text)
1320
+ {
1321
+ const input = String(text ?? "");
1322
+ const scheme = input.match(/^javascript:/i);
1323
+ if (!scheme) return input;
1324
+
1325
+ const source = input.slice(scheme[0].length);
1326
+ const encoded = new TextEncoder().encode(source);
1327
+ const decoded = [];
1328
+ const hexValue = value => {
1329
+ if (value >= 48 && value <= 57) return value - 48;
1330
+ if (value >= 65 && value <= 70) return value - 55;
1331
+ if (value >= 97 && value <= 102) return value - 87;
1332
+ return -1;
1333
+ };
1334
+ for (let index = 0; index < encoded.length; index++) {
1335
+ if (encoded[index] === 37 && index + 2 < encoded.length) {
1336
+ const high = hexValue(encoded[index + 1]);
1337
+ const low = hexValue(encoded[index + 2]);
1338
+ if (high >= 0 && low >= 0) {
1339
+ decoded.push(high * 16 + low);
1340
+ index += 2;
1341
+ continue;
1342
+ }
1343
+ }
1344
+ decoded.push(encoded[index]);
1345
+ }
1346
+ const decodedSource = new TextDecoder().decode(Uint8Array.from(decoded));
1347
+ if (decodedSource === source || isValidFrontSourceSyntax(source))
1348
+ return source;
1349
+ return isValidFrontSourceSyntax(decodedSource) ? decodedSource : source;
1350
+ }
1351
+
1352
+ function reportSafeFrontError(error, reportError)
1353
+ {
1354
+ const result = safeFrontError(error);
1355
+ try {
1356
+ reportError?.(result);
1357
+ } catch {}
1358
+ return result;
1359
+ }
1360
+
1361
+ function safeFrontValue(value, reportError)
1362
+ {
1363
+ if (typeof value !== "function") return value;
1364
+ return function(...args) {
1365
+ try {
1366
+ const result = value.apply(this, args);
1367
+ if (result && typeof result.then === "function")
1368
+ return Promise.resolve(result).catch(error => reportSafeFrontError(error, reportError));
1369
+ return result;
1370
+ } catch(e) {
1371
+ return reportSafeFrontError(e, reportError);
1372
+ }
1373
+ };
1374
+ }
1375
+
1376
+ export async function evalFront(
1377
+ mod,
1378
+ text,
1379
+ scope = {},
1380
+ thisArg = undefined,
1381
+ reportError = undefined,
1382
+ )
1383
+ {
1384
+ try{
1385
+
1386
+ text = String(text ?? "").replace(/^javascript:/i, "");
1387
+
1388
+ const entryMap = new Map(
1389
+ Object.entries(mod).filter(([name]) => name !== "$" && isValidFrontBindingName(name)),
1390
+ );
1391
+ if (typeof globalThis.$ === "function")
1392
+ entryMap.set("$", globalThis.$);
1393
+ for (const [name, value] of Object.entries(scope))
1394
+ if (isValidFrontBindingName(name))
1395
+ entryMap.set(name, value);
1396
+ const entries = [...entryMap];
1397
+ const names = entries.map(([name]) => name);
1398
+ const values = entries.map(([, value]) => safeFrontValue(value, reportError));
1399
+
1400
+ try {
1401
+ return await new AsyncFunction(...names, `return await (${text})`).call(thisArg, ...values);
1402
+ } catch(e) {
1403
+ if (e instanceof SyntaxError)
1404
+ return await new AsyncFunction(...names, text).call(thisArg, ...values);
1405
+ throw e;
1406
+ }
1407
+
1408
+ }catch(e)
1409
+ {
1410
+ return reportSafeFrontError(e, reportError);
1411
+ }
1412
+
1413
+ }
1414
+
1415
+
1416
+ export const rpcraw = async (func,argv,envp)=>{
1417
+
1418
+ const apilistMod = await FrontendDiscoverApi()
1419
+
1420
+ if(apilistMod[func])
1421
+ return await fetch(rpcFetchUrl(), { ...rpcFetchOpt(),
1422
+ method: "POST",
1423
+ body: JSON.stringify([
1424
+ func,argv,envp
1425
+ ])
1426
+ }).then(r=>r.json()).catch(e=>e) ;
1427
+ else if(func=="_discover")
1428
+ {
1429
+ if(argv[0])
1430
+ return jss(apilistMod,null,1) ;
1431
+ else
1432
+ return apilistMod ;
1433
+ }
1434
+ else
1435
+ return "Unknown func 未知函式: "+func+
1436
+ crlf+JSON.stringify(argv);
1437
+ }
1438
+
1439
+ export const rpcproxy = new Proxy(rpcraw,{
1440
+ get(target, prop, receiver) {
1441
+ if (prop in target) {
1442
+ return Reflect.get(target, prop, receiver);
1443
+ }
1444
+
1445
+ if (typeof prop !== "string") {
1446
+ return undefined;
1447
+ }
1448
+
1449
+ target[prop] = async function(...argv) {
1450
+ await FrontendDiscoverApi()
1451
+ return await target(prop, argv, this);
1452
+ };
1453
+
1454
+ return target[prop];
1455
+ },
1456
+ ownKeys() {
1457
+ return Object.keys(apilist.get(0)||{});
1458
+ },
1459
+ getOwnPropertyDescriptor(target, prop) {
1460
+ const apilistMod = apilist.get(0)||{};
1461
+
1462
+ if(prop in apilistMod) {
1463
+ return {
1464
+ enumerable: true,
1465
+ configurable: true,
1466
+ };
1467
+ }
1468
+
1469
+ return Reflect.getOwnPropertyDescriptor(target, prop);
1470
+ }
1471
+ });
1472
+
1473
+ export var rpc = rpcproxy
1474
+
1475
+
1476
+
1477
+ // functions cannot contain ( ) ,
1478
+ export function getfuncparams( func )
1479
+ {
1480
+ if( typeof(func) != "function" )
1481
+ return [];
1482
+
1483
+ let rs = func.toString();
1484
+ let m = rs.match( /\(([\s\S]*?)\)/ );
1485
+ if( !m ) return [];
1486
+ rs = m[1] ;
1487
+
1488
+ return rs.split(",").map(i=>i.trim()) ;
1489
+ }
1490
+
1491
+
1492
+ export async function FrontendDiscoverApi()
1493
+ {
1494
+ if(!apilist.get(0))
1495
+ apilist.set(0, await fetch(rpcFetchUrl(), { ...rpcFetchOpt(),
1496
+ method: "POST",
1497
+ body: JSON.stringify(["_discover"])
1498
+ }).then(r=>r.json()).catch(e=>e) ) ;
1499
+
1500
+ return apilist.get(0);
1501
+ }
1502
+
1503
+
1504
+ // filters out _ starting functions
1505
+ export function DiscoverApi( obj ) // module_obj
1506
+ {
1507
+ let karr = Object.keys( obj );
1508
+ karr = karr
1509
+ .filter( i=>( !i.startsWith('_') &&
1510
+ typeof(obj[i]) == "function" ) )
1511
+ .map(i=>{
1512
+ const fname = obj[i].name || obj[i].Name ;
1513
+
1514
+ if( fname && fname != i )
1515
+ return [ i, [[ fname ]] ];
1516
+
1517
+ return [ i, getfuncparams(obj[i]) ];
1518
+ });
1519
+
1520
+ return Object.fromEntries( karr ) ;
1521
+ }
1522
+
1523
+
1524
+
1525
+ /*
1526
+ * Module object from import * as modobj from 'mod.mjs'
1527
+ * Parameters object
1528
+ */
1529
+ export async function ApiCaller( modobj, cmd, pobj,envp )
1530
+ {
1531
+ const func = modobj[cmd] ;
1532
+
1533
+ if(!pobj) pobj = {} ;
1534
+
1535
+ if( func && typeof(func) == "function" )
1536
+ {
1537
+ if(!func.args)
1538
+ {
1539
+ func.args = getfuncparams( func ) ;
1540
+ func.args = func.args.map(i=>{
1541
+ let ret = i.split("=")[0]
1542
+ ret=(ret||"")+""
1543
+ return ret.trim();
1544
+ });
1545
+ }
1546
+
1547
+ let parr = func.args.map(i=>pobj[i]) ;
1548
+
1549
+ return await func.apply(envp,parr) ;
1550
+ }
1551
+ else
1552
+ return "Failed: No such function as" +
1553
+ crlf + cmd ;
1554
+ }