@zaly/tui 0.0.5 → 0.0.7

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 (194) hide show
  1. package/assets/schemas/theme.schema.json +272 -270
  2. package/assets/themes/kanagawa-dragon.json +3 -0
  3. package/assets/themes/kanagawa-wave.json +3 -0
  4. package/dist/{actions-CnVzKVID.d.mts → actions-DFboj3g5.d.mts} +4 -4
  5. package/dist/{actions-CnVzKVID.d.mts.map → actions-DFboj3g5.d.mts.map} +1 -1
  6. package/dist/ansi.d.mts +10 -11
  7. package/dist/ansi.d.mts.map +1 -1
  8. package/dist/{autocomplete-Dfw-yQDa.d.mts → autocomplete-CxzetPOo.d.mts} +4 -4
  9. package/dist/{autocomplete-Dfw-yQDa.d.mts.map → autocomplete-CxzetPOo.d.mts.map} +1 -1
  10. package/dist/{box-DepqUtuo.mjs → box-DLEcEvDH.mjs} +18 -11
  11. package/dist/box-DLEcEvDH.mjs.map +1 -0
  12. package/dist/{builder-T9oGIWFa.mjs → builder-BgEcjj8Z.mjs} +5 -4
  13. package/dist/builder-BgEcjj8Z.mjs.map +1 -0
  14. package/dist/{callbacks-DcMBGQEO.mjs → callbacks-D132G8dy.mjs} +7 -6
  15. package/dist/callbacks-D132G8dy.mjs.map +1 -0
  16. package/dist/client-BltmwI6G.mjs +2 -0
  17. package/dist/{client-BBdtbLp4.mjs → client-xnCHMO2_.mjs} +62 -8
  18. package/dist/client-xnCHMO2_.mjs.map +1 -0
  19. package/dist/{clipboard-l_TWxxTf.mjs → clipboard-CNPBTX7j.mjs} +9 -7
  20. package/dist/{clipboard-l_TWxxTf.mjs.map → clipboard-CNPBTX7j.mjs.map} +1 -1
  21. package/dist/clipboard.d.mts +6 -7
  22. package/dist/clipboard.d.mts.map +1 -1
  23. package/dist/clipboard.mjs +1 -1
  24. package/dist/{ctx-Ctmvof1N.mjs → ctx-ChO3St_a.mjs} +3 -3
  25. package/dist/{ctx-Ctmvof1N.mjs.map → ctx-ChO3St_a.mjs.map} +1 -1
  26. package/dist/ctx-DZHBHjsB.mjs +2 -0
  27. package/dist/{divider-cclEAdPx.mjs → divider-l0-JPEIm.mjs} +2 -2
  28. package/dist/{divider-cclEAdPx.mjs.map → divider-l0-JPEIm.mjs.map} +1 -1
  29. package/dist/{files-Aw3iWpXD.d.mts → files-BUsa-RVl.d.mts} +3 -3
  30. package/dist/{files-Aw3iWpXD.d.mts.map → files-BUsa-RVl.d.mts.map} +1 -1
  31. package/dist/{github-DS00VoOj.d.mts → github-D89A3F9U.d.mts} +3 -3
  32. package/dist/{github-DS00VoOj.d.mts.map → github-D89A3F9U.d.mts.map} +1 -1
  33. package/dist/{image-BTxDPPiT.d.mts → image-34bU73bW.d.mts} +2 -2
  34. package/dist/{image-BTxDPPiT.d.mts.map → image-34bU73bW.d.mts.map} +1 -1
  35. package/dist/image.d.mts +14 -15
  36. package/dist/image.d.mts.map +1 -1
  37. package/dist/index.d.mts +13 -13
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs +5 -5
  40. package/dist/{input-CRBuTrsL.mjs → input-D7fQEUdt.mjs} +3 -3
  41. package/dist/input-D7fQEUdt.mjs.map +1 -0
  42. package/dist/{input-B5Vy-iaa.d.mts → input-Dylds_sI.d.mts} +3 -3
  43. package/dist/input-Dylds_sI.d.mts.map +1 -0
  44. package/dist/{inspect-D6FW_QUo.d.mts → inspect-DPLRum7L.d.mts} +2 -2
  45. package/dist/{inspect-D6FW_QUo.d.mts.map → inspect-DPLRum7L.d.mts.map} +1 -1
  46. package/dist/{inspect-BaKG6cU_.mjs → inspect-xdSq5Hjq.mjs} +3 -3
  47. package/dist/{inspect-BaKG6cU_.mjs.map → inspect-xdSq5Hjq.mjs.map} +1 -1
  48. package/dist/kitty-JbCJC0iQ.mjs.map +1 -1
  49. package/dist/{log-DYHEYX_z.mjs → log-DrYLRdMW.mjs} +4 -4
  50. package/dist/{log-DYHEYX_z.mjs.map → log-DrYLRdMW.mjs.map} +1 -1
  51. package/dist/{logger-Ch0LwSG_.mjs → logger-ClSgGf-a.mjs} +3 -3
  52. package/dist/logger-ClSgGf-a.mjs.map +1 -0
  53. package/dist/{markdown-CYHHoYu0.mjs → markdown-lRhc_4Cd.mjs} +7 -7
  54. package/dist/markdown-lRhc_4Cd.mjs.map +1 -0
  55. package/dist/markdown.d.mts +5 -5
  56. package/dist/markdown.d.mts.map +1 -1
  57. package/dist/markdown.mjs +1 -1
  58. package/dist/md.bun.d.mts +1 -2
  59. package/dist/md.bun.d.mts.map +1 -1
  60. package/dist/md.node.d.mts +1 -2
  61. package/dist/md.node.d.mts.map +1 -1
  62. package/dist/node-BZ7f6HzU.mjs.map +1 -1
  63. package/dist/{overlay-9xNgsuuy.mjs → overlay-9WXYiGgW.mjs} +2 -2
  64. package/dist/{overlay-9xNgsuuy.mjs.map → overlay-9WXYiGgW.mjs.map} +1 -1
  65. package/dist/{picker-cH-rc7-X.mjs → picker-BqHINl_a.mjs} +4 -4
  66. package/dist/picker-BqHINl_a.mjs.map +1 -0
  67. package/dist/{picker-D8OLb6kZ.d.mts → picker-JL8lZfRH.d.mts} +5 -5
  68. package/dist/{picker-D8OLb6kZ.d.mts.map → picker-JL8lZfRH.d.mts.map} +1 -1
  69. package/dist/queries-B_lOwEiE.mjs.map +1 -1
  70. package/dist/{queries-DH3bj74K.d.mts → queries-Cvalgu6P.d.mts} +3 -3
  71. package/dist/{queries-DH3bj74K.d.mts.map → queries-Cvalgu6P.d.mts.map} +1 -1
  72. package/dist/reactive-f7NpAi69.mjs.map +1 -1
  73. package/dist/{registry-CdeLjUo2.mjs → registry-CEpHcTa2.mjs} +2 -2
  74. package/dist/registry-CEpHcTa2.mjs.map +1 -0
  75. package/dist/{render-CPUD4yaW.mjs → render-DxIHVH9Y.mjs} +2 -2
  76. package/dist/{render-CPUD4yaW.mjs.map → render-DxIHVH9Y.mjs.map} +1 -1
  77. package/dist/{renderer-DJ1pWXSL.mjs → renderer-Bz3tc2IT.mjs} +7 -7
  78. package/dist/renderer-Bz3tc2IT.mjs.map +1 -0
  79. package/dist/renderer-CuF4RYBZ.mjs +2 -0
  80. package/dist/{renderer-qSMVeNSV.mjs → renderer-DesbRwjQ.mjs} +2 -2
  81. package/dist/renderer-DesbRwjQ.mjs.map +1 -0
  82. package/dist/select-m7NE6Rwa.mjs.map +1 -1
  83. package/dist/{select-CbmAZdpt.d.mts → select-zGd5pbiB.d.mts} +3 -3
  84. package/dist/{select-CbmAZdpt.d.mts.map → select-zGd5pbiB.d.mts.map} +1 -1
  85. package/dist/services/logger.d.mts +1 -1
  86. package/dist/services/logger.mjs +1 -1
  87. package/dist/services/notifier.d.mts +3 -4
  88. package/dist/services/notifier.d.mts.map +1 -1
  89. package/dist/services/notifier.mjs +2 -2
  90. package/dist/services/notifier.mjs.map +1 -1
  91. package/dist/services/picker.d.mts +8 -9
  92. package/dist/services/picker.d.mts.map +1 -1
  93. package/dist/services/picker.mjs +10 -8
  94. package/dist/services/picker.mjs.map +1 -1
  95. package/dist/services/prompt.d.mts +8 -9
  96. package/dist/services/prompt.d.mts.map +1 -1
  97. package/dist/services/prompt.mjs +9 -7
  98. package/dist/services/prompt.mjs.map +1 -1
  99. package/dist/shiki/server.d.mts +1 -1
  100. package/dist/shiki/server.mjs +6 -2
  101. package/dist/shiki/server.mjs.map +1 -1
  102. package/dist/{shiki-BK-v9CtF.mjs → shiki-CcxiFWEF.mjs} +3 -3
  103. package/dist/{shiki-BK-v9CtF.mjs.map → shiki-CcxiFWEF.mjs.map} +1 -1
  104. package/dist/{shiki-B5NwIiot.mjs → shiki-D7l5--zz.mjs} +19 -5
  105. package/dist/shiki-D7l5--zz.mjs.map +1 -0
  106. package/dist/show-DR2x1YFc.mjs.map +1 -1
  107. package/dist/style.d.mts +7 -7
  108. package/dist/style.d.mts.map +1 -1
  109. package/dist/style.mjs +2 -2
  110. package/dist/{text-DILrol9j.mjs → text-BLz1tRoC.mjs} +4 -3
  111. package/dist/{text-DILrol9j.mjs.map → text-BLz1tRoC.mjs.map} +1 -1
  112. package/dist/{text-9lwQeqYr.d.mts → text-BefiXAFW.d.mts} +3 -3
  113. package/dist/{text-9lwQeqYr.d.mts.map → text-BefiXAFW.d.mts.map} +1 -1
  114. package/dist/{text-q26V6_Sc.mjs → text-CRZD9KTN.mjs} +3 -2
  115. package/dist/{text-q26V6_Sc.mjs.map → text-CRZD9KTN.mjs.map} +1 -1
  116. package/dist/text.d.mts +1 -1
  117. package/dist/text.mjs +1 -1
  118. package/dist/{theme.config-CU3B50HN.mjs → theme.config-DoW6LIcl.mjs} +250 -242
  119. package/dist/theme.config-DoW6LIcl.mjs.map +1 -0
  120. package/dist/themes.d.mts +8 -9
  121. package/dist/themes.d.mts.map +1 -1
  122. package/dist/themes.mjs +1 -1
  123. package/dist/tree-Bo1afYhe.mjs.map +1 -1
  124. package/dist/{tree-C28QOVIK.d.mts → tree-CArtDRec.d.mts} +3 -3
  125. package/dist/{tree-C28QOVIK.d.mts.map → tree-CArtDRec.d.mts.map} +1 -1
  126. package/dist/{types-B9Eh7k2v.d.mts → types-C0EOLZDc.d.mts} +7 -2
  127. package/dist/types-C0EOLZDc.d.mts.map +1 -0
  128. package/dist/{widget-M7jD8Rgg.d.mts → widget-DtJU2-BJ.d.mts} +2 -2
  129. package/dist/{widget-M7jD8Rgg.d.mts.map → widget-DtJU2-BJ.d.mts.map} +1 -1
  130. package/dist/widgets/autocomplete.d.mts +1 -1
  131. package/dist/widgets/autocomplete.mjs +2 -2
  132. package/dist/widgets/autocomplete.mjs.map +1 -1
  133. package/dist/widgets/box.d.mts +1 -1
  134. package/dist/widgets/box.mjs +1 -1
  135. package/dist/widgets/code.d.mts +4 -5
  136. package/dist/widgets/code.d.mts.map +1 -1
  137. package/dist/widgets/code.mjs +5 -5
  138. package/dist/widgets/completions/actions.d.mts +1 -1
  139. package/dist/widgets/completions/files.d.mts +1 -1
  140. package/dist/widgets/completions/github.d.mts +1 -1
  141. package/dist/widgets/completions/index.d.mts +3 -3
  142. package/dist/widgets/diff.d.mts +5 -6
  143. package/dist/widgets/diff.d.mts.map +1 -1
  144. package/dist/widgets/diff.mjs +3 -3
  145. package/dist/widgets/diff.mjs.map +1 -1
  146. package/dist/widgets/divider.d.mts +4 -5
  147. package/dist/widgets/divider.d.mts.map +1 -1
  148. package/dist/widgets/divider.mjs +1 -1
  149. package/dist/widgets/image.d.mts +1 -1
  150. package/dist/widgets/image.mjs +1 -1
  151. package/dist/widgets/image.mjs.map +1 -1
  152. package/dist/widgets/input.d.mts +1 -1
  153. package/dist/widgets/input.mjs +1 -1
  154. package/dist/widgets/log.d.mts +1 -1
  155. package/dist/widgets/log.mjs +1 -1
  156. package/dist/widgets/markdown.d.mts +8 -9
  157. package/dist/widgets/markdown.d.mts.map +1 -1
  158. package/dist/widgets/markdown.mjs +1 -1
  159. package/dist/widgets/overlay.d.mts +1 -1
  160. package/dist/widgets/overlay.mjs +1 -1
  161. package/dist/widgets/picker.d.mts +1 -1
  162. package/dist/widgets/picker.mjs +1 -1
  163. package/dist/widgets/progress.d.mts +5 -6
  164. package/dist/widgets/progress.d.mts.map +1 -1
  165. package/dist/widgets/select.d.mts +1 -1
  166. package/dist/widgets/show.d.mts +7 -7
  167. package/dist/widgets/show.d.mts.map +1 -1
  168. package/dist/widgets/spinner.d.mts +7 -8
  169. package/dist/widgets/spinner.d.mts.map +1 -1
  170. package/dist/widgets/spinner.mjs.map +1 -1
  171. package/dist/widgets/text.d.mts +1 -1
  172. package/dist/widgets/text.mjs +1 -1
  173. package/dist/widgets/tree.d.mts +1 -1
  174. package/dist/widgets/widget.d.mts +1 -1
  175. package/dist/worker-T6SdPzUH.mjs.map +1 -1
  176. package/package.json +9 -10
  177. package/dist/box-DepqUtuo.mjs.map +0 -1
  178. package/dist/builder-T9oGIWFa.mjs.map +0 -1
  179. package/dist/callbacks-DcMBGQEO.mjs.map +0 -1
  180. package/dist/client-BBdtbLp4.mjs.map +0 -1
  181. package/dist/client-cIckDgAj.mjs +0 -2
  182. package/dist/ctx-DhJIKuOX.mjs +0 -2
  183. package/dist/input-B5Vy-iaa.d.mts.map +0 -1
  184. package/dist/input-CRBuTrsL.mjs.map +0 -1
  185. package/dist/logger-Ch0LwSG_.mjs.map +0 -1
  186. package/dist/markdown-CYHHoYu0.mjs.map +0 -1
  187. package/dist/picker-cH-rc7-X.mjs.map +0 -1
  188. package/dist/registry-CdeLjUo2.mjs.map +0 -1
  189. package/dist/renderer-DJ1pWXSL.mjs.map +0 -1
  190. package/dist/renderer-Dgj_qEOA.mjs +0 -2
  191. package/dist/renderer-qSMVeNSV.mjs.map +0 -1
  192. package/dist/shiki-B5NwIiot.mjs.map +0 -1
  193. package/dist/theme.config-CU3B50HN.mjs.map +0 -1
  194. package/dist/types-B9Eh7k2v.d.mts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"notifier.d.mts","names":[],"sources":["../../src/services/notifier.ts"],"mappings":";;;KAUY,aAAa,KAAK;EAC5B,QAAQ;EACR;EACA;EACA;;cASW;;EAKX,YAAY,IAAI;EAmDhB,OAAO,KAAK,kBAAkB,OAAO,aAAa"}
