decocms 2.186.4 → 2.186.5

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 (417) hide show
  1. package/dist/client/assets/{AlertCircle-CFfY0yZQ.js → AlertCircle-CtitvjsH.js} +1 -1
  2. package/dist/client/assets/{ArrowLeft-q2zfYOyo.js → ArrowLeft-3io_8nEP.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-C7CRE9h6.js → ArrowUp-i0bG6Tx_.js} +1 -1
  4. package/dist/client/assets/{Check-BSNNIgHR.js → Check-f6vqdTVP.js} +1 -1
  5. package/dist/client/assets/{ChevronDown-CmDo1lzo.js → ChevronDown-BzbiITGh.js} +1 -1
  6. package/dist/client/assets/{ChevronRight-DvMx_esu.js → ChevronRight-BL_W1N6F.js} +1 -1
  7. package/dist/client/assets/{ChevronUp-C1ZwRacy.js → ChevronUp-BKSJAtLO.js} +1 -1
  8. package/dist/client/assets/{Container-Dnc6yNup.js → Container-DaFalkcW.js} +1 -1
  9. package/dist/client/assets/{Dataflow03-Chfn49aN.js → Dataflow03-BID0sAye.js} +1 -1
  10. package/dist/client/assets/{Download01-BNS80W0k.js → Download01-DS6vGSUU.js} +1 -1
  11. package/dist/client/assets/{FolderClosed-BykmJUFv.js → FolderClosed-BEAeGMpl.js} +1 -1
  12. package/dist/client/assets/{Grid01--i5_ePuX.js → Grid01-CrA1A_18.js} +1 -1
  13. package/dist/client/assets/{List-Bmsn6CzV.js → List-WPqnYQKj.js} +1 -1
  14. package/dist/client/assets/{Loading01-D1Pvsp8y.js → Loading01-b0x7f8u_.js} +1 -1
  15. package/dist/client/assets/{Play-BC5VNHwm.js → Play-CN0m3XWi.js} +1 -1
  16. package/dist/client/assets/{Plus-DbIgM1x-.js → Plus-DmqvCfWI.js} +1 -1
  17. package/dist/client/assets/{RefreshCcw01-BEBs5v_q.js → RefreshCcw01-BZXMQFPy.js} +1 -1
  18. package/dist/client/assets/{SearchMd-PX-e8O0B.js → SearchMd-CIgTlNX_.js} +1 -1
  19. package/dist/client/assets/{Settings01-84CJqC0A.js → Settings01-bZOYZZe1.js} +1 -1
  20. package/dist/client/assets/{Trash01-BPldOgkf.js → Trash01-gOPUL91A.js} +1 -1
  21. package/dist/client/assets/{Type01-DpCsdgUP.js → Type01-DJEwH71e.js} +1 -1
  22. package/dist/client/assets/{Upload01-B2Ms9Ufu.js → Upload01-BdsUmigW.js} +1 -1
  23. package/dist/client/assets/{User01-BfpgpGwT.js → User01-BFJo9npx.js} +1 -1
  24. package/dist/client/assets/{VideoRecorder-wLrORVI9.js → VideoRecorder-CpeuE70t.js} +1 -1
  25. package/dist/client/assets/{X-BHB4uMvu.js → X-BPJKg-Sa.js} +1 -1
  26. package/dist/client/assets/{XCircle-diVK-bFd.js → XCircle-PZ_iEr_s.js} +1 -1
  27. package/dist/client/assets/{XClose-tJXgwIHZ.js → XClose-CV8NRiYb.js} +1 -1
  28. package/dist/client/assets/{Zap-CbDTgbzb.js → Zap-Djb2s9XH.js} +1 -1
  29. package/dist/client/assets/{agent-connections-preview-DDUBsgI6.js → agent-connections-preview-CFY9JoNF.js} +1 -1
  30. package/dist/client/assets/{agent-detail-DyWtkgva.js → agent-detail-H4BT7CTr.js} +1 -1
  31. package/dist/client/assets/{agents-Bhzn9Eef.js → agents-D2dFJ668.js} +1 -1
  32. package/dist/client/assets/{ai-providers-logos-D8dUWzwV.js → ai-providers-logos-Bt4g7p0X.js} +1 -1
  33. package/dist/client/assets/{alert-dialog-D8sReHHS.js → alert-dialog-qbhCFIrJ.js} +1 -1
  34. package/dist/client/assets/{auth-catchall-D1xOR84L.js → auth-catchall-CQTUcOb6.js} +1 -1
  35. package/dist/client/assets/{automation-detail-B7hCcREQ.js → automation-detail-DPyfTmgL.js} +1 -1
  36. package/dist/client/assets/{automations-Bx9vUoOk.js → automations-D9dpmBWI.js} +1 -1
  37. package/dist/client/assets/{avatar-C_Cgb4k2.js → avatar-HaW-aDPQ.js} +1 -1
  38. package/dist/client/assets/{badge-C8UnqRcC.js → badge-Crn2wX7w.js} +1 -1
  39. package/dist/client/assets/{binder-CEsnpfBd.js → binder-Bpa9PbnU.js} +1 -1
  40. package/dist/client/assets/{breadcrumb-CAVAhr_W.js → breadcrumb-Do1IM0FU.js} +1 -1
  41. package/dist/client/assets/{card-CWrlHmbX.js → card-D-nlEHTG.js} +1 -1
  42. package/dist/client/assets/{checkbox-DiUCU_uY.js → checkbox-Bk2GcJ8k.js} +1 -1
  43. package/dist/client/assets/{collapsible-BhwX3etL.js → collapsible-SLXpL9mb.js} +1 -1
  44. package/dist/client/assets/{collection-detail-Dkw16c0c.js → collection-detail-DeV3SFaX.js} +1 -1
  45. package/dist/client/assets/{collection-display-button-BBzEpEkj.js → collection-display-button-HO2n3PFr.js} +1 -1
  46. package/dist/client/assets/{collection-search-BT_VOWLL.js → collection-search-CW0lALTo.js} +1 -1
  47. package/dist/client/assets/{collection-table-wrapper-B347tlKT.js → collection-table-wrapper-DS1bzEdZ.js} +1 -1
  48. package/dist/client/assets/{collection-tabs-CRnU8dYm.js → collection-tabs-Dv1o-Tiq.js} +1 -1
  49. package/dist/client/assets/{command-DkggJl9E.js → command-BJmMsGWz.js} +1 -1
  50. package/dist/client/assets/{connection-card-DTdD45cZ.js → connection-card-tMWWUIo4.js} +1 -1
  51. package/dist/client/assets/{connection-detail-BVusS7DN.js → connection-detail-PuDo8T2F.js} +1 -1
  52. package/dist/client/assets/{connections-CSCQ37th.js → connections-BROEiJqN.js} +1 -1
  53. package/dist/client/assets/constants-BO-AsdnG.js +1 -0
  54. package/dist/client/assets/{constants-sZSGbDkU.js → constants-BRyDKx5E.js} +1 -1
  55. package/dist/client/assets/{context-CsyORbSE.js → context-DjKq41Ps.js} +1 -1
  56. package/dist/client/assets/{create-organization-dialog-DN8hdiM4.js → create-organization-dialog-582-kldv.js} +1 -1
  57. package/dist/client/assets/{create-project-dialog-lAZ_FT_g.js → create-project-dialog-CIZm3cj7.js} +1 -1
  58. package/dist/client/assets/{danger-B1Qw5mPg.js → danger-CY1cNAKE.js} +1 -1
  59. package/dist/client/assets/{danger-zone-BUW-olFn.js → danger-zone-DyYupl_l.js} +1 -1
  60. package/dist/client/assets/{dependencies-DRYoQ6jU.js → dependencies-HtJ0jPZo.js} +1 -1
  61. package/dist/client/assets/{dialog-CmqjWAM7.js → dialog-D2pSotmJ.js} +1 -1
  62. package/dist/client/assets/{drawer-DhTY0hMj.js → drawer-DmfwbJvN.js} +1 -1
  63. package/dist/client/assets/{dropdown-menu-D37bEJBF.js → dropdown-menu-DBNiGGCa.js} +1 -1
  64. package/dist/client/assets/{dynamic-plugin-layout-ChsexoCJ.js → dynamic-plugin-layout-Ci6pDEpr.js} +1 -1
  65. package/dist/client/assets/{editable-task-title-DEfOdS3n.js → editable-task-title-CVoah20Z.js} +1 -1
  66. package/dist/client/assets/{empty-state-B8cgNR-N.js → empty-state-Cq-2Stw7.js} +1 -1
  67. package/dist/client/assets/{empty-state-Cjw3IbRU.js → empty-state-D7BW8jaP.js} +1 -1
  68. package/dist/client/assets/{env-vars-editor-DHio8hU0.js → env-vars-editor-DGyEmObe.js} +1 -1
  69. package/dist/client/assets/{extract-connection-data-DgYZMSpy.js → extract-connection-data-Dr5WITt6.js} +1 -1
  70. package/dist/client/assets/{file-browser-BsuckOvL.js → file-browser-BStF6ZMr.js} +2 -2
  71. package/dist/client/assets/{form-Dg4rCHi6.js → form-BYJDKe84.js} +1 -1
  72. package/dist/client/assets/{general-B3rA-PiU.js → general-BjV1aJ55.js} +1 -1
  73. package/dist/client/assets/{grid-view-DAO80r8h.js → grid-view-KO_Fabbh.js} +1 -1
  74. package/dist/client/assets/{home-CTgNmz0x.js → home-D5293Vev.js} +1 -1
  75. package/dist/client/assets/{import-from-deco-dialog-BbA3u8-E.js → import-from-deco-dialog-Djo43MO2.js} +1 -1
  76. package/dist/client/assets/{index-D5h1vKqM.js → index-BLTp2mfW.js} +1 -1
  77. package/dist/client/assets/{index-B7m8nOA3.js → index-BV94yULQ.js} +1 -1
  78. package/dist/client/assets/{index-DPu67tmU.js → index-BbYJDAO_.js} +1 -1
  79. package/dist/client/assets/{index-Bcecb_Xz.js → index-BoO8n-rM.js} +3 -3
  80. package/dist/client/assets/{index-BiawlfhY.js → index-CPsGHZV5.js} +1 -1
  81. package/dist/client/assets/{index-VD0DUUlZ.js → index-D5sFwM_q.js} +1 -1
  82. package/dist/client/assets/{index-CyfmseFq.js → index-DM77haUb.js} +1 -1
  83. package/dist/client/assets/{index-Hi_A-Tsf.js → index-DwgsAdtI.js} +1 -1
  84. package/dist/client/assets/{index-C4GDQd8z.js → index-TdiS16S8.js} +1 -1
  85. package/dist/client/assets/{index-DHItCPJs.js → index-gp1o0aQ_.js} +1 -1
  86. package/dist/client/assets/{index-5yAQM6kw.js → index-qFA25zOH.js} +1 -1
  87. package/dist/client/assets/{infiniteQueryObserver-DWp3_CVI.js → infiniteQueryObserver-CL5fJNiq.js} +1 -1
  88. package/dist/client/assets/{input-cBzeNH_n.js → input-DuzgW_Cj.js} +1 -1
  89. package/dist/client/assets/{integration-icon-ByGVeLrz.js → integration-icon-Cx2rPbBh.js} +1 -1
  90. package/dist/client/assets/{label-DoFd0DeW.js → label-DiRwVfbK.js} +1 -1
  91. package/dist/client/assets/{layout-BhXmEzmE.js → layout-BfKLaD-7.js} +1 -1
  92. package/dist/client/assets/{layout-DCBpI9GX.js → layout-DRMSwprX.js} +1 -1
  93. package/dist/client/assets/{login-D1KWsW_u.js → login-Da33loRU.js} +1 -1
  94. package/dist/client/assets/{logo-upload-BQGPbHRq.js → logo-upload-D-EpUqKb.js} +1 -1
  95. package/dist/client/assets/{mcp-app-renderer-DndsLro0.js → mcp-app-renderer-A6_5gh0N.js} +1 -1
  96. package/dist/client/assets/{mcp-server-card-DPENkZXf.js → mcp-server-card-BWUTkKwk.js} +1 -1
  97. package/dist/client/assets/{mcp-server-detail-DQCKUE12.js → mcp-server-detail-jdGuw6cV.js} +2 -2
  98. package/dist/client/assets/{members-nGwQLmND.js → members-D2NzG2nc.js} +1 -1
  99. package/dist/client/assets/{monaco-editor-CrYWYGQQ.js → monaco-editor-DgkGyIFp.js} +1 -1
  100. package/dist/client/assets/{monitoring-CsbZ7bmm.js → monitoring-CSEdadkb.js} +1 -1
  101. package/dist/client/assets/{monitoring-dashboard-edit-w8pIA6Ie.js → monitoring-dashboard-edit-CXP9EN1f.js} +1 -1
  102. package/dist/client/assets/{monitoring-dashboard-view-MthMkZuB.js → monitoring-dashboard-view-CEaNkmLG.js} +1 -1
  103. package/dist/client/assets/{monitoring-stats-row-CqSp-eoy.js → monitoring-stats-row-B_MW1OhS.js} +1 -1
  104. package/dist/client/assets/{oauth-callback-CJZrmNWZ.js → oauth-callback-Bz0EJuS1.js} +1 -1
  105. package/dist/client/assets/{oauth-callback-ai-provider-B3_0Xe3o.js → oauth-callback-ai-provider-D5PorOtm.js} +1 -1
  106. package/dist/client/assets/{org-ai-providers-BddV4XoH.js → org-ai-providers-C8WJgjRg.js} +1 -1
  107. package/dist/client/assets/{page--U0v_pX3.js → page-DMpvrDmE.js} +1 -1
  108. package/dist/client/assets/{page-CBSe1z4F.js → page-DhnNY5cT.js} +1 -1
  109. package/dist/client/assets/{plugin-empty-state-BEgqVtoa.js → plugin-empty-state-BF81EuZU.js} +1 -1
  110. package/dist/client/assets/{plugin-empty-state-lZmnDccK.js → plugin-empty-state-CyYjML0d.js} +1 -1
  111. package/dist/client/assets/{plugin-header-CLrhmaZp.js → plugin-header-BZQ6v9Dv.js} +1 -1
  112. package/dist/client/assets/{plugin-header-CQK-IpRs.js → plugin-header-J32jluXn.js} +1 -1
  113. package/dist/client/assets/plugins-DieBnmX_.js +1 -0
  114. package/dist/client/assets/{popover-CMmU9vEC.js → popover-CtyD8kak.js} +1 -1
  115. package/dist/client/assets/{project-app-view-Cih2GI6n.js → project-app-view-B_TSbFht.js} +1 -1
  116. package/dist/client/assets/{project-layout-BU4QeywV.js → project-layout-BFYhUp7u.js} +1 -1
  117. package/dist/client/assets/{project-plugins-CRLkmd39.js → project-plugins-Ac2bO3iJ.js} +1 -1
  118. package/dist/client/assets/{projects-list-kJyjAxRL.js → projects-list-Bwwy0ru8.js} +1 -1
  119. package/dist/client/assets/{registry-layout-CudXrSHI.js → registry-layout-tuLQ36Na.js} +1 -1
  120. package/dist/client/assets/{registry-utils-bxl52ndx.js → registry-utils-DoSQNJ_M.js} +1 -1
  121. package/dist/client/assets/{reset-password--yhV4IBG.js → reset-password-CwToNAPf.js} +1 -1
  122. package/dist/client/assets/{resizable-Xmr_dFSw.js → resizable-BEIVuTnJ.js} +1 -1
  123. package/dist/client/assets/{save-actions-DnXh5j1Q.js → save-actions-C8S59f-v.js} +1 -1
  124. package/dist/client/assets/{scroll-area-QU3iRHJE.js → scroll-area-CduYY4Re.js} +1 -1
  125. package/dist/client/assets/{select-D239zaXv.js → select-CGOcI-7S.js} +1 -1
  126. package/dist/client/assets/{select-virtual-mcp-Czgt_AbJ.js → select-virtual-mcp-BEyfMo-o.js} +1 -1
  127. package/dist/client/assets/{shell-layout-BxPSBU5t.js → shell-layout-BT3vkv8Z.js} +2 -2
  128. package/dist/client/assets/{sidebar-settings-BBNHEf84.js → sidebar-settings-CyrcKkJ4.js} +1 -1
  129. package/dist/client/assets/{skeleton-D03wOHty.js → skeleton-Bo6z7uiK.js} +1 -1
  130. package/dist/client/assets/{spinner-B5ev-YDV.js → spinner-BM6ocUxt.js} +1 -1
  131. package/dist/client/assets/{store-invite-HvZ_f981.js → store-invite-BcKHSR2w.js} +1 -1
  132. package/dist/client/assets/{switch-B8WHWc6A.js → switch-zI0teXPa.js} +1 -1
  133. package/dist/client/assets/{table-CTzpd733.js → table-CyFHKgUK.js} +1 -1
  134. package/dist/client/assets/{tabs-Dm9XV8db.js → tabs-aNTBXb88.js} +1 -1
  135. package/dist/client/assets/{task-status-C1q5JfD_.js → task-status-BmEV7t9q.js} +1 -1
  136. package/dist/client/assets/tasks-BKT6sRTI.js +1 -0
  137. package/dist/client/assets/{tasks-panel-CX7jkjdF.js → tasks-panel-Dx_VmaoJ.js} +1 -1
  138. package/dist/client/assets/{textarea-D02CdeQw.js → textarea-CeeIB6-J.js} +1 -1
  139. package/dist/client/assets/{time-range-picker-D8NL5Nmu.js → time-range-picker-D7RILeKK.js} +1 -1
  140. package/dist/client/assets/{toggle-group-jq0jWIRc.js → toggle-group-BNOxtCQ3.js} +1 -1
  141. package/dist/client/assets/{tools-list-BR2Dix09.js → tools-list-B8BbYK4A.js} +1 -1
  142. package/dist/client/assets/{tooltip-BCp7U7mN.js → tooltip-BIaQfSI8.js} +1 -1
  143. package/dist/client/assets/{topbar-portal-DIcyXgfm.js → topbar-portal-Df-jV5dE.js} +1 -1
  144. package/dist/client/assets/{types-BsGobcR-.js → types-BeXFNplD.js} +1 -1
  145. package/dist/client/assets/{use-automations-c_xstGD5.js → use-automations-viUCmfTe.js} +1 -1
  146. package/dist/client/assets/{use-collections-vlgqqhuP.js → use-collections-boLvDkbT.js} +1 -1
  147. package/dist/client/assets/{use-connection-DqJeUugh.js → use-connection-sSldkm55.js} +1 -1
  148. package/dist/client/assets/{use-copy-Ck5qLOJz.js → use-copy-DuS-6kWn.js} +1 -1
  149. package/dist/client/assets/{use-create-virtual-mcp-DEi2MEtq.js → use-create-virtual-mcp-CKYKv6SW.js} +1 -1
  150. package/dist/client/assets/{use-infinite-scroll-DmzrG2BE.js → use-infinite-scroll-CGarn18C.js} +1 -1
  151. package/dist/client/assets/{use-install-from-registry-44g1gfZf.js → use-install-from-registry-DAJmEkC5.js} +1 -1
  152. package/dist/client/assets/{use-list-state-bklnJIlv.js → use-list-state-oXNu9u8R.js} +1 -1
  153. package/dist/client/assets/{use-mcp-prompts-CzQxO0I9.js → use-mcp-prompts-BRgvnsLG.js} +1 -1
  154. package/dist/client/assets/{use-mcp-resources-BQkvQ_u9.js → use-mcp-resources-BQpqezxP.js} +1 -1
  155. package/dist/client/assets/{use-mcp-tools-BOIAjBvi.js → use-mcp-tools-DMQzZOZ6.js} +1 -1
  156. package/dist/client/assets/{use-members-CWNkurdp.js → use-members-C2JN8hIu.js} +1 -1
  157. package/dist/client/assets/{use-project-C2DxBYtI.js → use-project-CilOoEpE.js} +1 -1
  158. package/dist/client/assets/{use-store-discovery-DE51kyFJ.js → use-store-discovery-D0gJ2CQY.js} +1 -1
  159. package/dist/client/assets/{use-view-mode-CmavyF68.js → use-view-mode-ByMVrnnV.js} +1 -1
  160. package/dist/client/assets/{use-virtual-mcp-DJSfh66r.js → use-virtual-mcp-BFsqq0fZ.js} +1 -1
  161. package/dist/client/assets/useInfiniteQuery-Byr_YtTT.js +1 -0
  162. package/dist/client/assets/{useMutation-DX97_hbH.js → useMutation-BJ-zKxaD.js} +1 -1
  163. package/dist/client/assets/useQuery-nL8PK1-e.js +1 -0
  164. package/dist/client/assets/useSuspenseInfiniteQuery-DDi8SjCq.js +1 -0
  165. package/dist/client/assets/{user-xfin110t.js → user-YxxwV0CN.js} +1 -1
  166. package/dist/client/assets/{workflow-Ca61UGhY.js → workflow-BpFpSrqC.js} +1 -1
  167. package/dist/client/index.html +1 -1
  168. package/dist/server/cli.js +266 -266
  169. package/dist/server/node_modules/ansi-styles/index.d.ts +236 -0
  170. package/dist/server/node_modules/ansi-styles/index.js +223 -0
  171. package/dist/server/node_modules/ansi-styles/license +9 -0
  172. package/dist/server/node_modules/ansi-styles/package.json +54 -0
  173. package/dist/server/node_modules/ansi-styles/readme.md +173 -0
  174. package/dist/server/node_modules/environment/index.d.ts +74 -0
  175. package/dist/server/node_modules/environment/index.js +47 -0
  176. package/dist/server/node_modules/environment/license +9 -0
  177. package/dist/server/node_modules/environment/package.json +74 -0
  178. package/dist/server/node_modules/environment/readme.md +94 -0
  179. package/dist/server/node_modules/escape-string-regexp/index.d.ts +18 -0
  180. package/dist/server/node_modules/escape-string-regexp/index.js +11 -0
  181. package/dist/server/node_modules/escape-string-regexp/license +9 -0
  182. package/dist/server/node_modules/escape-string-regexp/package.json +43 -0
  183. package/dist/server/node_modules/escape-string-regexp/readme.md +29 -0
  184. package/dist/server/node_modules/ink/build/ansi-tokenizer.d.ts +38 -0
  185. package/dist/server/node_modules/ink/build/ansi-tokenizer.js +316 -0
  186. package/dist/server/node_modules/ink/build/ansi-tokenizer.js.map +1 -0
  187. package/dist/server/node_modules/ink/build/apply-styles.js +175 -0
  188. package/dist/server/node_modules/ink/build/build-layout.js +77 -0
  189. package/dist/server/node_modules/ink/build/calculate-wrapped-text.js +53 -0
  190. package/dist/server/node_modules/ink/build/colorize.d.ts +3 -0
  191. package/dist/server/node_modules/ink/build/colorize.js +48 -0
  192. package/dist/server/node_modules/ink/build/colorize.js.map +1 -0
  193. package/dist/server/node_modules/ink/build/components/AccessibilityContext.d.ts +3 -0
  194. package/dist/server/node_modules/ink/build/components/AccessibilityContext.js +5 -0
  195. package/dist/server/node_modules/ink/build/components/AccessibilityContext.js.map +1 -0
  196. package/dist/server/node_modules/ink/build/components/App.d.ts +18 -0
  197. package/dist/server/node_modules/ink/build/components/App.js +351 -0
  198. package/dist/server/node_modules/ink/build/components/App.js.map +1 -0
  199. package/dist/server/node_modules/ink/build/components/AppContext.d.ts +15 -0
  200. package/dist/server/node_modules/ink/build/components/AppContext.js +11 -0
  201. package/dist/server/node_modules/ink/build/components/AppContext.js.map +1 -0
  202. package/dist/server/node_modules/ink/build/components/BackgroundContext.d.ts +4 -0
  203. package/dist/server/node_modules/ink/build/components/BackgroundContext.js +3 -0
  204. package/dist/server/node_modules/ink/build/components/BackgroundContext.js.map +1 -0
  205. package/dist/server/node_modules/ink/build/components/Box.d.ts +117 -0
  206. package/dist/server/node_modules/ink/build/components/Box.js +34 -0
  207. package/dist/server/node_modules/ink/build/components/Box.js.map +1 -0
  208. package/dist/server/node_modules/ink/build/components/Color.js +62 -0
  209. package/dist/server/node_modules/ink/build/components/Cursor.d.ts +83 -0
  210. package/dist/server/node_modules/ink/build/components/Cursor.js +53 -0
  211. package/dist/server/node_modules/ink/build/components/Cursor.js.map +1 -0
  212. package/dist/server/node_modules/ink/build/components/CursorContext.d.ts +11 -0
  213. package/dist/server/node_modules/ink/build/components/CursorContext.js +8 -0
  214. package/dist/server/node_modules/ink/build/components/CursorContext.js.map +1 -0
  215. package/dist/server/node_modules/ink/build/components/ErrorBoundary.d.ts +18 -0
  216. package/dist/server/node_modules/ink/build/components/ErrorBoundary.js +23 -0
  217. package/dist/server/node_modules/ink/build/components/ErrorBoundary.js.map +1 -0
  218. package/dist/server/node_modules/ink/build/components/ErrorOverview.d.ts +6 -0
  219. package/dist/server/node_modules/ink/build/components/ErrorOverview.js +84 -0
  220. package/dist/server/node_modules/ink/build/components/ErrorOverview.js.map +1 -0
  221. package/dist/server/node_modules/ink/build/components/FocusContext.d.ts +16 -0
  222. package/dist/server/node_modules/ink/build/components/FocusContext.js +17 -0
  223. package/dist/server/node_modules/ink/build/components/FocusContext.js.map +1 -0
  224. package/dist/server/node_modules/ink/build/components/Newline.d.ts +13 -0
  225. package/dist/server/node_modules/ink/build/components/Newline.js +8 -0
  226. package/dist/server/node_modules/ink/build/components/Newline.js.map +1 -0
  227. package/dist/server/node_modules/ink/build/components/Spacer.d.ts +7 -0
  228. package/dist/server/node_modules/ink/build/components/Spacer.js +11 -0
  229. package/dist/server/node_modules/ink/build/components/Spacer.js.map +1 -0
  230. package/dist/server/node_modules/ink/build/components/Static.d.ts +24 -0
  231. package/dist/server/node_modules/ink/build/components/Static.js +28 -0
  232. package/dist/server/node_modules/ink/build/components/Static.js.map +1 -0
  233. package/dist/server/node_modules/ink/build/components/StderrContext.d.ts +15 -0
  234. package/dist/server/node_modules/ink/build/components/StderrContext.js +13 -0
  235. package/dist/server/node_modules/ink/build/components/StderrContext.js.map +1 -0
  236. package/dist/server/node_modules/ink/build/components/StdinContext.d.ts +22 -0
  237. package/dist/server/node_modules/ink/build/components/StdinContext.js +19 -0
  238. package/dist/server/node_modules/ink/build/components/StdinContext.js.map +1 -0
  239. package/dist/server/node_modules/ink/build/components/StdoutContext.d.ts +15 -0
  240. package/dist/server/node_modules/ink/build/components/StdoutContext.js +13 -0
  241. package/dist/server/node_modules/ink/build/components/StdoutContext.js.map +1 -0
  242. package/dist/server/node_modules/ink/build/components/Text.d.ts +55 -0
  243. package/dist/server/node_modules/ink/build/components/Text.js +50 -0
  244. package/dist/server/node_modules/ink/build/components/Text.js.map +1 -0
  245. package/dist/server/node_modules/ink/build/components/Transform.d.ts +16 -0
  246. package/dist/server/node_modules/ink/build/components/Transform.js +15 -0
  247. package/dist/server/node_modules/ink/build/components/Transform.js.map +1 -0
  248. package/dist/server/node_modules/ink/build/cursor-helpers.d.ts +38 -0
  249. package/dist/server/node_modules/ink/build/cursor-helpers.js +56 -0
  250. package/dist/server/node_modules/ink/build/cursor-helpers.js.map +1 -0
  251. package/dist/server/node_modules/ink/build/devtools-window-polyfill.d.ts +1 -0
  252. package/dist/server/node_modules/ink/build/devtools-window-polyfill.js +65 -0
  253. package/dist/server/node_modules/ink/build/devtools-window-polyfill.js.map +1 -0
  254. package/dist/server/node_modules/ink/build/devtools.d.ts +1 -0
  255. package/dist/server/node_modules/ink/build/devtools.js +11 -0
  256. package/dist/server/node_modules/ink/build/devtools.js.map +1 -0
  257. package/dist/server/node_modules/ink/build/dom.d.ts +56 -0
  258. package/dist/server/node_modules/ink/build/dom.js +124 -0
  259. package/dist/server/node_modules/ink/build/dom.js.map +1 -0
  260. package/dist/server/node_modules/ink/build/experimental/apply-style.js +140 -0
  261. package/dist/server/node_modules/ink/build/experimental/dom.js +123 -0
  262. package/dist/server/node_modules/ink/build/experimental/output.js +91 -0
  263. package/dist/server/node_modules/ink/build/experimental/reconciler.js +141 -0
  264. package/dist/server/node_modules/ink/build/experimental/renderer.js +81 -0
  265. package/dist/server/node_modules/ink/build/get-max-width.d.ts +3 -0
  266. package/dist/server/node_modules/ink/build/get-max-width.js +10 -0
  267. package/dist/server/node_modules/ink/build/get-max-width.js.map +1 -0
  268. package/dist/server/node_modules/ink/build/hooks/use-app.d.ts +5 -0
  269. package/dist/server/node_modules/ink/build/hooks/use-app.js +8 -0
  270. package/dist/server/node_modules/ink/build/hooks/use-app.js.map +1 -0
  271. package/dist/server/node_modules/ink/build/hooks/use-cursor.d.ts +12 -0
  272. package/dist/server/node_modules/ink/build/hooks/use-cursor.js +29 -0
  273. package/dist/server/node_modules/ink/build/hooks/use-cursor.js.map +1 -0
  274. package/dist/server/node_modules/ink/build/hooks/use-focus-manager.d.ts +28 -0
  275. package/dist/server/node_modules/ink/build/hooks/use-focus-manager.js +17 -0
  276. package/dist/server/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -0
  277. package/dist/server/node_modules/ink/build/hooks/use-focus.d.ts +29 -0
  278. package/dist/server/node_modules/ink/build/hooks/use-focus.js +42 -0
  279. package/dist/server/node_modules/ink/build/hooks/use-focus.js.map +1 -0
  280. package/dist/server/node_modules/ink/build/hooks/use-input.d.ts +131 -0
  281. package/dist/server/node_modules/ink/build/hooks/use-input.js +124 -0
  282. package/dist/server/node_modules/ink/build/hooks/use-input.js.map +1 -0
  283. package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  284. package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  285. package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  286. package/dist/server/node_modules/ink/build/hooks/use-stderr.d.ts +5 -0
  287. package/dist/server/node_modules/ink/build/hooks/use-stderr.js +8 -0
  288. package/dist/server/node_modules/ink/build/hooks/use-stderr.js.map +1 -0
  289. package/dist/server/node_modules/ink/build/hooks/use-stdin.d.ts +5 -0
  290. package/dist/server/node_modules/ink/build/hooks/use-stdin.js +8 -0
  291. package/dist/server/node_modules/ink/build/hooks/use-stdin.js.map +1 -0
  292. package/dist/server/node_modules/ink/build/hooks/use-stdout.d.ts +5 -0
  293. package/dist/server/node_modules/ink/build/hooks/use-stdout.js +8 -0
  294. package/dist/server/node_modules/ink/build/hooks/use-stdout.js.map +1 -0
  295. package/dist/server/node_modules/ink/build/hooks/useInput.js +38 -0
  296. package/dist/server/node_modules/ink/build/index.d.ts +34 -0
  297. package/dist/server/node_modules/ink/build/index.js +20 -0
  298. package/dist/server/node_modules/ink/build/index.js.map +1 -0
  299. package/dist/server/node_modules/ink/build/ink.d.ts +90 -0
  300. package/dist/server/node_modules/ink/build/ink.js +637 -0
  301. package/dist/server/node_modules/ink/build/ink.js.map +1 -0
  302. package/dist/server/node_modules/ink/build/input-parser.d.ts +7 -0
  303. package/dist/server/node_modules/ink/build/input-parser.js +154 -0
  304. package/dist/server/node_modules/ink/build/input-parser.js.map +1 -0
  305. package/dist/server/node_modules/ink/build/instance.js +205 -0
  306. package/dist/server/node_modules/ink/build/instances.d.ts +3 -0
  307. package/dist/server/node_modules/ink/build/instances.js +8 -0
  308. package/dist/server/node_modules/ink/build/instances.js.map +1 -0
  309. package/dist/server/node_modules/ink/build/kitty-keyboard.d.ts +23 -0
  310. package/dist/server/node_modules/ink/build/kitty-keyboard.js +32 -0
  311. package/dist/server/node_modules/ink/build/kitty-keyboard.js.map +1 -0
  312. package/dist/server/node_modules/ink/build/layout.d.ts +7 -0
  313. package/dist/server/node_modules/ink/build/layout.js +33 -0
  314. package/dist/server/node_modules/ink/build/layout.js.map +1 -0
  315. package/dist/server/node_modules/ink/build/log-update.d.ts +19 -0
  316. package/dist/server/node_modules/ink/build/log-update.js +242 -0
  317. package/dist/server/node_modules/ink/build/log-update.js.map +1 -0
  318. package/dist/server/node_modules/ink/build/measure-element.d.ts +16 -0
  319. package/dist/server/node_modules/ink/build/measure-element.js +9 -0
  320. package/dist/server/node_modules/ink/build/measure-element.js.map +1 -0
  321. package/dist/server/node_modules/ink/build/measure-text.d.ts +6 -0
  322. package/dist/server/node_modules/ink/build/measure-text.js +21 -0
  323. package/dist/server/node_modules/ink/build/measure-text.js.map +1 -0
  324. package/dist/server/node_modules/ink/build/options.d.ts +52 -0
  325. package/dist/server/node_modules/ink/build/options.js +2 -0
  326. package/dist/server/node_modules/ink/build/options.js.map +1 -0
  327. package/dist/server/node_modules/ink/build/output.d.ts +35 -0
  328. package/dist/server/node_modules/ink/build/output.js +183 -0
  329. package/dist/server/node_modules/ink/build/output.js.map +1 -0
  330. package/dist/server/node_modules/ink/build/parse-keypress.d.ts +22 -0
  331. package/dist/server/node_modules/ink/build/parse-keypress.js +493 -0
  332. package/dist/server/node_modules/ink/build/parse-keypress.js.map +1 -0
  333. package/dist/server/node_modules/ink/build/reconciler.d.ts +4 -0
  334. package/dist/server/node_modules/ink/build/reconciler.js +274 -0
  335. package/dist/server/node_modules/ink/build/reconciler.js.map +1 -0
  336. package/dist/server/node_modules/ink/build/render-background.d.ts +4 -0
  337. package/dist/server/node_modules/ink/build/render-background.js +25 -0
  338. package/dist/server/node_modules/ink/build/render-background.js.map +1 -0
  339. package/dist/server/node_modules/ink/build/render-border.d.ts +4 -0
  340. package/dist/server/node_modules/ink/build/render-border.js +73 -0
  341. package/dist/server/node_modules/ink/build/render-border.js.map +1 -0
  342. package/dist/server/node_modules/ink/build/render-node-to-output.d.ts +14 -0
  343. package/dist/server/node_modules/ink/build/render-node-to-output.js +147 -0
  344. package/dist/server/node_modules/ink/build/render-node-to-output.js.map +1 -0
  345. package/dist/server/node_modules/ink/build/render-to-string.d.ts +38 -0
  346. package/dist/server/node_modules/ink/build/render-to-string.js +115 -0
  347. package/dist/server/node_modules/ink/build/render-to-string.js.map +1 -0
  348. package/dist/server/node_modules/ink/build/render.d.ts +121 -0
  349. package/dist/server/node_modules/ink/build/render.js +55 -0
  350. package/dist/server/node_modules/ink/build/render.js.map +1 -0
  351. package/dist/server/node_modules/ink/build/renderer.d.ts +8 -0
  352. package/dist/server/node_modules/ink/build/renderer.js +55 -0
  353. package/dist/server/node_modules/ink/build/renderer.js.map +1 -0
  354. package/dist/server/node_modules/ink/build/sanitize-ansi.d.ts +2 -0
  355. package/dist/server/node_modules/ink/build/sanitize-ansi.js +27 -0
  356. package/dist/server/node_modules/ink/build/sanitize-ansi.js.map +1 -0
  357. package/dist/server/node_modules/ink/build/screen-reader-update.d.ts +13 -0
  358. package/dist/server/node_modules/ink/build/screen-reader-update.js +38 -0
  359. package/dist/server/node_modules/ink/build/screen-reader-update.js.map +1 -0
  360. package/dist/server/node_modules/ink/build/squash-text-nodes.d.ts +3 -0
  361. package/dist/server/node_modules/ink/build/squash-text-nodes.js +36 -0
  362. package/dist/server/node_modules/ink/build/squash-text-nodes.js.map +1 -0
  363. package/dist/server/node_modules/ink/build/styles.d.ts +240 -0
  364. package/dist/server/node_modules/ink/build/styles.js +232 -0
  365. package/dist/server/node_modules/ink/build/styles.js.map +1 -0
  366. package/dist/server/node_modules/ink/build/utils.d.ts +2 -0
  367. package/dist/server/node_modules/ink/build/utils.js +4 -0
  368. package/dist/server/node_modules/ink/build/utils.js.map +1 -0
  369. package/dist/server/node_modules/ink/build/wrap-text.d.ts +3 -0
  370. package/dist/server/node_modules/ink/build/wrap-text.js +31 -0
  371. package/dist/server/node_modules/ink/build/wrap-text.js.map +1 -0
  372. package/dist/server/node_modules/ink/build/write-synchronized.d.ts +4 -0
  373. package/dist/server/node_modules/ink/build/write-synchronized.js +7 -0
  374. package/dist/server/node_modules/ink/build/write-synchronized.js.map +1 -0
  375. package/dist/server/node_modules/ink/license +10 -0
  376. package/dist/server/node_modules/ink/package.json +201 -0
  377. package/dist/server/node_modules/ink/readme.md +2636 -0
  378. package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  379. package/dist/server/node_modules/is-fullwidth-code-point/index.js +12 -0
  380. package/dist/server/node_modules/is-fullwidth-code-point/license +9 -0
  381. package/dist/server/node_modules/is-fullwidth-code-point/package.json +53 -0
  382. package/dist/server/node_modules/is-fullwidth-code-point/readme.md +31 -0
  383. package/dist/server/node_modules/is-unicode-supported/index.d.ts +12 -0
  384. package/dist/server/node_modules/is-unicode-supported/index.js +21 -0
  385. package/dist/server/node_modules/is-unicode-supported/license +9 -0
  386. package/dist/server/node_modules/is-unicode-supported/package.json +47 -0
  387. package/dist/server/node_modules/is-unicode-supported/readme.md +35 -0
  388. package/dist/server/node_modules/mimic-fn/index.d.ts +54 -0
  389. package/dist/server/node_modules/mimic-fn/index.js +13 -0
  390. package/dist/server/node_modules/mimic-fn/license +9 -0
  391. package/dist/server/node_modules/mimic-fn/package.json +42 -0
  392. package/dist/server/node_modules/mimic-fn/readme.md +69 -0
  393. package/dist/server/node_modules/pg-int8/LICENSE +13 -0
  394. package/dist/server/node_modules/pg-int8/README.md +16 -0
  395. package/dist/server/node_modules/pg-int8/index.js +100 -0
  396. package/dist/server/node_modules/pg-int8/package.json +24 -0
  397. package/dist/server/node_modules/postgres-bytea/index.js +33 -0
  398. package/dist/server/node_modules/postgres-bytea/license +21 -0
  399. package/dist/server/node_modules/postgres-bytea/package.json +34 -0
  400. package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
  401. package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
  402. package/dist/server/node_modules/postgres-interval/index.js +125 -0
  403. package/dist/server/node_modules/postgres-interval/license +21 -0
  404. package/dist/server/node_modules/postgres-interval/package.json +36 -0
  405. package/dist/server/node_modules/postgres-interval/readme.md +48 -0
  406. package/dist/server/node_modules/string-width/index.d.ts +39 -0
  407. package/dist/server/node_modules/string-width/index.js +82 -0
  408. package/dist/server/node_modules/string-width/license +9 -0
  409. package/dist/server/node_modules/string-width/package.json +64 -0
  410. package/dist/server/node_modules/string-width/readme.md +66 -0
  411. package/package.json +1 -1
  412. package/dist/client/assets/constants-BnhbK7UO.js +0 -1
  413. package/dist/client/assets/plugins-DDBLgJ0t.js +0 -1
  414. package/dist/client/assets/tasks-w2rwAPZq.js +0 -1
  415. package/dist/client/assets/useInfiniteQuery-CeKnt0If.js +0 -1
  416. package/dist/client/assets/useQuery-kLEJeUD0.js +0 -1
  417. package/dist/client/assets/useSuspenseInfiniteQuery-ClWGoj50.js +0 -1
