@openspecui/web 3.10.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{BufferResource-D3AKV5w_.js → BufferResource-C08dlE1_.js} +1 -1
- package/dist/assets/CanvasRenderer-Cntd8ry7.js +1 -0
- package/dist/assets/{Geometry-C-MCm9EO.js → Geometry-Dr8DqqDe.js} +1 -1
- package/dist/assets/{ImageSource-B22J1qWQ.js → ImageSource-CGpyv_SH.js} +1 -1
- package/dist/assets/{RenderTargetSystem-a2OW-r9i.js → RenderTargetSystem-COjjAuAB.js} +1 -1
- package/dist/assets/WebGLRenderer-DZEgkU7P.js +1 -0
- package/dist/assets/WebGPURenderer-DtnLusyN.js +1 -0
- package/dist/assets/add-DoVE8GY7.js +1 -0
- package/dist/assets/add-note-CWFgco4Z.js +1 -0
- package/dist/assets/add-playlist-CcOrN2f2.js +1 -0
- package/dist/assets/add-user-DX0Eywi4.js +1 -0
- package/dist/assets/airplay-Cn8zJk1w.js +1 -0
- package/dist/assets/{angular-html-JCbR6NhA.js → angular-html-DRwRMfwy.js} +1 -1
- package/dist/assets/{angular-ts-CNWwWDzo.js → angular-ts-eNLzy5MM.js} +1 -1
- package/dist/assets/{apl--EneV-pF.js → apl-DCKZGJwU.js} +1 -1
- package/dist/assets/arrow-collapse-C7ZIzYk9.js +1 -0
- package/dist/assets/arrow-collapse-in-Ccsen9kh.js +1 -0
- package/dist/assets/arrow-down-C9z5oBQ2.js +1 -0
- package/dist/assets/arrow-expand-BeEEym4e.js +1 -0
- package/dist/assets/arrow-expand-out-DjS8Havw.js +1 -0
- package/dist/assets/arrow-left-FPT5WhLa.js +1 -0
- package/dist/assets/arrow-right-c774CXK7.js +1 -0
- package/dist/assets/arrow-up-BVPQ_jz2.js +1 -0
- package/dist/assets/{astro-BbXT629y.js → astro-EVzibiTP.js} +1 -1
- package/dist/assets/audio-preview-DF-g2nKV.js +1 -0
- package/dist/assets/{blade-DCeMo3Gz.js → blade-BlgBU4xi.js} +1 -1
- package/dist/assets/bookmark-xq6HKihJ.js +1 -0
- package/dist/assets/browserAll-C0q2DkVO.js +1 -0
- package/dist/assets/{bsl-baasCE8P.js → bsl-ROP5CocM.js} +1 -1
- package/dist/assets/{c-B5E81XOM.js → c-CYXkGxNJ.js} +1 -1
- package/dist/assets/{cairo-BkvliMUx.js → cairo-Y91V9cKj.js} +1 -1
- package/dist/assets/camera-DcgmsZFY.js +1 -0
- package/dist/assets/chapters-CWCRU4NE.js +1 -0
- package/dist/assets/chat-CjBvkjJQ.js +1 -0
- package/dist/assets/chat-collapse-D7uSBds2.js +1 -0
- package/dist/assets/chevron-down-DnbqQaM_.js +1 -0
- package/dist/assets/chevron-left-BLH8sfz-.js +1 -0
- package/dist/assets/chevron-right-Cx9jMJWP.js +1 -0
- package/dist/assets/chevron-up-ZO9wrLsS.js +1 -0
- package/dist/assets/chromecast-BINNmv53.js +1 -0
- package/dist/assets/chunk-XC5AOFRA-DNdxRVGN.js +1 -0
- package/dist/assets/chunk-XPDWGPRV-G9jotk_X.js +1 -0
- package/dist/assets/client-CNtwgWOm.js +9 -0
- package/dist/assets/clip-C8Wd7-v1.js +1 -0
- package/dist/assets/closed-captions-Cz7lecqe.js +1 -0
- package/dist/assets/closed-captions-on-BTsU9xHi.js +1 -0
- package/dist/assets/{cobol-DFA-05z0.js → cobol-DwyfNZUw.js} +1 -1
- package/dist/assets/{coffee-BIEZ2_PA.js → coffee-B8v2Wa7-.js} +1 -1
- package/dist/assets/comment-B3rCor45.js +1 -0
- package/dist/assets/common-DiWYGJu_.js +22 -0
- package/dist/assets/computer-BGdi_vvC.js +1 -0
- package/dist/assets/{cpp-DYT7t0SZ.js → cpp-ljtJvfZQ.js} +1 -1
- package/dist/assets/{crystal-OPLKg2mT.js → crystal-D8eXAHcv.js} +1 -1
- package/dist/assets/{css-B1O5LeXo.js → css-xQqtr90G.js} +1 -1
- package/dist/assets/cursor-editorTextHighlight-kG3uUOwL.svg +8 -0
- package/dist/assets/device-CxeIuxPi.js +1 -0
- package/dist/assets/dist-B_uzjHQN.js +1 -0
- package/dist/assets/dist-CRlC9_e7.js +1 -0
- package/dist/assets/{dist-B3TCWeQI.js → dist-CaORa3GR.js} +1 -1
- package/dist/assets/{dist-DB2qgDuh.js → dist-CaejG1dm.js} +1 -1
- package/dist/assets/dist-CcLC6JdJ.js +1 -0
- package/dist/assets/dist-CfJPknqn.js +1 -0
- package/dist/assets/dist-CjSC6Iz-.js +1 -0
- package/dist/assets/dist-Co2y3Dp-.js +1 -0
- package/dist/assets/{dist-0COy00zm.js → dist-Ct1D1r3D.js} +1 -1
- package/dist/assets/dist-D0kk4OnI.js +1 -0
- package/dist/assets/{dist-CCRZBEfv.js → dist-D65w4-0d.js} +1 -1
- package/dist/assets/dist-D7t0ICkd.js +1 -0
- package/dist/assets/{dist-BlZibS7L.js → dist-DBzjiykV.js} +1 -1
- package/dist/assets/dist-DSHRZu7v.js +1 -0
- package/dist/assets/dist-Deq3d3tg.js +1 -0
- package/dist/assets/{dist-DK_X22KS.js → dist-DhToCcpI.js} +1 -1
- package/dist/assets/dist-DqB_uiSZ.js +1 -0
- package/dist/assets/{dist-Dwec7KIH.js → dist-DtDYJdOe.js} +1 -1
- package/dist/assets/{dist-DygtUgm8.js → dist-YdUjCFVN.js} +1 -1
- package/dist/assets/{dist-yu78ax1a.js → dist-jDblB_T7.js} +1 -1
- package/dist/assets/dist-jEMUT-cO.js +1 -0
- package/dist/assets/{dist-C4ldnarW.js → dist-lNuHRy_r.js} +1 -1
- package/dist/assets/{dockerfile-Ci0-ApQC.js → dockerfile-B9WyxmEu.js} +1 -1
- package/dist/assets/download-Cce-H-ZM.js +1 -0
- package/dist/assets/{edge-B_Hxxh_T.js → edge-BF9yTvjv.js} +1 -1
- package/dist/assets/{elixir-CexTPAef.js → elixir-B_B5En4k.js} +1 -1
- package/dist/assets/{elm-DVPcuGsD.js → elm-gyEPvRKn.js} +1 -1
- package/dist/assets/episodes-BvkaMZ8-.js +1 -0
- package/dist/assets/{erb-DK41lvap.js → erb-CrCiRjX6.js} +1 -1
- package/dist/assets/{erlang-vfCdWglx.js → erlang-Bt6NlFdF.js} +1 -1
- package/dist/assets/errors-DVESjK3y.js +1 -0
- package/dist/assets/eye-D5-_oy4W.js +1 -0
- package/dist/assets/{factor-DMvifS-k.js → factor-DRSLM7tp.js} +1 -1
- package/dist/assets/fast-backward-D9dXd1Qy.js +1 -0
- package/dist/assets/fast-forward-CYUMds_X.js +1 -0
- package/dist/assets/flag-Dtmr-9b8.js +1 -0
- package/dist/assets/{fortran-fixed-form-eRZkDVxE.js → fortran-fixed-form-BlyL6vAi.js} +1 -1
- package/dist/assets/{fsharp-lKBUVRnt.js → fsharp-CPUyN5V2.js} +1 -1
- package/dist/assets/fullscreen-CmB1c4--.js +1 -0
- package/dist/assets/fullscreen-arrow-C3VfgtaN.js +1 -0
- package/dist/assets/fullscreen-arrow-exit-DqOXxDMG.js +1 -0
- package/dist/assets/fullscreen-exit-DU7tI9hu.js +1 -0
- package/dist/assets/{gdresource-C_R0x-CQ.js → gdresource-3p4mNHpb.js} +1 -1
- package/dist/assets/{getTextureBatchBindGroup-MoChLDk_.js → getTextureBatchBindGroup-BfHjyiAV.js} +1 -1
- package/dist/assets/ghostty-web-CxzCiCWn.js +13 -0
- package/dist/assets/{git-commit-SMAxcXsl.js → git-commit-BUEnSUuI.js} +1 -1
- package/dist/assets/{git-rebase-QkxbQN1W.js → git-rebase-C31Q9wLE.js} +1 -1
- package/dist/assets/{glimmer-js-Ci9Jniu_.js → glimmer-js-C52Y4fUH.js} +1 -1
- package/dist/assets/{glimmer-ts-f6mheIFE.js → glimmer-ts-BWcx8nGq.js} +1 -1
- package/dist/assets/{glsl-CE_tGyBF.js → glsl-B14Nf0bw.js} +1 -1
- package/dist/assets/{graphql-DMHKd7V7.js → graphql-sQJ6gIy3.js} +1 -1
- package/dist/assets/{hack-Bd7yRRDg.js → hack-B3o_6UdT.js} +1 -1
- package/dist/assets/{haml-B-zh4HcV.js → haml-b85W5NJa.js} +1 -1
- package/dist/assets/{handlebars-73p99hU2.js → handlebars-D0WfzX4P.js} +1 -1
- package/dist/assets/heart-C5fn_wNi.js +1 -0
- package/dist/assets/{html-dLhzswBO.js → html-BUh_K1Ws.js} +1 -1
- package/dist/assets/{html-derivative-CRPsQPjv.js → html-derivative-CI0a_UC2.js} +1 -1
- package/dist/assets/{http-BmUbDDZ3.js → http-D2LmS59K.js} +1 -1
- package/dist/assets/{hurl-D8J5iekO.js → hurl-COx-msQh.js} +1 -1
- package/dist/assets/{hxml-BNnDhNNK.js → hxml-PXekqTur.js} +1 -1
- package/dist/assets/image-preview-BvROjYK5.js +1 -0
- package/dist/assets/image-preview-DbXbUOzB.css +1 -0
- package/dist/assets/info-BSFfpD3X.js +1 -0
- package/dist/assets/init-CXvIgPy6.js +1 -0
- package/dist/assets/{java-BMDGffNu.js → java-CY_ZDz_b.js} +1 -1
- package/dist/assets/{javascript-Dbc2F9Uj.js → javascript-CVtEj2Ax.js} +1 -1
- package/dist/assets/{jinja-ByHiV4iy.js → jinja-DqDhfavg.js} +1 -1
- package/dist/assets/{jison-BTOyGOJM.js → jison-AZhthQMg.js} +1 -1
- package/dist/assets/{json-BhpxJ_uj.js → json-C5SgWOeO.js} +1 -1
- package/dist/assets/{jsx-CPDjNUh8.js → jsx-lP4LEWkV.js} +1 -1
- package/dist/assets/jsx-runtime-1jQlXmIx.js +1 -0
- package/dist/assets/{julia-Cl6n8WOO.js → julia-Cj513uz1.js} +1 -1
- package/dist/assets/language-C_l1DBQe.js +1 -0
- package/dist/assets/{latex-C0_SOykc.js → latex-DwZK1V4M.js} +1 -1
- package/dist/assets/link-DH5zaMZ1.js +1 -0
- package/dist/assets/{liquid-Cr1xVqMM.js → liquid-Bq0P5vJ7.js} +1 -1
- package/dist/assets/lock-closed-BUf3MBxW.js +1 -0
- package/dist/assets/lock-open-BQ4FTuPQ.js +1 -0
- package/dist/assets/{lua-BWPGgBUj.js → lua-C-xH-Hms.js} +1 -1
- package/dist/assets/main-DjDAttzm.js +1646 -0
- package/dist/assets/main-Dyvh_8NL.css +1 -0
- package/dist/assets/{marko-BPXt0CD8.js → marko-B0ZA9L6u.js} +1 -1
- package/dist/assets/{mdc-CIsV3UeT.js → mdc-BjV-9MeS.js} +1 -1
- package/dist/assets/media-preview-D7f05nnk.css +1 -0
- package/dist/assets/media-preview-DWkSTGaX.js +2 -0
- package/dist/assets/media-ui-VgHJ-PHx.js +2 -0
- package/dist/assets/menu-horizontal-B6s-1vTa.js +1 -0
- package/dist/assets/menu-vertical-CWyBtj8F.js +1 -0
- package/dist/assets/microphone-BY0rFANt.js +1 -0
- package/dist/assets/mobile-BrxUhnS0.js +1 -0
- package/dist/assets/modulepreload-polyfill-CXK8biUa.js +1 -0
- package/dist/assets/moon-DnE1rK16.js +1 -0
- package/dist/assets/music-DgWl84sr.js +1 -0
- package/dist/assets/music-off-BIZK0PLj.js +1 -0
- package/dist/assets/mute-Wv31sLaT.js +1 -0
- package/dist/assets/next-Cl9F67W2.js +1 -0
- package/dist/assets/{nginx-CxaJu6Pj.js → nginx-BlGA_Yc6.js} +1 -1
- package/dist/assets/{nim-DEeX4yt_.js → nim-BRY7cBHe.js} +1 -1
- package/dist/assets/notification-DO_HNWPB.js +1 -0
- package/dist/assets/{nsis-BbRIeGvl.js → nsis-BOISW3t0.js} +1 -1
- package/dist/assets/odometer-ByhVM-4K.js +1 -0
- package/dist/assets/pause-D49Xseka.js +1 -0
- package/dist/assets/pdf-preview-C7gTFuZg.js +55 -0
- package/dist/assets/pdf-preview-DatbxdFW.css +1 -0
- package/dist/assets/pdf.worker.min-iDqQPrd3.mjs +31 -0
- package/dist/assets/pdf_viewer-C0F_ZnIy.js +501 -0
- package/dist/assets/{perl-nNEiznlj.js → perl-ZYxvPTl8.js} +1 -1
- package/dist/assets/{php-CFhEnfPT.js → php-BkicJQpQ.js} +1 -1
- package/dist/assets/picture-in-picture-DN7RmJ3z.js +1 -0
- package/dist/assets/picture-in-picture-exit-BwgCZZdp.js +1 -0
- package/dist/assets/play-CVvMlNWu.js +1 -0
- package/dist/assets/playback-speed-circle-CWnhxJ8o.js +1 -0
- package/dist/assets/playlist-CNLCJZTu.js +1 -0
- package/dist/assets/preload-helper-DgFuoWHe.js +1 -0
- package/dist/assets/previous-GulzH3pC.js +1 -0
- package/dist/assets/prod-B_gvu_Yr.js +5 -0
- package/dist/assets/prod-H1gIJ3Nt.js +1 -0
- package/dist/assets/provider-BoUAVVe0.js +1 -0
- package/dist/assets/provider-CfNWDDig.js +1 -0
- package/dist/assets/provider-Cj58hbuJ.js +1 -0
- package/dist/assets/provider-gmPj3q5A.js +1 -0
- package/dist/assets/{pug-B1jWkhMW.js → pug-CtobE3oR.js} +1 -1
- package/dist/assets/{pug-D1ZtszdL.js → pug-RUWq2f7J.js} +1 -1
- package/dist/assets/{qml-B3LbNeX2.js → qml-bFAbyxEk.js} +1 -1
- package/dist/assets/question-mark-Yk1OEoxM.js +1 -0
- package/dist/assets/queue-list-CDf4dIe8.js +1 -0
- package/dist/assets/{r-Ck8dtqom.js → r-BuzK-O4X.js} +1 -1
- package/dist/assets/radio-button-BHXtnVsK.js +1 -0
- package/dist/assets/radio-button-selected-Cbcd4nNT.js +1 -0
- package/dist/assets/{razor-w-TbBbA8.js → razor-BdPQn0FN.js} +1 -1
- package/dist/assets/{regexp-CEXR86Sj.js → regexp-zEw_f83a.js} +1 -1
- package/dist/assets/register-BoElj7Sn.js +1 -0
- package/dist/assets/repeat-D7Y2Sa5U.js +1 -0
- package/dist/assets/repeat-on-BN1EX623.js +1 -0
- package/dist/assets/repeat-square-CIKm5EZg.js +1 -0
- package/dist/assets/repeat-square-on-Bm9kAL2k.js +1 -0
- package/dist/assets/replay-CvqkHACU.js +1 -0
- package/dist/assets/rotate-DQS0vFC1.js +1 -0
- package/dist/assets/{rst-Car5kf30.js → rst-DKhAJU51.js} +1 -1
- package/dist/assets/{ruby-B-t6QsyD.js → ruby-B0E3lf9H.js} +1 -1
- package/dist/assets/{sas-Z6d1rhi6.js → sas-DURk68cf.js} +1 -1
- package/dist/assets/{scss-oo-ZAauB.js → scss-CpCId5ps.js} +1 -1
- package/dist/assets/search-CBnr1jD1.js +1 -0
- package/dist/assets/seek-backward-10-Dal7obVE.js +1 -0
- package/dist/assets/seek-backward-15-AD99eQGo.js +1 -0
- package/dist/assets/seek-backward-30-BbQ03-Ol.js +1 -0
- package/dist/assets/seek-backward-CCYby5n0.js +1 -0
- package/dist/assets/seek-forward-10-BC1NwmUo.js +1 -0
- package/dist/assets/seek-forward-15-mkoNS39i.js +1 -0
- package/dist/assets/seek-forward-30-C0SVx7IG.js +1 -0
- package/dist/assets/seek-forward-Dcui_2xm.js +1 -0
- package/dist/assets/send-psIzrYYB.js +1 -0
- package/dist/assets/settings-Nify7EqC.js +1 -0
- package/dist/assets/settings-menu-D2-gAGst.js +1 -0
- package/dist/assets/settings-switch-BMn7TM1n.js +1 -0
- package/dist/assets/{shaderlab-DhaYSNG2.js → shaderlab-F_37C8HY.js} +1 -1
- package/dist/assets/share-DLPac_kH.js +1 -0
- package/dist/assets/share-arrow-EKjK6iyY.js +1 -0
- package/dist/assets/{shellscript-CClMYwDv.js → shellscript-C9ppp5mf.js} +1 -1
- package/dist/assets/{shellsession-CkCvm7zV.js → shellsession-Bz7lU47b.js} +1 -1
- package/dist/assets/shuffle-BZZrchzY.js +1 -0
- package/dist/assets/shuffle-on-CmbwVSk9.js +1 -0
- package/dist/assets/{soy-Crg2Ekyt.js → soy-BhKWbuAF.js} +1 -1
- package/dist/assets/{sparql-CbwLv0Nv.js → sparql-C2li3eXU.js} +1 -1
- package/dist/assets/{sql-BzeuYDM3.js → sql-BOLSSU4F.js} +1 -1
- package/dist/assets/srt-parser-BGnlNAv_.js +2 -0
- package/dist/assets/ssa-parser-BAAtRpeE.js +5 -0
- package/dist/assets/{stata-aB59aUx6.js → stata-BT_KvsDz.js} +1 -1
- package/dist/assets/std-D4K7rQfG.js +1 -0
- package/dist/assets/stop-DNHv8PGN.js +1 -0
- package/dist/assets/subtitles-25d83-RU.js +1 -0
- package/dist/assets/sun-CH-KcQGq.js +1 -0
- package/dist/assets/{svelte-B9KhS2Xg.js → svelte-CDr7VO4q.js} +1 -1
- package/dist/assets/{templ-DpUl8Z5L.js → templ-nVp5md9X.js} +1 -1
- package/dist/assets/{tex-Dv1X6yMO.js → tex-D_8z9IZF.js} +1 -1
- package/dist/assets/theatre-mode-SFx-qJwc.js +1 -0
- package/dist/assets/theatre-mode-exit-DYtbjRZd.js +1 -0
- package/dist/assets/thumbs-down-CoVX0Rsq.js +1 -0
- package/dist/assets/thumbs-up-BGpjKY61.js +1 -0
- package/dist/assets/timer-B-qx-F3A.js +1 -0
- package/dist/assets/transcript-B9ID7SG_.js +1 -0
- package/dist/assets/trpc-CSBEzIgb.js +1 -0
- package/dist/assets/{ts-tags-DZ6TGics.js → ts-tags-B9PwlsPz.js} +1 -1
- package/dist/assets/{tsx-DOuiELRM.js → tsx-CsYF3fAD.js} +1 -1
- package/dist/assets/tv-CC87_vzg.js +1 -0
- package/dist/assets/{twig-Btxas3qH.js → twig-DhcsZkOG.js} +1 -1
- package/dist/assets/{typescript-N3s0tPxq.js → typescript-BmTNzuQ_.js} +1 -1
- package/dist/assets/user-redMLfx7.js +1 -0
- package/dist/assets/video-preview-CChWJOsP.js +1 -0
- package/dist/assets/volume-high-D_Nod9kV.js +1 -0
- package/dist/assets/volume-low-C5d45KrM.js +1 -0
- package/dist/assets/{vue-_OK103Ep.js → vue-9hbz3kVV.js} +1 -1
- package/dist/assets/{vue-html-BPOZfEpa.js → vue-html-DeYWClYd.js} +1 -1
- package/dist/assets/{vue-vine-BwY1fUKp.js → vue-vine-0B8BRjOA.js} +1 -1
- package/dist/assets/webworkerAll-DhUUBZ9J.js +1 -0
- package/dist/assets/x-mark-CK6Q9f3e.js +1 -0
- package/dist/assets/{xml-DG7tGi3r.js → xml-DANbtZOH.js} +1 -1
- package/dist/assets/{xsl-D52MvYic.js → xsl-Dxfe-dB3.js} +1 -1
- package/dist/assets/{yaml-8pzj-_Su.js → yaml-hgQ2rJ8K.js} +1 -1
- package/dist/audio-preview.html +25 -0
- package/dist/image-preview.html +24 -0
- package/dist/index.html +15 -11
- package/dist/pdf-preview.html +25 -0
- package/dist/video-preview.html +25 -0
- package/dist-ssg/client/.vite/ssr-manifest.json +33 -15
- package/dist-ssg/client/assets/CanvasRenderer-D3Q5_w9A.js +1 -0
- package/dist-ssg/client/assets/WebGLRenderer-D9oc2qKY.js +1 -0
- package/dist-ssg/client/assets/WebGPURenderer-C5zSqQBE.js +1 -0
- package/dist-ssg/client/assets/browserAll-CIBhnrSW.js +1 -0
- package/dist-ssg/client/assets/{dist-5pmc42qO.js → dist-B0rNAJNr.js} +1 -1
- package/dist-ssg/client/assets/dist-BSCnmcZh.js +1 -0
- package/dist-ssg/client/assets/{dist-CA5DVY2w.js → dist-B_e3vKVI.js} +1 -1
- package/dist-ssg/client/assets/dist-C1zSmOmx.js +1 -0
- package/dist-ssg/client/assets/{dist-DRwsq_6M.js → dist-C8h2jqYd.js} +1 -1
- package/dist-ssg/client/assets/{dist-TgoGtlf0.js → dist-CIDagwl8.js} +1 -1
- package/dist-ssg/client/assets/dist-CXNNfjwS.js +1 -0
- package/dist-ssg/client/assets/{dist-CUDhi1ei.js → dist-Ct0osEG9.js} +1 -1
- package/dist-ssg/client/assets/{dist-C2Sop3cf.js → dist-DYA7aYgJ.js} +1 -1
- package/dist-ssg/client/assets/{dist-COHrsH1A.js → dist-nDVKH9rz.js} +1 -1
- package/dist-ssg/client/assets/{dist-DF0-eUAB.js → dist-xlAWlzHU.js} +1 -1
- package/dist-ssg/client/assets/{dist-CdlQGwSo.js → dist-zooxroSS.js} +1 -1
- package/dist-ssg/client/assets/{ghostty-web-B5BYD1FV.js → ghostty-web-MvkhtIaS.js} +1 -1
- package/dist-ssg/client/assets/index-D2aBuJqY.css +1 -0
- package/dist-ssg/client/assets/{index.ssg-CFeB0ImU.js → index.ssg-Dp15bsQU.js} +149 -149
- package/dist-ssg/client/assets/{init-BoLRSoMk.js → init-CbwghP3k.js} +1 -1
- package/dist-ssg/client/assets/trpc-BccI0xyZ.js +1 -0
- package/dist-ssg/client/assets/webworkerAll-CYURuxHF.js +1 -0
- package/dist-ssg/client/index.ssg.html +2 -2
- package/dist-ssg/server/entry-server.js +839 -273
- package/package.json +8 -4
- package/dist/assets/CanvasRenderer-FPfL9ZTd.js +0 -1
- package/dist/assets/WebGLRenderer-MAViiHZM.js +0 -1
- package/dist/assets/WebGPURenderer-BTs4iUDJ.js +0 -1
- package/dist/assets/browserAll-BrCpXy8F.js +0 -1
- package/dist/assets/dist-6OABjv-w.js +0 -1
- package/dist/assets/dist-B6Tdxx2M.js +0 -1
- package/dist/assets/dist-ByROe2mk.js +0 -1
- package/dist/assets/dist-CL664tGJ.js +0 -1
- package/dist/assets/dist-CNPeR4Pz.js +0 -1
- package/dist/assets/dist-CUXEJ56i.js +0 -1
- package/dist/assets/dist-CxEKNYqH.js +0 -1
- package/dist/assets/dist-D_kRWvjc.js +0 -1
- package/dist/assets/dist-DdNBXL_R.js +0 -1
- package/dist/assets/dist-DoKbVA83.js +0 -1
- package/dist/assets/dist-EJjOo0if.js +0 -1
- package/dist/assets/dist-MqSTP1IH.js +0 -1
- package/dist/assets/ghostty-web-PwpXfIYz.js +0 -13
- package/dist/assets/index-6J-oF_Ui.js +0 -1654
- package/dist/assets/index-CSo2hsDq.css +0 -1
- package/dist/assets/init-DzZk7m7r.js +0 -1
- package/dist/assets/trpc-buLTPM4j.js +0 -1
- package/dist/assets/webworkerAll-D4aUBsFv.js +0 -1
- package/dist-ssg/client/assets/CanvasRenderer-Cl0iebcM.js +0 -1
- package/dist-ssg/client/assets/WebGLRenderer-D1L_66kz.js +0 -1
- package/dist-ssg/client/assets/WebGPURenderer-GnxaJPyT.js +0 -1
- package/dist-ssg/client/assets/browserAll-wfYAjP5o.js +0 -1
- package/dist-ssg/client/assets/dist-BAJHUZ0g.js +0 -1
- package/dist-ssg/client/assets/dist-BvCGGujU.js +0 -1
- package/dist-ssg/client/assets/dist-DCB1Hxb5.js +0 -1
- package/dist-ssg/client/assets/index-CrZEd8bY.css +0 -1
- package/dist-ssg/client/assets/trpc-CdH8LrJC.js +0 -1
- package/dist-ssg/client/assets/webworkerAll-CJ3LFlvS.js +0 -1
- /package/dist/assets/{__vite-browser-external-2447137e-BjPw0NZ_.js → __vite-browser-external-2447137e-DSmEJFXS.js} +0 -0
- /package/dist/assets/{abap-Bu0T6Al_.js → abap-CIVploVa.js} +0 -0
- /package/dist/assets/{actionscript-3-CRpSnB5s.js → actionscript-3-BOT81qbB.js} +0 -0
- /package/dist/assets/{ada-CFBoRA9T.js → ada-CRwAfJoy.js} +0 -0
- /package/dist/assets/{andromeeda-DgY5bL_s.js → andromeeda-mLkPyWfB.js} +0 -0
- /package/dist/assets/{apache-R7xc0G73.js → apache-DtNAck0z.js} +0 -0
- /package/dist/assets/{apex-DEkce9NE.js → apex-Bj7wG4q1.js} +0 -0
- /package/dist/assets/{apl-CJPt5sW7.js → apl-C5q1JUQ9.js} +0 -0
- /package/dist/assets/{applescript-C_3LmUl6.js → applescript-BQKDn04f.js} +0 -0
- /package/dist/assets/{ara-CV-W5Hgd.js → ara-BNT_CvyP.js} +0 -0
- /package/dist/assets/{asciiarmor-D0oCypDs.js → asciiarmor-BILZohWd.js} +0 -0
- /package/dist/assets/{asciidoc-D-6cF97z.js → asciidoc-B0485J9X.js} +0 -0
- /package/dist/assets/{asm-DYZMpR5h.js → asm-C2znhxd3.js} +0 -0
- /package/dist/assets/{asn1-8xgVfRoq.js → asn1-DI_FTWHM.js} +0 -0
- /package/dist/assets/{asterisk-B5kv5AQp.js → asterisk-CoYCo1jb.js} +0 -0
- /package/dist/assets/{aurora-x-CzNZBXLA.js → aurora-x-VoXHDv1B.js} +0 -0
- /package/dist/assets/{awk-CtGnqBgi.js → awk-BbTIDvOU.js} +0 -0
- /package/dist/assets/{ayu-dark-BEuJhx09.js → ayu-dark-BTK5Tfht.js} +0 -0
- /package/dist/assets/{ballerina-FF_I4_FO.js → ballerina-dRxGI8s4.js} +0 -0
- /package/dist/assets/{bat-BrvgUmWp.js → bat-BO6lv9SU.js} +0 -0
- /package/dist/assets/{beancount-BXL8T_UG.js → beancount-oq4SVsFS.js} +0 -0
- /package/dist/assets/{berry-CIKKfJQu.js → berry-CXRUyStP.js} +0 -0
- /package/dist/assets/{bibtex-Cjz3iUeg.js → bibtex-M8Wf0hPR.js} +0 -0
- /package/dist/assets/{bicep-BcfLCnJ8.js → bicep-DVkXDr0Y.js} +0 -0
- /package/dist/assets/{brainfuck-Dh7M1Ucz.js → brainfuck-CYletLv0.js} +0 -0
- /package/dist/assets/{cadence-C8mWZDXU.js → cadence-B0XH_PKy.js} +0 -0
- /package/dist/assets/{catppuccin-frappe-DenhEhc7.js → catppuccin-frappe-DhEuGbek.js} +0 -0
- /package/dist/assets/{catppuccin-latte-DBjZqKjK.js → catppuccin-latte-vkF8zGxA.js} +0 -0
- /package/dist/assets/{catppuccin-macchiato-DsXr7TPP.js → catppuccin-macchiato-Y7LgIKdI.js} +0 -0
- /package/dist/assets/{catppuccin-mocha-DmPmnX9r.js → catppuccin-mocha-B0udSjIm.js} +0 -0
- /package/dist/assets/{chunk-BEqpzyXh.js → chunk-VBW0iQ51.js} +0 -0
- /package/dist/assets/{clarity-CSJ2rDuE.js → clarity-DDiR-2NO.js} +0 -0
- /package/dist/assets/{clike-zYz_LEkw.js → clike-BJQXzji6.js} +0 -0
- /package/dist/assets/{clojure-CdWlIeQh.js → clojure-BTMF0bWr.js} +0 -0
- /package/dist/assets/{clojure-BcrkjbX1.js → clojure-snlX0Q6G.js} +0 -0
- /package/dist/assets/{cmake-BHzgnx8G.js → cmake-CsF3WHAq.js} +0 -0
- /package/dist/assets/{cmake-wWuF5ifR.js → cmake-Jt1LPs3Y.js} +0 -0
- /package/dist/assets/{cobol-D3WLbLVy.js → cobol-Bp7hDZyh.js} +0 -0
- /package/dist/assets/{codeowners-DEui52l1.js → codeowners-D0_uS0CW.js} +0 -0
- /package/dist/assets/{codeql-DV6BvMBu.js → codeql-BedCyGW_.js} +0 -0
- /package/dist/assets/{coffeescript-DRtt-5a2.js → coffeescript-CAuf1hwk.js} +0 -0
- /package/dist/assets/{common-lisp-xYiRwqZH.js → common-lisp-D5FvNe7i.js} +0 -0
- /package/dist/assets/{commonlisp-DJV75lsU.js → commonlisp-CTI5EoKD.js} +0 -0
- /package/dist/assets/{coq-C_yPIhZC.js → coq-8fYOFE_L.js} +0 -0
- /package/dist/assets/{crystal-C7mEw92C.js → crystal-C3-bEPdz.js} +0 -0
- /package/dist/assets/{csharp-_SaU5MOa.js → csharp-CRgWAKTP.js} +0 -0
- /package/dist/assets/{css-_6KgQwpu.js → css-DOOfdS_P.js} +0 -0
- /package/dist/assets/{csv-DkOKkcud.js → csv-BvaZ2T8c.js} +0 -0
- /package/dist/assets/{cue-Bc7aFG0x.js → cue-CuSO7twe.js} +0 -0
- /package/dist/assets/{cypher-DJ7FXmKn.js → cypher-Csc02QHL.js} +0 -0
- /package/dist/assets/{cypher-B3uWx7jm.js → cypher-D3PQ91Qx.js} +0 -0
- /package/dist/assets/{d-C_e6FFTd.js → d-CnB930ZR.js} +0 -0
- /package/dist/assets/{d-D3kOh3JF.js → d-Czsz-1nb.js} +0 -0
- /package/dist/assets/{dark-plus-CR_9xkOf.js → dark-plus-CESRMc3w.js} +0 -0
- /package/dist/assets/{dart-DpnlYij3.js → dart-BIgn-HM9.js} +0 -0
- /package/dist/assets/{dax-BGp0L71d.js → dax-pHt8u_2B.js} +0 -0
- /package/dist/assets/{desktop-9sZJLqKg.js → desktop-Cf3zYveK.js} +0 -0
- /package/dist/assets/{diff-Eg5NxGYi.js → diff-CatgE3dT.js} +0 -0
- /package/dist/assets/{diff-CoamybWh.js → diff-DTEjW6Ec.js} +0 -0
- /package/dist/assets/{dist-UN0VvTJo.js → dist-vqrjFRzf.js} +0 -0
- /package/dist/assets/{docker-B1k24ONt.js → docker-BxryWGFh.js} +0 -0
- /package/dist/assets/{dotenv-37x23HEd.js → dotenv-Ce5U7oib.js} +0 -0
- /package/dist/assets/{dracula-CxQ11msU.js → dracula-DAC2eyrV.js} +0 -0
- /package/dist/assets/{dracula-soft-DZQDoc4v.js → dracula-soft-CzyQJAj9.js} +0 -0
- /package/dist/assets/{dream-maker-kAD9OQQF.js → dream-maker-CnxFHZvN.js} +0 -0
- /package/dist/assets/{dtd-BjGQwMWL.js → dtd-DQ2nGp1I.js} +0 -0
- /package/dist/assets/{dylan-B9W3X2GI.js → dylan-Bje9X1q4.js} +0 -0
- /package/dist/assets/{ebnf-d5D0otVn.js → ebnf-DEiu6Mj6.js} +0 -0
- /package/dist/assets/{ecl-C5Q_IBPt.js → ecl-CcozsAMR.js} +0 -0
- /package/dist/assets/{eiffel-BQA_6I3b.js → eiffel-CZRTum_1.js} +0 -0
- /package/dist/assets/{elm-unPS17vB.js → elm-Cgd7AVBx.js} +0 -0
- /package/dist/assets/{emacs-lisp-VSqiU67A.js → emacs-lisp-8ncNO10u.js} +0 -0
- /package/dist/assets/{erlang-R8nOsUTx.js → erlang-BPW5ALQf.js} +0 -0
- /package/dist/assets/{everforest-dark-B5yeWra_.js → everforest-dark-WRGJyDpD.js} +0 -0
- /package/dist/assets/{everforest-light-B4NKIpuT.js → everforest-light-DfrVdsO0.js} +0 -0
- /package/dist/assets/{fcl-CVAfW9wK.js → fcl-Bv0H-MfR.js} +0 -0
- /package/dist/assets/{fennel-CFfxI1rI.js → fennel-Cb9koYyA.js} +0 -0
- /package/dist/assets/{fish-DwEMo9K0.js → fish-Bqbms_J3.js} +0 -0
- /package/dist/assets/{fluent-Dsn20KHK.js → fluent-BpgGq6W4.js} +0 -0
- /package/dist/assets/{forth-DHbsK8X8.js → forth-CFHh7lFN.js} +0 -0
- /package/dist/assets/{fortran-4jMwxW9-.js → fortran-CAaqh7IE.js} +0 -0
- /package/dist/assets/{fortran-free-form-dGWJP-PE.js → fortran-free-form-D7-gzSM8.js} +0 -0
- /package/dist/assets/{gas-zC_XGrQT.js → gas-BXzla7cs.js} +0 -0
- /package/dist/assets/{gdscript-CW6S_vBb.js → gdscript-rt9_TXru.js} +0 -0
- /package/dist/assets/{gdshader-BqnlaYeo.js → gdshader-crF0MxG8.js} +0 -0
- /package/dist/assets/{genie-DpK7PEre.js → genie-n4manvaZ.js} +0 -0
- /package/dist/assets/{gherkin-CPBQou3u.js → gherkin-CjaNPZBr.js} +0 -0
- /package/dist/assets/{gherkin-Do-rHwCg.js → gherkin-CuiH0tfp.js} +0 -0
- /package/dist/assets/{github-dark-BNWfKer2.js → github-dark-DLGWmEyp.js} +0 -0
- /package/dist/assets/{github-dark-default-Dd3JR36E.js → github-dark-default-COxVH7oN.js} +0 -0
- /package/dist/assets/{github-dark-dimmed-CtNE8tZH.js → github-dark-dimmed-DvctdGH5.js} +0 -0
- /package/dist/assets/{github-dark-high-contrast-DmAdH_w8.js → github-dark-high-contrast-B5e5f6Wv.js} +0 -0
- /package/dist/assets/{github-light-CUv7VR5J.js → github-light-TJTPBbm1.js} +0 -0
- /package/dist/assets/{github-light-default-CZlC_y8X.js → github-light-default-DC_TACoY.js} +0 -0
- /package/dist/assets/{github-light-high-contrast-Cpzf_dNN.js → github-light-high-contrast-DvNa2h0A.js} +0 -0
- /package/dist/assets/{gleam-DC5ARhDs.js → gleam-GMotk68v.js} +0 -0
- /package/dist/assets/{gnuplot-DSp3nTIV.js → gnuplot-PmulD7a0.js} +0 -0
- /package/dist/assets/{go-qASC_aC8.js → go-BD7Erf5u.js} +0 -0
- /package/dist/assets/{groovy-CAKGLWL8.js → groovy-BJHHaekH.js} +0 -0
- /package/dist/assets/{groovy-Cqopym0q.js → groovy-CQ51TE23.js} +0 -0
- /package/dist/assets/{gruvbox-dark-hard-Dlubl6r4.js → gruvbox-dark-hard-DMHKOM26.js} +0 -0
- /package/dist/assets/{gruvbox-dark-medium-Bys2crvl.js → gruvbox-dark-medium-CHM96JoK.js} +0 -0
- /package/dist/assets/{gruvbox-dark-soft-D5JVdD_T.js → gruvbox-dark-soft-BXZKbIog.js} +0 -0
- /package/dist/assets/{gruvbox-light-hard-okzwij0Q.js → gruvbox-light-hard-D6IrNyel.js} +0 -0
- /package/dist/assets/{gruvbox-light-medium-CKptZdRG.js → gruvbox-light-medium-BJbnlMJn.js} +0 -0
- /package/dist/assets/{gruvbox-light-soft-DVSSH44h.js → gruvbox-light-soft-BgH5zDdq.js} +0 -0
- /package/dist/assets/{haskell-imzbNPgF.js → haskell-BdLQbrXE.js} +0 -0
- /package/dist/assets/{haskell-BKk-Kl5_.js → haskell-YfIOUUBK.js} +0 -0
- /package/dist/assets/{haxe-BPFrQPtj.js → haxe-B256JjEJ.js} +0 -0
- /package/dist/assets/{haxe-Doh225Ku.js → haxe-BR_oGt5J.js} +0 -0
- /package/dist/assets/{hcl-BH96BnDR.js → hcl-z6UKeceE.js} +0 -0
- /package/dist/assets/{hjson-BMjtlQGM.js → hjson-B4eAwwls.js} +0 -0
- /package/dist/assets/{hlsl-g9gCsmqR.js → hlsl-D0l9oydz.js} +0 -0
- /package/dist/assets/{houston-CL5fNb0m.js → houston-B0KYClEN.js} +0 -0
- /package/dist/assets/{http-j4R5uEso.js → http-D4AikK5M.js} +0 -0
- /package/dist/assets/{hy-C4Qxxvge.js → hy-BffdPpaq.js} +0 -0
- /package/dist/assets/{idl-l9d1__Hj.js → idl-BhLYYWfC.js} +0 -0
- /package/dist/assets/{imba-BMCGEjtx.js → imba-CeA-T7p1.js} +0 -0
- /package/dist/assets/{ini-CiVvBUuJ.js → ini-CR4FPmWV.js} +0 -0
- /package/dist/assets/{javascript-BcqCeS4O.js → javascript-DoCiwYd8.js} +0 -0
- /package/dist/assets/{json5-CLu_sBvv.js → json5-C27Vp2xe.js} +0 -0
- /package/dist/assets/{jsonc-BtCrUwnt.js → jsonc-BVh3vxUv.js} +0 -0
- /package/dist/assets/{jsonl-DCgn6lTZ.js → jsonl-D15CZ_EL.js} +0 -0
- /package/dist/assets/{jsonnet-f86dBoR6.js → jsonnet-DhFVDxfq.js} +0 -0
- /package/dist/assets/{jssm-C9wYN-Un.js → jssm-0SEG_l0W.js} +0 -0
- /package/dist/assets/{julia-BU0qBb1w.js → julia-TGuXb-4v.js} +0 -0
- /package/dist/assets/{kanagawa-dragon-j2mqGXO-.js → kanagawa-dragon-B1itLu88.js} +0 -0
- /package/dist/assets/{kanagawa-lotus-DkcquZHv.js → kanagawa-lotus-Dl28Njgk.js} +0 -0
- /package/dist/assets/{kanagawa-wave-CC8Oc_s3.js → kanagawa-wave-BCpJajEn.js} +0 -0
- /package/dist/assets/{kdl-DzBG_i-5.js → kdl-B_tNS5SW.js} +0 -0
- /package/dist/assets/{kotlin-DIZwIusw.js → kotlin-pIweK0Tp.js} +0 -0
- /package/dist/assets/{kusto-DNbnBPvH.js → kusto-CqxEvpDG.js} +0 -0
- /package/dist/assets/{laserwave-CVoxTCdH.js → laserwave-BsFEN8Kz.js} +0 -0
- /package/dist/assets/{lean-Dlfurqwe.js → lean-DC7SPxbi.js} +0 -0
- /package/dist/assets/{less-BZZ-PLfd.js → less-Cgo6VXQL.js} +0 -0
- /package/dist/assets/{light-plus-BeMZ11-X.js → light-plus-DFxEhcsH.js} +0 -0
- /package/dist/assets/{livescript-uk34VDGK.js → livescript-C-wu00Ej.js} +0 -0
- /package/dist/assets/{llvm-CdR1gjlo.js → llvm-CmGPTzZ_.js} +0 -0
- /package/dist/assets/{log-iTn25_BO.js → log-BYyZvwT6.js} +0 -0
- /package/dist/assets/{logo-BcHhJD22.js → logo-RPed3OZI.js} +0 -0
- /package/dist/assets/{lua-ClQGOv84.js → lua-CGv6iOiJ.js} +0 -0
- /package/dist/assets/{luau-4FcpJ0Mb.js → luau-C6H01j1p.js} +0 -0
- /package/dist/assets/{make-BG0ZJ6Bw.js → make-Bp_ym9Ei.js} +0 -0
- /package/dist/assets/{markdown-jQZFZ3m0.js → markdown-UHPJkTEn.js} +0 -0
- /package/dist/assets/{material-theme-C5C8C9wY.js → material-theme-Cmydairr.js} +0 -0
- /package/dist/assets/{material-theme-darker-CxXF5p3u.js → material-theme-darker-focsTHXN.js} +0 -0
- /package/dist/assets/{material-theme-lighter-CN3_ew41.js → material-theme-lighter-BISf6XMH.js} +0 -0
- /package/dist/assets/{material-theme-ocean-DOr1uqH8.js → material-theme-ocean-Bzktmjor.js} +0 -0
- /package/dist/assets/{material-theme-palenight-BjejtMhX.js → material-theme-palenight-My1fd_35.js} +0 -0
- /package/dist/assets/{mathematica-BDmKpvRN.js → mathematica-C8bAvxin.js} +0 -0
- /package/dist/assets/{matlab-DeaiNlNF.js → matlab-CBx34vf_.js} +0 -0
- /package/dist/assets/{mbox-T5kA6jAQ.js → mbox-BYumpJj6.js} +0 -0
- /package/dist/assets/{mdx-ST4v-vi3.js → mdx-YGW2G4Uv.js} +0 -0
- /package/dist/assets/{mermaid-BAjGqWD-.js → mermaid-wzZJmzgK.js} +0 -0
- /package/dist/assets/{min-dark-DhWD_LA8.js → min-dark-Dxk-ityX.js} +0 -0
- /package/dist/assets/{min-light-TFk_TRdA.js → min-light-DsAIUNE7.js} +0 -0
- /package/dist/assets/{mipsasm-Cs1MOJEB.js → mipsasm-B8w8xWxH.js} +0 -0
- /package/dist/assets/{mirc-DRRKKkcJ.js → mirc-Dhg1_lkg.js} +0 -0
- /package/dist/assets/{mllike-iZXopbca.js → mllike-DekHTKRS.js} +0 -0
- /package/dist/assets/{modelica-DP8T2DKM.js → modelica-CcMbWJDy.js} +0 -0
- /package/dist/assets/{mojo-Dhum44Vp.js → mojo-BNCZEj9n.js} +0 -0
- /package/dist/assets/{monokai-zQwYTSXE.js → monokai-F_b0DFq1.js} +0 -0
- /package/dist/assets/{move-DDQwygay.js → move-okvFAmHH.js} +0 -0
- /package/dist/assets/{mscgen-DXIRw2qg.js → mscgen-D26dCiP0.js} +0 -0
- /package/dist/assets/{mumps-BKUS05-y.js → mumps-BJZx4oNt.js} +0 -0
- /package/dist/assets/{narrat-DbhadX58.js → narrat-CFbdikxO.js} +0 -0
- /package/dist/assets/{nextflow-Knih_yDk.js → nextflow-DzKS-iEs.js} +0 -0
- /package/dist/assets/{nginx-CzYOtr2G.js → nginx-PPx_WycM.js} +0 -0
- /package/dist/assets/{night-owl-DLGGnVs3.js → night-owl-qACT83C1.js} +0 -0
- /package/dist/assets/{nix-Baz5UHw4.js → nix-C9Hi1nKD.js} +0 -0
- /package/dist/assets/{nord-C3wm8E4I.js → nord-CH3RDbQu.js} +0 -0
- /package/dist/assets/{ntriples-ZgZuaYbW.js → ntriples--kmqf5za.js} +0 -0
- /package/dist/assets/{nushell-D5-473hD.js → nushell-DIaYF6Ou.js} +0 -0
- /package/dist/assets/{objective-c-BI6SNMJ5.js → objective-c-CGGdYinr.js} +0 -0
- /package/dist/assets/{objective-cpp-DAlvnJVe.js → objective-cpp-BjWDdNsO.js} +0 -0
- /package/dist/assets/{ocaml-CEGFuihZ.js → ocaml-D81Jtht8.js} +0 -0
- /package/dist/assets/{octave-CnOndUN3.js → octave-CAcJQTlE.js} +0 -0
- /package/dist/assets/{one-dark-pro-B6FJ0zvF.js → one-dark-pro-B-ww0r1B.js} +0 -0
- /package/dist/assets/{one-light-B2XUBJF_.js → one-light-BPbLaA51.js} +0 -0
- /package/dist/assets/{openscad-t-6iF15O.js → openscad-B0c464sF.js} +0 -0
- /package/dist/assets/{oz-DjW322Rn.js → oz-ARD1A4_T.js} +0 -0
- /package/dist/assets/{pascal-BdeW5uRX.js → pascal-DK7Ai13I.js} +0 -0
- /package/dist/assets/{pascal-BHLTdjhR.js → pascal-DT0zMytF.js} +0 -0
- /package/dist/assets/{perl-_CDvIe1D.js → perl-C687o_bL.js} +0 -0
- /package/dist/assets/{pig-inWo_B4W.js → pig-C8e4kEQV.js} +0 -0
- /package/dist/assets/{pkl-zHHuHn_z.js → pkl-LMui8nOx.js} +0 -0
- /package/dist/assets/{plastic-BRO-85T7.js → plastic-Dz26KdRC.js} +0 -0
- /package/dist/assets/{plsql-VRcuhvv-.js → plsql-B49Stwj8.js} +0 -0
- /package/dist/assets/{po-CResul3s.js → po-DJ8fyyzx.js} +0 -0
- /package/dist/assets/{poimandres-DCo9RR46.js → poimandres-DCUkkKHL.js} +0 -0
- /package/dist/assets/{polar-CakhKjn-.js → polar-2GyBpdLT.js} +0 -0
- /package/dist/assets/{postcss-BtHn3WbL.js → postcss-Bhprukf5.js} +0 -0
- /package/dist/assets/{powerquery-1rYvKCYD.js → powerquery-DfuTdzd8.js} +0 -0
- /package/dist/assets/{powershell-CO5KWJsy.js → powershell-C2Y_oyRr.js} +0 -0
- /package/dist/assets/{powershell-DE8KuUJ5.js → powershell-YtOHKxmJ.js} +0 -0
- /package/dist/assets/{prisma-Z141y9Vf.js → prisma-Ce3LhkhD.js} +0 -0
- /package/dist/assets/{prolog-Dxo_24BF.js → prolog-B2_CLi2F.js} +0 -0
- /package/dist/assets/{properties-CjVp4a6M.js → properties-DmYRuvnA.js} +0 -0
- /package/dist/assets/{proto-BFlW3M8m.js → proto-BTb-udmG.js} +0 -0
- /package/dist/assets/{protobuf-DybFT2KT.js → protobuf-CD6bEuFl.js} +0 -0
- /package/dist/assets/{puppet-CEsvHObS.js → puppet-C1Die36f.js} +0 -0
- /package/dist/assets/{puppet-Dw_NDgko.js → puppet-CsErpTW6.js} +0 -0
- /package/dist/assets/{purescript-BICOMc_6.js → purescript-DrZcHieW.js} +0 -0
- /package/dist/assets/{python-2pwcWoy7.js → python-DJuj1ZhC.js} +0 -0
- /package/dist/assets/{python-B0QK5ArY.js → python-JifBw8Pd.js} +0 -0
- /package/dist/assets/{q-C47l8kdS.js → q-DKzQvbt-.js} +0 -0
- /package/dist/assets/{qmldir-CPo3sDuO.js → qmldir-B22UuinR.js} +0 -0
- /package/dist/assets/{qss-D8trd40O.js → qss-CWapWRD3.js} +0 -0
- /package/dist/assets/{r-BmcXGVZ5.js → r-DUDpJ6Ff.js} +0 -0
- /package/dist/assets/{racket-BfOZs-VM.js → racket-Bf0hA9MY.js} +0 -0
- /package/dist/assets/{raku-lci39Tgk.js → raku-CXw4nqUw.js} +0 -0
- /package/dist/assets/{red-Ih7tMgXP.js → red-CzNC31na.js} +0 -0
- /package/dist/assets/{reg-K8cH8FkV.js → reg-CHCsNg7g.js} +0 -0
- /package/dist/assets/{rel-DxH5YkUl.js → rel-Ow-K5mDh.js} +0 -0
- /package/dist/assets/{riscv-DNTTjOwX.js → riscv-CtcsvWbN.js} +0 -0
- /package/dist/assets/{rose-pine-CBcSv8_z.js → rose-pine-DJ7LyBAT.js} +0 -0
- /package/dist/assets/{rose-pine-dawn-DsFTrjAP.js → rose-pine-dawn-C3kUPo7D.js} +0 -0
- /package/dist/assets/{rose-pine-moon-DSRrHXqB.js → rose-pine-moon-D5SxMAqW.js} +0 -0
- /package/dist/assets/{rosmsg-D94pSJ6t.js → rosmsg-a4V7Aj7O.js} +0 -0
- /package/dist/assets/{rpm-Cm0x5xT_.js → rpm-qoLWOnFN.js} +0 -0
- /package/dist/assets/{ruby-Dl-I4pxG.js → ruby-FGrV8nFX.js} +0 -0
- /package/dist/assets/{rust-BaX7heYs.js → rust-Cb9YKWSH.js} +0 -0
- /package/dist/assets/{sas-Bxkg4GVX.js → sas-BWqJ1mab.js} +0 -0
- /package/dist/assets/{sass-MHYUMeyd.js → sass-D7eOJrmY.js} +0 -0
- /package/dist/assets/{scala-0toQGra_.js → scala-DiHVSd0P.js} +0 -0
- /package/dist/assets/{scheme-CO3zogua.js → scheme-D9O3un-H.js} +0 -0
- /package/dist/assets/{scheme-B5NPj6KX.js → scheme-DqmxMK_5.js} +0 -0
- /package/dist/assets/{sdbl-lyJ_q2qY.js → sdbl-DcdijJCo.js} +0 -0
- /package/dist/assets/{shell-gYrTvBTP.js → shell-B1pKmMgB.js} +0 -0
- /package/dist/assets/{sieve-COX4Kn1X.js → sieve-D6RnHXa8.js} +0 -0
- /package/dist/assets/{simple-mode-kdHrpFjq.js → simple-mode-DW6rCJL0.js} +0 -0
- /package/dist/assets/{slack-dark-DJYHgMC5.js → slack-dark-q967N1Vs.js} +0 -0
- /package/dist/assets/{slack-ochin-DMZh8xHM.js → slack-ochin-a6A0wbgW.js} +0 -0
- /package/dist/assets/{smalltalk-Dma1z5eE.js → smalltalk-Bg8P7Hpz.js} +0 -0
- /package/dist/assets/{smalltalk-DS2N8CIT.js → smalltalk-vFEqincc.js} +0 -0
- /package/dist/assets/{snazzy-light-CWz9pGNQ.js → snazzy-light-CZMs_LkS.js} +0 -0
- /package/dist/assets/{solarized-dark-D9XpTy8q.js → solarized-dark-BGr8h_-s.js} +0 -0
- /package/dist/assets/{solarized-light-CbOIwuI-.js → solarized-light-BYRl8cvt.js} +0 -0
- /package/dist/assets/{solidity-Dt295RBh.js → solidity-CiPHtV-S.js} +0 -0
- /package/dist/assets/{solr-BvhcdkNH.js → solr-DCTMbxYh.js} +0 -0
- /package/dist/assets/{sparql-gX7W9xeh.js → sparql-D3342bJj.js} +0 -0
- /package/dist/assets/{splunk-DPuGGZIX.js → splunk-CnQhHYV7.js} +0 -0
- /package/dist/assets/{spreadsheet-BnlQRxWz.js → spreadsheet-D5vgGBWN.js} +0 -0
- /package/dist/assets/{sql-CwA10oIk.js → sql-C34SerfO.js} +0 -0
- /package/dist/assets/{ssh-config-81Puc665.js → ssh-config-DxyN4D39.js} +0 -0
- /package/dist/assets/{stex-DhLUylSV.js → stex-CIr7vrJc.js} +0 -0
- /package/dist/assets/{stylus-DBx-JbUM.js → stylus-BGkOI8rZ.js} +0 -0
- /package/dist/assets/{stylus-9ZGSp3KB.js → stylus-uKe9pX_z.js} +0 -0
- /package/dist/assets/{swift-CurfpLXH.js → swift-BwGtfoET.js} +0 -0
- /package/dist/assets/{swift-LIGMYdoY.js → swift-DYZLJadl.js} +0 -0
- /package/dist/assets/{synthwave-84-BnPKtV8a.js → synthwave-84-CwulpOa6.js} +0 -0
- /package/dist/assets/{system-verilog-DhhazFNi.js → system-verilog-Dp661CvP.js} +0 -0
- /package/dist/assets/{systemd-Cvp21r3-.js → systemd-kktSp3-B.js} +0 -0
- /package/dist/assets/{talonscript-Ex_ZAXWk.js → talonscript-Nc_j5bsE.js} +0 -0
- /package/dist/assets/{tasl-C6wcXx0u.js → tasl-C9qCYaij.js} +0 -0
- /package/dist/assets/{tcl-CMtw19Y3.js → tcl-7dXGLOIP.js} +0 -0
- /package/dist/assets/{tcl-BPvzXR-t.js → tcl-CJ_CtVRZ.js} +0 -0
- /package/dist/assets/{terraform-BFKovB2a.js → terraform-n2Mjymla.js} +0 -0
- /package/dist/assets/{textile-BUq3vgBH.js → textile-BwILayi5.js} +0 -0
- /package/dist/assets/{tiddlywiki-DRR6E4hS.js → tiddlywiki-CBwaBkZo.js} +0 -0
- /package/dist/assets/{tiki-C1XMixgx.js → tiki-DrYLgX3z.js} +0 -0
- /package/dist/assets/{tokyo-night-ByryBNMy.js → tokyo-night-CTu41Jiz.js} +0 -0
- /package/dist/assets/{toml-BQjoWSzq.js → toml-B15mRAoh.js} +0 -0
- /package/dist/assets/{toml-2TD737C5.js → toml-mjAKlhgf.js} +0 -0
- /package/dist/assets/{troff-DbgTp3Cj.js → troff-1GwZ4_kM.js} +0 -0
- /package/dist/assets/{tsv-B4GEmyrY.js → tsv-C9lzu5HK.js} +0 -0
- /package/dist/assets/{ttcn-1OxchGWH.js → ttcn-Rt4tcn5J.js} +0 -0
- /package/dist/assets/{ttcn-cfg-CC8OhyHu.js → ttcn-cfg-B2QycmWC.js} +0 -0
- /package/dist/assets/{turtle-D1WjVU4-.js → turtle-B99g2iYO.js} +0 -0
- /package/dist/assets/{turtle-CrO-XU5O.js → turtle-vnW9ZH2N.js} +0 -0
- /package/dist/assets/{typespec-BlhpafUo.js → typespec-CQo-8V96.js} +0 -0
- /package/dist/assets/{typst-BFytn-nF.js → typst-CcuHmJkn.js} +0 -0
- /package/dist/assets/{v-QsV0mqFY.js → v-B-DRpDLN.js} +0 -0
- /package/dist/assets/{vala-2OEMaeCr.js → vala-VuvWDMVG.js} +0 -0
- /package/dist/assets/{vb-Bf-XXYNJ.js → vb-BNGsVLgX.js} +0 -0
- /package/dist/assets/{vb-D9JlZMQx.js → vb-uGgKumq9.js} +0 -0
- /package/dist/assets/{vbscript-HeSyWuOi.js → vbscript-C3L-Slq1.js} +0 -0
- /package/dist/assets/{velocity-CUkiDsJQ.js → velocity-B5fLEzdR.js} +0 -0
- /package/dist/assets/{verilog-D04WYu-9.js → verilog-Cs3u3WKB.js} +0 -0
- /package/dist/assets/{verilog-BFxB5RAN.js → verilog-T4dM3A9w.js} +0 -0
- /package/dist/assets/{vesper-RapGiuFK.js → vesper-DKfkBFNi.js} +0 -0
- /package/dist/assets/{vhdl-BJUXQE-6.js → vhdl-Bdbtaye2.js} +0 -0
- /package/dist/assets/{vhdl-BmN7pPc4.js → vhdl-D8g93jeS.js} +0 -0
- /package/dist/assets/{viml-CgKKOlcK.js → viml-D75b9QT4.js} +0 -0
- /package/dist/assets/{vitesse-black-CK3sbzcK.js → vitesse-black-C8ZVPNNc.js} +0 -0
- /package/dist/assets/{vitesse-dark-D1-w1Fr7.js → vitesse-dark-Q3oZDeXO.js} +0 -0
- /package/dist/assets/{vitesse-light-D7Ky4DHb.js → vitesse-light-BU9zjuoG.js} +0 -0
- /package/dist/assets/{vyper-DyC3s8t1.js → vyper-I128n63H.js} +0 -0
- /package/dist/assets/{wasm-D0KG-h38.js → wasm-DFtcXgiA.js} +0 -0
- /package/dist/assets/{wasm-HmdyAy9e.js → wasm-TauBo8uk.js} +0 -0
- /package/dist/assets/{webidl-advQMGTP.js → webidl-BMlkVTYq.js} +0 -0
- /package/dist/assets/{wenyan-2PUFg5JI.js → wenyan-Tj1RZlPx.js} +0 -0
- /package/dist/assets/{wgsl-CN7jA0x_.js → wgsl-DuCaFBOG.js} +0 -0
- /package/dist/assets/{wikitext-jh9pTKmw.js → wikitext-B5Bd3rJ6.js} +0 -0
- /package/dist/assets/{wit-DlUr23eQ.js → wit-CK_K8sxN.js} +0 -0
- /package/dist/assets/{wolfram-BunKvAKE.js → wolfram-O7u88fnu.js} +0 -0
- /package/dist/assets/{xquery-CNzoFgd7.js → xquery-BHRymSKf.js} +0 -0
- /package/dist/assets/{yacas-BsmlDKac.js → yacas-B2Ltfl3H.js} +0 -0
- /package/dist/assets/{z80-Bnez4vZ_.js → z80-DJxBw9IF.js} +0 -0
- /package/dist/assets/{zenscript-NGWkhbj8.js → zenscript-B7bdmrQw.js} +0 -0
- /package/dist/assets/{zig-B-X7Vv3F.js → zig-CcTUrp-O.js} +0 -0
|
@@ -43947,6 +43947,23 @@ var Copy = createLucideIcon("Copy", [["rect", {
|
|
|
43947
43947
|
d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",
|
|
43948
43948
|
key: "zix9uf"
|
|
43949
43949
|
}]]);
|
|
43950
|
+
var Download = createLucideIcon("Download", [
|
|
43951
|
+
["path", {
|
|
43952
|
+
d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",
|
|
43953
|
+
key: "ih7n3h"
|
|
43954
|
+
}],
|
|
43955
|
+
["polyline", {
|
|
43956
|
+
points: "7 10 12 15 17 10",
|
|
43957
|
+
key: "2ggqvy"
|
|
43958
|
+
}],
|
|
43959
|
+
["line", {
|
|
43960
|
+
x1: "12",
|
|
43961
|
+
x2: "12",
|
|
43962
|
+
y1: "15",
|
|
43963
|
+
y2: "3",
|
|
43964
|
+
key: "1vk2je"
|
|
43965
|
+
}]
|
|
43966
|
+
]);
|
|
43950
43967
|
var EllipsisVertical = createLucideIcon("EllipsisVertical", [
|
|
43951
43968
|
["circle", {
|
|
43952
43969
|
cx: "12",
|
|
@@ -43967,6 +43984,24 @@ var EllipsisVertical = createLucideIcon("EllipsisVertical", [
|
|
|
43967
43984
|
key: "lyex9k"
|
|
43968
43985
|
}]
|
|
43969
43986
|
]);
|
|
43987
|
+
var Expand = createLucideIcon("Expand", [
|
|
43988
|
+
["path", {
|
|
43989
|
+
d: "m21 21-6-6m6 6v-4.8m0 4.8h-4.8",
|
|
43990
|
+
key: "1c15vz"
|
|
43991
|
+
}],
|
|
43992
|
+
["path", {
|
|
43993
|
+
d: "M3 16.2V21m0 0h4.8M3 21l6-6",
|
|
43994
|
+
key: "1fsnz2"
|
|
43995
|
+
}],
|
|
43996
|
+
["path", {
|
|
43997
|
+
d: "M21 7.8V3m0 0h-4.8M21 3l-6 6",
|
|
43998
|
+
key: "hawz9i"
|
|
43999
|
+
}],
|
|
44000
|
+
["path", {
|
|
44001
|
+
d: "M3 7.8V3m0 0h4.8M3 3l6 6",
|
|
44002
|
+
key: "u9ee12"
|
|
44003
|
+
}]
|
|
44004
|
+
]);
|
|
43970
44005
|
var FileCode2 = createLucideIcon("FileCode2", [
|
|
43971
44006
|
["path", {
|
|
43972
44007
|
d: "M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",
|
|
@@ -44333,6 +44368,24 @@ var Menu = createLucideIcon("Menu", [
|
|
|
44333
44368
|
key: "yk5zj1"
|
|
44334
44369
|
}]
|
|
44335
44370
|
]);
|
|
44371
|
+
var Minimize = createLucideIcon("Minimize", [
|
|
44372
|
+
["path", {
|
|
44373
|
+
d: "M8 3v3a2 2 0 0 1-2 2H3",
|
|
44374
|
+
key: "hohbtr"
|
|
44375
|
+
}],
|
|
44376
|
+
["path", {
|
|
44377
|
+
d: "M21 8h-3a2 2 0 0 1-2-2V3",
|
|
44378
|
+
key: "5jw1f3"
|
|
44379
|
+
}],
|
|
44380
|
+
["path", {
|
|
44381
|
+
d: "M3 16h3a2 2 0 0 1 2 2v3",
|
|
44382
|
+
key: "198tvr"
|
|
44383
|
+
}],
|
|
44384
|
+
["path", {
|
|
44385
|
+
d: "M16 21v-3a2 2 0 0 1 2-2h3",
|
|
44386
|
+
key: "ph8mxp"
|
|
44387
|
+
}]
|
|
44388
|
+
]);
|
|
44336
44389
|
var Minus = createLucideIcon("Minus", [["path", {
|
|
44337
44390
|
d: "M5 12h14",
|
|
44338
44391
|
key: "1ays0h"
|
|
@@ -44484,6 +44537,40 @@ var Settings = createLucideIcon("Settings", [["path", {
|
|
|
44484
44537
|
r: "3",
|
|
44485
44538
|
key: "1v7zrd"
|
|
44486
44539
|
}]]);
|
|
44540
|
+
var Share2 = createLucideIcon("Share2", [
|
|
44541
|
+
["circle", {
|
|
44542
|
+
cx: "18",
|
|
44543
|
+
cy: "5",
|
|
44544
|
+
r: "3",
|
|
44545
|
+
key: "gq8acd"
|
|
44546
|
+
}],
|
|
44547
|
+
["circle", {
|
|
44548
|
+
cx: "6",
|
|
44549
|
+
cy: "12",
|
|
44550
|
+
r: "3",
|
|
44551
|
+
key: "w7nqdw"
|
|
44552
|
+
}],
|
|
44553
|
+
["circle", {
|
|
44554
|
+
cx: "18",
|
|
44555
|
+
cy: "19",
|
|
44556
|
+
r: "3",
|
|
44557
|
+
key: "1xt0gg"
|
|
44558
|
+
}],
|
|
44559
|
+
["line", {
|
|
44560
|
+
x1: "8.59",
|
|
44561
|
+
x2: "15.42",
|
|
44562
|
+
y1: "13.51",
|
|
44563
|
+
y2: "17.49",
|
|
44564
|
+
key: "47mynk"
|
|
44565
|
+
}],
|
|
44566
|
+
["line", {
|
|
44567
|
+
x1: "15.41",
|
|
44568
|
+
x2: "8.59",
|
|
44569
|
+
y1: "6.51",
|
|
44570
|
+
y2: "10.49",
|
|
44571
|
+
key: "1n3mei"
|
|
44572
|
+
}]
|
|
44573
|
+
]);
|
|
44487
44574
|
var ShieldCheck = createLucideIcon("ShieldCheck", [["path", {
|
|
44488
44575
|
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
|
44489
44576
|
key: "oel41y"
|
|
@@ -44689,6 +44776,13 @@ var TriangleAlert = createLucideIcon("TriangleAlert", [
|
|
|
44689
44776
|
key: "p32p05"
|
|
44690
44777
|
}]
|
|
44691
44778
|
]);
|
|
44779
|
+
var Undo2 = createLucideIcon("Undo2", [["path", {
|
|
44780
|
+
d: "M9 14 4 9l5-5",
|
|
44781
|
+
key: "102s5s"
|
|
44782
|
+
}], ["path", {
|
|
44783
|
+
d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",
|
|
44784
|
+
key: "f3b9sd"
|
|
44785
|
+
}]]);
|
|
44692
44786
|
var Unlink2 = createLucideIcon("Unlink2", [["path", {
|
|
44693
44787
|
d: "M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2",
|
|
44694
44788
|
key: "1re2ne"
|
|
@@ -96471,6 +96565,68 @@ function OpsxDetailStatePanel({ message, tone = "default" }) {
|
|
|
96471
96565
|
});
|
|
96472
96566
|
}
|
|
96473
96567
|
//#endregion
|
|
96568
|
+
//#region src/components/button.tsx
|
|
96569
|
+
var variantClassNames = {
|
|
96570
|
+
primary: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
96571
|
+
secondary: "border-border bg-background text-foreground border hover:bg-muted",
|
|
96572
|
+
ghost: "text-foreground hover:bg-muted",
|
|
96573
|
+
destructive: "bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500 dark:bg-red-600 dark:hover:bg-red-700"
|
|
96574
|
+
};
|
|
96575
|
+
var activityVariantClassNames = {
|
|
96576
|
+
primary: "bg-primary/10 text-primary hover:bg-primary/10",
|
|
96577
|
+
secondary: "border-primary/40 bg-primary/10 text-primary border hover:bg-primary/10",
|
|
96578
|
+
ghost: "bg-primary/10 text-primary hover:bg-primary/10",
|
|
96579
|
+
destructive: "bg-red-600/10 text-red-600 hover:bg-red-600/10 dark:text-red-400"
|
|
96580
|
+
};
|
|
96581
|
+
var sizeClassNames = {
|
|
96582
|
+
sm: "gap-1.5 rounded-md px-3 py-1.5 text-xs",
|
|
96583
|
+
md: "gap-2 rounded-md px-4 py-2 text-sm",
|
|
96584
|
+
"icon-sm": "h-7 w-7 rounded-md p-0",
|
|
96585
|
+
"icon-md": "h-9 w-9 rounded-md p-0"
|
|
96586
|
+
};
|
|
96587
|
+
var Button = (0, import_react.forwardRef)(function Button({ variant = "primary", size = "md", activity = false, disabled = false, type = "button", className, onClick, "aria-disabled": ariaDisabled, ...props }, ref) {
|
|
96588
|
+
const handleClick = (event) => {
|
|
96589
|
+
if (activity) {
|
|
96590
|
+
event.preventDefault();
|
|
96591
|
+
event.stopPropagation();
|
|
96592
|
+
return;
|
|
96593
|
+
}
|
|
96594
|
+
onClick?.(event);
|
|
96595
|
+
};
|
|
96596
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
96597
|
+
ref,
|
|
96598
|
+
type,
|
|
96599
|
+
disabled,
|
|
96600
|
+
"aria-disabled": ariaDisabled ?? (activity ? true : void 0),
|
|
96601
|
+
"data-activity": activity ? "true" : void 0,
|
|
96602
|
+
onClick: handleClick,
|
|
96603
|
+
className: cn$1("inline-flex shrink-0 items-center justify-center font-medium outline-none transition-colors", "focus-visible:ring-primary focus-visible:ring-1", disabled ? "cursor-not-allowed opacity-50" : activity ? "cursor-default" : "cursor-pointer", activity ? activityVariantClassNames[variant] : variantClassNames[variant], sizeClassNames[size], className),
|
|
96604
|
+
...props
|
|
96605
|
+
});
|
|
96606
|
+
});
|
|
96607
|
+
//#endregion
|
|
96608
|
+
//#region src/components/button-group.tsx
|
|
96609
|
+
/**
|
|
96610
|
+
* Compact segmented buttons with single-select behavior.
|
|
96611
|
+
*/
|
|
96612
|
+
function ButtonGroup({ value, options, onChange, className = "", tone = "default" }) {
|
|
96613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
96614
|
+
className: `inline-flex w-fit max-w-full shrink-0 self-start overflow-hidden rounded-md border ${tone === "terminal" ? "border-terminal-foreground/25 bg-terminal/70 text-terminal-foreground" : "border-border bg-card"} ${className}`,
|
|
96615
|
+
children: options.map((option, index) => {
|
|
96616
|
+
const active = option.value === value;
|
|
96617
|
+
const stateClassName = active ? "bg-primary text-primary-foreground" : tone === "terminal" ? "text-terminal-foreground/72 hover:bg-terminal-foreground/10 hover:text-terminal-foreground" : "text-muted-foreground hover:bg-muted/60 hover:text-foreground";
|
|
96618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
96619
|
+
type: "button",
|
|
96620
|
+
disabled: option.disabled,
|
|
96621
|
+
onClick: () => onChange(option.value),
|
|
96622
|
+
"aria-pressed": active,
|
|
96623
|
+
className: `inline-flex items-center justify-center gap-1.5 px-3 py-1.5 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${index > 0 ? tone === "terminal" ? "border-terminal-foreground/20 border-l" : "border-border border-l" : ""} ${stateClassName}`,
|
|
96624
|
+
children: option.label
|
|
96625
|
+
}, option.value);
|
|
96626
|
+
})
|
|
96627
|
+
});
|
|
96628
|
+
}
|
|
96629
|
+
//#endregion
|
|
96474
96630
|
//#region src/lib/codemirror-markdown-preview.ts
|
|
96475
96631
|
/**
|
|
96476
96632
|
* CodeMirror 6 Markdown Live Preview Extension
|
|
@@ -113479,11 +113635,16 @@ ReactCodeMirror.displayName = "CodeMirror";
|
|
|
113479
113635
|
* - Markdown 文件支持实时预览(隐藏语法标记)
|
|
113480
113636
|
* - 移动端友好
|
|
113481
113637
|
*/
|
|
113482
|
-
|
|
113483
|
-
|
|
113638
|
+
function isMarkdownFilename(filename) {
|
|
113639
|
+
if (!filename) return false;
|
|
113640
|
+
const lower = filename.toLowerCase();
|
|
113641
|
+
return lower.endsWith(".md") || lower.endsWith(".markdown") || lower.endsWith(".mdown") || lower.endsWith(".mkd");
|
|
113642
|
+
}
|
|
113643
|
+
/** 根据文件名推断常见语言类型 */
|
|
113644
|
+
function detectBuiltinLanguage(filename) {
|
|
113484
113645
|
if (!filename) return "plain";
|
|
113485
113646
|
const lower = filename.toLowerCase();
|
|
113486
|
-
if (lower
|
|
113647
|
+
if (isMarkdownFilename(lower)) return "markdown";
|
|
113487
113648
|
if (lower.endsWith(".ts") || lower.endsWith(".tsx")) return "typescript";
|
|
113488
113649
|
if (lower.endsWith(".js") || lower.endsWith(".jsx")) return "javascript";
|
|
113489
113650
|
if (lower.endsWith(".json")) return "json";
|
|
@@ -113491,7 +113652,7 @@ function detectLanguage(filename) {
|
|
|
113491
113652
|
return "plain";
|
|
113492
113653
|
}
|
|
113493
113654
|
/** 根据语言类型返回 CodeMirror 扩展 */
|
|
113494
|
-
function
|
|
113655
|
+
function getBuiltinLanguageExtensions(language, filename) {
|
|
113495
113656
|
switch (language) {
|
|
113496
113657
|
case "markdown": return [markdown({
|
|
113497
113658
|
base: markdownLanguage,
|
|
@@ -113507,6 +113668,10 @@ function getLanguageExtensions(language, filename) {
|
|
|
113507
113668
|
default: return [];
|
|
113508
113669
|
}
|
|
113509
113670
|
}
|
|
113671
|
+
function matchFilenameLanguage(filename) {
|
|
113672
|
+
if (!filename) return null;
|
|
113673
|
+
return LanguageDescription.matchFilename(languages, filename);
|
|
113674
|
+
}
|
|
113510
113675
|
function resolveBundleTheme(theme, isDarkMode) {
|
|
113511
113676
|
switch (theme) {
|
|
113512
113677
|
case "github": return isDarkMode ? githubDark : githubLight;
|
|
@@ -113530,13 +113695,53 @@ function resolveBundleTheme(theme, isDarkMode) {
|
|
|
113530
113695
|
* // 可编辑的代码编辑器
|
|
113531
113696
|
* <CodeEditor value={code} onChange={setCode} language="typescript" />
|
|
113532
113697
|
*/
|
|
113533
|
-
function CodeEditor({ value, onChange, readOnly = false, language, filename, lineNumbers = true, lineWrapping = true, fontSize = 13, className = "", style, placeholder, editorMinHeight = "240px" }) {
|
|
113534
|
-
const resolvedLanguage = language ?? detectLanguage(filename);
|
|
113698
|
+
function CodeEditor({ value, onChange, onSaveShortcut, readOnly = false, language, filename, lineNumbers = true, lineWrapping = true, fontSize = 13, className = "", style, placeholder, editorMinHeight = "240px" }) {
|
|
113535
113699
|
const isDarkMode = useDarkMode();
|
|
113536
113700
|
const { data: config } = useConfigSubscription();
|
|
113537
113701
|
const codeEditorTheme = config?.codeEditor?.theme ?? "github";
|
|
113702
|
+
const [filenameLanguageExtensions, setFilenameLanguageExtensions] = (0, import_react.useState)([]);
|
|
113703
|
+
(0, import_react.useEffect)(() => {
|
|
113704
|
+
let cancelled = false;
|
|
113705
|
+
if (language) {
|
|
113706
|
+
setFilenameLanguageExtensions([]);
|
|
113707
|
+
return;
|
|
113708
|
+
}
|
|
113709
|
+
const builtinLanguage = detectBuiltinLanguage(filename);
|
|
113710
|
+
if (builtinLanguage !== "plain") {
|
|
113711
|
+
setFilenameLanguageExtensions(getBuiltinLanguageExtensions(builtinLanguage, filename));
|
|
113712
|
+
return;
|
|
113713
|
+
}
|
|
113714
|
+
const matchedLanguage = matchFilenameLanguage(filename);
|
|
113715
|
+
if (!matchedLanguage) {
|
|
113716
|
+
setFilenameLanguageExtensions([]);
|
|
113717
|
+
return;
|
|
113718
|
+
}
|
|
113719
|
+
if (matchedLanguage.support) {
|
|
113720
|
+
setFilenameLanguageExtensions([matchedLanguage.support.extension]);
|
|
113721
|
+
return;
|
|
113722
|
+
}
|
|
113723
|
+
setFilenameLanguageExtensions([]);
|
|
113724
|
+
matchedLanguage.load().then((support) => {
|
|
113725
|
+
if (cancelled) return;
|
|
113726
|
+
setFilenameLanguageExtensions([support.extension]);
|
|
113727
|
+
}).catch(() => {
|
|
113728
|
+
if (cancelled) return;
|
|
113729
|
+
setFilenameLanguageExtensions([]);
|
|
113730
|
+
});
|
|
113731
|
+
return () => {
|
|
113732
|
+
cancelled = true;
|
|
113733
|
+
};
|
|
113734
|
+
}, [language, filename]);
|
|
113735
|
+
const languageExtensions = (0, import_react.useMemo)(() => {
|
|
113736
|
+
if (!language) return filenameLanguageExtensions;
|
|
113737
|
+
return getBuiltinLanguageExtensions(language, filename);
|
|
113738
|
+
}, [
|
|
113739
|
+
language,
|
|
113740
|
+
filename,
|
|
113741
|
+
filenameLanguageExtensions
|
|
113742
|
+
]);
|
|
113538
113743
|
const extensions = (0, import_react.useMemo)(() => {
|
|
113539
|
-
const exts = [EditorState.readOnly.of(readOnly), ...
|
|
113744
|
+
const exts = [EditorState.readOnly.of(readOnly), ...languageExtensions];
|
|
113540
113745
|
exts.push(resolveBundleTheme(codeEditorTheme, isDarkMode));
|
|
113541
113746
|
exts.push(EditorView.theme({
|
|
113542
113747
|
".cm-line": { lineHeight: "21px" },
|
|
@@ -113561,16 +113766,24 @@ function CodeEditor({ value, onChange, readOnly = false, language, filename, lin
|
|
|
113561
113766
|
exts.push(keymap.of([{
|
|
113562
113767
|
key: "Mod-a",
|
|
113563
113768
|
run: selectAll
|
|
113769
|
+
}, {
|
|
113770
|
+
key: "Mod-s",
|
|
113771
|
+
preventDefault: true,
|
|
113772
|
+
run: () => {
|
|
113773
|
+
if (readOnly || !onSaveShortcut) return false;
|
|
113774
|
+
onSaveShortcut();
|
|
113775
|
+
return true;
|
|
113776
|
+
}
|
|
113564
113777
|
}]));
|
|
113565
113778
|
if (lineWrapping) exts.push(EditorView.lineWrapping);
|
|
113566
113779
|
return exts;
|
|
113567
113780
|
}, [
|
|
113568
|
-
|
|
113569
|
-
filename,
|
|
113781
|
+
languageExtensions,
|
|
113570
113782
|
readOnly,
|
|
113571
113783
|
lineWrapping,
|
|
113572
113784
|
codeEditorTheme,
|
|
113573
|
-
isDarkMode
|
|
113785
|
+
isDarkMode,
|
|
113786
|
+
onSaveShortcut
|
|
113574
113787
|
]);
|
|
113575
113788
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReactCodeMirror, {
|
|
113576
113789
|
value,
|
|
@@ -114154,7 +114367,7 @@ function FileExplorer({ entries, selectedPath, onSelect, breadcrumbRoot, headerL
|
|
|
114154
114367
|
})]
|
|
114155
114368
|
});
|
|
114156
114369
|
}
|
|
114157
|
-
function FileExplorerCodeEditor({ file, value, readOnly = true, onChange, lineWrapping, editorMinHeight }) {
|
|
114370
|
+
function FileExplorerCodeEditor({ file, value, readOnly = true, onChange, onSaveShortcut, lineWrapping, editorMinHeight }) {
|
|
114158
114371
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CodeEditor, {
|
|
114159
114372
|
value,
|
|
114160
114373
|
filename: file.path,
|
|
@@ -114162,209 +114375,11 @@ function FileExplorerCodeEditor({ file, value, readOnly = true, onChange, lineWr
|
|
|
114162
114375
|
lineWrapping,
|
|
114163
114376
|
className: "min-h-0 flex-1",
|
|
114164
114377
|
editorMinHeight,
|
|
114165
|
-
onChange
|
|
114378
|
+
onChange,
|
|
114379
|
+
onSaveShortcut
|
|
114166
114380
|
}, file.path);
|
|
114167
114381
|
}
|
|
114168
114382
|
//#endregion
|
|
114169
|
-
//#region src/components/scroll-spy.ts
|
|
114170
|
-
function hasVerticalScrollBehavior(overflowY) {
|
|
114171
|
-
return overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay";
|
|
114172
|
-
}
|
|
114173
|
-
function findVerticalScrollContainer(node, options = {}) {
|
|
114174
|
-
const { allowNonScrollable = false } = options;
|
|
114175
|
-
let current = node?.parentElement ?? null;
|
|
114176
|
-
while (current) {
|
|
114177
|
-
if (hasVerticalScrollBehavior(window.getComputedStyle(current).overflowY)) {
|
|
114178
|
-
if (allowNonScrollable || current.scrollHeight > current.clientHeight) return current;
|
|
114179
|
-
}
|
|
114180
|
-
current = current.parentElement;
|
|
114181
|
-
}
|
|
114182
|
-
return null;
|
|
114183
|
-
}
|
|
114184
|
-
function scrollViewportBounds(root) {
|
|
114185
|
-
if (root) {
|
|
114186
|
-
const rect = root.getBoundingClientRect();
|
|
114187
|
-
return {
|
|
114188
|
-
top: rect.top,
|
|
114189
|
-
bottom: rect.bottom
|
|
114190
|
-
};
|
|
114191
|
-
}
|
|
114192
|
-
return {
|
|
114193
|
-
top: 0,
|
|
114194
|
-
bottom: window.innerHeight
|
|
114195
|
-
};
|
|
114196
|
-
}
|
|
114197
|
-
function measureAvailableViewportHeight(node, root = findVerticalScrollContainer(node, { allowNonScrollable: true })) {
|
|
114198
|
-
if (typeof window === "undefined" || !node) return null;
|
|
114199
|
-
const nodeRect = node.getBoundingClientRect();
|
|
114200
|
-
const viewport = scrollViewportBounds(root);
|
|
114201
|
-
return Math.max(Math.floor(viewport.bottom - Math.max(nodeRect.top, viewport.top)), 0);
|
|
114202
|
-
}
|
|
114203
|
-
function useViewportConstrainedHeight({ target, enabled = true }) {
|
|
114204
|
-
const [height, setHeight] = (0, import_react.useState)(null);
|
|
114205
|
-
(0, import_react.useLayoutEffect)(() => {
|
|
114206
|
-
if (!enabled || typeof window === "undefined") {
|
|
114207
|
-
setHeight(null);
|
|
114208
|
-
return;
|
|
114209
|
-
}
|
|
114210
|
-
if (!target) {
|
|
114211
|
-
setHeight(null);
|
|
114212
|
-
return;
|
|
114213
|
-
}
|
|
114214
|
-
let resizeObserver = null;
|
|
114215
|
-
let scrollRoot = null;
|
|
114216
|
-
let scrollTarget = window;
|
|
114217
|
-
const setConstrainedHeight = (nextHeight) => {
|
|
114218
|
-
setHeight((currentHeight) => currentHeight === nextHeight ? currentHeight : nextHeight);
|
|
114219
|
-
};
|
|
114220
|
-
const bindScrollRoot = (nextRoot) => {
|
|
114221
|
-
if (scrollRoot === nextRoot) return;
|
|
114222
|
-
scrollTarget.removeEventListener("scroll", handleUpdate);
|
|
114223
|
-
if (resizeObserver && scrollRoot) resizeObserver.unobserve(scrollRoot);
|
|
114224
|
-
scrollRoot = nextRoot;
|
|
114225
|
-
scrollTarget = nextRoot ?? window;
|
|
114226
|
-
scrollTarget.addEventListener("scroll", handleUpdate, { passive: true });
|
|
114227
|
-
if (resizeObserver && scrollRoot) resizeObserver.observe(scrollRoot);
|
|
114228
|
-
};
|
|
114229
|
-
const handleUpdate = () => {
|
|
114230
|
-
const nextRoot = findVerticalScrollContainer(target, { allowNonScrollable: true });
|
|
114231
|
-
bindScrollRoot(nextRoot);
|
|
114232
|
-
setConstrainedHeight(measureAvailableViewportHeight(target, nextRoot));
|
|
114233
|
-
};
|
|
114234
|
-
if (typeof ResizeObserver !== "undefined") {
|
|
114235
|
-
resizeObserver = new ResizeObserver(() => {
|
|
114236
|
-
handleUpdate();
|
|
114237
|
-
});
|
|
114238
|
-
resizeObserver.observe(target);
|
|
114239
|
-
if (target.parentElement) resizeObserver.observe(target.parentElement);
|
|
114240
|
-
}
|
|
114241
|
-
handleUpdate();
|
|
114242
|
-
window.addEventListener("resize", handleUpdate);
|
|
114243
|
-
return () => {
|
|
114244
|
-
window.removeEventListener("resize", handleUpdate);
|
|
114245
|
-
scrollTarget.removeEventListener("scroll", handleUpdate);
|
|
114246
|
-
resizeObserver?.disconnect();
|
|
114247
|
-
};
|
|
114248
|
-
}, [enabled, target]);
|
|
114249
|
-
return height;
|
|
114250
|
-
}
|
|
114251
|
-
//#endregion
|
|
114252
|
-
//#region src/components/folder-editor-viewer.tsx
|
|
114253
|
-
function FolderEditorViewer({ changeId, archived = false, files: providedFiles }) {
|
|
114254
|
-
const { data: files, isLoading, error } = archived ? useArchiveFilesSubscription(changeId) : useChangeFilesSubscription(changeId);
|
|
114255
|
-
const [selectedPath, setSelectedPath] = (0, import_react.useState)(null);
|
|
114256
|
-
const [viewportNode, setViewportNode] = (0, import_react.useState)(null);
|
|
114257
|
-
const viewportHeight = useViewportConstrainedHeight({
|
|
114258
|
-
target: viewportNode,
|
|
114259
|
-
enabled: viewportNode !== null
|
|
114260
|
-
});
|
|
114261
|
-
const sortedEntries = (0, import_react.useMemo)(() => {
|
|
114262
|
-
if (providedFiles) return [...providedFiles];
|
|
114263
|
-
if (!files) return [];
|
|
114264
|
-
return [...files];
|
|
114265
|
-
}, [files, providedFiles]);
|
|
114266
|
-
(0, import_react.useEffect)(() => {
|
|
114267
|
-
if (!sortedEntries.length) {
|
|
114268
|
-
setSelectedPath(null);
|
|
114269
|
-
return;
|
|
114270
|
-
}
|
|
114271
|
-
if (!sortedEntries.find((entry) => entry.path === selectedPath && entry.type === "file")) setSelectedPath(sortedEntries.find((entry) => entry.type === "file")?.path ?? null);
|
|
114272
|
-
}, [sortedEntries, selectedPath]);
|
|
114273
|
-
if (!providedFiles && isLoading) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114274
|
-
className: "border-border bg-muted/20 flex h-[400px] items-center justify-center rounded-md border",
|
|
114275
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoaderCircle, { className: "text-muted-foreground h-6 w-6 animate-spin" })
|
|
114276
|
-
});
|
|
114277
|
-
if (error) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
114278
|
-
className: "border-destructive/50 bg-destructive/10 text-destructive rounded-md border p-4 text-sm",
|
|
114279
|
-
children: ["Failed to load files: ", error.message]
|
|
114280
|
-
});
|
|
114281
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", {
|
|
114282
|
-
"data-tab-scroll-root": "true",
|
|
114283
|
-
className: "scrollbar-thin scrollbar-track-transparent min-h-0 flex-1 overflow-auto",
|
|
114284
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114285
|
-
className: "pr-1",
|
|
114286
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114287
|
-
ref: setViewportNode,
|
|
114288
|
-
className: "flex min-h-0 flex-col",
|
|
114289
|
-
style: viewportHeight != null ? { height: `${viewportHeight}px` } : void 0,
|
|
114290
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FileExplorer, {
|
|
114291
|
-
entries: sortedEntries,
|
|
114292
|
-
selectedPath,
|
|
114293
|
-
onSelect: setSelectedPath,
|
|
114294
|
-
emptyState: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "No files found for this change." }),
|
|
114295
|
-
renderEditor: (activeFile) => activeFile ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FileExplorerCodeEditor, {
|
|
114296
|
-
file: activeFile,
|
|
114297
|
-
value: activeFile.content ?? "",
|
|
114298
|
-
readOnly: true,
|
|
114299
|
-
editorMinHeight: "0px"
|
|
114300
|
-
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114301
|
-
className: "text-muted-foreground flex h-full items-center justify-center",
|
|
114302
|
-
children: "Select a file to view"
|
|
114303
|
-
})
|
|
114304
|
-
})
|
|
114305
|
-
})
|
|
114306
|
-
})
|
|
114307
|
-
});
|
|
114308
|
-
}
|
|
114309
|
-
//#endregion
|
|
114310
|
-
//#region src/components/opsx/artifact-document-shell.tsx
|
|
114311
|
-
var statusConfig = {
|
|
114312
|
-
done: {
|
|
114313
|
-
label: "Done",
|
|
114314
|
-
className: "text-emerald-500",
|
|
114315
|
-
icon: CircleCheck
|
|
114316
|
-
},
|
|
114317
|
-
ready: {
|
|
114318
|
-
label: "Ready",
|
|
114319
|
-
className: "text-sky-500",
|
|
114320
|
-
icon: Circle$1
|
|
114321
|
-
},
|
|
114322
|
-
blocked: {
|
|
114323
|
-
label: "Blocked",
|
|
114324
|
-
className: "text-amber-500",
|
|
114325
|
-
icon: TriangleAlert
|
|
114326
|
-
}
|
|
114327
|
-
};
|
|
114328
|
-
function OpsxArtifactStatusBadge({ status }) {
|
|
114329
|
-
const config = statusConfig[status];
|
|
114330
|
-
const StatusIcon = config.icon;
|
|
114331
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
114332
|
-
className: `inline-flex shrink-0 items-center gap-1.5 text-xs font-medium ${config.className}`,
|
|
114333
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, { className: "h-4 w-4" }), config.label]
|
|
114334
|
-
});
|
|
114335
|
-
}
|
|
114336
|
-
function OpsxArtifactTabStatusIcon({ status }) {
|
|
114337
|
-
const StatusIcon = statusConfig[status].icon;
|
|
114338
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, { className: `h-3.5 w-3.5 ${statusConfig[status].className}` });
|
|
114339
|
-
}
|
|
114340
|
-
function OpsxArtifactDocumentShell({ id, path, status, missingDeps, meta, children }) {
|
|
114341
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
114342
|
-
className: "border-border bg-muted/25 mb-5 rounded-md border px-4 py-3",
|
|
114343
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
114344
|
-
className: "flex flex-wrap items-start justify-between gap-3",
|
|
114345
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
114346
|
-
className: "min-w-0 space-y-1",
|
|
114347
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114348
|
-
className: "font-medium",
|
|
114349
|
-
children: id
|
|
114350
|
-
}), path ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114351
|
-
className: "text-muted-foreground break-all text-xs",
|
|
114352
|
-
children: path
|
|
114353
|
-
}) : null]
|
|
114354
|
-
}), status ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OpsxArtifactStatusBadge, { status }) : meta]
|
|
114355
|
-
}), status === "blocked" && missingDeps?.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
114356
|
-
className: "mt-3 flex items-start gap-2 rounded-md border border-amber-500/50 bg-amber-500/10 px-3 py-2 text-xs text-amber-700",
|
|
114357
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114358
|
-
className: "font-medium",
|
|
114359
|
-
children: "Blocked by missing dependencies"
|
|
114360
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114361
|
-
className: "mt-1",
|
|
114362
|
-
children: missingDeps.join(", ")
|
|
114363
|
-
})] })]
|
|
114364
|
-
}) : null]
|
|
114365
|
-
}), children] });
|
|
114366
|
-
}
|
|
114367
|
-
//#endregion
|
|
114368
114383
|
//#region src/components/anchor-scroll.ts
|
|
114369
114384
|
/**
|
|
114370
114385
|
* Utilities for hash-anchor navigation inside nested scroll containers.
|
|
@@ -114425,46 +114440,6 @@ function navigateHashAnchor(anchorElement, hash) {
|
|
|
114425
114440
|
return true;
|
|
114426
114441
|
}
|
|
114427
114442
|
//#endregion
|
|
114428
|
-
//#region src/components/button.tsx
|
|
114429
|
-
var variantClassNames = {
|
|
114430
|
-
primary: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
114431
|
-
secondary: "border-border bg-background text-foreground border hover:bg-muted",
|
|
114432
|
-
ghost: "text-foreground hover:bg-muted",
|
|
114433
|
-
destructive: "bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500 dark:bg-red-600 dark:hover:bg-red-700"
|
|
114434
|
-
};
|
|
114435
|
-
var activityVariantClassNames = {
|
|
114436
|
-
primary: "bg-primary/10 text-primary hover:bg-primary/10",
|
|
114437
|
-
secondary: "border-primary/40 bg-primary/10 text-primary border hover:bg-primary/10",
|
|
114438
|
-
ghost: "bg-primary/10 text-primary hover:bg-primary/10",
|
|
114439
|
-
destructive: "bg-red-600/10 text-red-600 hover:bg-red-600/10 dark:text-red-400"
|
|
114440
|
-
};
|
|
114441
|
-
var sizeClassNames = {
|
|
114442
|
-
sm: "gap-1.5 rounded-md px-3 py-1.5 text-xs",
|
|
114443
|
-
md: "gap-2 rounded-md px-4 py-2 text-sm",
|
|
114444
|
-
"icon-sm": "h-7 w-7 rounded-md p-0",
|
|
114445
|
-
"icon-md": "h-9 w-9 rounded-md p-0"
|
|
114446
|
-
};
|
|
114447
|
-
var Button = (0, import_react.forwardRef)(function Button({ variant = "primary", size = "md", activity = false, disabled = false, type = "button", className, onClick, "aria-disabled": ariaDisabled, ...props }, ref) {
|
|
114448
|
-
const handleClick = (event) => {
|
|
114449
|
-
if (activity) {
|
|
114450
|
-
event.preventDefault();
|
|
114451
|
-
event.stopPropagation();
|
|
114452
|
-
return;
|
|
114453
|
-
}
|
|
114454
|
-
onClick?.(event);
|
|
114455
|
-
};
|
|
114456
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
114457
|
-
ref,
|
|
114458
|
-
type,
|
|
114459
|
-
disabled,
|
|
114460
|
-
"aria-disabled": ariaDisabled ?? (activity ? true : void 0),
|
|
114461
|
-
"data-activity": activity ? "true" : void 0,
|
|
114462
|
-
onClick: handleClick,
|
|
114463
|
-
className: cn$1("inline-flex shrink-0 items-center justify-center font-medium outline-none transition-colors", "focus-visible:ring-primary focus-visible:ring-1", disabled ? "cursor-not-allowed opacity-50" : activity ? "cursor-default" : "cursor-pointer", activity ? activityVariantClassNames[variant] : variantClassNames[variant], sizeClassNames[size], className),
|
|
114464
|
-
...props
|
|
114465
|
-
});
|
|
114466
|
-
});
|
|
114467
|
-
//#endregion
|
|
114468
114443
|
//#region src/lib/document-translation-session-state.ts
|
|
114469
114444
|
var DOCUMENT_TRANSLATION_SESSION_STORAGE_KEY = "openspecui:document-translation:mode";
|
|
114470
114445
|
var DEFAULT_ACTIVATION = "source";
|
|
@@ -150423,6 +150398,619 @@ var viewerStyles = String.raw`
|
|
|
150423
150398
|
/* MarkdownViewer keeps layout hooks local; shared ToC geometry lives in index.css. */
|
|
150424
150399
|
`;
|
|
150425
150400
|
//#endregion
|
|
150401
|
+
//#region src/components/scroll-spy.ts
|
|
150402
|
+
function hasVerticalScrollBehavior(overflowY) {
|
|
150403
|
+
return overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay";
|
|
150404
|
+
}
|
|
150405
|
+
function findVerticalScrollContainer(node, options = {}) {
|
|
150406
|
+
const { allowNonScrollable = false } = options;
|
|
150407
|
+
let current = node?.parentElement ?? null;
|
|
150408
|
+
while (current) {
|
|
150409
|
+
if (hasVerticalScrollBehavior(window.getComputedStyle(current).overflowY)) {
|
|
150410
|
+
if (allowNonScrollable || current.scrollHeight > current.clientHeight) return current;
|
|
150411
|
+
}
|
|
150412
|
+
current = current.parentElement;
|
|
150413
|
+
}
|
|
150414
|
+
return null;
|
|
150415
|
+
}
|
|
150416
|
+
function scrollViewportBounds(root) {
|
|
150417
|
+
if (root) {
|
|
150418
|
+
const rect = root.getBoundingClientRect();
|
|
150419
|
+
return {
|
|
150420
|
+
top: rect.top,
|
|
150421
|
+
bottom: rect.bottom
|
|
150422
|
+
};
|
|
150423
|
+
}
|
|
150424
|
+
return {
|
|
150425
|
+
top: 0,
|
|
150426
|
+
bottom: window.innerHeight
|
|
150427
|
+
};
|
|
150428
|
+
}
|
|
150429
|
+
function measureAvailableViewportHeight(node, root = findVerticalScrollContainer(node, { allowNonScrollable: true })) {
|
|
150430
|
+
if (typeof window === "undefined" || !node) return null;
|
|
150431
|
+
const nodeRect = node.getBoundingClientRect();
|
|
150432
|
+
const viewport = scrollViewportBounds(root);
|
|
150433
|
+
return Math.max(Math.floor(viewport.bottom - Math.max(nodeRect.top, viewport.top)), 0);
|
|
150434
|
+
}
|
|
150435
|
+
function useViewportConstrainedHeight({ target, enabled = true }) {
|
|
150436
|
+
const [height, setHeight] = (0, import_react.useState)(null);
|
|
150437
|
+
(0, import_react.useLayoutEffect)(() => {
|
|
150438
|
+
if (!enabled || typeof window === "undefined") {
|
|
150439
|
+
setHeight(null);
|
|
150440
|
+
return;
|
|
150441
|
+
}
|
|
150442
|
+
if (!target) {
|
|
150443
|
+
setHeight(null);
|
|
150444
|
+
return;
|
|
150445
|
+
}
|
|
150446
|
+
let resizeObserver = null;
|
|
150447
|
+
let scrollRoot = null;
|
|
150448
|
+
let scrollTarget = window;
|
|
150449
|
+
const setConstrainedHeight = (nextHeight) => {
|
|
150450
|
+
setHeight((currentHeight) => currentHeight === nextHeight ? currentHeight : nextHeight);
|
|
150451
|
+
};
|
|
150452
|
+
const bindScrollRoot = (nextRoot) => {
|
|
150453
|
+
if (scrollRoot === nextRoot) return;
|
|
150454
|
+
scrollTarget.removeEventListener("scroll", handleUpdate);
|
|
150455
|
+
if (resizeObserver && scrollRoot) resizeObserver.unobserve(scrollRoot);
|
|
150456
|
+
scrollRoot = nextRoot;
|
|
150457
|
+
scrollTarget = nextRoot ?? window;
|
|
150458
|
+
scrollTarget.addEventListener("scroll", handleUpdate, { passive: true });
|
|
150459
|
+
if (resizeObserver && scrollRoot) resizeObserver.observe(scrollRoot);
|
|
150460
|
+
};
|
|
150461
|
+
const handleUpdate = () => {
|
|
150462
|
+
const nextRoot = findVerticalScrollContainer(target, { allowNonScrollable: true });
|
|
150463
|
+
bindScrollRoot(nextRoot);
|
|
150464
|
+
setConstrainedHeight(measureAvailableViewportHeight(target, nextRoot));
|
|
150465
|
+
};
|
|
150466
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
150467
|
+
resizeObserver = new ResizeObserver(() => {
|
|
150468
|
+
handleUpdate();
|
|
150469
|
+
});
|
|
150470
|
+
resizeObserver.observe(target);
|
|
150471
|
+
if (target.parentElement) resizeObserver.observe(target.parentElement);
|
|
150472
|
+
}
|
|
150473
|
+
handleUpdate();
|
|
150474
|
+
window.addEventListener("resize", handleUpdate);
|
|
150475
|
+
return () => {
|
|
150476
|
+
window.removeEventListener("resize", handleUpdate);
|
|
150477
|
+
scrollTarget.removeEventListener("scroll", handleUpdate);
|
|
150478
|
+
resizeObserver?.disconnect();
|
|
150479
|
+
};
|
|
150480
|
+
}, [enabled, target]);
|
|
150481
|
+
return height;
|
|
150482
|
+
}
|
|
150483
|
+
//#endregion
|
|
150484
|
+
//#region src/lib/file-preview.ts
|
|
150485
|
+
async function prepareEntityFilePreview(input) {
|
|
150486
|
+
if (isStaticMode()) return null;
|
|
150487
|
+
const preview = await (input.archived ? trpcClient.archive.prepareFilePreview.query({
|
|
150488
|
+
id: input.changeId,
|
|
150489
|
+
path: input.path
|
|
150490
|
+
}) : trpcClient.change.prepareFilePreview.query({
|
|
150491
|
+
id: input.changeId,
|
|
150492
|
+
path: input.path
|
|
150493
|
+
}));
|
|
150494
|
+
const apiBaseUrl = getApiBaseUrl();
|
|
150495
|
+
if (!apiBaseUrl) return preview;
|
|
150496
|
+
const prefix = (path) => `${apiBaseUrl}${path}`;
|
|
150497
|
+
return {
|
|
150498
|
+
...preview,
|
|
150499
|
+
resourcePathname: preview.resourcePathname ? prefix(preview.resourcePathname) : null,
|
|
150500
|
+
entryPathname: prefix(preview.entryPathname),
|
|
150501
|
+
urlPath: prefix(preview.urlPath)
|
|
150502
|
+
};
|
|
150503
|
+
}
|
|
150504
|
+
async function writeEntityFile(input) {
|
|
150505
|
+
if (input.archived) {
|
|
150506
|
+
await trpcClient.archive.writeFile.mutate({
|
|
150507
|
+
id: input.changeId,
|
|
150508
|
+
path: input.path,
|
|
150509
|
+
content: input.content
|
|
150510
|
+
});
|
|
150511
|
+
return;
|
|
150512
|
+
}
|
|
150513
|
+
await trpcClient.change.writeFile.mutate({
|
|
150514
|
+
id: input.changeId,
|
|
150515
|
+
path: input.path,
|
|
150516
|
+
content: input.content
|
|
150517
|
+
});
|
|
150518
|
+
}
|
|
150519
|
+
//#endregion
|
|
150520
|
+
//#region src/components/folder-editor-viewer.tsx
|
|
150521
|
+
function isFileEntry(file) {
|
|
150522
|
+
return file?.type === "file";
|
|
150523
|
+
}
|
|
150524
|
+
function isTextLikeFile(file) {
|
|
150525
|
+
return isFileEntry(file) && file.content !== void 0 && file.content !== null;
|
|
150526
|
+
}
|
|
150527
|
+
function normalizeExplorerFile(file) {
|
|
150528
|
+
return {
|
|
150529
|
+
...file,
|
|
150530
|
+
content: file.content ?? void 0
|
|
150531
|
+
};
|
|
150532
|
+
}
|
|
150533
|
+
function canPreviewInline(file) {
|
|
150534
|
+
return isFileEntry(file) && file.previewKind === "markdown";
|
|
150535
|
+
}
|
|
150536
|
+
function canPreviewRemote(file) {
|
|
150537
|
+
return isFileEntry(file) && [
|
|
150538
|
+
"html",
|
|
150539
|
+
"image",
|
|
150540
|
+
"audio",
|
|
150541
|
+
"video",
|
|
150542
|
+
"pdf"
|
|
150543
|
+
].includes(file.previewKind ?? "");
|
|
150544
|
+
}
|
|
150545
|
+
function canPreviewFile(file) {
|
|
150546
|
+
return canPreviewInline(file) || canPreviewRemote(file);
|
|
150547
|
+
}
|
|
150548
|
+
function isPreviewOnlyFile(file) {
|
|
150549
|
+
return isFileEntry(file) && [
|
|
150550
|
+
"image",
|
|
150551
|
+
"audio",
|
|
150552
|
+
"video",
|
|
150553
|
+
"pdf"
|
|
150554
|
+
].includes(file.previewKind ?? "");
|
|
150555
|
+
}
|
|
150556
|
+
function resolveDefaultMode(file, inStaticMode) {
|
|
150557
|
+
if (!file) return "read";
|
|
150558
|
+
if (!inStaticMode && isPreviewOnlyFile(file)) return "preview";
|
|
150559
|
+
return "read";
|
|
150560
|
+
}
|
|
150561
|
+
function clampPreviewHeight(viewportHeight) {
|
|
150562
|
+
if (viewportHeight == null) return 480;
|
|
150563
|
+
return Math.max(320, Math.min(viewportHeight - 112, 920));
|
|
150564
|
+
}
|
|
150565
|
+
function resolveRemotePreviewFrameStyle(frameHeight) {
|
|
150566
|
+
if (frameHeight == null) return void 0;
|
|
150567
|
+
return {
|
|
150568
|
+
minHeight: "min(320px, 100%)",
|
|
150569
|
+
height: "100%",
|
|
150570
|
+
maxHeight: `${frameHeight}px`
|
|
150571
|
+
};
|
|
150572
|
+
}
|
|
150573
|
+
function canSaveDraft(file, hasDirtyDraft, savingPath) {
|
|
150574
|
+
return !!file && hasDirtyDraft && savingPath !== file.path;
|
|
150575
|
+
}
|
|
150576
|
+
function appendPreviewTheme(url, isDarkMode) {
|
|
150577
|
+
const nextUrl = new URL(url, window.location.href);
|
|
150578
|
+
nextUrl.searchParams.set("theme", isDarkMode ? "dark" : "light");
|
|
150579
|
+
return nextUrl.toString();
|
|
150580
|
+
}
|
|
150581
|
+
function resolvePreviewFrameUrl(preview, isDarkMode) {
|
|
150582
|
+
return preview.previewKind === "html" ? preview.urlPath : appendPreviewTheme(preview.urlPath, isDarkMode);
|
|
150583
|
+
}
|
|
150584
|
+
function triggerDownload(url, fileName) {
|
|
150585
|
+
const anchor = document.createElement("a");
|
|
150586
|
+
anchor.href = url;
|
|
150587
|
+
anchor.download = fileName;
|
|
150588
|
+
anchor.rel = "noreferrer noopener";
|
|
150589
|
+
anchor.click();
|
|
150590
|
+
}
|
|
150591
|
+
async function sharePreview(input) {
|
|
150592
|
+
if (navigator.share) {
|
|
150593
|
+
await navigator.share({
|
|
150594
|
+
title: input.title,
|
|
150595
|
+
url: input.url
|
|
150596
|
+
});
|
|
150597
|
+
return true;
|
|
150598
|
+
}
|
|
150599
|
+
await navigator.clipboard.writeText(input.url);
|
|
150600
|
+
return false;
|
|
150601
|
+
}
|
|
150602
|
+
function PreviewPane({ file, preview, loading, error, className = "", frameHeight, isDarkMode }) {
|
|
150603
|
+
if (file.previewKind === "markdown") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150604
|
+
className: `min-h-0 h-full flex-1 overflow-hidden ${className}`,
|
|
150605
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MarkdownViewer, {
|
|
150606
|
+
markdown: file.content ?? "",
|
|
150607
|
+
path: file.path,
|
|
150608
|
+
className: "h-full"
|
|
150609
|
+
})
|
|
150610
|
+
});
|
|
150611
|
+
if (loading) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
150612
|
+
className: "text-muted-foreground flex h-full items-center justify-center gap-2 text-sm",
|
|
150613
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoaderCircle, { className: "h-4 w-4 animate-spin" }), "Preparing preview..."]
|
|
150614
|
+
});
|
|
150615
|
+
if (error) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150616
|
+
className: "text-destructive flex h-full items-center justify-center px-4 text-sm",
|
|
150617
|
+
children: error
|
|
150618
|
+
});
|
|
150619
|
+
if (!preview) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150620
|
+
className: "text-muted-foreground flex h-full items-center justify-center px-4 text-sm",
|
|
150621
|
+
children: "Preview unavailable."
|
|
150622
|
+
});
|
|
150623
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150624
|
+
className: `bg-background min-h-0 h-full overflow-hidden ${className}`,
|
|
150625
|
+
style: resolveRemotePreviewFrameStyle(frameHeight),
|
|
150626
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("iframe", {
|
|
150627
|
+
src: resolvePreviewFrameUrl(preview, isDarkMode),
|
|
150628
|
+
title: `Preview ${file.path}`,
|
|
150629
|
+
className: "block h-full w-full border-0"
|
|
150630
|
+
}, `${resolvePreviewFrameUrl(preview, isDarkMode)}:${isDarkMode ? "dark" : "light"}`)
|
|
150631
|
+
});
|
|
150632
|
+
}
|
|
150633
|
+
function FolderEditorViewer({ changeId, archived = false, files: providedFiles }) {
|
|
150634
|
+
const inStaticMode = isStaticMode();
|
|
150635
|
+
const isDarkMode = useDarkMode();
|
|
150636
|
+
const { data: files, isLoading, error } = archived ? useArchiveFilesSubscription(changeId) : useChangeFilesSubscription(changeId);
|
|
150637
|
+
const [selectedPath, setSelectedPath] = (0, import_react.useState)(null);
|
|
150638
|
+
const [viewportNode, setViewportNode] = (0, import_react.useState)(null);
|
|
150639
|
+
const [mode, setMode] = (0, import_react.useState)("read");
|
|
150640
|
+
const [draftContent, setDraftContent] = (0, import_react.useState)({});
|
|
150641
|
+
const [savingPath, setSavingPath] = (0, import_react.useState)(null);
|
|
150642
|
+
const [previewByPath, setPreviewByPath] = (0, import_react.useState)({});
|
|
150643
|
+
const [previewLoadingPath, setPreviewLoadingPath] = (0, import_react.useState)(null);
|
|
150644
|
+
const [previewErrorByPath, setPreviewErrorByPath] = (0, import_react.useState)({});
|
|
150645
|
+
const [previewMaximized, setPreviewMaximized] = (0, import_react.useState)(false);
|
|
150646
|
+
const [shareFeedback, setShareFeedback] = (0, import_react.useState)(null);
|
|
150647
|
+
const viewportHeight = useViewportConstrainedHeight({
|
|
150648
|
+
target: viewportNode,
|
|
150649
|
+
enabled: viewportNode !== null
|
|
150650
|
+
});
|
|
150651
|
+
const sortedEntries = (0, import_react.useMemo)(() => {
|
|
150652
|
+
if (providedFiles) return [...providedFiles];
|
|
150653
|
+
if (!files) return [];
|
|
150654
|
+
return [...files];
|
|
150655
|
+
}, [files, providedFiles]);
|
|
150656
|
+
const activeFile = (0, import_react.useMemo)(() => {
|
|
150657
|
+
if (!selectedPath) return null;
|
|
150658
|
+
const entry = sortedEntries.find((item) => item.path === selectedPath);
|
|
150659
|
+
return isFileEntry(entry) ? entry : null;
|
|
150660
|
+
}, [selectedPath, sortedEntries]);
|
|
150661
|
+
const activeDraft = activeFile ? draftContent[activeFile.path] ?? activeFile.content ?? "" : "";
|
|
150662
|
+
const editEnabled = !inStaticMode && isTextLikeFile(activeFile) && !isPreviewOnlyFile(activeFile);
|
|
150663
|
+
const readEnabled = !isPreviewOnlyFile(activeFile);
|
|
150664
|
+
const previewEnabled = !inStaticMode && canPreviewFile(activeFile);
|
|
150665
|
+
const hasDirtyDraft = !!activeFile && isTextLikeFile(activeFile) && activeDraft !== (activeFile.content ?? "");
|
|
150666
|
+
const remotePreviewHeight = clampPreviewHeight(viewportHeight);
|
|
150667
|
+
(0, import_react.useEffect)(() => {
|
|
150668
|
+
if (!sortedEntries.length) {
|
|
150669
|
+
setSelectedPath(null);
|
|
150670
|
+
return;
|
|
150671
|
+
}
|
|
150672
|
+
if (!sortedEntries.find((entry) => entry.path === selectedPath && entry.type === "file")) setSelectedPath(sortedEntries.find((entry) => entry.type === "file")?.path ?? null);
|
|
150673
|
+
}, [sortedEntries, selectedPath]);
|
|
150674
|
+
(0, import_react.useEffect)(() => {
|
|
150675
|
+
const nextDefaultMode = resolveDefaultMode(activeFile, inStaticMode);
|
|
150676
|
+
if (mode === "edit" && !editEnabled) {
|
|
150677
|
+
setMode(nextDefaultMode);
|
|
150678
|
+
return;
|
|
150679
|
+
}
|
|
150680
|
+
if (mode === "preview" && !previewEnabled) {
|
|
150681
|
+
setMode(nextDefaultMode);
|
|
150682
|
+
return;
|
|
150683
|
+
}
|
|
150684
|
+
if (mode === "read" && !readEnabled) setMode(nextDefaultMode);
|
|
150685
|
+
}, [
|
|
150686
|
+
activeFile,
|
|
150687
|
+
editEnabled,
|
|
150688
|
+
inStaticMode,
|
|
150689
|
+
mode,
|
|
150690
|
+
previewEnabled,
|
|
150691
|
+
readEnabled
|
|
150692
|
+
]);
|
|
150693
|
+
(0, import_react.useEffect)(() => {
|
|
150694
|
+
const nextDefaultMode = resolveDefaultMode(activeFile, inStaticMode);
|
|
150695
|
+
setMode((currentMode) => {
|
|
150696
|
+
if (currentMode === nextDefaultMode) return currentMode;
|
|
150697
|
+
if (currentMode === "edit" && editEnabled) return currentMode;
|
|
150698
|
+
if (currentMode === "preview" && previewEnabled) return currentMode;
|
|
150699
|
+
if (currentMode === "read" && readEnabled) return currentMode;
|
|
150700
|
+
return nextDefaultMode;
|
|
150701
|
+
});
|
|
150702
|
+
}, [
|
|
150703
|
+
activeFile?.path,
|
|
150704
|
+
editEnabled,
|
|
150705
|
+
inStaticMode,
|
|
150706
|
+
previewEnabled,
|
|
150707
|
+
readEnabled
|
|
150708
|
+
]);
|
|
150709
|
+
(0, import_react.useEffect)(() => {
|
|
150710
|
+
if (!canPreviewRemote(activeFile) || mode !== "preview") setPreviewMaximized(false);
|
|
150711
|
+
}, [activeFile, mode]);
|
|
150712
|
+
(0, import_react.useEffect)(() => {
|
|
150713
|
+
if (shareFeedback === null) return;
|
|
150714
|
+
const timer = window.setTimeout(() => {
|
|
150715
|
+
setShareFeedback(null);
|
|
150716
|
+
}, 1800);
|
|
150717
|
+
return () => {
|
|
150718
|
+
window.clearTimeout(timer);
|
|
150719
|
+
};
|
|
150720
|
+
}, [shareFeedback]);
|
|
150721
|
+
(0, import_react.useEffect)(() => {
|
|
150722
|
+
if (!activeFile || mode !== "preview" || !canPreviewRemote(activeFile)) return;
|
|
150723
|
+
if (previewByPath[activeFile.path] !== void 0) return;
|
|
150724
|
+
let cancelled = false;
|
|
150725
|
+
setPreviewLoadingPath(activeFile.path);
|
|
150726
|
+
setPreviewErrorByPath((current) => ({
|
|
150727
|
+
...current,
|
|
150728
|
+
[activeFile.path]: null
|
|
150729
|
+
}));
|
|
150730
|
+
prepareEntityFilePreview({
|
|
150731
|
+
changeId,
|
|
150732
|
+
archived,
|
|
150733
|
+
path: activeFile.path
|
|
150734
|
+
}).then((preview) => {
|
|
150735
|
+
if (cancelled) return;
|
|
150736
|
+
setPreviewByPath((current) => ({
|
|
150737
|
+
...current,
|
|
150738
|
+
[activeFile.path]: preview
|
|
150739
|
+
}));
|
|
150740
|
+
}).catch((cause) => {
|
|
150741
|
+
if (cancelled) return;
|
|
150742
|
+
setPreviewErrorByPath((current) => ({
|
|
150743
|
+
...current,
|
|
150744
|
+
[activeFile.path]: cause instanceof Error ? cause.message : String(cause)
|
|
150745
|
+
}));
|
|
150746
|
+
setPreviewByPath((current) => ({
|
|
150747
|
+
...current,
|
|
150748
|
+
[activeFile.path]: null
|
|
150749
|
+
}));
|
|
150750
|
+
}).finally(() => {
|
|
150751
|
+
if (cancelled) return;
|
|
150752
|
+
setPreviewLoadingPath((current) => current === activeFile.path ? null : current);
|
|
150753
|
+
});
|
|
150754
|
+
return () => {
|
|
150755
|
+
cancelled = true;
|
|
150756
|
+
};
|
|
150757
|
+
}, [
|
|
150758
|
+
activeFile,
|
|
150759
|
+
archived,
|
|
150760
|
+
changeId,
|
|
150761
|
+
mode,
|
|
150762
|
+
previewByPath
|
|
150763
|
+
]);
|
|
150764
|
+
if (!providedFiles && isLoading) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150765
|
+
className: "bg-muted/20 flex h-[400px] items-center justify-center",
|
|
150766
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoaderCircle, { className: "text-muted-foreground h-6 w-6 animate-spin" })
|
|
150767
|
+
});
|
|
150768
|
+
if (error) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
150769
|
+
className: "bg-destructive/10 text-destructive p-4 text-sm",
|
|
150770
|
+
children: ["Failed to load files: ", error.message]
|
|
150771
|
+
});
|
|
150772
|
+
const preview = activeFile ? previewByPath[activeFile.path] ?? null : null;
|
|
150773
|
+
const previewError = activeFile ? previewErrorByPath[activeFile.path] ?? null : null;
|
|
150774
|
+
const previewDownloadUrl = activeFile && preview ? activeFile.previewKind === "html" ? preview.entryPathname : preview.resourcePathname : null;
|
|
150775
|
+
const previewShareUrl = activeFile && preview && canPreviewRemote(activeFile) ? resolvePreviewFrameUrl(preview, isDarkMode) : null;
|
|
150776
|
+
const saveActiveDraft = () => {
|
|
150777
|
+
if (!isTextLikeFile(activeFile)) return;
|
|
150778
|
+
if (!canSaveDraft(activeFile, hasDirtyDraft, savingPath)) return;
|
|
150779
|
+
setSavingPath(activeFile.path);
|
|
150780
|
+
writeEntityFile({
|
|
150781
|
+
changeId,
|
|
150782
|
+
archived,
|
|
150783
|
+
path: activeFile.path,
|
|
150784
|
+
content: activeDraft
|
|
150785
|
+
}).finally(() => {
|
|
150786
|
+
setSavingPath((current) => current === activeFile.path ? null : current);
|
|
150787
|
+
});
|
|
150788
|
+
};
|
|
150789
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
150790
|
+
"data-tab-scroll-root": "true",
|
|
150791
|
+
className: "scrollbar-thin scrollbar-track-transparent min-h-0 flex-1 overflow-auto",
|
|
150792
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150793
|
+
className: "pr-1",
|
|
150794
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150795
|
+
ref: setViewportNode,
|
|
150796
|
+
className: "flex min-h-0 flex-col",
|
|
150797
|
+
style: viewportHeight != null ? { height: `${viewportHeight}px` } : void 0,
|
|
150798
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FileExplorer, {
|
|
150799
|
+
entries: sortedEntries,
|
|
150800
|
+
selectedPath,
|
|
150801
|
+
onSelect: setSelectedPath,
|
|
150802
|
+
emptyState: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "No files found for this change." }),
|
|
150803
|
+
renderEditor: (currentFile) => {
|
|
150804
|
+
if (!isFileEntry(currentFile)) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150805
|
+
className: "text-muted-foreground flex h-full items-center justify-center",
|
|
150806
|
+
children: "Select a file to view"
|
|
150807
|
+
});
|
|
150808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
150809
|
+
className: "flex min-h-0 flex-1 flex-col",
|
|
150810
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
150811
|
+
className: "border-border/60 bg-muted/20 flex flex-wrap items-center justify-between gap-3 border-b px-3 py-2",
|
|
150812
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ButtonGroup, {
|
|
150813
|
+
value: mode,
|
|
150814
|
+
onChange: setMode,
|
|
150815
|
+
options: [
|
|
150816
|
+
{
|
|
150817
|
+
value: "read",
|
|
150818
|
+
label: "Read",
|
|
150819
|
+
disabled: !readEnabled
|
|
150820
|
+
},
|
|
150821
|
+
{
|
|
150822
|
+
value: "edit",
|
|
150823
|
+
label: "Edit",
|
|
150824
|
+
disabled: !editEnabled
|
|
150825
|
+
},
|
|
150826
|
+
{
|
|
150827
|
+
value: "preview",
|
|
150828
|
+
label: "Preview",
|
|
150829
|
+
disabled: !previewEnabled
|
|
150830
|
+
}
|
|
150831
|
+
]
|
|
150832
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150833
|
+
className: "flex items-center gap-2",
|
|
150834
|
+
children: mode === "edit" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
|
|
150835
|
+
variant: "secondary",
|
|
150836
|
+
size: "sm",
|
|
150837
|
+
disabled: !hasDirtyDraft,
|
|
150838
|
+
onClick: () => {
|
|
150839
|
+
if (!isTextLikeFile(activeFile)) return;
|
|
150840
|
+
setDraftContent((current) => ({
|
|
150841
|
+
...current,
|
|
150842
|
+
[activeFile.path]: activeFile.content ?? ""
|
|
150843
|
+
}));
|
|
150844
|
+
},
|
|
150845
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Undo2, { className: "h-3.5 w-3.5" }), "Revert"]
|
|
150846
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
|
|
150847
|
+
variant: "primary",
|
|
150848
|
+
size: "sm",
|
|
150849
|
+
disabled: !hasDirtyDraft || savingPath === currentFile.path,
|
|
150850
|
+
onClick: saveActiveDraft,
|
|
150851
|
+
children: [savingPath === currentFile.path ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoaderCircle, { className: "h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Save, { className: "h-3.5 w-3.5" }), "Save"]
|
|
150852
|
+
})] }) : mode === "preview" && canPreviewRemote(activeFile) ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
150853
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
|
|
150854
|
+
variant: "secondary",
|
|
150855
|
+
size: "sm",
|
|
150856
|
+
onClick: () => {
|
|
150857
|
+
setPreviewByPath((current) => {
|
|
150858
|
+
const next = { ...current };
|
|
150859
|
+
delete next[currentFile.path];
|
|
150860
|
+
return next;
|
|
150861
|
+
});
|
|
150862
|
+
},
|
|
150863
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(RefreshCw, { className: "h-3.5 w-3.5" }), "Refresh"]
|
|
150864
|
+
}),
|
|
150865
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
|
|
150866
|
+
variant: "secondary",
|
|
150867
|
+
size: "sm",
|
|
150868
|
+
onClick: () => {
|
|
150869
|
+
setPreviewMaximized((current) => !current);
|
|
150870
|
+
},
|
|
150871
|
+
children: [previewMaximized ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Minimize, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Expand, { className: "h-3.5 w-3.5" }), previewMaximized ? "Exit Maximize" : "Maximize"]
|
|
150872
|
+
}),
|
|
150873
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
|
|
150874
|
+
variant: "secondary",
|
|
150875
|
+
size: "sm",
|
|
150876
|
+
disabled: !previewDownloadUrl,
|
|
150877
|
+
onClick: () => {
|
|
150878
|
+
if (!previewDownloadUrl) return;
|
|
150879
|
+
triggerDownload(previewDownloadUrl, currentFile.path.split("/").pop() ?? "preview");
|
|
150880
|
+
},
|
|
150881
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Download, { className: "h-3.5 w-3.5" }), "Download"]
|
|
150882
|
+
}),
|
|
150883
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
|
|
150884
|
+
variant: "secondary",
|
|
150885
|
+
size: "sm",
|
|
150886
|
+
disabled: !previewShareUrl,
|
|
150887
|
+
onClick: () => {
|
|
150888
|
+
if (!previewShareUrl) return;
|
|
150889
|
+
sharePreview({
|
|
150890
|
+
url: previewShareUrl,
|
|
150891
|
+
title: currentFile.path
|
|
150892
|
+
}).then((shared) => {
|
|
150893
|
+
setShareFeedback(shared ? "shared" : "copied");
|
|
150894
|
+
});
|
|
150895
|
+
},
|
|
150896
|
+
children: [shareFeedback === "shared" || shareFeedback === "copied" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Check, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Share2, { className: "h-3.5 w-3.5" }), shareFeedback === "shared" ? "Shared" : shareFeedback === "copied" ? "Copied" : "Share"]
|
|
150897
|
+
})
|
|
150898
|
+
] }) : null
|
|
150899
|
+
})]
|
|
150900
|
+
}), !readEnabled && !editEnabled && !previewEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150901
|
+
className: "text-muted-foreground flex min-h-0 flex-1 items-center justify-center px-4 text-sm",
|
|
150902
|
+
children: "Preview for this file type is only available in live mode."
|
|
150903
|
+
}) : mode === "preview" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150904
|
+
className: "min-h-0 flex-1 overflow-hidden",
|
|
150905
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PreviewPane, {
|
|
150906
|
+
file: currentFile,
|
|
150907
|
+
preview,
|
|
150908
|
+
loading: previewLoadingPath === currentFile.path,
|
|
150909
|
+
error: previewError,
|
|
150910
|
+
frameHeight: canPreviewRemote(currentFile) ? remotePreviewHeight : void 0,
|
|
150911
|
+
isDarkMode
|
|
150912
|
+
})
|
|
150913
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FileExplorerCodeEditor, {
|
|
150914
|
+
file: normalizeExplorerFile(currentFile),
|
|
150915
|
+
value: mode === "edit" ? activeDraft : currentFile.content ?? "",
|
|
150916
|
+
readOnly: mode !== "edit",
|
|
150917
|
+
editorMinHeight: "0px",
|
|
150918
|
+
onSaveShortcut: mode === "edit" ? saveActiveDraft : void 0,
|
|
150919
|
+
onChange: mode === "edit" ? (value) => {
|
|
150920
|
+
setDraftContent((current) => ({
|
|
150921
|
+
...current,
|
|
150922
|
+
[currentFile.path]: value
|
|
150923
|
+
}));
|
|
150924
|
+
} : void 0
|
|
150925
|
+
})]
|
|
150926
|
+
});
|
|
150927
|
+
}
|
|
150928
|
+
})
|
|
150929
|
+
})
|
|
150930
|
+
}), activeFile && canPreviewRemote(activeFile) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dialog, {
|
|
150931
|
+
open: previewMaximized,
|
|
150932
|
+
title: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
150933
|
+
className: "text-sm font-medium",
|
|
150934
|
+
children: activeFile.path
|
|
150935
|
+
}),
|
|
150936
|
+
onClose: () => setPreviewMaximized(false),
|
|
150937
|
+
className: "max-w-6xl rounded-none border-0 shadow-none [--openspec-dialog-radius:0px]",
|
|
150938
|
+
bodyClassName: "p-0",
|
|
150939
|
+
contentClassName: "px-3 py-3",
|
|
150940
|
+
maxHeight: "96vh",
|
|
150941
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150942
|
+
className: "flex h-[80vh] min-h-[420px] max-h-[88vh] min-w-0 flex-col overflow-hidden",
|
|
150943
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PreviewPane, {
|
|
150944
|
+
file: activeFile,
|
|
150945
|
+
preview,
|
|
150946
|
+
loading: previewLoadingPath === activeFile.path,
|
|
150947
|
+
error: previewError,
|
|
150948
|
+
className: "rounded-none",
|
|
150949
|
+
isDarkMode
|
|
150950
|
+
})
|
|
150951
|
+
})
|
|
150952
|
+
})]
|
|
150953
|
+
});
|
|
150954
|
+
}
|
|
150955
|
+
//#endregion
|
|
150956
|
+
//#region src/components/opsx/artifact-document-shell.tsx
|
|
150957
|
+
var statusConfig = {
|
|
150958
|
+
done: {
|
|
150959
|
+
label: "Done",
|
|
150960
|
+
className: "text-emerald-500",
|
|
150961
|
+
icon: CircleCheck
|
|
150962
|
+
},
|
|
150963
|
+
ready: {
|
|
150964
|
+
label: "Ready",
|
|
150965
|
+
className: "text-sky-500",
|
|
150966
|
+
icon: Circle$1
|
|
150967
|
+
},
|
|
150968
|
+
blocked: {
|
|
150969
|
+
label: "Blocked",
|
|
150970
|
+
className: "text-amber-500",
|
|
150971
|
+
icon: TriangleAlert
|
|
150972
|
+
}
|
|
150973
|
+
};
|
|
150974
|
+
function OpsxArtifactStatusBadge({ status }) {
|
|
150975
|
+
const config = statusConfig[status];
|
|
150976
|
+
const StatusIcon = config.icon;
|
|
150977
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
150978
|
+
className: `inline-flex shrink-0 items-center gap-1.5 text-xs font-medium ${config.className}`,
|
|
150979
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, { className: "h-4 w-4" }), config.label]
|
|
150980
|
+
});
|
|
150981
|
+
}
|
|
150982
|
+
function OpsxArtifactTabStatusIcon({ status }) {
|
|
150983
|
+
const StatusIcon = statusConfig[status].icon;
|
|
150984
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, { className: `h-3.5 w-3.5 ${statusConfig[status].className}` });
|
|
150985
|
+
}
|
|
150986
|
+
function OpsxArtifactDocumentShell({ id, path, status, missingDeps, meta, children }) {
|
|
150987
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
150988
|
+
className: "border-border bg-muted/25 mb-5 rounded-md border px-4 py-3",
|
|
150989
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
150990
|
+
className: "flex flex-wrap items-start justify-between gap-3",
|
|
150991
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
150992
|
+
className: "min-w-0 space-y-1",
|
|
150993
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150994
|
+
className: "font-medium",
|
|
150995
|
+
children: id
|
|
150996
|
+
}), path ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
150997
|
+
className: "text-muted-foreground break-all text-xs",
|
|
150998
|
+
children: path
|
|
150999
|
+
}) : null]
|
|
151000
|
+
}), status ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OpsxArtifactStatusBadge, { status }) : meta]
|
|
151001
|
+
}), status === "blocked" && missingDeps?.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
151002
|
+
className: "mt-3 flex items-start gap-2 rounded-md border border-amber-500/50 bg-amber-500/10 px-3 py-2 text-xs text-amber-700",
|
|
151003
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
151004
|
+
className: "font-medium",
|
|
151005
|
+
children: "Blocked by missing dependencies"
|
|
151006
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
151007
|
+
className: "mt-1",
|
|
151008
|
+
children: missingDeps.join(", ")
|
|
151009
|
+
})] })]
|
|
151010
|
+
}) : null]
|
|
151011
|
+
}), children] });
|
|
151012
|
+
}
|
|
151013
|
+
//#endregion
|
|
150426
151014
|
//#region src/components/opsx/opsx-markdown-files-viewer.tsx
|
|
150427
151015
|
function getMarkdownFiles(files) {
|
|
150428
151016
|
return files.filter((file) => file.type === "file" && file.content !== void 0 && file.path.endsWith(".md"));
|
|
@@ -151134,28 +151722,6 @@ function ChangeView() {
|
|
|
151134
151722
|
});
|
|
151135
151723
|
}
|
|
151136
151724
|
//#endregion
|
|
151137
|
-
//#region src/components/button-group.tsx
|
|
151138
|
-
/**
|
|
151139
|
-
* Compact segmented buttons with single-select behavior.
|
|
151140
|
-
*/
|
|
151141
|
-
function ButtonGroup({ value, options, onChange, className = "", tone = "default" }) {
|
|
151142
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
151143
|
-
className: `inline-flex w-fit max-w-full shrink-0 self-start overflow-hidden rounded-md border ${tone === "terminal" ? "border-terminal-foreground/25 bg-terminal/70 text-terminal-foreground" : "border-border bg-card"} ${className}`,
|
|
151144
|
-
children: options.map((option, index) => {
|
|
151145
|
-
const active = option.value === value;
|
|
151146
|
-
const stateClassName = active ? "bg-primary text-primary-foreground" : tone === "terminal" ? "text-terminal-foreground/72 hover:bg-terminal-foreground/10 hover:text-terminal-foreground" : "text-muted-foreground hover:bg-muted/60 hover:text-foreground";
|
|
151147
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
151148
|
-
type: "button",
|
|
151149
|
-
disabled: option.disabled,
|
|
151150
|
-
onClick: () => onChange(option.value),
|
|
151151
|
-
"aria-pressed": active,
|
|
151152
|
-
className: `inline-flex items-center justify-center gap-1.5 px-3 py-1.5 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${index > 0 ? tone === "terminal" ? "border-terminal-foreground/20 border-l" : "border-border border-l" : ""} ${stateClassName}`,
|
|
151153
|
-
children: option.label
|
|
151154
|
-
}, option.value);
|
|
151155
|
-
})
|
|
151156
|
-
});
|
|
151157
|
-
}
|
|
151158
|
-
//#endregion
|
|
151159
151725
|
//#region src/components/cli-terminal.tsx
|
|
151160
151726
|
/**
|
|
151161
151727
|
* Pure terminal renderer. Accepts ANSI-aware ASCII lines or raw ReactNode lines.
|