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.
- package/dist/client/assets/{AlertCircle-CFfY0yZQ.js → AlertCircle-CtitvjsH.js} +1 -1
- package/dist/client/assets/{ArrowLeft-q2zfYOyo.js → ArrowLeft-3io_8nEP.js} +1 -1
- package/dist/client/assets/{ArrowUp-C7CRE9h6.js → ArrowUp-i0bG6Tx_.js} +1 -1
- package/dist/client/assets/{Check-BSNNIgHR.js → Check-f6vqdTVP.js} +1 -1
- package/dist/client/assets/{ChevronDown-CmDo1lzo.js → ChevronDown-BzbiITGh.js} +1 -1
- package/dist/client/assets/{ChevronRight-DvMx_esu.js → ChevronRight-BL_W1N6F.js} +1 -1
- package/dist/client/assets/{ChevronUp-C1ZwRacy.js → ChevronUp-BKSJAtLO.js} +1 -1
- package/dist/client/assets/{Container-Dnc6yNup.js → Container-DaFalkcW.js} +1 -1
- package/dist/client/assets/{Dataflow03-Chfn49aN.js → Dataflow03-BID0sAye.js} +1 -1
- package/dist/client/assets/{Download01-BNS80W0k.js → Download01-DS6vGSUU.js} +1 -1
- package/dist/client/assets/{FolderClosed-BykmJUFv.js → FolderClosed-BEAeGMpl.js} +1 -1
- package/dist/client/assets/{Grid01--i5_ePuX.js → Grid01-CrA1A_18.js} +1 -1
- package/dist/client/assets/{List-Bmsn6CzV.js → List-WPqnYQKj.js} +1 -1
- package/dist/client/assets/{Loading01-D1Pvsp8y.js → Loading01-b0x7f8u_.js} +1 -1
- package/dist/client/assets/{Play-BC5VNHwm.js → Play-CN0m3XWi.js} +1 -1
- package/dist/client/assets/{Plus-DbIgM1x-.js → Plus-DmqvCfWI.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-BEBs5v_q.js → RefreshCcw01-BZXMQFPy.js} +1 -1
- package/dist/client/assets/{SearchMd-PX-e8O0B.js → SearchMd-CIgTlNX_.js} +1 -1
- package/dist/client/assets/{Settings01-84CJqC0A.js → Settings01-bZOYZZe1.js} +1 -1
- package/dist/client/assets/{Trash01-BPldOgkf.js → Trash01-gOPUL91A.js} +1 -1
- package/dist/client/assets/{Type01-DpCsdgUP.js → Type01-DJEwH71e.js} +1 -1
- package/dist/client/assets/{Upload01-B2Ms9Ufu.js → Upload01-BdsUmigW.js} +1 -1
- package/dist/client/assets/{User01-BfpgpGwT.js → User01-BFJo9npx.js} +1 -1
- package/dist/client/assets/{VideoRecorder-wLrORVI9.js → VideoRecorder-CpeuE70t.js} +1 -1
- package/dist/client/assets/{X-BHB4uMvu.js → X-BPJKg-Sa.js} +1 -1
- package/dist/client/assets/{XCircle-diVK-bFd.js → XCircle-PZ_iEr_s.js} +1 -1
- package/dist/client/assets/{XClose-tJXgwIHZ.js → XClose-CV8NRiYb.js} +1 -1
- package/dist/client/assets/{Zap-CbDTgbzb.js → Zap-Djb2s9XH.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-DDUBsgI6.js → agent-connections-preview-CFY9JoNF.js} +1 -1
- package/dist/client/assets/{agent-detail-DyWtkgva.js → agent-detail-H4BT7CTr.js} +1 -1
- package/dist/client/assets/{agents-Bhzn9Eef.js → agents-D2dFJ668.js} +1 -1
- package/dist/client/assets/{ai-providers-logos-D8dUWzwV.js → ai-providers-logos-Bt4g7p0X.js} +1 -1
- package/dist/client/assets/{alert-dialog-D8sReHHS.js → alert-dialog-qbhCFIrJ.js} +1 -1
- package/dist/client/assets/{auth-catchall-D1xOR84L.js → auth-catchall-CQTUcOb6.js} +1 -1
- package/dist/client/assets/{automation-detail-B7hCcREQ.js → automation-detail-DPyfTmgL.js} +1 -1
- package/dist/client/assets/{automations-Bx9vUoOk.js → automations-D9dpmBWI.js} +1 -1
- package/dist/client/assets/{avatar-C_Cgb4k2.js → avatar-HaW-aDPQ.js} +1 -1
- package/dist/client/assets/{badge-C8UnqRcC.js → badge-Crn2wX7w.js} +1 -1
- package/dist/client/assets/{binder-CEsnpfBd.js → binder-Bpa9PbnU.js} +1 -1
- package/dist/client/assets/{breadcrumb-CAVAhr_W.js → breadcrumb-Do1IM0FU.js} +1 -1
- package/dist/client/assets/{card-CWrlHmbX.js → card-D-nlEHTG.js} +1 -1
- package/dist/client/assets/{checkbox-DiUCU_uY.js → checkbox-Bk2GcJ8k.js} +1 -1
- package/dist/client/assets/{collapsible-BhwX3etL.js → collapsible-SLXpL9mb.js} +1 -1
- package/dist/client/assets/{collection-detail-Dkw16c0c.js → collection-detail-DeV3SFaX.js} +1 -1
- package/dist/client/assets/{collection-display-button-BBzEpEkj.js → collection-display-button-HO2n3PFr.js} +1 -1
- package/dist/client/assets/{collection-search-BT_VOWLL.js → collection-search-CW0lALTo.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-B347tlKT.js → collection-table-wrapper-DS1bzEdZ.js} +1 -1
- package/dist/client/assets/{collection-tabs-CRnU8dYm.js → collection-tabs-Dv1o-Tiq.js} +1 -1
- package/dist/client/assets/{command-DkggJl9E.js → command-BJmMsGWz.js} +1 -1
- package/dist/client/assets/{connection-card-DTdD45cZ.js → connection-card-tMWWUIo4.js} +1 -1
- package/dist/client/assets/{connection-detail-BVusS7DN.js → connection-detail-PuDo8T2F.js} +1 -1
- package/dist/client/assets/{connections-CSCQ37th.js → connections-BROEiJqN.js} +1 -1
- package/dist/client/assets/constants-BO-AsdnG.js +1 -0
- package/dist/client/assets/{constants-sZSGbDkU.js → constants-BRyDKx5E.js} +1 -1
- package/dist/client/assets/{context-CsyORbSE.js → context-DjKq41Ps.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-DN8hdiM4.js → create-organization-dialog-582-kldv.js} +1 -1
- package/dist/client/assets/{create-project-dialog-lAZ_FT_g.js → create-project-dialog-CIZm3cj7.js} +1 -1
- package/dist/client/assets/{danger-B1Qw5mPg.js → danger-CY1cNAKE.js} +1 -1
- package/dist/client/assets/{danger-zone-BUW-olFn.js → danger-zone-DyYupl_l.js} +1 -1
- package/dist/client/assets/{dependencies-DRYoQ6jU.js → dependencies-HtJ0jPZo.js} +1 -1
- package/dist/client/assets/{dialog-CmqjWAM7.js → dialog-D2pSotmJ.js} +1 -1
- package/dist/client/assets/{drawer-DhTY0hMj.js → drawer-DmfwbJvN.js} +1 -1
- package/dist/client/assets/{dropdown-menu-D37bEJBF.js → dropdown-menu-DBNiGGCa.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-ChsexoCJ.js → dynamic-plugin-layout-Ci6pDEpr.js} +1 -1
- package/dist/client/assets/{editable-task-title-DEfOdS3n.js → editable-task-title-CVoah20Z.js} +1 -1
- package/dist/client/assets/{empty-state-B8cgNR-N.js → empty-state-Cq-2Stw7.js} +1 -1
- package/dist/client/assets/{empty-state-Cjw3IbRU.js → empty-state-D7BW8jaP.js} +1 -1
- package/dist/client/assets/{env-vars-editor-DHio8hU0.js → env-vars-editor-DGyEmObe.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DgYZMSpy.js → extract-connection-data-Dr5WITt6.js} +1 -1
- package/dist/client/assets/{file-browser-BsuckOvL.js → file-browser-BStF6ZMr.js} +2 -2
- package/dist/client/assets/{form-Dg4rCHi6.js → form-BYJDKe84.js} +1 -1
- package/dist/client/assets/{general-B3rA-PiU.js → general-BjV1aJ55.js} +1 -1
- package/dist/client/assets/{grid-view-DAO80r8h.js → grid-view-KO_Fabbh.js} +1 -1
- package/dist/client/assets/{home-CTgNmz0x.js → home-D5293Vev.js} +1 -1
- package/dist/client/assets/{import-from-deco-dialog-BbA3u8-E.js → import-from-deco-dialog-Djo43MO2.js} +1 -1
- package/dist/client/assets/{index-D5h1vKqM.js → index-BLTp2mfW.js} +1 -1
- package/dist/client/assets/{index-B7m8nOA3.js → index-BV94yULQ.js} +1 -1
- package/dist/client/assets/{index-DPu67tmU.js → index-BbYJDAO_.js} +1 -1
- package/dist/client/assets/{index-Bcecb_Xz.js → index-BoO8n-rM.js} +3 -3
- package/dist/client/assets/{index-BiawlfhY.js → index-CPsGHZV5.js} +1 -1
- package/dist/client/assets/{index-VD0DUUlZ.js → index-D5sFwM_q.js} +1 -1
- package/dist/client/assets/{index-CyfmseFq.js → index-DM77haUb.js} +1 -1
- package/dist/client/assets/{index-Hi_A-Tsf.js → index-DwgsAdtI.js} +1 -1
- package/dist/client/assets/{index-C4GDQd8z.js → index-TdiS16S8.js} +1 -1
- package/dist/client/assets/{index-DHItCPJs.js → index-gp1o0aQ_.js} +1 -1
- package/dist/client/assets/{index-5yAQM6kw.js → index-qFA25zOH.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DWp3_CVI.js → infiniteQueryObserver-CL5fJNiq.js} +1 -1
- package/dist/client/assets/{input-cBzeNH_n.js → input-DuzgW_Cj.js} +1 -1
- package/dist/client/assets/{integration-icon-ByGVeLrz.js → integration-icon-Cx2rPbBh.js} +1 -1
- package/dist/client/assets/{label-DoFd0DeW.js → label-DiRwVfbK.js} +1 -1
- package/dist/client/assets/{layout-BhXmEzmE.js → layout-BfKLaD-7.js} +1 -1
- package/dist/client/assets/{layout-DCBpI9GX.js → layout-DRMSwprX.js} +1 -1
- package/dist/client/assets/{login-D1KWsW_u.js → login-Da33loRU.js} +1 -1
- package/dist/client/assets/{logo-upload-BQGPbHRq.js → logo-upload-D-EpUqKb.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-DndsLro0.js → mcp-app-renderer-A6_5gh0N.js} +1 -1
- package/dist/client/assets/{mcp-server-card-DPENkZXf.js → mcp-server-card-BWUTkKwk.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-DQCKUE12.js → mcp-server-detail-jdGuw6cV.js} +2 -2
- package/dist/client/assets/{members-nGwQLmND.js → members-D2NzG2nc.js} +1 -1
- package/dist/client/assets/{monaco-editor-CrYWYGQQ.js → monaco-editor-DgkGyIFp.js} +1 -1
- package/dist/client/assets/{monitoring-CsbZ7bmm.js → monitoring-CSEdadkb.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-w8pIA6Ie.js → monitoring-dashboard-edit-CXP9EN1f.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-MthMkZuB.js → monitoring-dashboard-view-CEaNkmLG.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CqSp-eoy.js → monitoring-stats-row-B_MW1OhS.js} +1 -1
- package/dist/client/assets/{oauth-callback-CJZrmNWZ.js → oauth-callback-Bz0EJuS1.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-B3_0Xe3o.js → oauth-callback-ai-provider-D5PorOtm.js} +1 -1
- package/dist/client/assets/{org-ai-providers-BddV4XoH.js → org-ai-providers-C8WJgjRg.js} +1 -1
- package/dist/client/assets/{page--U0v_pX3.js → page-DMpvrDmE.js} +1 -1
- package/dist/client/assets/{page-CBSe1z4F.js → page-DhnNY5cT.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-BEgqVtoa.js → plugin-empty-state-BF81EuZU.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-lZmnDccK.js → plugin-empty-state-CyYjML0d.js} +1 -1
- package/dist/client/assets/{plugin-header-CLrhmaZp.js → plugin-header-BZQ6v9Dv.js} +1 -1
- package/dist/client/assets/{plugin-header-CQK-IpRs.js → plugin-header-J32jluXn.js} +1 -1
- package/dist/client/assets/plugins-DieBnmX_.js +1 -0
- package/dist/client/assets/{popover-CMmU9vEC.js → popover-CtyD8kak.js} +1 -1
- package/dist/client/assets/{project-app-view-Cih2GI6n.js → project-app-view-B_TSbFht.js} +1 -1
- package/dist/client/assets/{project-layout-BU4QeywV.js → project-layout-BFYhUp7u.js} +1 -1
- package/dist/client/assets/{project-plugins-CRLkmd39.js → project-plugins-Ac2bO3iJ.js} +1 -1
- package/dist/client/assets/{projects-list-kJyjAxRL.js → projects-list-Bwwy0ru8.js} +1 -1
- package/dist/client/assets/{registry-layout-CudXrSHI.js → registry-layout-tuLQ36Na.js} +1 -1
- package/dist/client/assets/{registry-utils-bxl52ndx.js → registry-utils-DoSQNJ_M.js} +1 -1
- package/dist/client/assets/{reset-password--yhV4IBG.js → reset-password-CwToNAPf.js} +1 -1
- package/dist/client/assets/{resizable-Xmr_dFSw.js → resizable-BEIVuTnJ.js} +1 -1
- package/dist/client/assets/{save-actions-DnXh5j1Q.js → save-actions-C8S59f-v.js} +1 -1
- package/dist/client/assets/{scroll-area-QU3iRHJE.js → scroll-area-CduYY4Re.js} +1 -1
- package/dist/client/assets/{select-D239zaXv.js → select-CGOcI-7S.js} +1 -1
- package/dist/client/assets/{select-virtual-mcp-Czgt_AbJ.js → select-virtual-mcp-BEyfMo-o.js} +1 -1
- package/dist/client/assets/{shell-layout-BxPSBU5t.js → shell-layout-BT3vkv8Z.js} +2 -2
- package/dist/client/assets/{sidebar-settings-BBNHEf84.js → sidebar-settings-CyrcKkJ4.js} +1 -1
- package/dist/client/assets/{skeleton-D03wOHty.js → skeleton-Bo6z7uiK.js} +1 -1
- package/dist/client/assets/{spinner-B5ev-YDV.js → spinner-BM6ocUxt.js} +1 -1
- package/dist/client/assets/{store-invite-HvZ_f981.js → store-invite-BcKHSR2w.js} +1 -1
- package/dist/client/assets/{switch-B8WHWc6A.js → switch-zI0teXPa.js} +1 -1
- package/dist/client/assets/{table-CTzpd733.js → table-CyFHKgUK.js} +1 -1
- package/dist/client/assets/{tabs-Dm9XV8db.js → tabs-aNTBXb88.js} +1 -1
- package/dist/client/assets/{task-status-C1q5JfD_.js → task-status-BmEV7t9q.js} +1 -1
- package/dist/client/assets/tasks-BKT6sRTI.js +1 -0
- package/dist/client/assets/{tasks-panel-CX7jkjdF.js → tasks-panel-Dx_VmaoJ.js} +1 -1
- package/dist/client/assets/{textarea-D02CdeQw.js → textarea-CeeIB6-J.js} +1 -1
- package/dist/client/assets/{time-range-picker-D8NL5Nmu.js → time-range-picker-D7RILeKK.js} +1 -1
- package/dist/client/assets/{toggle-group-jq0jWIRc.js → toggle-group-BNOxtCQ3.js} +1 -1
- package/dist/client/assets/{tools-list-BR2Dix09.js → tools-list-B8BbYK4A.js} +1 -1
- package/dist/client/assets/{tooltip-BCp7U7mN.js → tooltip-BIaQfSI8.js} +1 -1
- package/dist/client/assets/{topbar-portal-DIcyXgfm.js → topbar-portal-Df-jV5dE.js} +1 -1
- package/dist/client/assets/{types-BsGobcR-.js → types-BeXFNplD.js} +1 -1
- package/dist/client/assets/{use-automations-c_xstGD5.js → use-automations-viUCmfTe.js} +1 -1
- package/dist/client/assets/{use-collections-vlgqqhuP.js → use-collections-boLvDkbT.js} +1 -1
- package/dist/client/assets/{use-connection-DqJeUugh.js → use-connection-sSldkm55.js} +1 -1
- package/dist/client/assets/{use-copy-Ck5qLOJz.js → use-copy-DuS-6kWn.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DEi2MEtq.js → use-create-virtual-mcp-CKYKv6SW.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DmzrG2BE.js → use-infinite-scroll-CGarn18C.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-44g1gfZf.js → use-install-from-registry-DAJmEkC5.js} +1 -1
- package/dist/client/assets/{use-list-state-bklnJIlv.js → use-list-state-oXNu9u8R.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-CzQxO0I9.js → use-mcp-prompts-BRgvnsLG.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-BQkvQ_u9.js → use-mcp-resources-BQpqezxP.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BOIAjBvi.js → use-mcp-tools-DMQzZOZ6.js} +1 -1
- package/dist/client/assets/{use-members-CWNkurdp.js → use-members-C2JN8hIu.js} +1 -1
- package/dist/client/assets/{use-project-C2DxBYtI.js → use-project-CilOoEpE.js} +1 -1
- package/dist/client/assets/{use-store-discovery-DE51kyFJ.js → use-store-discovery-D0gJ2CQY.js} +1 -1
- package/dist/client/assets/{use-view-mode-CmavyF68.js → use-view-mode-ByMVrnnV.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DJSfh66r.js → use-virtual-mcp-BFsqq0fZ.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Byr_YtTT.js +1 -0
- package/dist/client/assets/{useMutation-DX97_hbH.js → useMutation-BJ-zKxaD.js} +1 -1
- package/dist/client/assets/useQuery-nL8PK1-e.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-DDi8SjCq.js +1 -0
- package/dist/client/assets/{user-xfin110t.js → user-YxxwV0CN.js} +1 -1
- package/dist/client/assets/{workflow-Ca61UGhY.js → workflow-BpFpSrqC.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +266 -266
- package/dist/server/node_modules/ansi-styles/index.d.ts +236 -0
- package/dist/server/node_modules/ansi-styles/index.js +223 -0
- package/dist/server/node_modules/ansi-styles/license +9 -0
- package/dist/server/node_modules/ansi-styles/package.json +54 -0
- package/dist/server/node_modules/ansi-styles/readme.md +173 -0
- package/dist/server/node_modules/environment/index.d.ts +74 -0
- package/dist/server/node_modules/environment/index.js +47 -0
- package/dist/server/node_modules/environment/license +9 -0
- package/dist/server/node_modules/environment/package.json +74 -0
- package/dist/server/node_modules/environment/readme.md +94 -0
- package/dist/server/node_modules/escape-string-regexp/index.d.ts +18 -0
- package/dist/server/node_modules/escape-string-regexp/index.js +11 -0
- package/dist/server/node_modules/escape-string-regexp/license +9 -0
- package/dist/server/node_modules/escape-string-regexp/package.json +43 -0
- package/dist/server/node_modules/escape-string-regexp/readme.md +29 -0
- package/dist/server/node_modules/ink/build/ansi-tokenizer.d.ts +38 -0
- package/dist/server/node_modules/ink/build/ansi-tokenizer.js +316 -0
- package/dist/server/node_modules/ink/build/ansi-tokenizer.js.map +1 -0
- package/dist/server/node_modules/ink/build/apply-styles.js +175 -0
- package/dist/server/node_modules/ink/build/build-layout.js +77 -0
- package/dist/server/node_modules/ink/build/calculate-wrapped-text.js +53 -0
- package/dist/server/node_modules/ink/build/colorize.d.ts +3 -0
- package/dist/server/node_modules/ink/build/colorize.js +48 -0
- package/dist/server/node_modules/ink/build/colorize.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/AccessibilityContext.d.ts +3 -0
- package/dist/server/node_modules/ink/build/components/AccessibilityContext.js +5 -0
- package/dist/server/node_modules/ink/build/components/AccessibilityContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/App.d.ts +18 -0
- package/dist/server/node_modules/ink/build/components/App.js +351 -0
- package/dist/server/node_modules/ink/build/components/App.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/AppContext.d.ts +15 -0
- package/dist/server/node_modules/ink/build/components/AppContext.js +11 -0
- package/dist/server/node_modules/ink/build/components/AppContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/BackgroundContext.d.ts +4 -0
- package/dist/server/node_modules/ink/build/components/BackgroundContext.js +3 -0
- package/dist/server/node_modules/ink/build/components/BackgroundContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Box.d.ts +117 -0
- package/dist/server/node_modules/ink/build/components/Box.js +34 -0
- package/dist/server/node_modules/ink/build/components/Box.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Color.js +62 -0
- package/dist/server/node_modules/ink/build/components/Cursor.d.ts +83 -0
- package/dist/server/node_modules/ink/build/components/Cursor.js +53 -0
- package/dist/server/node_modules/ink/build/components/Cursor.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/CursorContext.d.ts +11 -0
- package/dist/server/node_modules/ink/build/components/CursorContext.js +8 -0
- package/dist/server/node_modules/ink/build/components/CursorContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/ErrorBoundary.d.ts +18 -0
- package/dist/server/node_modules/ink/build/components/ErrorBoundary.js +23 -0
- package/dist/server/node_modules/ink/build/components/ErrorBoundary.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/ErrorOverview.d.ts +6 -0
- package/dist/server/node_modules/ink/build/components/ErrorOverview.js +84 -0
- package/dist/server/node_modules/ink/build/components/ErrorOverview.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/FocusContext.d.ts +16 -0
- package/dist/server/node_modules/ink/build/components/FocusContext.js +17 -0
- package/dist/server/node_modules/ink/build/components/FocusContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Newline.d.ts +13 -0
- package/dist/server/node_modules/ink/build/components/Newline.js +8 -0
- package/dist/server/node_modules/ink/build/components/Newline.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Spacer.d.ts +7 -0
- package/dist/server/node_modules/ink/build/components/Spacer.js +11 -0
- package/dist/server/node_modules/ink/build/components/Spacer.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Static.d.ts +24 -0
- package/dist/server/node_modules/ink/build/components/Static.js +28 -0
- package/dist/server/node_modules/ink/build/components/Static.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/StderrContext.d.ts +15 -0
- package/dist/server/node_modules/ink/build/components/StderrContext.js +13 -0
- package/dist/server/node_modules/ink/build/components/StderrContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/StdinContext.d.ts +22 -0
- package/dist/server/node_modules/ink/build/components/StdinContext.js +19 -0
- package/dist/server/node_modules/ink/build/components/StdinContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/StdoutContext.d.ts +15 -0
- package/dist/server/node_modules/ink/build/components/StdoutContext.js +13 -0
- package/dist/server/node_modules/ink/build/components/StdoutContext.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Text.d.ts +55 -0
- package/dist/server/node_modules/ink/build/components/Text.js +50 -0
- package/dist/server/node_modules/ink/build/components/Text.js.map +1 -0
- package/dist/server/node_modules/ink/build/components/Transform.d.ts +16 -0
- package/dist/server/node_modules/ink/build/components/Transform.js +15 -0
- package/dist/server/node_modules/ink/build/components/Transform.js.map +1 -0
- package/dist/server/node_modules/ink/build/cursor-helpers.d.ts +38 -0
- package/dist/server/node_modules/ink/build/cursor-helpers.js +56 -0
- package/dist/server/node_modules/ink/build/cursor-helpers.js.map +1 -0
- package/dist/server/node_modules/ink/build/devtools-window-polyfill.d.ts +1 -0
- package/dist/server/node_modules/ink/build/devtools-window-polyfill.js +65 -0
- package/dist/server/node_modules/ink/build/devtools-window-polyfill.js.map +1 -0
- package/dist/server/node_modules/ink/build/devtools.d.ts +1 -0
- package/dist/server/node_modules/ink/build/devtools.js +11 -0
- package/dist/server/node_modules/ink/build/devtools.js.map +1 -0
- package/dist/server/node_modules/ink/build/dom.d.ts +56 -0
- package/dist/server/node_modules/ink/build/dom.js +124 -0
- package/dist/server/node_modules/ink/build/dom.js.map +1 -0
- package/dist/server/node_modules/ink/build/experimental/apply-style.js +140 -0
- package/dist/server/node_modules/ink/build/experimental/dom.js +123 -0
- package/dist/server/node_modules/ink/build/experimental/output.js +91 -0
- package/dist/server/node_modules/ink/build/experimental/reconciler.js +141 -0
- package/dist/server/node_modules/ink/build/experimental/renderer.js +81 -0
- package/dist/server/node_modules/ink/build/get-max-width.d.ts +3 -0
- package/dist/server/node_modules/ink/build/get-max-width.js +10 -0
- package/dist/server/node_modules/ink/build/get-max-width.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-app.d.ts +5 -0
- package/dist/server/node_modules/ink/build/hooks/use-app.js +8 -0
- package/dist/server/node_modules/ink/build/hooks/use-app.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-cursor.d.ts +12 -0
- package/dist/server/node_modules/ink/build/hooks/use-cursor.js +29 -0
- package/dist/server/node_modules/ink/build/hooks/use-cursor.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-focus-manager.d.ts +28 -0
- package/dist/server/node_modules/ink/build/hooks/use-focus-manager.js +17 -0
- package/dist/server/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-focus.d.ts +29 -0
- package/dist/server/node_modules/ink/build/hooks/use-focus.js +42 -0
- package/dist/server/node_modules/ink/build/hooks/use-focus.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-input.d.ts +131 -0
- package/dist/server/node_modules/ink/build/hooks/use-input.js +124 -0
- package/dist/server/node_modules/ink/build/hooks/use-input.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
- package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
- package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-stderr.d.ts +5 -0
- package/dist/server/node_modules/ink/build/hooks/use-stderr.js +8 -0
- package/dist/server/node_modules/ink/build/hooks/use-stderr.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-stdin.d.ts +5 -0
- package/dist/server/node_modules/ink/build/hooks/use-stdin.js +8 -0
- package/dist/server/node_modules/ink/build/hooks/use-stdin.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/use-stdout.d.ts +5 -0
- package/dist/server/node_modules/ink/build/hooks/use-stdout.js +8 -0
- package/dist/server/node_modules/ink/build/hooks/use-stdout.js.map +1 -0
- package/dist/server/node_modules/ink/build/hooks/useInput.js +38 -0
- package/dist/server/node_modules/ink/build/index.d.ts +34 -0
- package/dist/server/node_modules/ink/build/index.js +20 -0
- package/dist/server/node_modules/ink/build/index.js.map +1 -0
- package/dist/server/node_modules/ink/build/ink.d.ts +90 -0
- package/dist/server/node_modules/ink/build/ink.js +637 -0
- package/dist/server/node_modules/ink/build/ink.js.map +1 -0
- package/dist/server/node_modules/ink/build/input-parser.d.ts +7 -0
- package/dist/server/node_modules/ink/build/input-parser.js +154 -0
- package/dist/server/node_modules/ink/build/input-parser.js.map +1 -0
- package/dist/server/node_modules/ink/build/instance.js +205 -0
- package/dist/server/node_modules/ink/build/instances.d.ts +3 -0
- package/dist/server/node_modules/ink/build/instances.js +8 -0
- package/dist/server/node_modules/ink/build/instances.js.map +1 -0
- package/dist/server/node_modules/ink/build/kitty-keyboard.d.ts +23 -0
- package/dist/server/node_modules/ink/build/kitty-keyboard.js +32 -0
- package/dist/server/node_modules/ink/build/kitty-keyboard.js.map +1 -0
- package/dist/server/node_modules/ink/build/layout.d.ts +7 -0
- package/dist/server/node_modules/ink/build/layout.js +33 -0
- package/dist/server/node_modules/ink/build/layout.js.map +1 -0
- package/dist/server/node_modules/ink/build/log-update.d.ts +19 -0
- package/dist/server/node_modules/ink/build/log-update.js +242 -0
- package/dist/server/node_modules/ink/build/log-update.js.map +1 -0
- package/dist/server/node_modules/ink/build/measure-element.d.ts +16 -0
- package/dist/server/node_modules/ink/build/measure-element.js +9 -0
- package/dist/server/node_modules/ink/build/measure-element.js.map +1 -0
- package/dist/server/node_modules/ink/build/measure-text.d.ts +6 -0
- package/dist/server/node_modules/ink/build/measure-text.js +21 -0
- package/dist/server/node_modules/ink/build/measure-text.js.map +1 -0
- package/dist/server/node_modules/ink/build/options.d.ts +52 -0
- package/dist/server/node_modules/ink/build/options.js +2 -0
- package/dist/server/node_modules/ink/build/options.js.map +1 -0
- package/dist/server/node_modules/ink/build/output.d.ts +35 -0
- package/dist/server/node_modules/ink/build/output.js +183 -0
- package/dist/server/node_modules/ink/build/output.js.map +1 -0
- package/dist/server/node_modules/ink/build/parse-keypress.d.ts +22 -0
- package/dist/server/node_modules/ink/build/parse-keypress.js +493 -0
- package/dist/server/node_modules/ink/build/parse-keypress.js.map +1 -0
- package/dist/server/node_modules/ink/build/reconciler.d.ts +4 -0
- package/dist/server/node_modules/ink/build/reconciler.js +274 -0
- package/dist/server/node_modules/ink/build/reconciler.js.map +1 -0
- package/dist/server/node_modules/ink/build/render-background.d.ts +4 -0
- package/dist/server/node_modules/ink/build/render-background.js +25 -0
- package/dist/server/node_modules/ink/build/render-background.js.map +1 -0
- package/dist/server/node_modules/ink/build/render-border.d.ts +4 -0
- package/dist/server/node_modules/ink/build/render-border.js +73 -0
- package/dist/server/node_modules/ink/build/render-border.js.map +1 -0
- package/dist/server/node_modules/ink/build/render-node-to-output.d.ts +14 -0
- package/dist/server/node_modules/ink/build/render-node-to-output.js +147 -0
- package/dist/server/node_modules/ink/build/render-node-to-output.js.map +1 -0
- package/dist/server/node_modules/ink/build/render-to-string.d.ts +38 -0
- package/dist/server/node_modules/ink/build/render-to-string.js +115 -0
- package/dist/server/node_modules/ink/build/render-to-string.js.map +1 -0
- package/dist/server/node_modules/ink/build/render.d.ts +121 -0
- package/dist/server/node_modules/ink/build/render.js +55 -0
- package/dist/server/node_modules/ink/build/render.js.map +1 -0
- package/dist/server/node_modules/ink/build/renderer.d.ts +8 -0
- package/dist/server/node_modules/ink/build/renderer.js +55 -0
- package/dist/server/node_modules/ink/build/renderer.js.map +1 -0
- package/dist/server/node_modules/ink/build/sanitize-ansi.d.ts +2 -0
- package/dist/server/node_modules/ink/build/sanitize-ansi.js +27 -0
- package/dist/server/node_modules/ink/build/sanitize-ansi.js.map +1 -0
- package/dist/server/node_modules/ink/build/screen-reader-update.d.ts +13 -0
- package/dist/server/node_modules/ink/build/screen-reader-update.js +38 -0
- package/dist/server/node_modules/ink/build/screen-reader-update.js.map +1 -0
- package/dist/server/node_modules/ink/build/squash-text-nodes.d.ts +3 -0
- package/dist/server/node_modules/ink/build/squash-text-nodes.js +36 -0
- package/dist/server/node_modules/ink/build/squash-text-nodes.js.map +1 -0
- package/dist/server/node_modules/ink/build/styles.d.ts +240 -0
- package/dist/server/node_modules/ink/build/styles.js +232 -0
- package/dist/server/node_modules/ink/build/styles.js.map +1 -0
- package/dist/server/node_modules/ink/build/utils.d.ts +2 -0
- package/dist/server/node_modules/ink/build/utils.js +4 -0
- package/dist/server/node_modules/ink/build/utils.js.map +1 -0
- package/dist/server/node_modules/ink/build/wrap-text.d.ts +3 -0
- package/dist/server/node_modules/ink/build/wrap-text.js +31 -0
- package/dist/server/node_modules/ink/build/wrap-text.js.map +1 -0
- package/dist/server/node_modules/ink/build/write-synchronized.d.ts +4 -0
- package/dist/server/node_modules/ink/build/write-synchronized.js +7 -0
- package/dist/server/node_modules/ink/build/write-synchronized.js.map +1 -0
- package/dist/server/node_modules/ink/license +10 -0
- package/dist/server/node_modules/ink/package.json +201 -0
- package/dist/server/node_modules/ink/readme.md +2636 -0
- package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
- package/dist/server/node_modules/is-fullwidth-code-point/index.js +12 -0
- package/dist/server/node_modules/is-fullwidth-code-point/license +9 -0
- package/dist/server/node_modules/is-fullwidth-code-point/package.json +53 -0
- package/dist/server/node_modules/is-fullwidth-code-point/readme.md +31 -0
- package/dist/server/node_modules/is-unicode-supported/index.d.ts +12 -0
- package/dist/server/node_modules/is-unicode-supported/index.js +21 -0
- package/dist/server/node_modules/is-unicode-supported/license +9 -0
- package/dist/server/node_modules/is-unicode-supported/package.json +47 -0
- package/dist/server/node_modules/is-unicode-supported/readme.md +35 -0
- package/dist/server/node_modules/mimic-fn/index.d.ts +54 -0
- package/dist/server/node_modules/mimic-fn/index.js +13 -0
- package/dist/server/node_modules/mimic-fn/license +9 -0
- package/dist/server/node_modules/mimic-fn/package.json +42 -0
- package/dist/server/node_modules/mimic-fn/readme.md +69 -0
- package/dist/server/node_modules/pg-int8/LICENSE +13 -0
- package/dist/server/node_modules/pg-int8/README.md +16 -0
- package/dist/server/node_modules/pg-int8/index.js +100 -0
- package/dist/server/node_modules/pg-int8/package.json +24 -0
- package/dist/server/node_modules/postgres-bytea/index.js +33 -0
- package/dist/server/node_modules/postgres-bytea/license +21 -0
- package/dist/server/node_modules/postgres-bytea/package.json +34 -0
- package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
- package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
- package/dist/server/node_modules/postgres-interval/index.js +125 -0
- package/dist/server/node_modules/postgres-interval/license +21 -0
- package/dist/server/node_modules/postgres-interval/package.json +36 -0
- package/dist/server/node_modules/postgres-interval/readme.md +48 -0
- package/dist/server/node_modules/string-width/index.d.ts +39 -0
- package/dist/server/node_modules/string-width/index.js +82 -0
- package/dist/server/node_modules/string-width/license +9 -0
- package/dist/server/node_modules/string-width/package.json +64 -0
- package/dist/server/node_modules/string-width/readme.md +66 -0
- package/package.json +1 -1
- package/dist/client/assets/constants-BnhbK7UO.js +0 -1
- package/dist/client/assets/plugins-DDBLgJ0t.js +0 -1
- package/dist/client/assets/tasks-w2rwAPZq.js +0 -1
- package/dist/client/assets/useInfiniteQuery-CeKnt0If.js +0 -1
- package/dist/client/assets/useQuery-kLEJeUD0.js +0 -1
- 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":"AACA,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,+BAA+B,CAAC;AACzD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,UAAU,EAAkB,MAAM,UAAU,CAAC;AAWrD;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BE;AACF,MAAM,cAAc,GAAG,CACtB,IAAe,EACf,OAA+B,EACtB,EAAE;IACX,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IAEvC,yEAAyE;IACzE,MAAM,QAAQ,GAAe,UAAU,CAAC,UAAU,CAAC,CAAC;IAEpD,mDAAmD;IACnD,0EAA0E;IAC1E,8EAA8E;IAC9E,uEAAuE;IACvE,2EAA2E;IAC3E,+BAA+B;IAC/B,IAAI,oBAAoB,GAAG,EAAE,CAAC;IAE9B,QAAQ,CAAC,eAAe,GAAG,GAAG,EAAE;QAC/B,QAAQ,CAAC,QAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,QAAS,CAAC,eAAe,CACjC,SAAS,EACT,SAAS,EACT,IAAI,CAAC,aAAa,CAClB,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,iBAAiB,GAAG,GAAG,EAAE;QACjC,MAAM,EAAC,YAAY,EAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,YAAY,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC3C,oBAAoB,IAAI,YAAY,CAAC;QACtC,CAAC;IACF,CAAC,CAAC;IAEF,wEAAwE;IACxE,0EAA0E;IAC1E,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAI,aAAsB,CAAC;IAE3B,8DAA8D;IAC9D,mEAAmE;IACnE,oDAAoD;IACpD,mEAAmE;IACnE,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAC3C,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,kBAAkB,EAClB,CAAC,KAAc,EAAE,EAAE;QAClB,aAAa,KAAK,KAAK,CAAC;IACzB,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;IAEF,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,IAAI,CAAC;QACJ,yDAAyD;QACzD,UAAU,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChE,UAAU,CAAC,aAAa,EAAE,CAAC;QAE3B,4EAA4E;QAC5E,mFAAmF;QACnF,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3C,sEAAsE;QACtE,uEAAuE;QACvE,2EAA2E;QAC3E,UAAU,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChE,UAAU,CAAC,aAAa,EAAE,CAAC;QAC3B,iBAAiB,GAAG,IAAI,CAAC;QAEzB,wEAAwE;QACxE,QAAQ,CAAC,QAAS,CAAC,IAAI,EAAE,CAAC;QAE1B,iEAAiE;QACjE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,aAAa,YAAY,KAAK;gBACnC,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,0CAA0C;QAC1C,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjE,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,oBAAoB,CAAC;QAExB,IAAI,sBAAsB,IAAI,MAAM,EAAE,CAAC;YACtC,OAAO,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAC;QAC/C,CAAC;QAED,OAAO,sBAAsB,IAAI,MAAM,CAAC;IACzC,CAAC;YAAS,CAAC;QACV,0EAA0E;QAC1E,wDAAwD;QACxD,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACJ,oEAAoE;gBACpE,uEAAuE;gBACvE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACR,mDAAmD;YACpD,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -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,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,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,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"}
|