@@ -0,0 +1,115 @@
1
+ import Yoga from 'yoga-layout';
2
+ import { LegacyRoot } from 'react-reconciler/constants.js';
3
+ import reconciler from './reconciler.js';
4
+ import renderer from './renderer.js';
5
+ import { createNode } from './dom.js';
6
+ /**
7
+ Render a React element to a string synchronously. Unlike `render()`, this function does not write to stdout, does not set up any terminal event listeners, and returns the rendered output as a string.
8
+
9
+ Useful for generating documentation, writing output to files, testing, or any scenario where you need the rendered output as a string without starting a persistent terminal application.
10
+
11
+ **Notes:**
12
+
13
+ - Terminal-specific hooks (`useInput`, `useStdin`, `useStdout`, `useStderr`, `useApp`, `useFocus`, `useFocusManager`) return default no-op values since there is no terminal session. They will not throw, but they will not function as in a live terminal.
14
+ - `useEffect` callbacks will execute during rendering (due to synchronous rendering mode), but state updates they trigger will not affect the returned output, which reflects the initial render.
15
+ - `useLayoutEffect` callbacks fire synchronously during commit, so state updates they trigger **will** be reflected in the output.
16
+ - The `<Static>` component is supported — its output is prepended to the dynamic output.
17
+ - If a component throws during rendering, the error is propagated to the caller after cleanup.
18
+
19
+ @example
20
+ ```
21
+ import {renderToString, Text, Box} from 'ink';
22
+
23
+ const output = renderToString(
24
+ <Box padding={1}>
25
+ <Text color="green">Hello World</Text>
26
+ </Box>,
27
+ {columns: 40}
28
+ );
29
+
30
+ console.log(output);
31
+ ```
32
+ */
33
+ const renderToString = (node, options) => {
34
+ const columns = options?.columns ?? 80;
35
+ // Create a standalone root node — no stdout, stdin, or terminal bindings
36
+ const rootNode = createNode('ink-root');
37
+ // Capture static output from intermediate renders.
38
+ // The <Static> component uses useLayoutEffect to clear its children after
39
+ // the first commit. The reconciler's resetAfterCommit calls onImmediateRender
40
+ // when static content is dirty (and returns early, skipping the normal
41
+ // onRender callback), giving us a chance to capture it before it's cleared
42
+ // by the subsequent re-render.
43
+ let capturedStaticOutput = '';
44
+ rootNode.onComputeLayout = () => {
45
+ rootNode.yogaNode.setWidth(columns);
46
+ rootNode.yogaNode.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);
47
+ };
48
+ rootNode.onImmediateRender = () => {
49
+ const { staticOutput } = renderer(rootNode, false);
50
+ if (staticOutput && staticOutput !== '\n') {
51
+ capturedStaticOutput += staticOutput;
52
+ }
53
+ };
54
+ // Capture the first uncaught error so we can re-throw it after cleanup.
55
+ // React's reconciler catches component errors internally and reports them
56
+ // via onUncaughtError rather than letting them propagate. For a synchronous
57
+ // utility like renderToString, callers expect errors to throw.
58
+ let uncaughtError;
59
+ // Create a reconciler container in legacy (synchronous) mode.
60
+ // The four trailing callbacks are: onUncaughtError, onCaughtError,
61
+ // onRecoverableError, and onHostTransitionComplete.
62
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
63
+ const container = reconciler.createContainer(rootNode, LegacyRoot, null, false, null, 'render-to-string', (error) => {
64
+ uncaughtError ??= error;
65
+ }, () => { }, () => { }, () => { });
66
+ let teardownSucceeded = false;
67
+ try {
68
+ // Synchronously render the React tree into the container
69
+ reconciler.updateContainerSync(node, container, null, () => { });
70
+ reconciler.flushSyncWork();
71
+ // Yoga layout has already been calculated by onComputeLayout during commit.
72
+ // Render the DOM tree to a string — this captures the dynamic (non-static) output.
73
+ const { output } = renderer(rootNode, false);
74
+ // Tear down: unmount the tree so the reconciler cleans up child nodes
75
+ // and runs effect cleanup functions. Child Yoga nodes are freed by the
76
+ // reconciler's removeChildFromContainer → cleanupYogaNode → freeRecursive.
77
+ reconciler.updateContainerSync(null, container, null, () => { });
78
+ reconciler.flushSyncWork();
79
+ teardownSucceeded = true;
80
+ // Free the root yoga node itself (children already freed by reconciler)
81
+ rootNode.yogaNode.free();
82
+ // Re-throw after full cleanup so callers see the original error.
83
+ if (uncaughtError !== undefined) {
84
+ throw uncaughtError instanceof Error
85
+ ? uncaughtError
86
+ : new Error(String(uncaughtError));
87
+ }
88
+ // The renderer appends a trailing newline to static output for terminal
89
+ // rendering (so dynamic output starts on a fresh line). Strip it here
90
+ // so renderToString returns clean output.
91
+ const normalizedStaticOutput = capturedStaticOutput.endsWith('\n')
92
+ ? capturedStaticOutput.slice(0, -1)
93
+ : capturedStaticOutput;
94
+ if (normalizedStaticOutput && output) {
95
+ return normalizedStaticOutput + '\n' + output;
96
+ }
97
+ return normalizedStaticOutput || output;
98
+ }
99
+ finally {
100
+ // Ensure native Yoga memory is freed even if rendering or teardown threw.
101
+ // Yoga nodes are WASM-backed and not garbage collected.
102
+ if (!teardownSucceeded && rootNode.yogaNode) {
103
+ try {
104
+ // If reconciler teardown failed, some child nodes may not have been
105
+ // freed. Use freeRecursive to clean up the entire tree as best-effort.
106
+ rootNode.yogaNode.freeRecursive();
107
+ }
108
+ catch {
109
+ // Best-effort: node may already be partially freed
110
+ }
111
+ }
112
+ }
113
+ };
114
+ export default renderToString;
115
+ //# sourceMappingURL=render-to-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-to-string.js","sourceRoot":"","sources":["../src/render-to-string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { ReactNode } from 'react';
2
+ import Ink, { type RenderMetrics } from './ink.js';
3
+ import { type KittyKeyboardOptions } from './kitty-keyboard.js';
4
+ export type RenderOptions = {
5
+ /**
6
+ Output stream where the app will be rendered.
7
+
8
+ @default process.stdout
9
+ */
10
+ stdout?: NodeJS.WriteStream;
11
+ /**
12
+ Input stream where app will listen for input.
13
+
14
+ @default process.stdin
15
+ */
16
+ stdin?: NodeJS.ReadStream;
17
+ /**
18
+ Error stream.
19
+ @default process.stderr
20
+ */
21
+ stderr?: NodeJS.WriteStream;
22
+ /**
23
+ If true, each update will be rendered as separate output, without replacing the previous one.
24
+
25
+ @default false
26
+ */
27
+ debug?: boolean;
28
+ /**
29
+ Configure whether Ink should listen for Ctrl+C keyboard input and exit the app. This is needed in case `process.stdin` is in raw mode, because then Ctrl+C is ignored by default and the process is expected to handle it manually.
30
+
31
+ @default true
32
+ */
33
+ exitOnCtrlC?: boolean;
34
+ /**
35
+ Patch console methods to ensure console output doesn't mix with Ink's output.
36
+
37
+ @default true
38
+ */
39
+ patchConsole?: boolean;
40
+ /**
41
+ Runs the given callback after each render and re-render.
42
+ */
43
+ onRender?: (metrics: RenderMetrics) => void;
44
+ /**
45
+ Enable screen reader support. See https://github.com/vadimdemedes/ink/blob/master/readme.md#screen-reader-support
46
+
47
+ @default process.env['INK_SCREEN_READER'] === 'true'
48
+ */
49
+ isScreenReaderEnabled?: boolean;
50
+ /**
51
+ Maximum frames per second for render updates.
52
+ This controls how frequently the UI can update to prevent excessive re-rendering.
53
+ Higher values allow more frequent updates but may impact performance.
54
+
55
+ @default 30
56
+ */
57
+ maxFps?: number;
58
+ /**
59
+ Enable incremental rendering mode which only updates changed lines instead of redrawing the entire output.
60
+ This can reduce flickering and improve performance for frequently updating UIs.
61
+
62
+ @default false
63
+ */
64
+ incrementalRendering?: boolean;
65
+ /**
66
+ Enable React Concurrent Rendering mode.
67
+
68
+ When enabled:
69
+ - Suspense boundaries work correctly with async data
70
+ - `useTransition` and `useDeferredValue` are fully functional
71
+ - Updates can be interrupted for higher priority work
72
+
73
+ Note: Concurrent mode changes the timing of renders. Some tests may need to use `act()` to properly await updates. The `concurrent` option only takes effect on the first render for a given stdout. If you need to change the rendering mode, call `unmount()` first.
74
+
75
+ @default false
76
+ */
77
+ concurrent?: boolean;
78
+ /**
79
+ Configure kitty keyboard protocol support for enhanced keyboard input.
80
+ Enables additional modifiers (super, hyper, capsLock, numLock) and
81
+ disambiguated key events in terminals that support the protocol.
82
+
83
+ @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/
84
+ */
85
+ kittyKeyboard?: KittyKeyboardOptions;
86
+ };
87
+ export type Instance = {
88
+ /**
89
+ Replace the previous root node with a new one or update props of the current root node.
90
+ */
91
+ rerender: Ink['render'];
92
+ /**
93
+ Manually unmount the whole Ink app.
94
+ */
95
+ unmount: Ink['unmount'];
96
+ /**
97
+ Returns a promise that settles when the app is unmounted.
98
+
99
+ It resolves with the value passed to `exit(value)` and rejects with the error passed to `exit(error)`.
100
+
101
+ @example
102
+ ```jsx
103
+ const {unmount, waitUntilExit} = render(<MyApp />);
104
+
105
+ setTimeout(unmount, 1000);
106
+
107
+ await waitUntilExit(); // resolves after `unmount()` is called
108
+ ```
109
+ */
110
+ waitUntilExit: Ink['waitUntilExit'];
111
+ cleanup: () => void;
112
+ /**
113
+ Clear output.
114
+ */
115
+ clear: () => void;
116
+ };
117
+ /**
118
+ Mount a component and render the output.
119
+ */
120
+ declare const render: (node: ReactNode, options?: NodeJS.WriteStream | RenderOptions) => Instance;
121
+ export default render;
@@ -0,0 +1,55 @@
1
+ import { Stream } from 'node:stream';
2
+ import process from 'node:process';
3
+ import Ink from './ink.js';
4
+ import instances from './instances.js';
5
+ /**
6
+ Mount a component and render the output.
7
+ */
8
+ const render = (node, options) => {
9
+ const inkOptions = {
10
+ stdout: process.stdout,
11
+ stdin: process.stdin,
12
+ stderr: process.stderr,
13
+ debug: false,
14
+ exitOnCtrlC: true,
15
+ patchConsole: true,
16
+ maxFps: 30,
17
+ incrementalRendering: false,
18
+ concurrent: false,
19
+ ...getOptions(options),
20
+ };
21
+ const instance = getInstance(inkOptions.stdout, () => new Ink(inkOptions), inkOptions.concurrent ?? false);
22
+ instance.render(node);
23
+ return {
24
+ rerender: instance.render,
25
+ unmount() {
26
+ instance.unmount();
27
+ },
28
+ waitUntilExit: instance.waitUntilExit,
29
+ cleanup: () => instances.delete(inkOptions.stdout),
30
+ clear: instance.clear,
31
+ };
32
+ };
33
+ export default render;
34
+ const getOptions = (stdout = {}) => {
35
+ if (stdout instanceof Stream) {
36
+ return {
37
+ stdout,
38
+ stdin: process.stdin,
39
+ };
40
+ }
41
+ return stdout;
42
+ };
43
+ const getInstance = (stdout, createInstance, concurrent) => {
44
+ let instance = instances.get(stdout);
45
+ if (!instance) {
46
+ instance = createInstance();
47
+ instances.set(stdout, instance);
48
+ }
49
+ else if (instance.isConcurrent !== concurrent) {
50
+ console.warn(`Warning: render() was called with concurrent: ${concurrent}, but the existing instance for this stdout uses concurrent: ${instance.isConcurrent}. ` +
51
+ `The concurrent option only takes effect on the first render. Call unmount() first if you need to change the rendering mode.`);
52
+ }
53
+ return instance;
54
+ };
55
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,GAAqD,MAAM,UAAU,CAAC;AAC7E,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAqIvC;;EAEE;AACF,MAAM,MAAM,GAAG,CACd,IAAe,EACf,OAA4C,EACjC,EAAE;IACb,MAAM,UAAU,GAAe;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,EAAE;QACV,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,KAAK;QACjB,GAAG,UAAU,CAAC,OAAO,CAAC;KACtB,CAAC;IAEF,MAAM,QAAQ,GAAQ,WAAW,CAChC,UAAU,CAAC,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,EACzB,UAAU,CAAC,UAAU,IAAI,KAAK,CAC9B,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtB,OAAO;QACN,QAAQ,EAAE,QAAQ,CAAC,MAAM;QACzB,OAAO;YACN,QAAQ,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QACD,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAClD,KAAK,EAAE,QAAQ,CAAC,KAAK;KACrB,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB,MAAM,UAAU,GAAG,CAClB,SAAyD,EAAE,EAC3C,EAAE;IAClB,IAAI,MAAM,YAAY,MAAM,EAAE,CAAC;QAC9B,OAAO;YACN,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,KAAK;SACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CACnB,MAA0B,EAC1B,cAAyB,EACzB,UAAmB,EACb,EAAE;IACR,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,QAAQ,GAAG,cAAc,EAAE,CAAC;QAC5B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,QAAQ,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO,CAAC,IAAI,CACX,iDAAiD,UAAU,gEAAgE,QAAQ,CAAC,YAAY,IAAI;YACnJ,6HAA6H,CAC9H,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type DOMElement } from './dom.js';
2
+ type Result = {
3
+ output: string;
4
+ outputHeight: number;
5
+ staticOutput: string;
6
+ };
7
+ declare const renderer: (node: DOMElement, isScreenReaderEnabled: boolean) => Result;
8
+ export default renderer;
@@ -0,0 +1,55 @@
1
+ import renderNodeToOutput, { renderNodeToScreenReaderOutput, } from './render-node-to-output.js';
2
+ import Output from './output.js';
3
+ const renderer = (node, isScreenReaderEnabled) => {
4
+ if (node.yogaNode) {
5
+ if (isScreenReaderEnabled) {
6
+ const output = renderNodeToScreenReaderOutput(node, {
7
+ skipStaticElements: true,
8
+ });
9
+ const outputHeight = output === '' ? 0 : output.split('\n').length;
10
+ let staticOutput = '';
11
+ if (node.staticNode) {
12
+ staticOutput = renderNodeToScreenReaderOutput(node.staticNode, {
13
+ skipStaticElements: false,
14
+ });
15
+ }
16
+ return {
17
+ output,
18
+ outputHeight,
19
+ staticOutput: staticOutput ? `${staticOutput}\n` : '',
20
+ };
21
+ }
22
+ const output = new Output({
23
+ width: node.yogaNode.getComputedWidth(),
24
+ height: node.yogaNode.getComputedHeight(),
25
+ });
26
+ renderNodeToOutput(node, output, {
27
+ skipStaticElements: true,
28
+ });
29
+ let staticOutput;
30
+ if (node.staticNode?.yogaNode) {
31
+ staticOutput = new Output({
32
+ width: node.staticNode.yogaNode.getComputedWidth(),
33
+ height: node.staticNode.yogaNode.getComputedHeight(),
34
+ });
35
+ renderNodeToOutput(node.staticNode, staticOutput, {
36
+ skipStaticElements: false,
37
+ });
38
+ }
39
+ const { output: generatedOutput, height: outputHeight } = output.get();
40
+ return {
41
+ output: generatedOutput,
42
+ outputHeight,
43
+ // Newline at the end is needed, because static output doesn't have one, so
44
+ // interactive output will override last line of static output
45
+ staticOutput: staticOutput ? `${staticOutput.get().output}\n` : '',
46
+ };
47
+ }
48
+ return {
49
+ output: '',
50
+ outputHeight: 0,
51
+ staticOutput: '',
52
+ };
53
+ };
54
+ export default renderer;
55
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,EAAE,EAC1B,8BAA8B,GAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,MAAM,MAAM,aAAa,CAAC;AASjC,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,qBAA8B,EAAU,EAAE;IAC7E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,qBAAqB,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,8BAA8B,CAAC,IAAI,EAAE;gBACnD,kBAAkB,EAAE,IAAI;aACxB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAEnE,IAAI,YAAY,GAAG,EAAE,CAAC;YAEtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,UAAU,EAAE;oBAC9D,kBAAkB,EAAE,KAAK;iBACzB,CAAC,CAAC;YACJ,CAAC;YAED,OAAO;gBACN,MAAM;gBACN,YAAY;gBACZ,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE;aACrD,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACzB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;SACzC,CAAC,CAAC;QAEH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE;YAChC,kBAAkB,EAAE,IAAI;SACxB,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC;QAEjB,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC/B,YAAY,GAAG,IAAI,MAAM,CAAC;gBACzB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,EAAE;gBAClD,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,EAAE;aACpD,CAAC,CAAC;YAEH,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE;gBACjD,kBAAkB,EAAE,KAAK;aACzB,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,EAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAErE,OAAO;YACN,MAAM,EAAE,eAAe;YACvB,YAAY;YACZ,2EAA2E;YAC3E,8DAA8D;YAC9D,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;SAClE,CAAC;IACH,CAAC;IAED,OAAO;QACN,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,EAAE;KAChB,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const sanitizeAnsi: (text: string) => string;
2
+ export default sanitizeAnsi;
@@ -0,0 +1,27 @@
1
+ import { hasAnsiControlCharacters, tokenizeAnsi } from './ansi-tokenizer.js';
2
+ const sgrParametersRegex = /^[\d:;]*$/;
3
+ // Strip ANSI escape sequences that would conflict with Ink's layout.
4
+ // Preserved: SGR sequences (colors, bold, etc. - end with 'm') and
5
+ // OSC sequences (hyperlinks, etc. - ESC ] or C1 OSC).
6
+ // Stripped: cursor movement, screen clearing, and other control sequences.
7
+ const sanitizeAnsi = (text) => {
8
+ if (!hasAnsiControlCharacters(text)) {
9
+ return text;
10
+ }
11
+ let output = '';
12
+ for (const token of tokenizeAnsi(text)) {
13
+ if (token.type === 'text' || token.type === 'osc') {
14
+ output += token.value;
15
+ continue;
16
+ }
17
+ if (token.type === 'csi' &&
18
+ token.finalCharacter === 'm' &&
19
+ token.intermediateString === '' &&
20
+ sgrParametersRegex.test(token.parameterString)) {
21
+ output += token.value;
22
+ }
23
+ }
24
+ return output;
25
+ };
26
+ export default sanitizeAnsi;
27
+ //# sourceMappingURL=sanitize-ansi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-ansi.js","sourceRoot":"","sources":["../src/sanitize-ansi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAE,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAE3E,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAEvC,qEAAqE;AACrE,mEAAmE;AACnE,sDAAsD;AACtD,2EAA2E;AAC3E,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IAC7C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;YACtB,SAAS;QACV,CAAC;QAED,IACC,KAAK,CAAC,IAAI,KAAK,KAAK;YACpB,KAAK,CAAC,cAAc,KAAK,GAAG;YAC5B,KAAK,CAAC,kBAAkB,KAAK,EAAE;YAC/B,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAC7C,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;QACvB,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type WriteStream } from 'node:tty';
2
+ declare class ScreenReaderUpdate {
3
+ private readonly stdout;
4
+ private readonly stderr;
5
+ private previousOutput;
6
+ private previousLineCount;
7
+ constructor(stdout: WriteStream, stderr: WriteStream);
8
+ private wrap;
9
+ render(output: string): void;
10
+ writeStdout(data: string): void;
11
+ writeStderr(data: string): void;
12
+ }
13
+ export default ScreenReaderUpdate;
@@ -0,0 +1,38 @@
1
+ import ansiEscapes from 'ansi-escapes';
2
+ import wrapAnsi from 'wrap-ansi';
3
+ class ScreenReaderUpdate {
4
+ stdout;
5
+ stderr;
6
+ previousOutput = '';
7
+ previousLineCount = 0;
8
+ constructor(stdout, stderr) {
9
+ this.stdout = stdout;
10
+ this.stderr = stderr;
11
+ }
12
+ wrap(output) {
13
+ const width = this.stdout.columns || 80;
14
+ return wrapAnsi(output, width, { trim: false, hard: true });
15
+ }
16
+ render(output) {
17
+ const wrapped = this.wrap(output);
18
+ if (wrapped === this.previousOutput) {
19
+ return;
20
+ }
21
+ const erase = this.previousLineCount > 0 ? ansiEscapes.eraseLines(this.previousLineCount) : '';
22
+ this.stdout.write(erase + wrapped);
23
+ this.previousOutput = wrapped;
24
+ this.previousLineCount = wrapped === '' ? 0 : wrapped.split('\n').length;
25
+ }
26
+ writeStdout(data) {
27
+ const erase = this.previousLineCount > 0 ? ansiEscapes.eraseLines(this.previousLineCount) : '';
28
+ this.stdout.write(erase + data + this.previousOutput);
29
+ }
30
+ writeStderr(data) {
31
+ const erase = this.previousLineCount > 0 ? ansiEscapes.eraseLines(this.previousLineCount) : '';
32
+ this.stdout.write(erase);
33
+ this.stderr.write(data);
34
+ this.stdout.write(this.previousOutput);
35
+ }
36
+ }
37
+ export default ScreenReaderUpdate;
38
+ //# sourceMappingURL=screen-reader-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-reader-update.js","sourceRoot":"","sources":["../src/screen-reader-update.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,kBAAkB;IAKH;IACA;IALX,cAAc,GAAG,EAAE,CAAC;IACpB,iBAAiB,GAAG,CAAC,CAAC;IAE9B,YACmB,MAAmB,EACnB,MAAmB;QADnB,WAAM,GAAN,MAAM,CAAa;QACnB,WAAM,GAAN,MAAM,CAAa;IACnC,CAAC;IAEI,IAAI,CAAC,MAAc;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;QAEnC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC3E,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;CACF;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type DOMElement } from './dom.js';
2
+ declare const squashTextNodes: (node: DOMElement) => string;
3
+ export default squashTextNodes;
@@ -0,0 +1,36 @@
1
+ import sanitizeAnsi from './sanitize-ansi.js';
2
+ // Squashing text nodes allows to combine multiple text nodes into one and write
3
+ // to `Output` instance only once. For example, <Text>hello{' '}world</Text>
4
+ // is actually 3 text nodes, which would result 3 writes to `Output`.
5
+ //
6
+ // Also, this is necessary for libraries like ink-link (https://github.com/sindresorhus/ink-link),
7
+ // which need to wrap all children at once, instead of wrapping 3 text nodes separately.
8
+ const squashTextNodes = (node) => {
9
+ let text = '';
10
+ for (let index = 0; index < node.childNodes.length; index++) {
11
+ const childNode = node.childNodes[index];
12
+ if (childNode === undefined) {
13
+ continue;
14
+ }
15
+ let nodeText = '';
16
+ if (childNode.nodeName === '#text') {
17
+ nodeText = childNode.nodeValue;
18
+ }
19
+ else {
20
+ if (childNode.nodeName === 'ink-text' ||
21
+ childNode.nodeName === 'ink-virtual-text') {
22
+ nodeText = squashTextNodes(childNode);
23
+ }
24
+ // Since these text nodes are being concatenated, `Output` instance won't be able to
25
+ // apply children transform, so we have to do it manually here for each text node
26
+ if (nodeText.length > 0 &&
27
+ typeof childNode.internal_transform === 'function') {
28
+ nodeText = childNode.internal_transform(nodeText, index);
29
+ }
30
+ }
31
+ text += nodeText;
32
+ }
33
+ return sanitizeAnsi(text);
34
+ };
35
+ export default squashTextNodes;
36
+ //# sourceMappingURL=squash-text-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"squash-text-nodes.js","sourceRoot":"","sources":["../src/squash-text-nodes.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,gFAAgF;AAChF,4EAA4E;AAC5E,qEAAqE;AACrE,EAAE;AACF,kGAAkG;AAClG,wFAAwF;AACxF,MAAM,eAAe,GAAG,CAAC,IAAgB,EAAU,EAAE;IACpD,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,SAAS;QACV,CAAC;QAED,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACpC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,IACC,SAAS,CAAC,QAAQ,KAAK,UAAU;gBACjC,SAAS,CAAC,QAAQ,KAAK,kBAAkB,EACxC,CAAC;gBACF,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;YAED,oFAAoF;YACpF,iFAAiF;YACjF,IACC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,OAAO,SAAS,CAAC,kBAAkB,KAAK,UAAU,EACjD,CAAC;gBACF,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QAED,IAAI,IAAI,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}