1
+ {"version":3,"file":"notifier.d.mts","names":[],"sources":["../../src/services/notifier.ts"],"mappings":";;;YAUY,aAAa,KAAK;EAC5B,QAAQ;EACR;EACA;EACA;;qBASW;;EAKX,YAAY,IAAI;EAmDhB,OAAO,KAAK,kBAAkB,OAAO,aAAa"}
@@ -1,5 +1,5 @@
1
- import { t as log } from "../log-DYHEYX_z.mjs";
2
- import { t as overlay } from "../overlay-9xNgsuuy.mjs";
1
+ import { t as log } from "../log-DrYLRdMW.mjs";
2
+ import { t as overlay } from "../overlay-9WXYiGgW.mjs";
3
3
  //#region src/services/notifier.ts
4
4
  var Notifier = class {
5
5
  #ui;
@@ -1 +1 @@
1
- {"version":3,"file":"notifier.mjs","names":["#ui","#active","#check","#queue","#start","#notif"],"sources":["../../src/services/notifier.ts"],"sourcesContent":["import type { LogLevel } from \"@zaly/shared/logger\"\nimport type { Node } from \"../core/node.ts\"\nimport type { Reactive } from \"../core/reactive.ts\"\nimport type { OverlayRenderState, OverlaySurface } from \"../renderer/overlay.ts\"\nimport type { LogState } from \"../widgets/log.ts\"\nimport type { Overlay } from \"../widgets/overlay.ts\"\n\nimport { log } from \"../widgets/log.ts\"\nimport { overlay } from \"../widgets/overlay.ts\"\n\nexport type NotifProps = Omit<LogState, \"content\" | \"level\"> & {\n level?: LogLevel\n timeout?: number\n keep?: () => boolean\n onClose?: () => void\n}\n\ntype Notif = {\n node: Overlay\n opts?: NotifProps\n state?: OverlayRenderState\n}\n\nexport class Notifier {\n #ui: OverlaySurface\n #active = new Map<Node, Notif>()\n #queue: Notif[] = []\n\n constructor(ui: OverlaySurface) {\n this.#ui = ui\n ui.on(\"render-node\", (state) => {\n const notif = this.#active.get(state.node)\n if (!notif) return\n notif.state = state\n setImmediate(() => this.#check())\n })\n }\n\n #notif(msg: Reactive<string>, opts?: NotifProps) {\n return overlay(\n { padding: [0, 0], width: 40, x: -40, y: 1, zIndex: 1000 },\n log({\n level: \"info\",\n ...opts,\n content: msg,\n style: \"notif\",\n })\n )\n }\n\n #start(notif: Notif) {\n this.#active.set(notif.node, notif)\n notif.node.state.visible = true\n const t = setInterval(() => {\n if (notif.opts?.keep?.()) return\n clearInterval(t)\n this.#active.delete(notif.node)\n this.#ui.close(notif.node)\n notif.opts?.onClose?.()\n this.#check()\n }, notif.opts?.timeout ?? 3000)\n t.unref()\n }\n\n #check() {\n while (this.#queue.length) {\n const termHeight = this.#ui.$r.terminal.rows\n let y = 2\n for (const n of this.#active.values()) {\n if (!n.state) return // wait till it renders\n y = Math.max(y, n.state.y + n.state.height + 1)\n }\n if (termHeight - y < 10) return // Don't start if less than 10 rows remain below the last notif\n const next = this.#queue.shift()!\n next.node.state.y = y\n this.#start(next)\n }\n }\n\n notify(msg: Reactive<string>, opts?: NotifProps): Overlay {\n const node = this.#ui.add(() => this.#notif(msg, opts))\n this.#queue.push({ node, opts })\n setImmediate(() => this.#check())\n return node\n }\n}\n"],"mappings":";;;AAuBA,IAAa,WAAb,MAAsB;CACpB;CACA,0BAAU,IAAI,IAAiB;CAC/B,SAAkB,CAAC;CAEnB,YAAY,IAAoB;EAC9B,KAAKA,MAAM;EACX,GAAG,GAAG,gBAAgB,UAAU;GAC9B,MAAM,QAAQ,KAAKC,QAAQ,IAAI,MAAM,IAAI;GACzC,IAAI,CAAC,OAAO;GACZ,MAAM,QAAQ;GACd,mBAAmB,KAAKC,OAAO,CAAC;EAClC,CAAC;CACH;CAEA,OAAO,KAAuB,MAAmB;EAC/C,OAAO,QACL;GAAE,SAAS,CAAC,GAAG,CAAC;GAAG,OAAO;GAAI,GAAG;GAAK,GAAG;GAAG,QAAQ;EAAK,GACzD,IAAI;GACF,OAAO;GACP,GAAG;GACH,SAAS;GACT,OAAO;EACT,CAAC,CACH;CACF;CAEA,OAAO,OAAc;EACnB,KAAKD,QAAQ,IAAI,MAAM,MAAM,KAAK;EAClC,MAAM,KAAK,MAAM,UAAU;EAC3B,MAAM,IAAI,kBAAkB;GAC1B,IAAI,MAAM,MAAM,OAAO,GAAG;GAC1B,cAAc,CAAC;GACf,KAAKA,QAAQ,OAAO,MAAM,IAAI;GAC9B,KAAKD,IAAI,MAAM,MAAM,IAAI;GACzB,MAAM,MAAM,UAAU;GACtB,KAAKE,OAAO;EACd,GAAG,MAAM,MAAM,WAAW,GAAI;EAC9B,EAAE,MAAM;CACV;CAEA,SAAS;EACP,OAAO,KAAKC,OAAO,QAAQ;GACzB,MAAM,aAAa,KAAKH,IAAI,GAAG,SAAS;GACxC,IAAI,IAAI;GACR,KAAK,MAAM,KAAK,KAAKC,QAAQ,OAAO,GAAG;IACrC,IAAI,CAAC,EAAE,OAAO;IACd,IAAI,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,SAAS,CAAC;GAChD;GACA,IAAI,aAAa,IAAI,IAAI;GACzB,MAAM,OAAO,KAAKE,OAAO,MAAM;GAC/B,KAAK,KAAK,MAAM,IAAI;GACpB,KAAKC,OAAO,IAAI;EAClB;CACF;CAEA,OAAO,KAAuB,MAA4B;EACxD,MAAM,OAAO,KAAKJ,IAAI,UAAU,KAAKK,OAAO,KAAK,IAAI,CAAC;EACtD,KAAKF,OAAO,KAAK;GAAE;GAAM;EAAK,CAAC;EAC/B,mBAAmB,KAAKD,OAAO,CAAC;EAChC,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"notifier.mjs","names":[],"sources":["../../src/services/notifier.ts"],"sourcesContent":["import type { LogLevel } from \"@zaly/shared/logger\"\nimport type { Node } from \"../core/node.ts\"\nimport type { Reactive } from \"../core/reactive.ts\"\nimport type { OverlayRenderState, OverlaySurface } from \"../renderer/overlay.ts\"\nimport type { LogState } from \"../widgets/log.ts\"\nimport type { Overlay } from \"../widgets/overlay.ts\"\n\nimport { log } from \"../widgets/log.ts\"\nimport { overlay } from \"../widgets/overlay.ts\"\n\nexport type NotifProps = Omit<LogState, \"content\" | \"level\"> & {\n level?: LogLevel\n timeout?: number\n keep?: () => boolean\n onClose?: () => void\n}\n\ntype Notif = {\n node: Overlay\n opts?: NotifProps\n state?: OverlayRenderState\n}\n\nexport class Notifier {\n #ui: OverlaySurface\n #active = new Map<Node, Notif>()\n #queue: Notif[] = []\n\n constructor(ui: OverlaySurface) {\n this.#ui = ui\n ui.on(\"render-node\", (state) => {\n const notif = this.#active.get(state.node)\n if (!notif) return\n notif.state = state\n setImmediate(() => this.#check())\n })\n }\n\n #notif(msg: Reactive<string>, opts?: NotifProps) {\n return overlay(\n { padding: [0, 0], width: 40, x: -40, y: 1, zIndex: 1000 },\n log({\n level: \"info\",\n ...opts,\n content: msg,\n style: \"notif\",\n })\n )\n }\n\n #start(notif: Notif) {\n this.#active.set(notif.node, notif)\n notif.node.state.visible = true\n const t = setInterval(() => {\n if (notif.opts?.keep?.()) return\n clearInterval(t)\n this.#active.delete(notif.node)\n this.#ui.close(notif.node)\n notif.opts?.onClose?.()\n this.#check()\n }, notif.opts?.timeout ?? 3000)\n t.unref()\n }\n\n #check() {\n while (this.#queue.length) {\n const termHeight = this.#ui.$r.terminal.rows\n let y = 2\n for (const n of this.#active.values()) {\n if (!n.state) return // wait till it renders\n y = Math.max(y, n.state.y + n.state.height + 1)\n }\n if (termHeight - y < 10) return // Don't start if less than 10 rows remain below the last notif\n const next = this.#queue.shift()!\n next.node.state.y = y\n this.#start(next)\n }\n }\n\n notify(msg: Reactive<string>, opts?: NotifProps): Overlay {\n const node = this.#ui.add(() => this.#notif(msg, opts))\n this.#queue.push({ node, opts })\n setImmediate(() => this.#check())\n return node\n }\n}\n"],"mappings":";;;AAuBA,IAAa,WAAb,MAAsB;CACpB;CACA,0BAAU,IAAI,IAAiB;CAC/B,SAAkB,CAAC;CAEnB,YAAY,IAAoB;EAC9B,KAAK,MAAM;EACX,GAAG,GAAG,gBAAgB,UAAU;GAC9B,MAAM,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI;GACzC,IAAI,CAAC,OAAO;GACZ,MAAM,QAAQ;GACd,mBAAmB,KAAK,OAAO,CAAC;EAClC,CAAC;CACH;CAEA,OAAO,KAAuB,MAAmB;EAC/C,OAAO,QACL;GAAE,SAAS,CAAC,GAAG,CAAC;GAAG,OAAO;GAAI,GAAG;GAAK,GAAG;GAAG,QAAQ;EAAK,GACzD,IAAI;GACF,OAAO;GACP,GAAG;GACH,SAAS;GACT,OAAO;EACT,CAAC,CACH;CACF;CAEA,OAAO,OAAc;EACnB,KAAK,QAAQ,IAAI,MAAM,MAAM,KAAK;EAClC,MAAM,KAAK,MAAM,UAAU;EAC3B,MAAM,IAAI,kBAAkB;GAC1B,IAAI,MAAM,MAAM,OAAO,GAAG;GAC1B,cAAc,CAAC;GACf,KAAK,QAAQ,OAAO,MAAM,IAAI;GAC9B,KAAK,IAAI,MAAM,MAAM,IAAI;GACzB,MAAM,MAAM,UAAU;GACtB,KAAK,OAAO;EACd,GAAG,MAAM,MAAM,WAAW,GAAI;EAC9B,EAAE,MAAM;CACV;CAEA,SAAS;EACP,OAAO,KAAK,OAAO,QAAQ;GACzB,MAAM,aAAa,KAAK,IAAI,GAAG,SAAS;GACxC,IAAI,IAAI;GACR,KAAK,MAAM,KAAK,KAAK,QAAQ,OAAO,GAAG;IACrC,IAAI,CAAC,EAAE,OAAO;IACd,IAAI,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,SAAS,CAAC;GAChD;GACA,IAAI,aAAa,IAAI,IAAI;GACzB,MAAM,OAAO,KAAK,OAAO,MAAM;GAC/B,KAAK,KAAK,MAAM,IAAI;GACpB,KAAK,OAAO,IAAI;EAClB;CACF;CAEA,OAAO,KAAuB,MAA4B;EACxD,MAAM,OAAO,KAAK,IAAI,UAAU,KAAK,OAAO,KAAK,IAAI,CAAC;EACtD,KAAK,OAAO,KAAK;GAAE;GAAM;EAAK,CAAC;EAC/B,mBAAmB,KAAK,OAAO,CAAC;EAChC,OAAO;CACT;AACF"}
@@ -1,13 +1,13 @@
1
- import { C as OverlaySurface, F as Overlay, Lt as ActionFilter, Q as Accessor, nt as Reactive, rt as Ref } from "../queries-DH3bj74K.mjs";
2
- import { t as Input } from "../input-B5Vy-iaa.mjs";
3
- import { i as Select, t as Option } from "../select-CbmAZdpt.mjs";
4
- import { i as PickerTreeProps, n as PickerItem, r as PickerSelectProps } from "../picker-D8OLb6kZ.mjs";
5
- import { n as Widget } from "../widget-M7jD8Rgg.mjs";
1
+ import { C as OverlaySurface, F as Overlay, Lt as ActionFilter, Q as Accessor, nt as Reactive, rt as Ref } from "../queries-Cvalgu6P.mjs";
2
+ import { t as Input } from "../input-Dylds_sI.mjs";
3
+ import { i as Select, t as Option } from "../select-zGd5pbiB.mjs";
4
+ import { i as PickerTreeProps, n as PickerItem, r as PickerSelectProps } from "../picker-JL8lZfRH.mjs";
5
+ import { n as Widget } from "../widget-DtJU2-BJ.mjs";
6
6
  //#region src/services/picker.d.ts
7
- type ToggleItem = PickerItem & {
7
+ export type ToggleItem = PickerItem & {
8
8
  enabled?: boolean;
9
9
  };
10
- type PickOpts<T extends Option = Option> = {
10
+ export type PickOpts<T extends Option = Option> = {
11
11
  title?: Reactive<string>;
12
12
  multi?: boolean | {
13
13
  action?: boolean;
@@ -19,7 +19,7 @@ type PickOpts<T extends Option = Option> = {
19
19
  restoreInput?: boolean;
20
20
  whichKey?: boolean | ActionFilter;
21
21
  } & (Omit<PickerSelectProps<T>, "input"> | Omit<PickerTreeProps<T>, "input">);
22
- declare class Picker {
22
+ export declare class Picker {
23
23
  #private;
24
24
  constructor(ui: OverlaySurface, input: Input);
25
25
  get isOpen(): Accessor<boolean>;
@@ -32,5 +32,4 @@ declare class Picker {
32
32
  pick<T extends Option = Option>(opts: PickOpts<T>): Promise<T | undefined>;
33
33
  }
34
34
  //#endregion
35
- export { PickOpts, Picker, ToggleItem };
36
35
  //# sourceMappingURL=picker.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker.d.mts","names":[],"sources":["../../src/services/picker.ts"],"mappings":";;;;;;KAkBY,aAAa;EAAe;;KAE5B,SAAS,UAAU,SAAS;EACtC,QAAQ;EACR;IAAoB;IAAkB;;EACtC,MAAM,IAAI,OAAO;EACjB,UAAU;EACV;EACA;EACA,qBAAqB;KAClB,KAAK,kBAAkB,eAAe,KAAK,gBAAgB;cAEnD;;EAMX,YAAY,IAAI,gBAAgB,OAAO;MAKnC,UALmC;EAyFvC,MAAM;IAAQ;;MAQV,UAAM;EAIV;EAIA;EAIM,KAAK,UAAU,SAAS,QAAQ,MAAM,SAAS,KAAK,QAAQ"}
1
+ {"version":3,"file":"picker.d.mts","names":[],"sources":["../../src/services/picker.ts"],"mappings":";;;;;;YAkBY,aAAa;EAAe;;YAE5B,SAAS,UAAU,SAAS;EACtC,QAAQ;EACR;IAAoB;IAAkB;;EACtC,MAAM,IAAI,OAAO;EACjB,UAAU;EACV;EACA;EACA,qBAAqB;KAClB,KAAK,kBAAkB,eAAe,KAAK,gBAAgB;qBAEnD;;EAMX,YAAY,IAAI,gBAAgB,OAAO;MAKnC,UALmC;EAyFvC,MAAM;IAAQ;;MAQV,UAAM;EAIV;EAIA;EAIM,KAAK,UAAU,SAAS,QAAQ,MAAM,SAAS,KAAK,QAAQ"}
@@ -1,10 +1,10 @@
1
1
  import { c as createRef, y as signal } from "../reactive-f7NpAi69.mjs";
2
- import { r as isMarkdown } from "../inspect-BaKG6cU_.mjs";
3
- import { n as text } from "../text-DILrol9j.mjs";
4
- import { n as markdown } from "../markdown-CYHHoYu0.mjs";
5
- import { t as overlay } from "../overlay-9xNgsuuy.mjs";
6
- import { t as divider } from "../divider-cclEAdPx.mjs";
7
- import { t as picker } from "../picker-cH-rc7-X.mjs";
2
+ import { r as isMarkdown } from "../inspect-xdSq5Hjq.mjs";
3
+ import { n as text } from "../text-BLz1tRoC.mjs";
4
+ import { n as markdown } from "../markdown-lRhc_4Cd.mjs";
5
+ import { t as overlay } from "../overlay-9WXYiGgW.mjs";
6
+ import { t as divider } from "../divider-l0-JPEIm.mjs";
7
+ import { t as picker } from "../picker-BqHINl_a.mjs";
8
8
  //#region src/services/picker.ts
9
9
  var Picker = class {
10
10
  #ui;
@@ -21,8 +21,10 @@ var Picker = class {
21
21
  #pick(opts) {
22
22
  const children = [];
23
23
  if (opts.title) children.push(markdown(opts.title, { style: "borderTitle" }));
24
- if (opts.details) if (typeof opts.details === "string") children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details));
25
- else children.push(opts.details());
24
+ if (opts.details) {
25
+ if (typeof opts.details === "string") children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details));
26
+ else children.push(opts.details());
27
+ }
26
28
  const select = picker({
27
29
  maxHeight: 8,
28
30
  ...opts
@@ -1 +1 @@
1
- {"version":3,"file":"picker.mjs","names":["#ui","#input","#open","#multi","#whichKey","#active","#pick"],"sources":["../../src/services/picker.ts"],"sourcesContent":["import type { Node } from \"../core/node.ts\"\nimport type { Reactive, Ref } from \"../core/reactive.ts\"\nimport type { ActionFilter } from \"../input/actions.ts\"\nimport type { OverlaySurface } from \"../renderer/overlay.ts\"\nimport type { Input } from \"../widgets/input.ts\"\nimport type { Overlay } from \"../widgets/overlay.ts\"\nimport type { PickerItem, PickerSelectProps, PickerTreeProps } from \"../widgets/picker.ts\"\nimport type { Option, Select } from \"../widgets/select.ts\"\nimport type { Widget } from \"../widgets/widget.ts\"\n\nimport { createRef, signal } from \"../core/reactive.ts\"\nimport { isMarkdown } from \"../style/inspect.ts\"\nimport { divider } from \"../widgets/divider.ts\"\nimport { markdown } from \"../widgets/markdown.ts\"\nimport { overlay } from \"../widgets/overlay.ts\"\nimport { picker } from \"../widgets/picker.ts\"\nimport { text } from \"../widgets/text.ts\"\n\nexport type ToggleItem = PickerItem & { enabled?: boolean }\n\nexport type PickOpts<T extends Option = Option> = {\n title?: Reactive<string>\n multi?: boolean | { action?: boolean; render?: boolean }\n ref?: Ref<Select<T>>\n details?: Widget | string\n clearInput?: boolean\n restoreInput?: boolean\n whichKey?: boolean | ActionFilter\n} & (Omit<PickerSelectProps<T>, \"input\"> | Omit<PickerTreeProps<T>, \"input\">)\n\nexport class Picker {\n #ui: OverlaySurface\n #input: Input\n #open = signal(false)\n #active: Overlay[] = []\n\n constructor(ui: OverlaySurface, input: Input) {\n this.#ui = ui\n this.#input = input\n }\n\n get isOpen() {\n return this.#open.get\n }\n\n #pick<T extends Option = Option>(\n opts: PickOpts<T> & { input: Input; ref: Ref<Select<T>> }\n ): Overlay {\n const children: Node[] = []\n if (opts.title) children.push(markdown(opts.title, { style: \"borderTitle\" }))\n if (opts.details) {\n if (typeof opts.details === \"string\")\n children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details))\n else children.push(opts.details())\n }\n\n const select = picker<T>({ maxHeight: 8, ...opts })\n select.ref(opts.ref)\n if (opts.multi)\n this.#multi(select as unknown as Select<ToggleItem>, opts.multi === true ? {} : opts.multi)\n\n const wk = this.#whichKey(select as unknown as Select, opts.whichKey)\n if (wk) children.push(wk)\n\n if (children.length > 0) children.push(divider({ style: \"border\" }))\n return overlay(\n {\n padding: [0, 1],\n relative: \"ui\",\n style: \"ui\",\n verticalAnchor: \"bottom\",\n x: 0,\n y: 1,\n },\n divider({ style: \"accent\" }),\n ...children,\n select\n )\n }\n\n #whichKey(select: Select, opts: PickOpts[\"whichKey\"]): Node | undefined {\n if (opts === false || opts === undefined) return\n const filter = opts === true ? { hidden: false } : opts\n const ret = text((ctx) => {\n const s = ctx.style\n const bo = s.syntaxDelimiter.dim(\"<\")\n const bc = s.syntaxDelimiter.dim(\">\")\n const wk = this.#ui.$r.actions.whichKey(select, { filter })\n const parts = wk.map((a) => {\n const name = s.muted(a.desc ?? a.cmd ?? a.id)\n const keys = a.keys.map((k) => bo + s.syntaxSpecial.dim(k) + bc).join(s.delim.dim(\"/\"))\n return `${keys} ${name.toLowerCase()}`\n })\n return parts.join(s.delim(\" • \"))\n })\n\n select.once(\"mount\", () => ret.invalidate())\n return ret\n }\n\n #multi(select: Select<ToggleItem>, opts: { action?: boolean; render?: boolean } = {}) {\n if (opts.render !== false)\n select.extendRenderer((prev) => (item, ctx) => {\n const s = ctx.style\n const row = prev(item, { ...ctx, width: ctx.width - 4 })\n const enabled = item.enabled\n if (enabled === undefined) return row\n return `${enabled ? s.mdListChecked(\"[x]\") : s.mdListUnchecked(\"[ ]\")} ${row}`\n })\n if (opts.action !== false)\n select.withActions({\n \"picker.toggle\": {\n desc: \"Toggle item\",\n fn: () => {\n const active = select.item\n if (!active) return\n active.enabled = !active.enabled\n select.invalidate()\n },\n keys: [\"tab\", \"enter\"],\n priority: 10,\n },\n })\n }\n\n close(opts: { all?: boolean } = {}) {\n while (this.#active.length > 0) {\n const node = this.#active.pop()!\n this.#ui.close(node)\n if (!opts.all) break\n }\n }\n\n get active() {\n return this.#active.at(-1)\n }\n\n suspend() {\n this.active?.hide()\n }\n\n resume() {\n this.active?.show()\n }\n\n async pick<T extends Option = Option>(opts: PickOpts<T>): Promise<T | undefined> {\n this.active?.hide()\n const res = Promise.withResolvers<T | undefined>()\n let settled = false\n const clear = opts.clearInput ?? true\n const restore = opts.restoreInput ?? true\n const prevInput = clear ? this.#input.consume().value : undefined\n const ref = opts.ref ?? createRef<Select<T>>()\n const node = this.#ui.open(() => this.#pick({ ...opts, input: this.#input, ref }))\n this.#active.push(node)\n this.#open.set(true)\n const select = ref()\n\n const ac = new AbortController()\n const done = (value?: T) => {\n if (settled) return\n settled = true\n ac.abort()\n this.#active = this.#active.filter((n) => n !== node)\n if (restore && prevInput !== undefined) this.#input.replace(prevInput)\n else if (!restore) this.#input.consume()\n res.resolve(value)\n this.#ui.close(node)\n this.active?.show()\n this.#open.set(this.#active.length > 0)\n }\n\n node.once(\"unmount\", () => done(), { signal: ac.signal })\n select.once(\"close\", () => done(), { signal: ac.signal })\n select.once(\"accept\", ({ item }) => done(item), { signal: ac.signal })\n select.once(\"complete\", ({ item }) => done(item), { signal: ac.signal })\n\n return res.promise\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"picker.mjs","names":[],"sources":["../../src/services/picker.ts"],"sourcesContent":["import type { Node } from \"../core/node.ts\"\nimport type { Reactive, Ref } from \"../core/reactive.ts\"\nimport type { ActionFilter } from \"../input/actions.ts\"\nimport type { OverlaySurface } from \"../renderer/overlay.ts\"\nimport type { Input } from \"../widgets/input.ts\"\nimport type { Overlay } from \"../widgets/overlay.ts\"\nimport type { PickerItem, PickerSelectProps, PickerTreeProps } from \"../widgets/picker.ts\"\nimport type { Option, Select } from \"../widgets/select.ts\"\nimport type { Widget } from \"../widgets/widget.ts\"\n\nimport { createRef, signal } from \"../core/reactive.ts\"\nimport { isMarkdown } from \"../style/inspect.ts\"\nimport { divider } from \"../widgets/divider.ts\"\nimport { markdown } from \"../widgets/markdown.ts\"\nimport { overlay } from \"../widgets/overlay.ts\"\nimport { picker } from \"../widgets/picker.ts\"\nimport { text } from \"../widgets/text.ts\"\n\nexport type ToggleItem = PickerItem & { enabled?: boolean }\n\nexport type PickOpts<T extends Option = Option> = {\n title?: Reactive<string>\n multi?: boolean | { action?: boolean; render?: boolean }\n ref?: Ref<Select<T>>\n details?: Widget | string\n clearInput?: boolean\n restoreInput?: boolean\n whichKey?: boolean | ActionFilter\n} & (Omit<PickerSelectProps<T>, \"input\"> | Omit<PickerTreeProps<T>, \"input\">)\n\nexport class Picker {\n #ui: OverlaySurface\n #input: Input\n #open = signal(false)\n #active: Overlay[] = []\n\n constructor(ui: OverlaySurface, input: Input) {\n this.#ui = ui\n this.#input = input\n }\n\n get isOpen() {\n return this.#open.get\n }\n\n #pick<T extends Option = Option>(\n opts: PickOpts<T> & { input: Input; ref: Ref<Select<T>> }\n ): Overlay {\n const children: Node[] = []\n if (opts.title) children.push(markdown(opts.title, { style: \"borderTitle\" }))\n if (opts.details) {\n if (typeof opts.details === \"string\")\n children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details))\n else children.push(opts.details())\n }\n\n const select = picker<T>({ maxHeight: 8, ...opts })\n select.ref(opts.ref)\n if (opts.multi)\n this.#multi(select as unknown as Select<ToggleItem>, opts.multi === true ? {} : opts.multi)\n\n const wk = this.#whichKey(select as unknown as Select, opts.whichKey)\n if (wk) children.push(wk)\n\n if (children.length > 0) children.push(divider({ style: \"border\" }))\n return overlay(\n {\n padding: [0, 1],\n relative: \"ui\",\n style: \"ui\",\n verticalAnchor: \"bottom\",\n x: 0,\n y: 1,\n },\n divider({ style: \"accent\" }),\n ...children,\n select\n )\n }\n\n #whichKey(select: Select, opts: PickOpts[\"whichKey\"]): Node | undefined {\n if (opts === false || opts === undefined) return\n const filter = opts === true ? { hidden: false } : opts\n const ret = text((ctx) => {\n const s = ctx.style\n const bo = s.syntaxDelimiter.dim(\"<\")\n const bc = s.syntaxDelimiter.dim(\">\")\n const wk = this.#ui.$r.actions.whichKey(select, { filter })\n const parts = wk.map((a) => {\n const name = s.muted(a.desc ?? a.cmd ?? a.id)\n const keys = a.keys.map((k) => bo + s.syntaxSpecial.dim(k) + bc).join(s.delim.dim(\"/\"))\n return `${keys} ${name.toLowerCase()}`\n })\n return parts.join(s.delim(\" • \"))\n })\n\n select.once(\"mount\", () => ret.invalidate())\n return ret\n }\n\n #multi(select: Select<ToggleItem>, opts: { action?: boolean; render?: boolean } = {}) {\n if (opts.render !== false)\n select.extendRenderer((prev) => (item, ctx) => {\n const s = ctx.style\n const row = prev(item, { ...ctx, width: ctx.width - 4 })\n const enabled = item.enabled\n if (enabled === undefined) return row\n return `${enabled ? s.mdListChecked(\"[x]\") : s.mdListUnchecked(\"[ ]\")} ${row}`\n })\n if (opts.action !== false)\n select.withActions({\n \"picker.toggle\": {\n desc: \"Toggle item\",\n fn: () => {\n const active = select.item\n if (!active) return\n active.enabled = !active.enabled\n select.invalidate()\n },\n keys: [\"tab\", \"enter\"],\n priority: 10,\n },\n })\n }\n\n close(opts: { all?: boolean } = {}) {\n while (this.#active.length > 0) {\n const node = this.#active.pop()!\n this.#ui.close(node)\n if (!opts.all) break\n }\n }\n\n get active() {\n return this.#active.at(-1)\n }\n\n suspend() {\n this.active?.hide()\n }\n\n resume() {\n this.active?.show()\n }\n\n async pick<T extends Option = Option>(opts: PickOpts<T>): Promise<T | undefined> {\n this.active?.hide()\n const res = Promise.withResolvers<T | undefined>()\n let settled = false\n const clear = opts.clearInput ?? true\n const restore = opts.restoreInput ?? true\n const prevInput = clear ? this.#input.consume().value : undefined\n const ref = opts.ref ?? createRef<Select<T>>()\n const node = this.#ui.open(() => this.#pick({ ...opts, input: this.#input, ref }))\n this.#active.push(node)\n this.#open.set(true)\n const select = ref()\n\n const ac = new AbortController()\n const done = (value?: T) => {\n if (settled) return\n settled = true\n ac.abort()\n this.#active = this.#active.filter((n) => n !== node)\n if (restore && prevInput !== undefined) this.#input.replace(prevInput)\n else if (!restore) this.#input.consume()\n res.resolve(value)\n this.#ui.close(node)\n this.active?.show()\n this.#open.set(this.#active.length > 0)\n }\n\n node.once(\"unmount\", () => done(), { signal: ac.signal })\n select.once(\"close\", () => done(), { signal: ac.signal })\n select.once(\"accept\", ({ item }) => done(item), { signal: ac.signal })\n select.once(\"complete\", ({ item }) => done(item), { signal: ac.signal })\n\n return res.promise\n }\n}\n"],"mappings":"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"}
@@ -1,24 +1,24 @@
1
- import { C as OverlaySurface, Q as Accessor } from "../queries-DH3bj74K.mjs";
2
- import { t as Input } from "../input-B5Vy-iaa.mjs";
3
- import { n as PickerItem } from "../picker-D8OLb6kZ.mjs";
4
- import { n as Widget } from "../widget-M7jD8Rgg.mjs";
1
+ import { C as OverlaySurface, Q as Accessor } from "../queries-Cvalgu6P.mjs";
2
+ import { t as Input } from "../input-Dylds_sI.mjs";
3
+ import { n as PickerItem } from "../picker-JL8lZfRH.mjs";
4
+ import { n as Widget } from "../widget-DtJU2-BJ.mjs";
5
5
  //#region src/services/prompt.d.ts
6
- type ToggleItem = PickerItem & {
6
+ export type ToggleItem = PickerItem & {
7
7
  enabled?: boolean;
8
8
  };
9
- type PromptOpts = {
9
+ export type PromptOpts = {
10
10
  title?: string;
11
11
  details?: Widget | string;
12
12
  clearInput?: boolean;
13
13
  restoreInput?: boolean;
14
14
  };
15
- type PromptEvents = {
15
+ export type PromptEvents = {
16
16
  close: {};
17
17
  submit: {
18
18
  value: string;
19
19
  };
20
20
  };
21
- declare class Prompt {
21
+ export declare class Prompt {
22
22
  #private;
23
23
  constructor(ui: OverlaySurface, input: Input);
24
24
  get isOpen(): Accessor<boolean>;
@@ -26,5 +26,4 @@ declare class Prompt {
26
26
  open(msg: string | PromptOpts): Promise<string | undefined>;
27
27
  }
28
28
  //#endregion
29
- export { Prompt, PromptEvents, PromptOpts, ToggleItem };
30
29
  //# sourceMappingURL=prompt.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.mts","names":[],"sources":["../../src/services/prompt.ts"],"mappings":";;;;;KAcY,aAAa;EAAe;;KAE5B;EACV;EACA,UAAU;EACV;EACA;;KAGU;EACV;EACA;IAAU;;;cAGC;;EAMX,YAAY,IAAI,gBAAgB,OAAO;MAKnC,UALmC;EA+CvC;EAOM,KAAK,cAAc,aAAa"}
1
+ {"version":3,"file":"prompt.d.mts","names":[],"sources":["../../src/services/prompt.ts"],"mappings":";;;;;YAcY,aAAa;EAAe;;YAE5B;EACV;EACA,UAAU;EACV;EACA;;YAGU;EACV;EACA;IAAU;;;qBAGC;;EAMX,YAAY,IAAI,gBAAgB,OAAO;MAKnC,UALmC;EA+CvC;EAOM,KAAK,cAAc,aAAa"}
@@ -1,9 +1,9 @@
1
1
  import { y as signal } from "../reactive-f7NpAi69.mjs";
2
- import { r as isMarkdown } from "../inspect-BaKG6cU_.mjs";
3
- import { n as text } from "../text-DILrol9j.mjs";
4
- import { n as markdown } from "../markdown-CYHHoYu0.mjs";
5
- import { t as overlay } from "../overlay-9xNgsuuy.mjs";
6
- import { t as divider } from "../divider-cclEAdPx.mjs";
2
+ import { r as isMarkdown } from "../inspect-xdSq5Hjq.mjs";
3
+ import { n as text } from "../text-BLz1tRoC.mjs";
4
+ import { n as markdown } from "../markdown-lRhc_4Cd.mjs";
5
+ import { t as overlay } from "../overlay-9WXYiGgW.mjs";
6
+ import { t as divider } from "../divider-l0-JPEIm.mjs";
7
7
  //#region src/services/prompt.ts
8
8
  var Prompt = class {
9
9
  #ui;
@@ -20,8 +20,10 @@ var Prompt = class {
20
20
  #overlay(opts) {
21
21
  const children = [];
22
22
  if (opts.title) children.push(isMarkdown(opts.title) ? markdown(opts.title, { style: "borderTitle" }) : text(opts.title, { style: "borderTitle" }));
23
- if (opts.details) if (typeof opts.details === "string") children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details));
24
- else children.push(opts.details());
23
+ if (opts.details) {
24
+ if (typeof opts.details === "string") children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details));
25
+ else children.push(opts.details());
26
+ }
25
27
  const ret = overlay({
26
28
  padding: [0, 1],
27
29
  relative: "ui",
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.mjs","names":["#ui","#input","#open","#node","#overlay"],"sources":["../../src/services/prompt.ts"],"sourcesContent":["import type { Node } from \"../core/node.ts\"\nimport type { OverlaySurface } from \"../renderer/overlay.ts\"\nimport type { Input } from \"../widgets/input.ts\"\nimport type { Overlay } from \"../widgets/overlay.ts\"\nimport type { PickerItem } from \"../widgets/picker.ts\"\nimport type { Widget } from \"../widgets/widget.ts\"\n\nimport { signal } from \"../core/reactive.ts\"\nimport { isMarkdown } from \"../style/inspect.ts\"\nimport { divider } from \"../widgets/divider.ts\"\nimport { markdown } from \"../widgets/markdown.ts\"\nimport { overlay } from \"../widgets/overlay.ts\"\nimport { text } from \"../widgets/text.ts\"\n\nexport type ToggleItem = PickerItem & { enabled?: boolean }\n\nexport type PromptOpts = {\n title?: string\n details?: Widget | string\n clearInput?: boolean\n restoreInput?: boolean\n}\n\nexport type PromptEvents = {\n close: {}\n submit: { value: string }\n}\n\nexport class Prompt {\n #ui: OverlaySurface\n #input: Input\n #open = signal(false)\n #node?: Overlay\n\n constructor(ui: OverlaySurface, input: Input) {\n this.#ui = ui\n this.#input = input\n }\n\n get isOpen() {\n return this.#open.get\n }\n\n #overlay(opts: PromptOpts) {\n const children: Node[] = []\n if (opts.title)\n children.push(\n isMarkdown(opts.title)\n ? markdown(opts.title, { style: \"borderTitle\" })\n : text(opts.title, { style: \"borderTitle\" })\n )\n if (opts.details) {\n if (typeof opts.details === \"string\")\n children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details))\n else children.push(opts.details())\n }\n\n const ret = overlay(\n {\n padding: [0, 1],\n relative: \"ui\",\n style: \"ui\",\n verticalAnchor: \"bottom\",\n x: 0,\n y: 1,\n },\n divider({ style: \"accent\" }),\n ...children\n ).withEvents<PromptEvents>()\n return ret.withActions({\n \"prompt.close\": {\n fn: () => void ret.emit(\"close\"),\n keys: [\"esc\"],\n },\n \"prompt.submit\": {\n fn: () => void ret.emit(\"submit\", { value: this.#input.state.value ?? \"\" }),\n keys: [\"enter\"],\n },\n })\n }\n\n close() {\n const node = this.#node\n if (!node) return\n this.#ui.close(node)\n this.#node = undefined\n }\n\n async open(msg: string | PromptOpts): Promise<string | undefined> {\n this.close()\n const opts = typeof msg === \"string\" ? { title: msg } : msg\n const res = Promise.withResolvers<string | undefined>()\n let settled = false\n const clear = opts.clearInput ?? true\n const restore = opts.restoreInput ?? true\n const prevInput = clear ? this.#input.consume().value : undefined\n const node = this.#ui.open(() => this.#overlay(opts))\n this.#node = node\n this.#open.set(true)\n this.#input.addActionTarget(node)\n\n const ac = new AbortController()\n const done = (value?: string) => {\n if (settled) return\n settled = true\n ac.abort()\n this.#input.removeActionTarget(node)\n if (restore && prevInput !== undefined) this.#input.replace(prevInput)\n else if (!restore) this.#input.consume()\n res.resolve(value)\n this.close()\n this.#open.set(false)\n }\n\n node.once(\"unmount\", () => done(), { signal: ac.signal })\n node.once(\"close\", () => done(), { signal: ac.signal })\n node.once(\"submit\", ({ value }) => done(value), { signal: ac.signal })\n\n return res.promise\n }\n}\n"],"mappings":";;;;;;;AA4BA,IAAa,SAAb,MAAoB;CAClB;CACA;CACA,QAAQ,OAAO,KAAK;CACpB;CAEA,YAAY,IAAoB,OAAc;EAC5C,KAAKA,MAAM;EACX,KAAKC,SAAS;CAChB;CAEA,IAAI,SAAS;EACX,OAAO,KAAKC,MAAM;CACpB;CAEA,SAAS,MAAkB;EACzB,MAAM,WAAmB,CAAC;EAC1B,IAAI,KAAK,OACP,SAAS,KACP,WAAW,KAAK,KAAK,IACjB,SAAS,KAAK,OAAO,EAAE,OAAO,cAAc,CAAC,IAC7C,KAAK,KAAK,OAAO,EAAE,OAAO,cAAc,CAAC,CAC/C;EACF,IAAI,KAAK,SACP,IAAI,OAAO,KAAK,YAAY,UAC1B,SAAS,KAAK,WAAW,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC;OACjF,SAAS,KAAK,KAAK,QAAQ,CAAC;EAGnC,MAAM,MAAM,QACV;GACE,SAAS,CAAC,GAAG,CAAC;GACd,UAAU;GACV,OAAO;GACP,gBAAgB;GAChB,GAAG;GACH,GAAG;EACL,GACA,QAAQ,EAAE,OAAO,SAAS,CAAC,GAC3B,GAAG,QACL,CAAC,CAAC,WAAyB;EAC3B,OAAO,IAAI,YAAY;GACrB,gBAAgB;IACd,UAAU,KAAK,IAAI,KAAK,OAAO;IAC/B,MAAM,CAAC,KAAK;GACd;GACA,iBAAiB;IACf,UAAU,KAAK,IAAI,KAAK,UAAU,EAAE,OAAO,KAAKD,OAAO,MAAM,SAAS,GAAG,CAAC;IAC1E,MAAM,CAAC,OAAO;GAChB;EACF,CAAC;CACH;CAEA,QAAQ;EACN,MAAM,OAAO,KAAKE;EAClB,IAAI,CAAC,MAAM;EACX,KAAKH,IAAI,MAAM,IAAI;EACnB,KAAKG,QAAQ,KAAA;CACf;CAEA,MAAM,KAAK,KAAuD;EAChE,KAAK,MAAM;EACX,MAAM,OAAO,OAAO,QAAQ,WAAW,EAAE,OAAO,IAAI,IAAI;EACxD,MAAM,MAAM,QAAQ,cAAkC;EACtD,IAAI,UAAU;EACd,MAAM,QAAQ,KAAK,cAAc;EACjC,MAAM,UAAU,KAAK,gBAAgB;EACrC,MAAM,YAAY,QAAQ,KAAKF,OAAO,QAAQ,CAAC,CAAC,QAAQ,KAAA;EACxD,MAAM,OAAO,KAAKD,IAAI,WAAW,KAAKI,SAAS,IAAI,CAAC;EACpD,KAAKD,QAAQ;EACb,KAAKD,MAAM,IAAI,IAAI;EACnB,KAAKD,OAAO,gBAAgB,IAAI;EAEhC,MAAM,KAAK,IAAI,gBAAgB;EAC/B,MAAM,QAAQ,UAAmB;GAC/B,IAAI,SAAS;GACb,UAAU;GACV,GAAG,MAAM;GACT,KAAKA,OAAO,mBAAmB,IAAI;GACnC,IAAI,WAAW,cAAc,KAAA,GAAW,KAAKA,OAAO,QAAQ,SAAS;QAChE,IAAI,CAAC,SAAS,KAAKA,OAAO,QAAQ;GACvC,IAAI,QAAQ,KAAK;GACjB,KAAK,MAAM;GACX,KAAKC,MAAM,IAAI,KAAK;EACtB;EAEA,KAAK,KAAK,iBAAiB,KAAK,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;EACxD,KAAK,KAAK,eAAe,KAAK,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;EACtD,KAAK,KAAK,WAAW,EAAE,YAAY,KAAK,KAAK,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;EAErE,OAAO,IAAI;CACb;AACF"}
1
+ {"version":3,"file":"prompt.mjs","names":[],"sources":["../../src/services/prompt.ts"],"sourcesContent":["import type { Node } from \"../core/node.ts\"\nimport type { OverlaySurface } from \"../renderer/overlay.ts\"\nimport type { Input } from \"../widgets/input.ts\"\nimport type { Overlay } from \"../widgets/overlay.ts\"\nimport type { PickerItem } from \"../widgets/picker.ts\"\nimport type { Widget } from \"../widgets/widget.ts\"\n\nimport { signal } from \"../core/reactive.ts\"\nimport { isMarkdown } from \"../style/inspect.ts\"\nimport { divider } from \"../widgets/divider.ts\"\nimport { markdown } from \"../widgets/markdown.ts\"\nimport { overlay } from \"../widgets/overlay.ts\"\nimport { text } from \"../widgets/text.ts\"\n\nexport type ToggleItem = PickerItem & { enabled?: boolean }\n\nexport type PromptOpts = {\n title?: string\n details?: Widget | string\n clearInput?: boolean\n restoreInput?: boolean\n}\n\nexport type PromptEvents = {\n close: {}\n submit: { value: string }\n}\n\nexport class Prompt {\n #ui: OverlaySurface\n #input: Input\n #open = signal(false)\n #node?: Overlay\n\n constructor(ui: OverlaySurface, input: Input) {\n this.#ui = ui\n this.#input = input\n }\n\n get isOpen() {\n return this.#open.get\n }\n\n #overlay(opts: PromptOpts) {\n const children: Node[] = []\n if (opts.title)\n children.push(\n isMarkdown(opts.title)\n ? markdown(opts.title, { style: \"borderTitle\" })\n : text(opts.title, { style: \"borderTitle\" })\n )\n if (opts.details) {\n if (typeof opts.details === \"string\")\n children.push(isMarkdown(opts.details) ? markdown(opts.details) : text(opts.details))\n else children.push(opts.details())\n }\n\n const ret = overlay(\n {\n padding: [0, 1],\n relative: \"ui\",\n style: \"ui\",\n verticalAnchor: \"bottom\",\n x: 0,\n y: 1,\n },\n divider({ style: \"accent\" }),\n ...children\n ).withEvents<PromptEvents>()\n return ret.withActions({\n \"prompt.close\": {\n fn: () => void ret.emit(\"close\"),\n keys: [\"esc\"],\n },\n \"prompt.submit\": {\n fn: () => void ret.emit(\"submit\", { value: this.#input.state.value ?? \"\" }),\n keys: [\"enter\"],\n },\n })\n }\n\n close() {\n const node = this.#node\n if (!node) return\n this.#ui.close(node)\n this.#node = undefined\n }\n\n async open(msg: string | PromptOpts): Promise<string | undefined> {\n this.close()\n const opts = typeof msg === \"string\" ? { title: msg } : msg\n const res = Promise.withResolvers<string | undefined>()\n let settled = false\n const clear = opts.clearInput ?? true\n const restore = opts.restoreInput ?? true\n const prevInput = clear ? this.#input.consume().value : undefined\n const node = this.#ui.open(() => this.#overlay(opts))\n this.#node = node\n this.#open.set(true)\n this.#input.addActionTarget(node)\n\n const ac = new AbortController()\n const done = (value?: string) => {\n if (settled) return\n settled = true\n ac.abort()\n this.#input.removeActionTarget(node)\n if (restore && prevInput !== undefined) this.#input.replace(prevInput)\n else if (!restore) this.#input.consume()\n res.resolve(value)\n this.close()\n this.#open.set(false)\n }\n\n node.once(\"unmount\", () => done(), { signal: ac.signal })\n node.once(\"close\", () => done(), { signal: ac.signal })\n node.once(\"submit\", ({ value }) => done(value), { signal: ac.signal })\n\n return res.promise\n }\n}\n"],"mappings":";;;;;;;AA4BA,IAAa,SAAb,MAAoB;CAClB;CACA;CACA,QAAQ,OAAO,KAAK;CACpB;CAEA,YAAY,IAAoB,OAAc;EAC5C,KAAK,MAAM;EACX,KAAK,SAAS;CAChB;CAEA,IAAI,SAAS;EACX,OAAO,KAAK,MAAM;CACpB;CAEA,SAAS,MAAkB;EACzB,MAAM,WAAmB,CAAC;EAC1B,IAAI,KAAK,OACP,SAAS,KACP,WAAW,KAAK,KAAK,IACjB,SAAS,KAAK,OAAO,EAAE,OAAO,cAAc,CAAC,IAC7C,KAAK,KAAK,OAAO,EAAE,OAAO,cAAc,CAAC,CAC/C;EACF,IAAI,KAAK,SAAS;GAChB,IAAI,OAAO,KAAK,YAAY,UAC1B,SAAS,KAAK,WAAW,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC;QACjF,SAAS,KAAK,KAAK,QAAQ,CAAC;EACnC;EAEA,MAAM,MAAM,QACV;GACE,SAAS,CAAC,GAAG,CAAC;GACd,UAAU;GACV,OAAO;GACP,gBAAgB;GAChB,GAAG;GACH,GAAG;EACL,GACA,QAAQ,EAAE,OAAO,SAAS,CAAC,GAC3B,GAAG,QACL,CAAC,CAAC,WAAyB;EAC3B,OAAO,IAAI,YAAY;GACrB,gBAAgB;IACd,UAAU,KAAK,IAAI,KAAK,OAAO;IAC/B,MAAM,CAAC,KAAK;GACd;GACA,iBAAiB;IACf,UAAU,KAAK,IAAI,KAAK,UAAU,EAAE,OAAO,KAAK,OAAO,MAAM,SAAS,GAAG,CAAC;IAC1E,MAAM,CAAC,OAAO;GAChB;EACF,CAAC;CACH;CAEA,QAAQ;EACN,MAAM,OAAO,KAAK;EAClB,IAAI,CAAC,MAAM;EACX,KAAK,IAAI,MAAM,IAAI;EACnB,KAAK,QAAQ,KAAA;CACf;CAEA,MAAM,KAAK,KAAuD;EAChE,KAAK,MAAM;EACX,MAAM,OAAO,OAAO,QAAQ,WAAW,EAAE,OAAO,IAAI,IAAI;EACxD,MAAM,MAAM,QAAQ,cAAkC;EACtD,IAAI,UAAU;EACd,MAAM,QAAQ,KAAK,cAAc;EACjC,MAAM,UAAU,KAAK,gBAAgB;EACrC,MAAM,YAAY,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC,QAAQ,KAAA;EACxD,MAAM,OAAO,KAAK,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC;EACpD,KAAK,QAAQ;EACb,KAAK,MAAM,IAAI,IAAI;EACnB,KAAK,OAAO,gBAAgB,IAAI;EAEhC,MAAM,KAAK,IAAI,gBAAgB;EAC/B,MAAM,QAAQ,UAAmB;GAC/B,IAAI,SAAS;GACb,UAAU;GACV,GAAG,MAAM;GACT,KAAK,OAAO,mBAAmB,IAAI;GACnC,IAAI,WAAW,cAAc,KAAA,GAAW,KAAK,OAAO,QAAQ,SAAS;QAChE,IAAI,CAAC,SAAS,KAAK,OAAO,QAAQ;GACvC,IAAI,QAAQ,KAAK;GACjB,KAAK,MAAM;GACX,KAAK,MAAM,IAAI,KAAK;EACtB;EAEA,KAAK,KAAK,iBAAiB,KAAK,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;EACxD,KAAK,KAAK,eAAe,KAAK,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;EACtD,KAAK,KAAK,WAAW,EAAE,YAAY,KAAK,KAAK,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;EAErE,OAAO,IAAI;CACb;AACF"}
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -1,5 +1,5 @@
1
1
  import { a as openAnsi, t as RESET } from "../ansi-Clq0ozyA.mjs";
2
- import { n as isShikiTheme, t as isShikiLang } from "../shiki-B5NwIiot.mjs";
2
+ import { n as isShikiTheme, t as isShikiLang } from "../shiki-D7l5--zz.mjs";
3
3
  import { n as workerHost } from "../worker-T6SdPzUH.mjs";
4
4
  import { createHighlighterCore } from "shiki/core";
5
5
  import { createOnigurumaEngine } from "shiki/engine/oniguruma";
@@ -112,7 +112,10 @@ let running = void 0;
112
112
  async function run() {
113
113
  while (queue.length) {
114
114
  const req = queue.pop();
115
- workerHost.postMessage(await highlight(req));
115
+ workerHost.postMessage({
116
+ ...await highlight(req),
117
+ type: "result"
118
+ });
116
119
  await Promise.resolve();
117
120
  }
118
121
  }
@@ -123,6 +126,7 @@ async function handle(job) {
123
126
  });
124
127
  }
125
128
  workerHost.onMessage((message) => handle(message));
129
+ workerHost.postMessage({ type: "ready" });
126
130
  //#endregion
127
131
  export {};
128
132
 
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","names":["#langs","#themes","bundled","#loading"],"sources":["../../src/shiki/api.ts","../../src/shiki/server.ts"],"sourcesContent":["import type { AnsiStyle, HexColor } from \"../style/types.ts\"\nimport type { ShikiLanguage, ShikiTheme } from \"./types.ts\"\n\nimport { createHighlighterCore } from \"shiki/core\"\nimport { createOnigurumaEngine } from \"shiki/engine/oniguruma\"\nimport { bundledLanguages as bundled } from \"shiki/langs\"\nimport { isShikiLang, isShikiTheme } from \"../schemas/gen/shiki.ts\"\nimport { openAnsi, RESET } from \"../style/ansi.ts\"\n\nexport type AnsiHighlighter = (code: string, lang?: string) => string\n\nexport type ShikiStatus =\n | { loaded: true }\n | { loaded: false; missing: { langs: string[]; themes: string[] } }\n\ntype L = ShikiLanguage\ntype T = ShikiTheme\n\nconst THEME: ShikiTheme = \"tokyo-night\"\n\n// See: https://github.com/shikijs/vscode-textmate/blob/19dc9b889aa47df91027e857cdad518760b5a026/src/theme.ts#L326\nconst enum FontStyle {\n NotSet = -1,\n None = 0,\n Italic = 1,\n Bold = 2,\n Underline = 4,\n Strikethrough = 8,\n}\n\nconst highlighter = await createHighlighterCore({\n engine: await createOnigurumaEngine(import(\"shiki/wasm\")),\n langs: [],\n themes: [],\n warnings: false,\n})\n\nclass Shiki {\n #loading?: Promise<void>\n #langs = { loaded: new Set<L>(), wanted: new Set<L>() }\n #themes = { loaded: new Set<T>(), wanted: new Set<T>() }\n\n status(langs: string | string[], themes?: string | string[]): ShikiStatus {\n themes ??= []\n themes = Array.isArray(themes) ? themes : [themes]\n themes = themes.length > 0 ? themes : [THEME]\n langs = Array.isArray(langs) ? langs : [langs]\n langs = langs.filter(isShikiLang).filter((l) => !this.#langs.loaded.has(l))\n themes = themes.filter(isShikiTheme).filter((t) => !this.#themes.loaded.has(t))\n return { loaded: langs.length === 0 && themes.length === 0, missing: { langs, themes } }\n }\n\n async load(langs: string | string[], themes?: string | string[]) {\n const status = this.status(langs, themes)\n if (status.loaded) return\n\n for (const l of status.missing.langs) this.#langs.wanted.add(l as L)\n for (const t of status.missing.themes) this.#themes.wanted.add(t as T)\n\n if (this.status(langs, themes).loaded) return\n\n const load = async () => {\n const loadLangs = [...this.#langs.wanted]\n .filter((l) => !this.#langs.loaded.has(l))\n .map((l) => bundled[l]())\n\n const loadThemes = [...this.#themes.wanted]\n .filter((t) => !this.#themes.loaded.has(t))\n .map((t) => import(`shiki/themes/${t}.mjs`))\n\n if (loadLangs.length === 0 && loadThemes.length === 0) return\n\n await Promise.all([...loadLangs, ...loadThemes])\n\n if (loadLangs.length > 0) await highlighter.loadLanguage(...loadLangs)\n if (loadThemes.length > 0) await highlighter.loadTheme(...loadThemes)\n\n for (const l of highlighter.getLoadedLanguages()) this.#langs.loaded.add(l as L)\n for (const t of highlighter.getLoadedThemes()) this.#themes.loaded.add(t as T)\n }\n\n this.#loading = (this.#loading ?? Promise.resolve()).then(load, load)\n await this.#loading\n }\n\n async highlight(code: string, lang: string, theme = THEME) {\n await this.load(lang, theme)\n\n if (!this.#themes.loaded.has(theme)) throw new Error(`Theme ${theme} not loaded`)\n if (!this.#langs.loaded.has(lang as L)) return code\n\n const t = highlighter.getTheme(theme)\n let output = \"\"\n const lines = highlighter.codeToTokensBase(code, { lang: lang as L })\n\n for (const line of lines) {\n for (const token of line) {\n const text = token.content\n const style: AnsiStyle = {\n bg: token.bgColor as HexColor | undefined,\n fg: (token.color ?? t.fg) as HexColor | undefined,\n }\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Bold) style.bold = true\n if (token.fontStyle & FontStyle.Italic) style.italic = true\n if (token.fontStyle & FontStyle.Underline) style.underline = true\n if (token.fontStyle & FontStyle.Strikethrough) style.strikethrough = true\n }\n output += openAnsi(style) + text + RESET\n }\n output += \"\\n\"\n }\n return output.replace(/\\n+$/, \"\")\n }\n\n isLang(lang: string): lang is ShikiLanguage {\n return isShikiLang(lang)\n }\n\n isTheme(theme: string): theme is ShikiTheme {\n return isShikiTheme(theme)\n }\n}\n\nexport const shiki = new Shiki()\n","// oxlint-disable no-await-in-loop\nimport type { ShikiResult, ShikiWorkerRequest } from \"./types.ts\"\n\nimport { shiki } from \"./api.ts\"\nimport { workerHost } from \"./worker.ts\"\n\nasync function highlight(job: ShikiWorkerRequest): Promise<ShikiResult> {\n try {\n const value = await shiki.highlight(job.code, job.lang, job.theme)\n return { id: job.id, value }\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n id: job.id,\n value: job.code,\n }\n }\n}\n\nconst queue: ShikiWorkerRequest[] = []\n\nlet running: Promise<void> | undefined = undefined\n\nasync function run(): Promise<void> {\n // Serialize processing to not block the event loop with multiple concurrent highlights.\n while (queue.length) {\n // We do LIFO on purpose so that the visible code blocks are rendered first (last stream nodes)\n const req = queue.pop()!\n // oxlint-disable-next-line unicorn/require-post-message-target-origin\n workerHost.postMessage(await highlight(req))\n await Promise.resolve() // yield to event loop between requests\n }\n}\n\nasync function handle(job: ShikiWorkerRequest): Promise<void> {\n queue.push(job)\n running ??= run().finally(() => {\n running = undefined\n })\n}\n\nworkerHost.onMessage((message: ShikiWorkerRequest) => handle(message))\n"],"mappings":";;;;;;;AAkBA,MAAM,QAAoB;AAY1B,MAAM,cAAc,MAAM,sBAAsB;CAC9C,QAAQ,MAAM,sBAAsB,OAAO,aAAa;CACxD,OAAO,CAAC;CACR,QAAQ,CAAC;CACT,UAAU;AACZ,CAAC;AAED,IAAM,QAAN,MAAY;CACV;CACA,SAAS;EAAE,wBAAQ,IAAI,IAAO;EAAG,wBAAQ,IAAI,IAAO;CAAE;CACtD,UAAU;EAAE,wBAAQ,IAAI,IAAO;EAAG,wBAAQ,IAAI,IAAO;CAAE;CAEvD,OAAO,OAA0B,QAAyC;EACxE,WAAW,CAAC;EACZ,SAAS,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;EACjD,SAAS,OAAO,SAAS,IAAI,SAAS,CAAC,KAAK;EAC5C,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;EAC7C,QAAQ,MAAM,OAAO,WAAW,CAAC,CAAC,QAAQ,MAAM,CAAC,KAAKA,OAAO,OAAO,IAAI,CAAC,CAAC;EAC1E,SAAS,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,MAAM,CAAC,KAAKC,QAAQ,OAAO,IAAI,CAAC,CAAC;EAC9E,OAAO;GAAE,QAAQ,MAAM,WAAW,KAAK,OAAO,WAAW;GAAG,SAAS;IAAE;IAAO;GAAO;EAAE;CACzF;CAEA,MAAM,KAAK,OAA0B,QAA4B;EAC/D,MAAM,SAAS,KAAK,OAAO,OAAO,MAAM;EACxC,IAAI,OAAO,QAAQ;EAEnB,KAAK,MAAM,KAAK,OAAO,QAAQ,OAAO,KAAKD,OAAO,OAAO,IAAI,CAAM;EACnE,KAAK,MAAM,KAAK,OAAO,QAAQ,QAAQ,KAAKC,QAAQ,OAAO,IAAI,CAAM;EAErE,IAAI,KAAK,OAAO,OAAO,MAAM,CAAC,CAAC,QAAQ;EAEvC,MAAM,OAAO,YAAY;GACvB,MAAM,YAAY,CAAC,GAAG,KAAKD,OAAO,MAAM,CAAC,CACtC,QAAQ,MAAM,CAAC,KAAKA,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CACzC,KAAK,MAAME,iBAAQ,EAAE,CAAC,CAAC;GAE1B,MAAM,aAAa,CAAC,GAAG,KAAKD,QAAQ,MAAM,CAAC,CACxC,QAAQ,MAAM,CAAC,KAAKA,QAAQ,OAAO,IAAI,CAAC,CAAC,CAAC,CAC1C,KAAK,MAAM,OAAO,gBAAgB,EAAE,MAAM;GAE7C,IAAI,UAAU,WAAW,KAAK,WAAW,WAAW,GAAG;GAEvD,MAAM,QAAQ,IAAI,CAAC,GAAG,WAAW,GAAG,UAAU,CAAC;GAE/C,IAAI,UAAU,SAAS,GAAG,MAAM,YAAY,aAAa,GAAG,SAAS;GACrE,IAAI,WAAW,SAAS,GAAG,MAAM,YAAY,UAAU,GAAG,UAAU;GAEpE,KAAK,MAAM,KAAK,YAAY,mBAAmB,GAAG,KAAKD,OAAO,OAAO,IAAI,CAAM;GAC/E,KAAK,MAAM,KAAK,YAAY,gBAAgB,GAAG,KAAKC,QAAQ,OAAO,IAAI,CAAM;EAC/E;EAEA,KAAKE,YAAY,KAAKA,YAAY,QAAQ,QAAQ,EAAA,CAAG,KAAK,MAAM,IAAI;EACpE,MAAM,KAAKA;CACb;CAEA,MAAM,UAAU,MAAc,MAAc,QAAQ,OAAO;EACzD,MAAM,KAAK,KAAK,MAAM,KAAK;EAE3B,IAAI,CAAC,KAAKF,QAAQ,OAAO,IAAI,KAAK,GAAG,MAAM,IAAI,MAAM,SAAS,MAAM,YAAY;EAChF,IAAI,CAAC,KAAKD,OAAO,OAAO,IAAI,IAAS,GAAG,OAAO;EAE/C,MAAM,IAAI,YAAY,SAAS,KAAK;EACpC,IAAI,SAAS;EACb,MAAM,QAAQ,YAAY,iBAAiB,MAAM,EAAQ,KAAU,CAAC;EAEpE,KAAK,MAAM,QAAQ,OAAO;GACxB,KAAK,MAAM,SAAS,MAAM;IACxB,MAAM,OAAO,MAAM;IACnB,MAAM,QAAmB;KACvB,IAAI,MAAM;KACV,IAAK,MAAM,SAAS,EAAE;IACxB;IACA,IAAI,MAAM,WAAW;KACnB,IAAI,MAAM,YAAA,GAA4B,MAAM,OAAO;KACnD,IAAI,MAAM,YAAA,GAA8B,MAAM,SAAS;KACvD,IAAI,MAAM,YAAA,GAAiC,MAAM,YAAY;KAC7D,IAAI,MAAM,YAAA,GAAqC,MAAM,gBAAgB;IACvE;IACA,UAAU,SAAS,KAAK,IAAI,OAAO;GACrC;GACA,UAAU;EACZ;EACA,OAAO,OAAO,QAAQ,QAAQ,EAAE;CAClC;CAEA,OAAO,MAAqC;EAC1C,OAAO,YAAY,IAAI;CACzB;CAEA,QAAQ,OAAoC;EAC1C,OAAO,aAAa,KAAK;CAC3B;AACF;AAEA,MAAa,QAAQ,IAAI,MAAM;;;ACtH/B,eAAe,UAAU,KAA+C;CACtE,IAAI;EACF,MAAM,QAAQ,MAAM,MAAM,UAAU,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK;EACjE,OAAO;GAAE,IAAI,IAAI;GAAI;EAAM;CAC7B,SAAS,OAAO;EACd,OAAO;GACL,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GAC5D,IAAI,IAAI;GACR,OAAO,IAAI;EACb;CACF;AACF;AAEA,MAAM,QAA8B,CAAC;AAErC,IAAI,UAAqC,KAAA;AAEzC,eAAe,MAAqB;CAElC,OAAO,MAAM,QAAQ;EAEnB,MAAM,MAAM,MAAM,IAAI;EAEtB,WAAW,YAAY,MAAM,UAAU,GAAG,CAAC;EAC3C,MAAM,QAAQ,QAAQ;CACxB;AACF;AAEA,eAAe,OAAO,KAAwC;CAC5D,MAAM,KAAK,GAAG;CACd,YAAY,IAAI,CAAC,CAAC,cAAc;EAC9B,UAAU,KAAA;CACZ,CAAC;AACH;AAEA,WAAW,WAAW,YAAgC,OAAO,OAAO,CAAC"}
1
+ {"version":3,"file":"server.mjs","names":["bundled"],"sources":["../../src/shiki/api.ts","../../src/shiki/server.ts"],"sourcesContent":["import type { AnsiStyle, HexColor } from \"../style/types.ts\"\nimport type { ShikiLanguage, ShikiTheme } from \"./types.ts\"\n\nimport { createHighlighterCore } from \"shiki/core\"\nimport { createOnigurumaEngine } from \"shiki/engine/oniguruma\"\nimport { bundledLanguages as bundled } from \"shiki/langs\"\nimport { isShikiLang, isShikiTheme } from \"../schemas/gen/shiki.ts\"\nimport { openAnsi, RESET } from \"../style/ansi.ts\"\n\nexport type AnsiHighlighter = (code: string, lang?: string) => string\n\nexport type ShikiStatus =\n | { loaded: true }\n | { loaded: false; missing: { langs: string[]; themes: string[] } }\n\ntype L = ShikiLanguage\ntype T = ShikiTheme\n\nconst THEME: ShikiTheme = \"tokyo-night\"\n\n// See: https://github.com/shikijs/vscode-textmate/blob/19dc9b889aa47df91027e857cdad518760b5a026/src/theme.ts#L326\nconst enum FontStyle {\n NotSet = -1,\n None = 0,\n Italic = 1,\n Bold = 2,\n Underline = 4,\n Strikethrough = 8,\n}\n\nconst highlighter = await createHighlighterCore({\n engine: await createOnigurumaEngine(import(\"shiki/wasm\")),\n langs: [],\n themes: [],\n warnings: false,\n})\n\nclass Shiki {\n #loading?: Promise<void>\n #langs = { loaded: new Set<L>(), wanted: new Set<L>() }\n #themes = { loaded: new Set<T>(), wanted: new Set<T>() }\n\n status(langs: string | string[], themes?: string | string[]): ShikiStatus {\n themes ??= []\n themes = Array.isArray(themes) ? themes : [themes]\n themes = themes.length > 0 ? themes : [THEME]\n langs = Array.isArray(langs) ? langs : [langs]\n langs = langs.filter(isShikiLang).filter((l) => !this.#langs.loaded.has(l))\n themes = themes.filter(isShikiTheme).filter((t) => !this.#themes.loaded.has(t))\n return { loaded: langs.length === 0 && themes.length === 0, missing: { langs, themes } }\n }\n\n async load(langs: string | string[], themes?: string | string[]) {\n const status = this.status(langs, themes)\n if (status.loaded) return\n\n for (const l of status.missing.langs) this.#langs.wanted.add(l as L)\n for (const t of status.missing.themes) this.#themes.wanted.add(t as T)\n\n if (this.status(langs, themes).loaded) return\n\n const load = async () => {\n const loadLangs = [...this.#langs.wanted]\n .filter((l) => !this.#langs.loaded.has(l))\n .map((l) => bundled[l]())\n\n const loadThemes = [...this.#themes.wanted]\n .filter((t) => !this.#themes.loaded.has(t))\n .map((t) => import(`shiki/themes/${t}.mjs`))\n\n if (loadLangs.length === 0 && loadThemes.length === 0) return\n\n await Promise.all([...loadLangs, ...loadThemes])\n\n if (loadLangs.length > 0) await highlighter.loadLanguage(...loadLangs)\n if (loadThemes.length > 0) await highlighter.loadTheme(...loadThemes)\n\n for (const l of highlighter.getLoadedLanguages()) this.#langs.loaded.add(l as L)\n for (const t of highlighter.getLoadedThemes()) this.#themes.loaded.add(t as T)\n }\n\n this.#loading = (this.#loading ?? Promise.resolve()).then(load, load)\n await this.#loading\n }\n\n async highlight(code: string, lang: string, theme = THEME) {\n await this.load(lang, theme)\n\n if (!this.#themes.loaded.has(theme)) throw new Error(`Theme ${theme} not loaded`)\n if (!this.#langs.loaded.has(lang as L)) return code\n\n const t = highlighter.getTheme(theme)\n let output = \"\"\n const lines = highlighter.codeToTokensBase(code, { lang: lang as L })\n\n for (const line of lines) {\n for (const token of line) {\n const text = token.content\n const style: AnsiStyle = {\n bg: token.bgColor as HexColor | undefined,\n fg: (token.color ?? t.fg) as HexColor | undefined,\n }\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Bold) style.bold = true\n if (token.fontStyle & FontStyle.Italic) style.italic = true\n if (token.fontStyle & FontStyle.Underline) style.underline = true\n if (token.fontStyle & FontStyle.Strikethrough) style.strikethrough = true\n }\n output += openAnsi(style) + text + RESET\n }\n output += \"\\n\"\n }\n return output.replace(/\\n+$/, \"\")\n }\n\n isLang(lang: string): lang is ShikiLanguage {\n return isShikiLang(lang)\n }\n\n isTheme(theme: string): theme is ShikiTheme {\n return isShikiTheme(theme)\n }\n}\n\nexport const shiki = new Shiki()\n","// oxlint-disable no-await-in-loop\nimport type { ShikiResult, ShikiWorkerRequest } from \"./types.ts\"\n\nimport { shiki } from \"./api.ts\"\nimport { workerHost } from \"./worker.ts\"\n\nasync function highlight(job: ShikiWorkerRequest): Promise<ShikiResult> {\n try {\n const value = await shiki.highlight(job.code, job.lang, job.theme)\n return { id: job.id, value }\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n id: job.id,\n value: job.code,\n }\n }\n}\n\nconst queue: ShikiWorkerRequest[] = []\n\nlet running: Promise<void> | undefined = undefined\n\nasync function run(): Promise<void> {\n // Serialize processing to not block the event loop with multiple concurrent highlights.\n while (queue.length) {\n // We do LIFO on purpose so that the visible code blocks are rendered first (last stream nodes)\n const req = queue.pop()!\n // oxlint-disable-next-line unicorn/require-post-message-target-origin\n workerHost.postMessage({ ...(await highlight(req)), type: \"result\" })\n await Promise.resolve() // yield to event loop between requests\n }\n}\n\nasync function handle(job: ShikiWorkerRequest): Promise<void> {\n queue.push(job)\n running ??= run().finally(() => {\n running = undefined\n })\n}\n\nworkerHost.onMessage((message: ShikiWorkerRequest) => handle(message))\n// oxlint-disable-next-line unicorn/require-post-message-target-origin\nworkerHost.postMessage({ type: \"ready\" })\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { t as isShikiLang } from "./shiki-B5NwIiot.mjs";
1
+ import { t as isShikiLang } from "./shiki-D7l5--zz.mjs";
2
2
  import { hasColors } from "@zaly/shared/env";
3
3
  //#region src/shiki/shiki.ts
4
4
  async function codeToAnsi(code, lang, opts) {
5
5
  if (!hasColors || !lang || !isShikiLang(lang)) return code;
6
- const { shikiWorker } = await import("./client-cIckDgAj.mjs");
6
+ const { shikiWorker } = await import("./client-BltmwI6G.mjs");
7
7
  return (await shikiWorker.highlight(code, lang, opts)).value;
8
8
  }
9
9
  //#endregion
10
10
  export { codeToAnsi as t };
11
11
 
12
- //# sourceMappingURL=shiki-BK-v9CtF.mjs.map
12
+ //# sourceMappingURL=shiki-CcxiFWEF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"shiki-BK-v9CtF.mjs","names":[],"sources":["../src/shiki/shiki.ts"],"sourcesContent":["import type { ShikiOpts } from \"./types.ts\"\n\nimport { hasColors } from \"@zaly/shared/env\"\nimport { isShikiLang } from \"../schemas/gen/shiki.ts\"\n\nexport async function codeToAnsi(code: string, lang: string, opts?: ShikiOpts): Promise<string> {\n if (!hasColors || !lang || !isShikiLang(lang)) return code\n const { shikiWorker } = await import(\"../shiki/client.ts\")\n const ret = await shikiWorker.highlight(code, lang, opts)\n return ret.value\n}\n"],"mappings":";;;AAKA,eAAsB,WAAW,MAAc,MAAc,MAAmC;CAC9F,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,IAAI,GAAG,OAAO;CACtD,MAAM,EAAE,gBAAgB,MAAM,OAAO;CAErC,QAAO,MADW,YAAY,UAAU,MAAM,MAAM,IAAI,EAAA,CAC7C;AACb"}
1
+ {"version":3,"file":"shiki-CcxiFWEF.mjs","names":[],"sources":["../src/shiki/shiki.ts"],"sourcesContent":["import type { ShikiOpts } from \"./types.ts\"\n\nimport { hasColors } from \"@zaly/shared/env\"\nimport { isShikiLang } from \"../schemas/gen/shiki.ts\"\n\nexport async function codeToAnsi(code: string, lang: string, opts?: ShikiOpts): Promise<string> {\n if (!hasColors || !lang || !isShikiLang(lang)) return code\n const { shikiWorker } = await import(\"../shiki/client.ts\")\n const ret = await shikiWorker.highlight(code, lang, opts)\n return ret.value\n}\n"],"mappings":";;;AAKA,eAAsB,WAAW,MAAc,MAAc,MAAmC;CAC9F,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,IAAI,GAAG,OAAO;CACtD,MAAM,EAAE,gBAAgB,MAAM,OAAO;CAErC,QAAO,MADW,YAAY,UAAU,MAAM,MAAM,IAAI,EAAA,CAC7C;AACb"}
@@ -1,12 +1,16 @@
1
1
  //#region src/schemas/gen/shiki.ts
2
2
  const lang = (() => {
3
- const _iv1 = /* @__PURE__ */ new Set([
3
+ const _iv0 = /* @__PURE__ */ new Set([
4
4
  "1c",
5
5
  "1c-query",
6
6
  "abap",
7
+ "actionscript",
7
8
  "actionscript-3",
8
9
  "ada",
9
10
  "adoc",
11
+ "ahk",
12
+ "ahk1",
13
+ "ahk2",
10
14
  "angular-html",
11
15
  "angular-ts",
12
16
  "apache",
@@ -14,6 +18,7 @@ const lang = (() => {
14
18
  "apl",
15
19
  "applescript",
16
20
  "ara",
21
+ "as3",
17
22
  "asciidoc",
18
23
  "asm",
19
24
  "astro",
@@ -38,6 +43,8 @@ const lang = (() => {
38
43
  "cadence",
39
44
  "cairo",
40
45
  "cdc",
46
+ "chapel",
47
+ "chpl",
41
48
  "cjs",
42
49
  "clarity",
43
50
  "clj",
@@ -152,6 +159,7 @@ const lang = (() => {
152
159
  "jsx",
153
160
  "julia",
154
161
  "just",
162
+ "justfile",
155
163
  "kdl",
156
164
  "kotlin",
157
165
  "kql",
@@ -198,6 +206,7 @@ const lang = (() => {
198
206
  "nginx",
199
207
  "nim",
200
208
  "nix",
209
+ "nsis",
201
210
  "nu",
202
211
  "nushell",
203
212
  "objc",
@@ -206,6 +215,7 @@ const lang = (() => {
206
215
  "ocaml",
207
216
  "odin",
208
217
  "openscad",
218
+ "org",
209
219
  "pascal",
210
220
  "perl",
211
221
  "perl6",
@@ -229,6 +239,7 @@ const lang = (() => {
229
239
  "pug",
230
240
  "puppet",
231
241
  "purescript",
242
+ "pwsh",
232
243
  "py",
233
244
  "python",
234
245
  "ql",
@@ -240,6 +251,7 @@ const lang = (() => {
240
251
  "raku",
241
252
  "razor",
242
253
  "rb",
254
+ "rbs",
243
255
  "reg",
244
256
  "regex",
245
257
  "regexp",
@@ -250,6 +262,7 @@ const lang = (() => {
250
262
  "rs",
251
263
  "rst",
252
264
  "ruby",
265
+ "ruby-signature",
253
266
  "rust",
254
267
  "sas",
255
268
  "sass",
@@ -265,6 +278,7 @@ const lang = (() => {
265
278
  "shellscript",
266
279
  "shellsession",
267
280
  "smalltalk",
281
+ "smithy",
268
282
  "solidity",
269
283
  "soy",
270
284
  "sparql",
@@ -334,10 +348,10 @@ const lang = (() => {
334
348
  "zsh",
335
349
  "文言"
336
350
  ]);
337
- return (input) => true === _iv1.has(input);
351
+ return (input) => true === _iv0.has(input);
338
352
  })();
339
353
  const theme = (() => {
340
- const _iv1 = /* @__PURE__ */ new Set([
354
+ const _iv0 = /* @__PURE__ */ new Set([
341
355
  "andromeeda",
342
356
  "aurora-x",
343
357
  "ayu-dark",
@@ -404,7 +418,7 @@ const theme = (() => {
404
418
  "vitesse-dark",
405
419
  "vitesse-light"
406
420
  ]);
407
- return (input) => true === _iv1.has(input);
421
+ return (input) => true === _iv0.has(input);
408
422
  })();
409
423
  function isShikiLang(input) {
410
424
  return lang(input);
@@ -415,4 +429,4 @@ function isShikiTheme(input) {
415
429
  //#endregion
416
430
  export { isShikiTheme as n, isShikiLang as t };
417
431
 
418
- //# sourceMappingURL=shiki-B5NwIiot.mjs.map
432
+ //# sourceMappingURL=shiki-D7l5--zz.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shiki-D7l5--zz.mjs","names":[],"sources":["../src/schemas/gen/shiki.ts"],"sourcesContent":["// oxlint-disable import/no-named-as-default-member\nimport type { ShikiLanguage, ShikiTheme } from \"../../shiki/types.ts\";\n// full import, otherwise typia's code gen includes the import\nconst lang = (() => {\n const _iv0 = new Set([\"1c\", \"1c-query\", \"abap\", \"actionscript\", \"actionscript-3\", \"ada\", \"adoc\", \"ahk\", \"ahk1\", \"ahk2\", \"angular-html\", \"angular-ts\", \"apache\", \"apex\", \"apl\", \"applescript\", \"ara\", \"as3\", \"asciidoc\", \"asm\", \"astro\", \"awk\", \"ballerina\", \"bash\", \"bat\", \"batch\", \"be\", \"beancount\", \"berry\", \"bibtex\", \"bicep\", \"bird\", \"bird2\", \"blade\", \"bsl\", \"c\", \"c#\", \"c++\", \"c3\", \"cadence\", \"cairo\", \"cdc\", \"chapel\", \"chpl\", \"cjs\", \"clarity\", \"clj\", \"clojure\", \"closure-templates\", \"cmake\", \"cmd\", \"cobol\", \"codeowners\", \"codeql\", \"coffee\", \"coffeescript\", \"common-lisp\", \"console\", \"coq\", \"cpp\", \"cql\", \"crystal\", \"cs\", \"csharp\", \"css\", \"csv\", \"cts\", \"cue\", \"cypher\", \"d\", \"dart\", \"dax\", \"desktop\", \"diff\", \"docker\", \"dockerfile\", \"dotenv\", \"dream-maker\", \"edge\", \"elisp\", \"elixir\", \"elm\", \"emacs-lisp\", \"erb\", \"erl\", \"erlang\", \"f\", \"f#\", \"f03\", \"f08\", \"f18\", \"f77\", \"f90\", \"f95\", \"fennel\", \"fish\", \"fluent\", \"for\", \"fortran-fixed-form\", \"fortran-free-form\", \"fs\", \"fsharp\", \"fsl\", \"ftl\", \"gd\", \"gdresource\", \"gdscript\", \"gdshader\", \"genie\", \"gherkin\", \"git-commit\", \"git-rebase\", \"gjs\", \"gleam\", \"glimmer-js\", \"glimmer-ts\", \"glsl\", \"gn\", \"gnuplot\", \"go\", \"gql\", \"graphql\", \"groovy\", \"gts\", \"hack\", \"haml\", \"handlebars\", \"haskell\", \"haxe\", \"hbs\", \"hcl\", \"hjson\", \"hlsl\", \"hs\", \"html\", \"html-derivative\", \"http\", \"hurl\", \"hxml\", \"hy\", \"imba\", \"ini\", \"jade\", \"java\", \"javascript\", \"jinja\", \"jison\", \"jl\", \"js\", \"json\", \"json5\", \"jsonc\", \"jsonl\", \"jsonnet\", \"jssm\", \"jsx\", \"julia\", \"just\", \"justfile\", \"kdl\", \"kotlin\", \"kql\", \"kt\", \"kts\", \"kusto\", \"latex\", \"lean\", \"lean4\", \"less\", \"liquid\", \"lisp\", \"lit\", \"llvm\", \"log\", \"logo\", \"lua\", \"luau\", \"make\", \"makefile\", \"markdown\", \"marko\", \"matlab\", \"mbt\", \"mbti\", \"md\", \"mdc\", \"mdx\", \"mediawiki\", \"mermaid\", \"mips\", \"mipsasm\", \"mjs\", \"mmd\", \"mojo\", \"moonbit\", \"move\", \"mts\", \"nar\", \"narrat\", \"nextflow\", \"nextflow-groovy\", \"nf\", \"nginx\", \"nim\", \"nix\", \"nsis\", \"nu\", \"nushell\", \"objc\", \"objective-c\", \"objective-cpp\", \"ocaml\", \"odin\", \"openscad\", \"org\", \"pascal\", \"perl\", \"perl6\", \"php\", \"pkl\", \"plsql\", \"po\", \"polar\", \"postcss\", \"pot\", \"potx\", \"powerquery\", \"powershell\", \"prisma\", \"prolog\", \"properties\", \"proto\", \"protobuf\", \"ps\", \"ps1\", \"pug\", \"puppet\", \"purescript\", \"pwsh\", \"py\", \"python\", \"ql\", \"qml\", \"qmldir\", \"qss\", \"r\", \"racket\", \"raku\", \"razor\", \"rb\", \"rbs\", \"reg\", \"regex\", \"regexp\", \"rel\", \"riscv\", \"ron\", \"rosmsg\", \"rs\", \"rst\", \"ruby\", \"ruby-signature\", \"rust\", \"sas\", \"sass\", \"scad\", \"scala\", \"scheme\", \"scss\", \"sdbl\", \"sh\", \"shader\", \"shaderlab\", \"shell\", \"shellscript\", \"shellsession\", \"smalltalk\", \"smithy\", \"solidity\", \"soy\", \"sparql\", \"spl\", \"splunk\", \"sql\", \"ssh-config\", \"stata\", \"styl\", \"stylus\", \"surql\", \"surrealql\", \"svelte\", \"swift\", \"system-verilog\", \"systemd\", \"talon\", \"talonscript\", \"tasl\", \"tcl\", \"templ\", \"terraform\", \"tex\", \"tf\", \"tfvars\", \"toml\", \"tres\", \"ts\", \"ts-tags\", \"tscn\", \"tsp\", \"tsv\", \"tsx\", \"turtle\", \"twig\", \"typ\", \"typescript\", \"typespec\", \"typst\", \"v\", \"vala\", \"vb\", \"verilog\", \"vhdl\", \"vim\", \"viml\", \"vimscript\", \"vue\", \"vue-html\", \"vue-vine\", \"vy\", \"vyper\", \"wasm\", \"wenyan\", \"wgsl\", \"wiki\", \"wikitext\", \"wit\", \"wl\", \"wolfram\", \"xml\", \"xsl\", \"yaml\", \"yml\", \"zenscript\", \"zig\", \"zsh\", \"\\u6587\\u8A00\"]);\n return (input: any): input is ShikiLanguage => true === _iv0.has(input);\n})();\nconst theme = (() => {\n const _iv0 = new Set([\"andromeeda\", \"aurora-x\", \"ayu-dark\", \"ayu-light\", \"ayu-mirage\", \"catppuccin-frappe\", \"catppuccin-latte\", \"catppuccin-macchiato\", \"catppuccin-mocha\", \"dark-plus\", \"dracula\", \"dracula-soft\", \"everforest-dark\", \"everforest-light\", \"github-dark\", \"github-dark-default\", \"github-dark-dimmed\", \"github-dark-high-contrast\", \"github-light\", \"github-light-default\", \"github-light-high-contrast\", \"gruvbox-dark-hard\", \"gruvbox-dark-medium\", \"gruvbox-dark-soft\", \"gruvbox-light-hard\", \"gruvbox-light-medium\", \"gruvbox-light-soft\", \"horizon\", \"horizon-bright\", \"houston\", \"kanagawa-dragon\", \"kanagawa-lotus\", \"kanagawa-wave\", \"laserwave\", \"light-plus\", \"material-theme\", \"material-theme-darker\", \"material-theme-lighter\", \"material-theme-ocean\", \"material-theme-palenight\", \"min-dark\", \"min-light\", \"monokai\", \"night-owl\", \"night-owl-light\", \"nord\", \"one-dark-pro\", \"one-light\", \"plastic\", \"poimandres\", \"red\", \"rose-pine\", \"rose-pine-dawn\", \"rose-pine-moon\", \"slack-dark\", \"slack-ochin\", \"snazzy-light\", \"solarized-dark\", \"solarized-light\", \"synthwave-84\", \"tokyo-night\", \"vesper\", \"vitesse-black\", \"vitesse-dark\", \"vitesse-light\"]);\n return (input: any): input is ShikiTheme => true === _iv0.has(input);\n})();\nexport function isShikiLang(input: unknown): input is ShikiLanguage {\n return lang(input);\n}\nexport function isShikiTheme(input: unknown): input is ShikiTheme {\n return theme(input);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"show-DR2x1YFc.mjs","names":["#state","#owner","#nodes"],"sources":["../src/widgets/show.ts"],"sourcesContent":["import type { RenderCtx } from \"../core/ctx.ts\"\nimport type { Reactive } from \"../core/reactive.ts\"\n\nimport { Node } from \"../core/node.ts\"\nimport { untrack, unwrap, useActiveOwner, withOwner } from \"../core/reactive.ts\"\n\nexport type ShowGate = { when: Reactive<unknown> }\nexport type ShowBranch = { when: Reactive<unknown>; use: ShowChildren }\nexport type ShowChildren = () => Node | Node[]\nexport type ShowSpec = (ShowGate | ShowBranch)[] | [...(ShowGate | ShowBranch)[], ShowChildren]\n\ntype ShowState = {\n when: Reactive<unknown>\n use?: ShowChildren\n children?: Node[]\n}\n\nexport type { Show }\n\n/** Conditional fragment backing `show()`. Branches are created lazily:\n * a `use` factory only runs the first time its condition wins. Once\n * created, the branch remains mounted and owned; inactive branches simply\n * don't participate in layout/rendering and contribute zero rows.\n *\n * Lazy factories run under the owner captured at `show()` creation time,\n * so context reads behave as if the branch had been constructed eagerly.\n */\nclass Show extends Node {\n #state: ShowState[] = []\n #owner = useActiveOwner()\n\n constructor(spec: ShowSpec) {\n super({})\n let fallback = false\n for (const s of spec) {\n if (fallback) throw new Error(\"Show: `fallback` must be the final argument\")\n if (typeof s === \"function\") {\n this.#state.push({ use: s, when: true })\n fallback = true\n } else this.#state.push(s)\n }\n }\n\n #nodes(s: ShowState, use: ShowChildren): Node[] {\n if (s.children) return s.children\n const create = () => untrack(use)\n const nodes = this.#owner ? withOwner(this.#owner, create) : create()\n s.children = Array.isArray(nodes) ? nodes : [nodes]\n for (const c of s.children) this.add(c)\n return s.children\n }\n\n override layoutChildren(): readonly Node[] {\n for (const s of this.#state) {\n const matches = unwrap(s.when)\n if (s.use === undefined) {\n if (!matches) return []\n continue\n } else if (!matches) continue\n return this.#nodes(s, s.use)\n }\n return []\n }\n\n /** Standalone-render fallback. Box parents go through\n * `layoutChildren` and bypass this; only fires when `Show` sits\n * outside a layout container (root, overlay, etc.). */\n protected async _render(ctx: RenderCtx): Promise<string[]> {\n const targets = this.layoutChildren()\n const rows = await Promise.all(targets.map((c) => c.render(ctx)))\n return rows.flat()\n }\n}\n\n/** Lazy conditional rendering.\n *\n * Specs are evaluated from left to right:\n * - `{ when }` is a guard. When false, rendering stops with no rows; when\n * true, evaluation continues.\n * - `{ when, use }` is a conditional branch. The first branch whose\n * condition is truthy is rendered.\n * - A final bare factory is the fallback branch and must be the last\n * argument.\n *\n * Branch factories are lazy and run at most once. Created branches stay\n * mounted across toggles, preserving state, effects, and async resources.\n *\n * ```ts\n * show({ when: isLoading }, () => spinner({ color: \"accent\" }))\n *\n * show(\n * { when: full },\n * { when: isError, use: () => errorView() },\n * () => resultView()\n * )\n * ```\n */\nexport function show(...spec: ShowSpec): Show {\n return new Show(spec)\n}\n"],"mappings":";;;;;;;;;;;AA2BA,IAAM,OAAN,cAAmB,KAAK;CACtB,SAAsB,CAAC;CACvB,SAAS,eAAe;CAExB,YAAY,MAAgB;EAC1B,MAAM,CAAC,CAAC;EACR,IAAI,WAAW;EACf,KAAK,MAAM,KAAK,MAAM;GACpB,IAAI,UAAU,MAAM,IAAI,MAAM,6CAA6C;GAC3E,IAAI,OAAO,MAAM,YAAY;IAC3B,KAAKA,OAAO,KAAK;KAAE,KAAK;KAAG,MAAM;IAAK,CAAC;IACvC,WAAW;GACb,OAAO,KAAKA,OAAO,KAAK,CAAC;EAC3B;CACF;CAEA,OAAO,GAAc,KAA2B;EAC9C,IAAI,EAAE,UAAU,OAAO,EAAE;EACzB,MAAM,eAAe,QAAQ,GAAG;EAChC,MAAM,QAAQ,KAAKC,SAAS,UAAU,KAAKA,QAAQ,MAAM,IAAI,OAAO;EACpE,EAAE,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;EAClD,KAAK,MAAM,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;EACtC,OAAO,EAAE;CACX;CAEA,iBAA2C;EACzC,KAAK,MAAM,KAAK,KAAKD,QAAQ;GAC3B,MAAM,UAAU,OAAO,EAAE,IAAI;GAC7B,IAAI,EAAE,QAAQ,KAAA,GAAW;IACvB,IAAI,CAAC,SAAS,OAAO,CAAC;IACtB;GACF,OAAO,IAAI,CAAC,SAAS;GACrB,OAAO,KAAKE,OAAO,GAAG,EAAE,GAAG;EAC7B;EACA,OAAO,CAAC;CACV;;;;CAKA,MAAgB,QAAQ,KAAmC;EACzD,MAAM,UAAU,KAAK,eAAe;EAEpC,QAAO,MADY,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,EAAA,CACpD,KAAK;CACnB;AACF;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,KAAK,GAAG,MAAsB;CAC5C,OAAO,IAAI,KAAK,IAAI;AACtB"}
1
+ {"version":3,"file":"show-DR2x1YFc.mjs","names":[],"sources":["../src/widgets/show.ts"],"sourcesContent":["import type { RenderCtx } from \"../core/ctx.ts\"\nimport type { Reactive } from \"../core/reactive.ts\"\n\nimport { Node } from \"../core/node.ts\"\nimport { untrack, unwrap, useActiveOwner, withOwner } from \"../core/reactive.ts\"\n\nexport type ShowGate = { when: Reactive<unknown> }\nexport type ShowBranch = { when: Reactive<unknown>; use: ShowChildren }\nexport type ShowChildren = () => Node | Node[]\nexport type ShowSpec = (ShowGate | ShowBranch)[] | [...(ShowGate | ShowBranch)[], ShowChildren]\n\ntype ShowState = {\n when: Reactive<unknown>\n use?: ShowChildren\n children?: Node[]\n}\n\nexport type { Show }\n\n/** Conditional fragment backing `show()`. Branches are created lazily:\n * a `use` factory only runs the first time its condition wins. Once\n * created, the branch remains mounted and owned; inactive branches simply\n * don't participate in layout/rendering and contribute zero rows.\n *\n * Lazy factories run under the owner captured at `show()` creation time,\n * so context reads behave as if the branch had been constructed eagerly.\n */\nclass Show extends Node {\n #state: ShowState[] = []\n #owner = useActiveOwner()\n\n constructor(spec: ShowSpec) {\n super({})\n let fallback = false\n for (const s of spec) {\n if (fallback) throw new Error(\"Show: `fallback` must be the final argument\")\n if (typeof s === \"function\") {\n this.#state.push({ use: s, when: true })\n fallback = true\n } else this.#state.push(s)\n }\n }\n\n #nodes(s: ShowState, use: ShowChildren): Node[] {\n if (s.children) return s.children\n const create = () => untrack(use)\n const nodes = this.#owner ? withOwner(this.#owner, create) : create()\n s.children = Array.isArray(nodes) ? nodes : [nodes]\n for (const c of s.children) this.add(c)\n return s.children\n }\n\n override layoutChildren(): readonly Node[] {\n for (const s of this.#state) {\n const matches = unwrap(s.when)\n if (s.use === undefined) {\n if (!matches) return []\n continue\n } else if (!matches) continue\n return this.#nodes(s, s.use)\n }\n return []\n }\n\n /** Standalone-render fallback. Box parents go through\n * `layoutChildren` and bypass this; only fires when `Show` sits\n * outside a layout container (root, overlay, etc.). */\n protected async _render(ctx: RenderCtx): Promise<string[]> {\n const targets = this.layoutChildren()\n const rows = await Promise.all(targets.map((c) => c.render(ctx)))\n return rows.flat()\n }\n}\n\n/** Lazy conditional rendering.\n *\n * Specs are evaluated from left to right:\n * - `{ when }` is a guard. When false, rendering stops with no rows; when\n * true, evaluation continues.\n * - `{ when, use }` is a conditional branch. The first branch whose\n * condition is truthy is rendered.\n * - A final bare factory is the fallback branch and must be the last\n * argument.\n *\n * Branch factories are lazy and run at most once. Created branches stay\n * mounted across toggles, preserving state, effects, and async resources.\n *\n * ```ts\n * show({ when: isLoading }, () => spinner({ color: \"accent\" }))\n *\n * show(\n * { when: full },\n * { when: isError, use: () => errorView() },\n * () => resultView()\n * )\n * ```\n */\nexport function show(...spec: ShowSpec): Show {\n return new Show(spec)\n}\n"],"mappings":";;;;;;;;;;;AA2BA,IAAM,OAAN,cAAmB,KAAK;CACtB,SAAsB,CAAC;CACvB,SAAS,eAAe;CAExB,YAAY,MAAgB;EAC1B,MAAM,CAAC,CAAC;EACR,IAAI,WAAW;EACf,KAAK,MAAM,KAAK,MAAM;GACpB,IAAI,UAAU,MAAM,IAAI,MAAM,6CAA6C;GAC3E,IAAI,OAAO,MAAM,YAAY;IAC3B,KAAK,OAAO,KAAK;KAAE,KAAK;KAAG,MAAM;IAAK,CAAC;IACvC,WAAW;GACb,OAAO,KAAK,OAAO,KAAK,CAAC;EAC3B;CACF;CAEA,OAAO,GAAc,KAA2B;EAC9C,IAAI,EAAE,UAAU,OAAO,EAAE;EACzB,MAAM,eAAe,QAAQ,GAAG;EAChC,MAAM,QAAQ,KAAK,SAAS,UAAU,KAAK,QAAQ,MAAM,IAAI,OAAO;EACpE,EAAE,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;EAClD,KAAK,MAAM,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;EACtC,OAAO,EAAE;CACX;CAEA,iBAA2C;EACzC,KAAK,MAAM,KAAK,KAAK,QAAQ;GAC3B,MAAM,UAAU,OAAO,EAAE,IAAI;GAC7B,IAAI,EAAE,QAAQ,KAAA,GAAW;IACvB,IAAI,CAAC,SAAS,OAAO,CAAC;IACtB;GACF,OAAO,IAAI,CAAC,SAAS;GACrB,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG;EAC7B;EACA,OAAO,CAAC;CACV;;;;CAKA,MAAgB,QAAQ,KAAmC;EACzD,MAAM,UAAU,KAAK,eAAe;EAEpC,QAAO,MADY,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,EAAA,CACpD,KAAK;CACnB;AACF;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,KAAK,GAAG,MAAsB;CAC5C,OAAO,IAAI,KAAK,IAAI;AACtB"}
package/dist/style.d.mts CHANGED
@@ -1,10 +1,10 @@
1
- import { a as AnsiStyle, c as Color, d as RGB, f as Style, i as AnsiColorName, l as ColorLightness, o as AnyStyle, p as ThemeKey, r as AnsiColor, s as BrightAnsiColorName, u as HexColor } from "./types-B9Eh7k2v.mjs";
2
- import { a as StyleBuilder, i as isMarkdown, n as inspect, o as styleBuilder, r as inspectFormat, t as InspectOpts } from "./inspect-D6FW_QUo.mjs";
1
+ import { a as AnsiStyle, c as Color, d as RGB, f as Style, i as AnsiColorName, l as ColorLightness, o as AnyStyle, p as ThemeKey, r as AnsiColor, s as BrightAnsiColorName, u as HexColor } from "./types-C0EOLZDc.mjs";
2
+ import { a as StyleBuilder, i as isMarkdown, n as inspect, o as styleBuilder, r as inspectFormat, t as InspectOpts } from "./inspect-DPLRum7L.mjs";
3
3
  //#region src/style/color.d.ts
4
- declare function toHex(c: RGB): HexColor;
5
- declare function toHex(r: number, g: number, b: number): HexColor;
6
- declare function parseHex(hex: string): RGB;
7
- declare function isHexColor(s: string): s is HexColor;
4
+ export declare function toHex(c: RGB): HexColor;
5
+ export declare function toHex(r: number, g: number, b: number): HexColor;
6
+ export declare function parseHex(hex: string): RGB;
7
+ export declare function isHexColor(s: string): s is HexColor;
8
8
  //#endregion
9
- export { type AnsiColor, type AnsiColorName, type AnsiStyle, type AnyStyle, type BrightAnsiColorName, type Color, type ColorLightness, type HexColor, InspectOpts, type RGB, type Style, StyleBuilder, type ThemeKey, inspect, inspectFormat, isHexColor, isMarkdown, parseHex, styleBuilder, toHex };
9
+ export { type AnsiColor, type AnsiColorName, type AnsiStyle, type AnyStyle, type BrightAnsiColorName, type Color, type ColorLightness, type HexColor, InspectOpts, type RGB, type Style, StyleBuilder, type ThemeKey, inspect, inspectFormat, isMarkdown, styleBuilder };
10
10
  //# sourceMappingURL=style.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.mts","names":[],"sources":["../src/style/color.ts"],"mappings":";;;iBAMgB,MAAM,GAAG,MAAM;iBACf,MAAM,WAAW,WAAW,YAAY;iBAMxC,SAAS,cAAc;iBAcvB,WAAW,YAAY,KAAK"}
1
+ {"version":3,"file":"style.d.mts","names":[],"sources":["../src/style/color.ts"],"mappings":";;;wBAMgB,MAAM,GAAG,MAAM;wBACf,MAAM,WAAW,WAAW,YAAY;wBAMxC,SAAS,cAAc;wBAcvB,WAAW,YAAY,KAAK"}
package/dist/style.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  import { d as toHex, l as isHexColor, u as parseHex } from "./ansi-Clq0ozyA.mjs";
2
- import { t as styleBuilder } from "./builder-T9oGIWFa.mjs";
3
- import { n as inspectFormat, r as isMarkdown, t as inspect } from "./inspect-BaKG6cU_.mjs";
2
+ import { t as styleBuilder } from "./builder-BgEcjj8Z.mjs";
3
+ import { n as inspectFormat, r as isMarkdown, t as inspect } from "./inspect-xdSq5Hjq.mjs";
4
4
  export { inspect, inspectFormat, isHexColor, isMarkdown, parseHex, styleBuilder, toHex };
@@ -1,10 +1,11 @@
1
1
  import { S as unwrap } from "./reactive-f7NpAi69.mjs";
2
2
  import { t as Node } from "./node-BZ7f6HzU.mjs";
3
- import { o as formatText, t as calcLayout } from "./text-q26V6_Sc.mjs";
3
+ import { o as formatText, t as calcLayout } from "./text-CRZD9KTN.mjs";
4
4
  //#region src/widgets/text.ts
5
5
  var Text = class extends Node {
6
6
  async _render(ctx) {
7
- return formatText(await textContent(this.state.content, ctx), {
7
+ const content = await textContent(this.state.content, ctx);
8
+ return formatText(content, {
8
9
  style: ctx.style.add(this.state),
9
10
  width: ctx.width,
10
11
  wrap: this.state.wrap
@@ -29,4 +30,4 @@ function text(first, style) {
29
30
  //#endregion
30
31
  export { text as n, textContent as r, Text as t };
31
32
 
32
- //# sourceMappingURL=text-DILrol9j.mjs.map
33
+ //# sourceMappingURL=text-BLz1tRoC.mjs.map