koboyo 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +425 -2
- package/assets/editor/assets/BalsamiqSansNeue-Bold.cyrillic-CVBrBZhM.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Bold.latin-BJb5x83P.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Bold.latin-ext-Csk71cK0.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-BoldItalic.cyrillic-CFuY28au.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-BoldItalic.latin-WebofK4-.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-BoldItalic.latin-ext-BqWl6v1C.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Italic.cyrillic-CUdF-G4x.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Italic.latin-CyILDe8W.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Italic.latin-ext-Bg5wvO9o.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Regular.cyrillic-D4ZtnIgi.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Regular.latin-3K5WlOA9.woff2 +0 -0
- package/assets/editor/assets/BalsamiqSansNeue-Regular.latin-ext-Y3uJNqwv.woff2 +0 -0
- package/assets/editor/assets/DialogDescription-ZtZCUsfy.js +1 -0
- package/assets/editor/assets/DialogRoot-mHGRFW9m.js +1 -0
- package/assets/editor/assets/DialogTitle-CFhr-gP9.js +1 -0
- package/assets/editor/assets/FloatingPortalLite-Bf0q6fmL.js +1 -0
- package/assets/editor/assets/IconAlertTriangle-CxPhYpe-.js +1 -0
- package/assets/editor/assets/IconArrowBackUp-Brd2WpCh.js +1 -0
- package/assets/editor/assets/IconArrowLeft-DFk3Krim.js +1 -0
- package/assets/editor/assets/IconChevronLeft-BR0iwdRI.js +1 -0
- package/assets/editor/assets/IconChevronRight-DBDnxPYT.js +1 -0
- package/assets/editor/assets/IconCode-hd05zxU4.js +1 -0
- package/assets/editor/assets/IconEraser-DlZQe3-r.js +1 -0
- package/assets/editor/assets/IconFocusCentered-C5PcDeR0.js +1 -0
- package/assets/editor/assets/IconHelp-DKNacRqS.js +2 -0
- package/assets/editor/assets/IconLoader2-BQaF1LKo.js +1 -0
- package/assets/editor/assets/IconMinus-y4ejub-s.js +1 -0
- package/assets/editor/assets/IconMoodSmile-Bic_fw54.js +1 -0
- package/assets/editor/assets/IconNote-CSELvWzx.js +1 -0
- package/assets/editor/assets/IconPencil-C5Y-Y4dC.js +1 -0
- package/assets/editor/assets/IconPhoto-CR36IK-b.js +1 -0
- package/assets/editor/assets/IconPlayerPlayFilled-D4OODBX7.js +1 -0
- package/assets/editor/assets/IconPlayerStopFilled-BUbX6ZO5.js +1 -0
- package/assets/editor/assets/IconPlus-BbmieIBT.js +1 -0
- package/assets/editor/assets/IconPresentation-DCrY3PKL.js +1 -0
- package/assets/editor/assets/IconSearch-C1K0_Pq_.js +1 -0
- package/assets/editor/assets/IconSparkles-WDcg8BA9.js +1 -0
- package/assets/editor/assets/IconTrash-DbN_RxB7.js +1 -0
- package/assets/editor/assets/IconUsers-Bwnyj4mm.js +1 -0
- package/assets/editor/assets/IconX-AlbPkO_g.js +1 -0
- package/assets/editor/assets/MenuSubmenuTrigger-CpN67g09.js +1 -0
- package/assets/editor/assets/PopoverPopup-BqGWd_uB.js +1 -0
- package/assets/editor/assets/asset-glyph-B3c--Mx2.js +1 -0
- package/assets/editor/assets/billing-C-BNGM3Z.js +1 -0
- package/assets/editor/assets/blob-CTPsKWYv.js +1 -0
- package/assets/editor/assets/build-pips-CIaHaEPB.js +1 -0
- package/assets/editor/assets/build-visibility-E1mHeDCW.js +1 -0
- package/assets/editor/assets/builders-DbF28yId.js +1 -0
- package/assets/editor/assets/catalog-module-DAuqzZdT.js +1 -0
- package/assets/editor/assets/caveat-cyrillic-400-normal-9cDH9rLW.woff2 +0 -0
- package/assets/editor/assets/caveat-cyrillic-700-normal-BIyejhEL.woff2 +0 -0
- package/assets/editor/assets/caveat-cyrillic-ext-400-normal-3iEGd-c5.woff2 +0 -0
- package/assets/editor/assets/caveat-cyrillic-ext-700-normal-CrK2-ngJ.woff2 +0 -0
- package/assets/editor/assets/caveat-latin-400-normal-D6LQsQ_v.woff2 +0 -0
- package/assets/editor/assets/caveat-latin-700-normal-D8_1Nw6V.woff2 +0 -0
- package/assets/editor/assets/caveat-latin-ext-400-normal-D7hBUiug.woff2 +0 -0
- package/assets/editor/assets/caveat-latin-ext-700-normal-DFbRgDry.woff2 +0 -0
- package/assets/editor/assets/chart-Z4HQx-0h.js +7 -0
- package/assets/editor/assets/chrome-C2RCq3SI.js +1 -0
- package/assets/editor/assets/chrome-layout-B8YmHznO.js +1 -0
- package/assets/editor/assets/clipboard-CO7YHov7.js +1 -0
- package/assets/editor/assets/code-panel-BfsykjSz.js +43 -0
- package/assets/editor/assets/command-palette-BjFnQHnz.js +1 -0
- package/assets/editor/assets/config-a_lz-57R.js +1 -0
- package/assets/editor/assets/connector-labels-vVnYQJRz.js +2 -0
- package/assets/editor/assets/copy-image-dialog-CCY_6fM4.js +1 -0
- package/assets/editor/assets/core-CBnmD9hT.js +1 -0
- package/assets/editor/assets/createReactComponent-9UsI5fmM.js +1 -0
- package/assets/editor/assets/diagram-fingerprint-CsqZK4xZ.js +3 -0
- package/assets/editor/assets/dialog-B32krrce.js +1 -0
- package/assets/editor/assets/dom-PAoZruqo.js +1 -0
- package/assets/editor/assets/edit-BJ_kibk8.js +1 -0
- package/assets/editor/assets/editable-target-BTLnvKNi.js +1 -0
- package/assets/editor/assets/editor-B0tARd79.js +1 -0
- package/assets/editor/assets/elk-api-CdZ15eos.js +1 -0
- package/assets/editor/assets/elk-api-DnfklSaw.js +1 -0
- package/assets/editor/assets/elk-in-process-absent-CzI8UVp-.js +1 -0
- package/assets/editor/assets/elk-worker-loader-CC-I9MmI.js +3 -0
- package/assets/editor/assets/elk-worker.min-SDxTC6NI.js +1 -0
- package/assets/editor/assets/elk-worker.min-jQXdWJy_.js +22 -0
- package/assets/editor/assets/excalidraw-BwgRIDi9.js +1 -0
- package/assets/editor/assets/export-ChP0k5F5.js +2 -0
- package/assets/editor/assets/export-DEFKKRRi.js +6 -0
- package/assets/editor/assets/export-dialog-DPg1uzX5.js +1 -0
- package/assets/editor/assets/export-options-CJwykdP5.js +1 -0
- package/assets/editor/assets/flow-layer-BC35drcK.js +1 -0
- package/assets/editor/assets/flow-panel-D_K9wgZi.js +1 -0
- package/assets/editor/assets/flow-stage-fiF5Nggn.js +1 -0
- package/assets/editor/assets/flow-start-ccYJ2KB9.js +1 -0
- package/assets/editor/assets/flows-GGbkNqs8.js +3 -0
- package/assets/editor/assets/frames-CRP8oPP8.js +1 -0
- package/assets/editor/assets/html2canvas-P2PH8bad.js +5 -0
- package/assets/editor/assets/icon-catalog-CbUlEKtK.js +1 -0
- package/assets/editor/assets/icon-catalog-CpBWFmwP.js +1 -0
- package/assets/editor/assets/icon-nodes-B36Mt8N0.json +47589 -0
- package/assets/editor/assets/icon-picker-NboB5Fvv.js +1 -0
- package/assets/editor/assets/icon-sources-CZI1h18s.js +1 -0
- package/assets/editor/assets/icon-tags-Bw7m3Jke.js +1 -0
- package/assets/editor/assets/icons-DzW1j-r3.js +2 -0
- package/assets/editor/assets/image-library-Bb6bV6eK.js +1 -0
- package/assets/editor/assets/index-CC2h28V_.css +1 -0
- package/assets/editor/assets/index-DfNbwHl_.js +24 -0
- package/assets/editor/assets/index.es-CZfJEQMh.js +5 -0
- package/assets/editor/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
- package/assets/editor/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
- package/assets/editor/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/assets/editor/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2 +0 -0
- package/assets/editor/assets/jspdf.es.min-CxZaZThI.js +79 -0
- package/assets/editor/assets/jsx-runtime-2Zwg-L3c.js +1 -0
- package/assets/editor/assets/kalam-devanagari-400-normal-Dy6c0U2e.woff2 +0 -0
- package/assets/editor/assets/kalam-devanagari-700-normal-BeU_-hjz.woff2 +0 -0
- package/assets/editor/assets/kalam-latin-400-normal-BthBl_aR.woff2 +0 -0
- package/assets/editor/assets/kalam-latin-700-normal-D2H-9ISU.woff2 +0 -0
- package/assets/editor/assets/kalam-latin-ext-400-normal-DtcdGa4L.woff2 +0 -0
- package/assets/editor/assets/kalam-latin-ext-700-normal-CwgfRD_T.woff2 +0 -0
- package/assets/editor/assets/keys-DrjiT9FL.js +1 -0
- package/assets/editor/assets/layout-offthread-BwetpTFH.js +18 -0
- package/assets/editor/assets/layout.worker-BIE1_z0S.js +27 -0
- package/assets/editor/assets/lazy-module-DkWvu4va.js +1 -0
- package/assets/editor/assets/menu-BPrc8Ara.js +1 -0
- package/assets/editor/assets/nanum-pen-script-0-400-normal-C5HHoB-U.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-10-400-normal-C-VQO-7-.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-100-400-normal-DxNrLNO4.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-101-400-normal-DEUXDl7O.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-102-400-normal-BGP58LEs.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-103-400-normal-C-z2Uhrp.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-104-400-normal-qPnLSXnR.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-105-400-normal-C1d0ZPV0.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-106-400-normal-N_LNZ2PG.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-107-400-normal-DrEk-jhi.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-108-400-normal-CK1_GQt0.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-109-400-normal-BGx35qch.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-11-400-normal-CldjYC4E.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-110-400-normal-Cmz4IIB0.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-111-400-normal-DD1i68y4.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-112-400-normal-DkS1d5Rs.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-113-400-normal-CoR-t3LB.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-114-400-normal-CfW-WpY-.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-115-400-normal-DHqzF8d7.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-116-400-normal-DFpLQ1Ow.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-117-400-normal-BdVw4GMz.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-118-400-normal-CD4hJjSa.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-119-400-normal-BazzWNUR.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-12-400-normal-CVfq18h-.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-13-400-normal-2Svx1U39.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-14-400-normal-DWGO8REe.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-15-400-normal-BS37bEYZ.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-16-400-normal-DPoWM12K.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-17-400-normal-DE1Vgqsb.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-18-400-normal-Bv_R79JG.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-19-400-normal-CuKO8OCv.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-2-400-normal-Bcz-7qrX.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-20-400-normal-DL4VgeZj.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-21-400-normal-CBr5wnAx.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-22-400-normal-C2FSoslO.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-23-400-normal-BKUW0h-M.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-24-400-normal-BLKYdVvr.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-25-400-normal-CVpXJ_UE.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-26-400-normal-DQfaWicL.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-27-400-normal-e0XMMmyW.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-28-400-normal-CzygeL7n.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-29-400-normal-_o7My6i2.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-3-400-normal-DfMknlv_.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-30-400-normal-MFa-goCm.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-31-400-normal-BrUktqWN.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-32-400-normal-CPKw4nqt.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-33-400-normal-B7PeD1_E.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-34-400-normal-Dt18kgPy.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-35-400-normal-EYw-yjCK.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-36-400-normal-D5fUjml8.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-37-400-normal-m6uq6I1Z.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-38-400-normal-B-DItVF0.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-39-400-normal-BdsbeYGg.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-4-400-normal-BJphNoJz.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-40-400-normal-VMX0e5c2.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-41-400-normal-OHgRbeMk.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-42-400-normal-B5JNIfYI.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-43-400-normal-y6yNRxvh.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-44-400-normal-DC3r3uo6.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-45-400-normal-BWcbXS4O.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-46-400-normal-EBAZpXJZ.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-47-400-normal-CNQOhTDn.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-48-400-normal-5tGyxozt.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-49-400-normal-BKISADse.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-5-400-normal-CxF69eCk.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-50-400-normal-DHIdN88U.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-51-400-normal-CcPZaMKQ.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-52-400-normal-M038lTJS.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-53-400-normal-CsLYJDT0.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-54-400-normal-CaoTQqtW.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-55-400-normal-DU8rFuR7.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-56-400-normal-DICnRDDe.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-57-400-normal-6vlHy9lg.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-58-400-normal-DHEMgBnk.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-59-400-normal-DxYZADPu.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-6-400-normal-CM3Rx1wS.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-60-400-normal-722OEvr5.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-61-400-normal-DT8UYUWi.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-62-400-normal-joxxnSgr.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-63-400-normal-Ds3Kd1pl.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-64-400-normal-Y6KAShHy.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-65-400-normal-DnwChVdj.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-7-400-normal-3hPYidSX.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-8-400-normal-DptG2zAO.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-9-400-normal-tIi2MHin.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-93-400-normal-HMDU0mLj.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-94-400-normal-D-SUtgEh.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-97-400-normal-CK3GbDb8.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-99-400-normal-DHkA7RD2.woff2 +0 -0
- package/assets/editor/assets/nanum-pen-script-latin-400-normal-_AdqYBm1.woff2 +0 -0
- package/assets/editor/assets/panel-controls-DYZ7QFT5.js +1 -0
- package/assets/editor/assets/panel-shell-CG2aq4Ia.js +1 -0
- package/assets/editor/assets/plan-jQm1jDpt.js +1 -0
- package/assets/editor/assets/preload-helper-Czpn1I53.js +1 -0
- package/assets/editor/assets/presentation-BavfNtxp.js +1 -0
- package/assets/editor/assets/presenter-keys-DVQcBdy1.js +1 -0
- package/assets/editor/assets/purify.es-ZPrpXrUc.js +3 -0
- package/assets/editor/assets/reflow-Cv75wPSh.js +1 -0
- package/assets/editor/assets/registry-DCgwH8wI.js +1 -0
- package/assets/editor/assets/renderer-environment-DmWXvuT4.js +1 -0
- package/assets/editor/assets/ride-overlay-DhygYdx1.js +1 -0
- package/assets/editor/assets/rolldown-runtime-aKtaBQYM.js +1 -0
- package/assets/editor/assets/selection-overlay-primitives-hWJ1xjF7.js +1 -0
- package/assets/editor/assets/shantell-sans-cyrillic-ext-wght-normal-C5IA4B3w.woff2 +0 -0
- package/assets/editor/assets/shantell-sans-cyrillic-wght-normal-C3g4RRlc.woff2 +0 -0
- package/assets/editor/assets/shantell-sans-latin-ext-wght-normal-CkCuiz5d.woff2 +0 -0
- package/assets/editor/assets/shantell-sans-latin-wght-normal-B8jqu5lV.woff2 +0 -0
- package/assets/editor/assets/shantell-sans-vietnamese-wght-normal-0TYE14Fi.woff2 +0 -0
- package/assets/editor/assets/shape-meta-BpwsiB82.js +1 -0
- package/assets/editor/assets/shared-DjLCTIA9.js +1 -0
- package/assets/editor/assets/sign-in-dialog-DRooo5xw.js +1 -0
- package/assets/editor/assets/slide-notes-dialog-DLdTmd7_.js +1 -0
- package/assets/editor/assets/slides-D9bnXqtf.js +15 -0
- package/assets/editor/assets/slides-panel-DV-zQJhV.js +26 -0
- package/assets/editor/assets/storage-CvDRYh5V.js +1 -0
- package/assets/editor/assets/style-BENGW2ZV.js +1 -0
- package/assets/editor/assets/surface-Dke4SWpE.js +1 -0
- package/assets/editor/assets/text-breaks-YU-ymaF9.js +7 -0
- package/assets/editor/assets/theme-palette-D1nbDFBC.js +1 -0
- package/assets/editor/assets/tidy-browser-BwodBnAH.js +1 -0
- package/assets/editor/assets/tidy-scope-BgBSUklT.js +1 -0
- package/assets/editor/assets/tldraw-CE87oKyq.js +2 -0
- package/assets/editor/assets/toast-Nu_fiCd9.js +1 -0
- package/assets/editor/assets/tool-catalog-ChSwaLIq.js +1 -0
- package/assets/editor/assets/tool-drawer-CG7-cnML.js +1 -0
- package/assets/editor/assets/tooltip-DgEojto1.js +1 -0
- package/assets/editor/assets/tree-rq4RTGgw.js +1 -0
- package/assets/editor/assets/typeof-B5XbjTb1.js +1 -0
- package/assets/editor/assets/upgrade-dialog-DpZeaLDB.js +1 -0
- package/assets/editor/assets/use-drag-reorder-C3h4ZMoZ.js +1 -0
- package/assets/editor/assets/use-export-command-CPc7qug1.js +2 -0
- package/assets/editor/assets/use-grid-keyboard-nav-B88Qw-cQ.js +0 -0
- package/assets/editor/assets/use-icon-node-DJZFjABX.js +1 -0
- package/assets/editor/assets/use-recent-list-BEG0iBIm.js +1 -0
- package/assets/editor/assets/useAnchoredPopupScrollLock-BGKchwpi.js +1 -0
- package/assets/editor/assets/useBaseUiId-C0Zm5sUV.js +1 -0
- package/assets/editor/assets/useButton-D3eS7fh5.js +1 -0
- package/assets/editor/assets/useControlled-C5xhvPXX.js +1 -0
- package/assets/editor/assets/usePositioner-DA3aR0-T.js +1 -0
- package/assets/editor/assets/useScrollLock-B7mQdXyv.js +1 -0
- package/assets/editor/assets/useValueChanged-p8z-93L4.js +1 -0
- package/assets/editor/index.html +96 -0
- package/assets/fonts/@fontsource/caveat/files/caveat-latin-400-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/caveat/files/caveat-latin-700-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/inter/files/inter-latin-400-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/inter/files/inter-latin-700-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/jetbrains-mono/files/jetbrains-mono-latin-400-italic.woff2 +0 -0
- package/assets/fonts/@fontsource/jetbrains-mono/files/jetbrains-mono-latin-400-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/jetbrains-mono/files/jetbrains-mono-latin-700-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/kalam/files/kalam-latin-400-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/kalam/files/kalam-latin-700-normal.woff2 +0 -0
- package/assets/fonts/@fontsource/nanum-pen-script/files/nanum-pen-script-latin-400-normal.woff2 +0 -0
- package/assets/fonts/@fontsource-variable/shantell-sans/files/shantell-sans-latin-wght-italic.woff2 +0 -0
- package/assets/fonts/@fontsource-variable/shantell-sans/files/shantell-sans-latin-wght-normal.woff2 +0 -0
- package/assets/icon-sets/aws.json +1 -0
- package/assets/icon-sets/azure.json +1 -0
- package/assets/icon-sets/emoji.json +1 -0
- package/assets/icon-sets/gcp.json +1 -0
- package/assets/icon-sets/mood.json +1 -0
- package/assets/icon-sets/tech.json +1 -0
- package/dist/THIRD-PARTY-NOTICES.txt +3285 -0
- package/dist/koboyo.js +2360 -0
- package/package.json +64 -3
- package/skills/koboyo/SKILL.md +198 -0
- package/skills/koboyo/references/architecture.md +293 -0
- package/skills/koboyo/references/bpmn.md +143 -0
- package/skills/koboyo/references/chart.md +160 -0
- package/skills/koboyo/references/cycle.md +74 -0
- package/skills/koboyo/references/erd.md +436 -0
- package/skills/koboyo/references/flowchart.md +156 -0
- package/skills/koboyo/references/funnel.md +83 -0
- package/skills/koboyo/references/gantt.md +128 -0
- package/skills/koboyo/references/gitgraph.md +107 -0
- package/skills/koboyo/references/journey.md +99 -0
- package/skills/koboyo/references/matrix.md +89 -0
- package/skills/koboyo/references/mindmap.md +155 -0
- package/skills/koboyo/references/orgchart.md +110 -0
- package/skills/koboyo/references/pyramid.md +83 -0
- package/skills/koboyo/references/sankey.md +95 -0
- package/skills/koboyo/references/sequence.md +199 -0
- package/skills/koboyo/references/statemachine.md +158 -0
- package/skills/koboyo/references/timeline.md +94 -0
- package/skills/koboyo/references/venn.md +87 -0
- package/skills/koboyo/references/wireframe.md +197 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Koboyo CLI License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Koboyo. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This license covers the koboyo command-line tool as published to the npm
|
|
6
|
+
registry (the "Software"). Third-party components bundled with it are covered
|
|
7
|
+
by their own licenses, listed in dist/THIRD-PARTY-NOTICES.txt.
|
|
8
|
+
|
|
9
|
+
1. Use. You may install and run the Software, free of charge, for any purpose,
|
|
10
|
+
personal or commercial, on any number of machines. Diagrams and other output
|
|
11
|
+
you create with the Software are yours, without restriction.
|
|
12
|
+
|
|
13
|
+
2. Redistribution. You may redistribute exact, unmodified copies of the
|
|
14
|
+
Software, including this license and the notices file, for example as a
|
|
15
|
+
dependency of your own project or inside a container image.
|
|
16
|
+
|
|
17
|
+
3. Restrictions. You may not distribute modified copies of the Software or
|
|
18
|
+
works derived from it, and you may not remove or alter this license or any
|
|
19
|
+
copyright notice.
|
|
20
|
+
|
|
21
|
+
4. No warranty. The Software is provided "as is", without warranty of any kind,
|
|
22
|
+
express or implied, including the warranties of merchantability, fitness for
|
|
23
|
+
a particular purpose and non-infringement. In no event shall the authors or
|
|
24
|
+
copyright holders be liable for any claim, damages or other liability arising
|
|
25
|
+
from the Software or its use.
|
|
26
|
+
|
|
27
|
+
Features that use Koboyo's online services are governed by the terms of service
|
|
28
|
+
at https://koboyo.com.
|
package/README.md
CHANGED
|
@@ -1,3 +1,426 @@
|
|
|
1
|
-
#
|
|
1
|
+
# koboyo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Draw diagrams from code on your own machine. `koboyo` turns Koboyo diagram code
|
|
4
|
+
into SVG, PNG or HTML with the same engine as the [Koboyo](https://koboyo.com)
|
|
5
|
+
editor. It runs locally and needs no account.
|
|
6
|
+
|
|
7
|
+
It is made to be used by people and by coding agents (Claude Code, Codex,
|
|
8
|
+
Cursor and others): output is plain files, `--json` gives a machine-readable
|
|
9
|
+
result, and exit codes tell success from errors.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
Run it without installing:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npx koboyo render diagram.kbd
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or install it globally:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
npm install -g koboyo
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Node.js 20 or newer is required. Works on macOS, Linux (including Alpine) and
|
|
26
|
+
Windows.
|
|
27
|
+
|
|
28
|
+
## Render a diagram
|
|
29
|
+
|
|
30
|
+
Write diagram code in a file, for example `docs/checkout.kbd`:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
title: Checkout
|
|
34
|
+
browser [monitor] -> api [tech/nodedotjs]
|
|
35
|
+
api -> database [aws/rds]: save order
|
|
36
|
+
api -> payments: charge card
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Render it. The image is written next to the code:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
koboyo render docs/checkout.kbd # docs/checkout.svg
|
|
43
|
+
koboyo render docs/checkout.kbd --preview # also docs/checkout.preview.png
|
|
44
|
+
koboyo render docs/*.kbd --theme dark # one SVG per file
|
|
45
|
+
koboyo render docs/checkout.kbd -o checkout.png # the extension picks the format
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The SVG is self-contained: fonts and icons are embedded, so it displays
|
|
49
|
+
anywhere, including inside an `<img>` tag.
|
|
50
|
+
|
|
51
|
+
Code from stdin goes to stdout:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
echo "build -> test -> deploy" | koboyo render - > pipeline.svg
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Mermaid code is accepted too and converted automatically. A `.mmd` or
|
|
58
|
+
`.mermaid` file is always read as Mermaid:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
koboyo render flow.mmd
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Formats and themes
|
|
65
|
+
|
|
66
|
+
- `--format svg` (default), `png`, `html` or `data-url`.
|
|
67
|
+
- `--theme light` (default), `dark`, or `auto`. An `auto` SVG carries both
|
|
68
|
+
themes and follows the reader's light or dark mode in the browser. A PNG
|
|
69
|
+
holds one theme.
|
|
70
|
+
- `--format html` writes a `<figure>` to paste into a page. The diagram's title
|
|
71
|
+
is its accessible name, and an "Edit in Koboyo" link under it opens the code
|
|
72
|
+
in the editor at koboyo.com. The code travels inside the link itself; nothing
|
|
73
|
+
is uploaded.
|
|
74
|
+
- `--format data-url` prints the SVG as a `data:` URL, one per line.
|
|
75
|
+
- `--width <px>` sets the display width (a PNG's width in pixels),
|
|
76
|
+
`--padding <px>` the space around the diagram, `--transparent` drops the
|
|
77
|
+
background.
|
|
78
|
+
- `--fonts-css <path>` writes the fonts once to a CSS file instead of into every
|
|
79
|
+
SVG, for a page that inlines many diagrams. Link that file from the page.
|
|
80
|
+
|
|
81
|
+
## Other commands
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
koboyo check docs/*.kbd # report errors and warnings, write nothing
|
|
85
|
+
koboyo syntax # list the diagram kinds
|
|
86
|
+
koboyo syntax sequence # how to write one, and what makes it look good
|
|
87
|
+
koboyo icons redis "route 53" # icon names to write in the code: [tech/redis]
|
|
88
|
+
koboyo convert flow.mmd # Mermaid to Koboyo code: flow.kbd
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Run `koboyo help` to see every command, and `koboyo help <command>` for its
|
|
92
|
+
options and examples.
|
|
93
|
+
|
|
94
|
+
## Warnings in the code
|
|
95
|
+
|
|
96
|
+
Problems are printed with their line, the way compilers print them:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
docs/checkout.kbd:3 error unmatched }
|
|
100
|
+
docs/checkout.kbd:2 warning unknown icon "tech/redsi" (did you mean: tech/redis?)
|
|
101
|
+
docs/checkout.kbd:4 warning "database" is drawn as a shape here. For the icon, write [icon: database]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
An error means a line cannot be drawn, so nothing is written. A warning means
|
|
105
|
+
the image was written but may not look as intended.
|
|
106
|
+
|
|
107
|
+
## Edit a diagram in the browser
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
koboyo open checkout.kbd
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
This opens the Koboyo editor in your browser, served from your own machine on a
|
|
114
|
+
private `127.0.0.1` address. Your edits save to `checkout.kby` (the board, the
|
|
115
|
+
same file koboyo.com's **Open** and **Save to file** use) and `checkout.svg` is
|
|
116
|
+
redrawn on every save, hand edits included.
|
|
117
|
+
|
|
118
|
+
When `checkout.kbd` changes while the editor is open (an agent rewrote it), the
|
|
119
|
+
drawing follows. If you have edited the drawing by hand, the editor asks
|
|
120
|
+
whether to keep your edits or use the new code. Open a folder
|
|
121
|
+
(`koboyo open docs`) to get a list of every diagram in it.
|
|
122
|
+
|
|
123
|
+
An agent can hand the drawing to a person and wait for it to come back:
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
koboyo open checkout.kbd --wait --agent-name "Claude Code" --json
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The editor shows **Send back to Claude Code**; the person can add a short note.
|
|
130
|
+
The command ends when they send it, close the tab, or after `--timeout`
|
|
131
|
+
(default `30m`; `0` waits forever), and prints:
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"ok": true,
|
|
136
|
+
"command": "open",
|
|
137
|
+
"status": "sent",
|
|
138
|
+
"file": "/work/checkout.kbd",
|
|
139
|
+
"board": "/work/checkout.kby",
|
|
140
|
+
"svg": "/work/checkout.svg",
|
|
141
|
+
"png": "/tmp/koboyo-x1y2z3/checkout.png",
|
|
142
|
+
"changed": true,
|
|
143
|
+
"codeInSync": false,
|
|
144
|
+
"changes": {
|
|
145
|
+
"added": ["Cache"],
|
|
146
|
+
"removed": [],
|
|
147
|
+
"renamed": [{ "from": "DB", "to": "Postgres" }],
|
|
148
|
+
"edges": { "added": ["API -> Cache"], "removed": [] }
|
|
149
|
+
},
|
|
150
|
+
"note": "the cache sits in front of Postgres"
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`status` is `sent`, `closed`, `timeout` or `cancelled` (Ctrl-C, exit code 130).
|
|
155
|
+
`codeInSync` is false when the drawing has hand edits the code file does not
|
|
156
|
+
describe. `png` is a picture of the board for an agent that can look at images.
|
|
157
|
+
Without `--json`, the result is JSON when stdout is not a terminal and a short
|
|
158
|
+
summary when it is.
|
|
159
|
+
|
|
160
|
+
Other options: `--port <n>` (default: any free port), `--no-browser` (print the
|
|
161
|
+
link only). The link works once; the page then keeps a cookie for that session.
|
|
162
|
+
|
|
163
|
+
## Save to your Koboyo account
|
|
164
|
+
|
|
165
|
+
To share a diagram as a link, or keep working on it on koboyo.com, save it to
|
|
166
|
+
your Koboyo account. This needs Koboyo Pro (there is a 14-day free trial at
|
|
167
|
+
[koboyo.com/start](https://koboyo.com/start)); everything else in koboyo works
|
|
168
|
+
without an account.
|
|
169
|
+
|
|
170
|
+
```sh
|
|
171
|
+
koboyo login # sign in once, in your browser
|
|
172
|
+
koboyo save docs/checkout.kbd # prints the link to the board
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The first save makes a new board. Saving the same file again updates that
|
|
176
|
+
board, so a link you already shared shows the latest version. In the editor,
|
|
177
|
+
**Save to cloud** does the same, and offers to sign you in if you have not.
|
|
178
|
+
|
|
179
|
+
- If the board was changed on koboyo.com since your last save, nothing is
|
|
180
|
+
overwritten: pass `--replace` to overwrite it, or `--new` to save another
|
|
181
|
+
board. The editor asks.
|
|
182
|
+
- If you can save to more than one workspace, pass `--workspace <id>` (the
|
|
183
|
+
command lists them). Your choice is remembered for later boards.
|
|
184
|
+
- `koboyo save` saves a `.kbd` file's board (the `.kby` beside it, brought up to
|
|
185
|
+
date with the code), or draws one from the code if there is none yet. It
|
|
186
|
+
writes nothing on disk.
|
|
187
|
+
|
|
188
|
+
```sh
|
|
189
|
+
koboyo whoami # the account, its plan, and its workspaces
|
|
190
|
+
koboyo logout # sign out, here and on the Koboyo server
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The sign-in is kept in koboyo's config folder (`~/Library/Application
|
|
194
|
+
Support/koboyo` on macOS, `~/.config/koboyo` on Linux, `%APPDATA%\koboyo` on
|
|
195
|
+
Windows), in a file only your user can read. It is never printed. The link
|
|
196
|
+
between each local file and its board is kept there too, not in the `.kby`, so
|
|
197
|
+
a teammate who saves the same file gets a board of their own.
|
|
198
|
+
|
|
199
|
+
## For scripts and agents
|
|
200
|
+
|
|
201
|
+
`--json` prints a single JSON object on stdout and nothing else:
|
|
202
|
+
|
|
203
|
+
```sh
|
|
204
|
+
koboyo render docs/checkout.kbd --json
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"ok": true,
|
|
210
|
+
"command": "render",
|
|
211
|
+
"input": "docs/checkout.kbd",
|
|
212
|
+
"output": {
|
|
213
|
+
"path": "/work/docs/checkout.svg",
|
|
214
|
+
"format": "svg",
|
|
215
|
+
"bytes": 61234,
|
|
216
|
+
"width": 742,
|
|
217
|
+
"height": 389
|
|
218
|
+
},
|
|
219
|
+
"preview": null,
|
|
220
|
+
"editLink": "https://koboyo.com/code#src=…",
|
|
221
|
+
"title": "Checkout",
|
|
222
|
+
"convertedFrom": null,
|
|
223
|
+
"diagnostics": [],
|
|
224
|
+
"warnings": [],
|
|
225
|
+
"fontsCss": null
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
- When the result goes to stdout, the image is included as `output.content`
|
|
230
|
+
(UTF-8, or base64 for a PNG).
|
|
231
|
+
- Several input files give `{ "ok", "command", "files": [...], "fontsCss" }`,
|
|
232
|
+
with one entry per file.
|
|
233
|
+
- `check` gives `files: [{ input, ok, errors, warnings, diagnostics }]`. `icons`
|
|
234
|
+
gives `queries: [{ query, results: [{ ref, attribute, label, source }] }]`.
|
|
235
|
+
- A failure has `"ok": false` and an `error: { code, message, hint }`.
|
|
236
|
+
- Each diagnostic is `{ line, severity, message }`, plus `suggestions` when
|
|
237
|
+
koboyo can guess what was meant.
|
|
238
|
+
|
|
239
|
+
Exit codes:
|
|
240
|
+
|
|
241
|
+
| Code | Meaning |
|
|
242
|
+
| ---- | ------------------------------------------------------------------------------------- |
|
|
243
|
+
| 0 | Done. Warnings may still be printed. |
|
|
244
|
+
| 1 | The diagram code has errors, or nothing to draw. No image is written. |
|
|
245
|
+
| 2 | Wrong command line: unknown command or option, missing file. |
|
|
246
|
+
| 3 | Could not finish: a file could not be written, PNG output unavailable, not signed in. |
|
|
247
|
+
| 130 | `koboyo open --wait` was interrupted (Ctrl-C) before the person finished. |
|
|
248
|
+
|
|
249
|
+
## Set up your coding agent
|
|
250
|
+
|
|
251
|
+
```sh
|
|
252
|
+
npx koboyo setup
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
This finds the coding agents on your machine (Claude Code, Codex, Cursor, VS
|
|
256
|
+
Code and Windsurf) and sets up each one:
|
|
257
|
+
|
|
258
|
+
- It installs the koboyo **skill**: when to draw, how to write each diagram
|
|
259
|
+
kind, how to render and check the picture, and how to hand a diagram to you
|
|
260
|
+
for edits.
|
|
261
|
+
- It adds the local **MCP server** (`koboyo mcp`, below), using the agent's own
|
|
262
|
+
command where it has one (`claude mcp add`, `codex mcp add`,
|
|
263
|
+
`code --add-mcp`).
|
|
264
|
+
|
|
265
|
+
It shows what it will change and asks before changing anything. Run it again
|
|
266
|
+
after upgrading koboyo to update the skill.
|
|
267
|
+
|
|
268
|
+
| Agent | Skill | MCP server |
|
|
269
|
+
| ----------- | ----------------------------------- | ------------------------------------- |
|
|
270
|
+
| Claude Code | `~/.claude/skills/koboyo` | `claude mcp add --scope user` |
|
|
271
|
+
| Codex | `~/.agents/skills/koboyo` | `codex mcp add` |
|
|
272
|
+
| Cursor | `~/.agents/skills/koboyo` | `~/.cursor/mcp.json` |
|
|
273
|
+
| VS Code | `~/.copilot/skills/koboyo` | `code --add-mcp` |
|
|
274
|
+
| Windsurf | `~/.codeium/windsurf/skills/koboyo` | `~/.codeium/windsurf/mcp_config.json` |
|
|
275
|
+
|
|
276
|
+
Options:
|
|
277
|
+
|
|
278
|
+
- `--dry-run` shows the plan and changes nothing. `--yes` skips the question,
|
|
279
|
+
for scripts and agents.
|
|
280
|
+
- `--agent claude-code,cursor` sets up only those agents, even ones it did not
|
|
281
|
+
find.
|
|
282
|
+
- `--project` sets up the folder you are in instead, so your team gets it
|
|
283
|
+
through the repository: `.claude/skills` and `.mcp.json` for Claude Code,
|
|
284
|
+
`.agents/skills` and `.cursor/mcp.json` for Cursor, `.github/skills` and
|
|
285
|
+
`.vscode/mcp.json` for VS Code.
|
|
286
|
+
- `--print` prints a section to paste into `AGENTS.md`, for an agent that does
|
|
287
|
+
not load skills: `npx koboyo setup --print >> AGENTS.md`.
|
|
288
|
+
|
|
289
|
+
A config file is copied to `<file>.koboyo-backup` before it is changed. A
|
|
290
|
+
config file with comments in it is left alone, and the entry to add is printed
|
|
291
|
+
instead. A skill folder or a `koboyo` server entry that koboyo did not write is
|
|
292
|
+
kept unless you pass `--force`.
|
|
293
|
+
|
|
294
|
+
The skill also ships inside the package, in `skills/koboyo/`, if you would
|
|
295
|
+
rather copy it yourself.
|
|
296
|
+
|
|
297
|
+
## Use it from your coding agent (MCP)
|
|
298
|
+
|
|
299
|
+
`koboyo mcp` runs a local [MCP](https://modelcontextprotocol.io) server over
|
|
300
|
+
stdio, so an agent can write diagram code, look at the picture, and save the
|
|
301
|
+
image into your project. It is free, needs no account or key, and runs on your
|
|
302
|
+
machine.
|
|
303
|
+
|
|
304
|
+
**Claude Code**
|
|
305
|
+
|
|
306
|
+
```sh
|
|
307
|
+
claude mcp add koboyo -- npx -y koboyo mcp
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Add `--scope project` to share it with your team through `.mcp.json`.
|
|
311
|
+
|
|
312
|
+
**Codex**
|
|
313
|
+
|
|
314
|
+
```sh
|
|
315
|
+
codex mcp add koboyo -- npx -y koboyo mcp
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Or in `~/.codex/config.toml`:
|
|
319
|
+
|
|
320
|
+
```toml
|
|
321
|
+
[mcp_servers.koboyo]
|
|
322
|
+
command = "npx"
|
|
323
|
+
args = ["-y", "koboyo", "mcp"]
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Cursor** – `.cursor/mcp.json` in your project:
|
|
327
|
+
|
|
328
|
+
```json
|
|
329
|
+
{
|
|
330
|
+
"mcpServers": {
|
|
331
|
+
"koboyo": {
|
|
332
|
+
"command": "npx",
|
|
333
|
+
"args": ["-y", "koboyo", "mcp", "--root", "${workspaceFolder}"]
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**VS Code** – `.vscode/mcp.json` in your project:
|
|
340
|
+
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"servers": {
|
|
344
|
+
"koboyo": {
|
|
345
|
+
"type": "stdio",
|
|
346
|
+
"command": "npx",
|
|
347
|
+
"args": ["-y", "koboyo", "mcp", "--root", "${workspaceFolder}"]
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**Windsurf** – `~/.codeium/windsurf/mcp_config.json`, with the path to your
|
|
354
|
+
project:
|
|
355
|
+
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"mcpServers": {
|
|
359
|
+
"koboyo": {
|
|
360
|
+
"command": "npx",
|
|
361
|
+
"args": ["-y", "koboyo", "mcp", "--root", "/path/to/your/project"]
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
On Windows, if the client cannot start `npx`, use `"command": "cmd"` and put
|
|
368
|
+
`"/c", "npx"` at the start of `args`.
|
|
369
|
+
|
|
370
|
+
The server reads diagram files from, and writes images into, one folder: the
|
|
371
|
+
one it was started in, or `--root`. It refuses any path outside that folder,
|
|
372
|
+
including through a symlink. If it was started in your home folder or at the
|
|
373
|
+
root of the disk without `--root`, it writes nothing and asks for `--root`.
|
|
374
|
+
|
|
375
|
+
Tools:
|
|
376
|
+
|
|
377
|
+
| Tool | What it does |
|
|
378
|
+
| ----------------- | ------------------------------------------------------------------------- |
|
|
379
|
+
| `get_syntax` | The syntax sheet and style guide for one diagram kind. |
|
|
380
|
+
| `preview_diagram` | Renders code and returns the PNG, without writing anything. |
|
|
381
|
+
| `render_diagram` | Writes an SVG, PNG or HTML file into the project and returns the picture. |
|
|
382
|
+
| `check_diagram` | Lists errors and warnings by line, without drawing. |
|
|
383
|
+
| `find_icon` | Exact icon refs (`tech:redis`, `aws:lambda`) for many concepts at once. |
|
|
384
|
+
| `open_editor` | Opens a diagram in the Koboyo editor in your browser, with a message. |
|
|
385
|
+
| `wait_for_edits` | Returns what you changed once you press Send back, with a picture. |
|
|
386
|
+
| `read_drawing` | Describes a diagram's board as it stands, with a picture. |
|
|
387
|
+
|
|
388
|
+
With `open_editor` and `wait_for_edits`, an agent can hand you a diagram to fix
|
|
389
|
+
by hand and pick up your changes, the same round trip as `koboyo open --wait`.
|
|
390
|
+
The editor names the agent ("Send back to Claude Code") and shows its message.
|
|
391
|
+
`wait_for_edits` answers after 50 seconds at most, because most clients stop a
|
|
392
|
+
tool call after a minute; if you are still editing it says so, and the agent
|
|
393
|
+
calls it again. The editor stays open between calls.
|
|
394
|
+
|
|
395
|
+
The server also lists a few tools of the hosted Koboyo server, such as
|
|
396
|
+
`create_diagram`, which saves a diagram to a Koboyo board with live embed links.
|
|
397
|
+
Those need a Koboyo Pro account; called locally, they explain how to set that
|
|
398
|
+
up.
|
|
399
|
+
|
|
400
|
+
## Icons and the network
|
|
401
|
+
|
|
402
|
+
The Lucide icons, the fonts and the names of every brand and cloud icon ship
|
|
403
|
+
inside the package, so `koboyo icons` and the icon warnings work offline. The
|
|
404
|
+
brand and cloud icon drawings (`tech/`, `aws/`, `gcp/`, `azure/`, emoji) are
|
|
405
|
+
downloaded from koboyo.com the first time a diagram uses them and cached on
|
|
406
|
+
disk, so later renders work offline. If an icon cannot be downloaded, the image
|
|
407
|
+
is still written and a warning says which icon is missing. Nothing else is sent
|
|
408
|
+
anywhere, except by `koboyo login`, `koboyo save` and Save to cloud, which talk
|
|
409
|
+
to koboyo.com when you run them.
|
|
410
|
+
|
|
411
|
+
Environment variables:
|
|
412
|
+
|
|
413
|
+
- `KOBOYO_CACHE_DIR` – where downloaded icons are kept (defaults to your
|
|
414
|
+
system's cache folder).
|
|
415
|
+
- `KOBOYO_OFFLINE=1` – never download; use only cached icons.
|
|
416
|
+
- `KOBOYO_CONFIG_DIR` – where the sign-in is kept (defaults to your system's
|
|
417
|
+
config folder).
|
|
418
|
+
- `KOBOYO_API_ORIGIN` – the Koboyo server to sign in to and save to, like
|
|
419
|
+
`--api-origin` (defaults to `https://api.koboyo.com`).
|
|
420
|
+
- `BROWSER=none` – never open a browser (`koboyo open`, `koboyo login` and the
|
|
421
|
+
MCP server's `open_editor` print the link instead).
|
|
422
|
+
- `NO_COLOR=1` – turn off colored output.
|
|
423
|
+
|
|
424
|
+
## License
|
|
425
|
+
|
|
426
|
+
Free to use for personal and commercial work. See [LICENSE](./LICENSE).
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t}from"./jsx-runtime-2Zwg-L3c.js";import{ht as n}from"./useScrollLock-B7mQdXyv.js";import{t as r}from"./useBaseUiId-C0Zm5sUV.js";import{o as i}from"./DialogRoot-mHGRFW9m.js";var a=e(t(),1).forwardRef(function(e,t){let{render:a,className:o,style:s,id:c,...l}=e,{store:u}=i(),d=r(c);return u.useSyncedValueWithCleanup(`descriptionElementId`,d),n(`p`,e,{ref:t,props:[{id:d},l]})});export{a as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-2Zwg-L3c.js";import{A as r,An as i,C as a,Cn as o,Gt as s,R as c,S as l,Tn as u,U as d,Wt as f,Y as p,_ as m,b as h,d as g,dt as _,f as v,g as y,ht as b,i as x,j as S,jn as C,k as w,l as T,mt as E,n as D,o as O,p as k,pt as A,r as j,t as M,u as N,v as P,x as F}from"./useScrollLock-B7mQdXyv.js";var I=n(),L=e(t(),1);function R(e){let{store:t,actionsRef:n}=e,r=t.useState(`open`);l(t,r),P(t);let{forceUnmount:i}=h(r,t),a=L.useCallback(()=>{t.setOpen(!1,d(p))},[t]);L.useImperativeHandle(n,()=>({unmount:i,close:a}),[i,a])}function z({store:e,parentContext:t,isDrawer:n}){let i=e.useState(`open`),a=e.useState(`disablePointerDismissal`),o=e.useState(`modal`),c=e.useState(`popupElement`),l=e.useState(`floatingRootContext`),[d,p]=L.useState(0),[m,h]=L.useState(0),g=d===0,_=r(l,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?`intentional`:{mouse:o===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(t){if(!e.context.outsidePressEnabledRef.current||`button`in t&&t.button!==0||`touches`in t&&t.touches.length!==1)return!1;let n=s(t);return g&&!a?o&&(e.context.internalBackdropRef.current||e.context.backdropRef.current)?e.context.internalBackdropRef.current===n||e.context.backdropRef.current===n||f(n,c)&&!n?.hasAttribute(`data-base-ui-portal`):!0:!1},escapeKey:g});return M(i&&o===!0,c),e.useContextCallback(`onNestedDialogOpen`,(e,t)=>{p(e),h(t)}),e.useContextCallback(`onNestedDialogClose`,()=>{p(0),h(0)}),L.useEffect(()=>(t?.onNestedDialogOpen&&i&&t.onNestedDialogOpen(d+1,m+ +!!n),t?.onNestedDialogClose&&!i&&t.onNestedDialogClose(),()=>{t?.onNestedDialogClose&&i&&t.onNestedDialogClose()}),[n,i,d,m,t]),F(e,{activeTriggerProps:_.reference??u,inactiveTriggerProps:_.trigger??u,popupProps:_.floating??u,nestedOpenDialogCount:d,nestedOpenDrawerCount:m}),null}var B=L.createContext(!1),V=L.createContext(void 0);function H(e){let t=L.useContext(V);if(e===!1&&t===void 0)throw Error(C(27));return t}var U={...g,modal:i(e=>e.modal),nested:i(e=>e.nested),nestedOpenDialogCount:i(e=>e.nestedOpenDialogCount),nestedOpenDrawerCount:i(e=>e.nestedOpenDrawerCount),disablePointerDismissal:i(e=>e.disablePointerDismissal),openMethod:i(e=>e.openMethod),descriptionElementId:i(e=>e.descriptionElementId),titleElementId:i(e=>e.titleElementId),viewportElement:i(e=>e.viewportElement),role:i(e=>e.role)},W=class e extends o{constructor(e,t,n=!1){let r=new v,i=G(e);i.floatingRootContext=N(r,t,n),super(i,{popupRef:L.createRef(),backdropRef:L.createRef(),internalBackdropRef:L.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:r,onOpenChange:void 0,onOpenChangeComplete:void 0},U)}setOpen=(e,t)=>{if(t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),t.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(e,t);let n={open:e};m(n,e,t.trigger),this.update(n)};static useStore(t,n){return a(t,(t,r)=>new e(n,t,r),!0).store}};function G(e={}){return{...T(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:`dialog`,...e}}function K(e,t=`dialog`){let{children:n,open:r,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,disablePointerDismissal:s=!1,modal:c=!0,actionsRef:l,handle:u,triggerId:d,defaultTriggerId:f=null}=e,p=t===`drawer`,m=t===`alert-dialog`,h=m?!0:c,g=m||s,_=m?`alertdialog`:`dialog`,v=H(!0),y={modal:h,disablePointerDismissal:g,nested:!!v,role:_},b=W.useStore(u?.store,{open:i,openProp:r,activeTriggerId:f,triggerIdProp:d,...y});w(()=>{let e=r===void 0&&b.state.open===!1&&i===!0?{open:!0,activeTriggerId:f}:null;m?b.update(e?{...y,...e}:y):e&&b.update(e)}),b.useControlledProp(`openProp`,r),b.useControlledProp(`triggerIdProp`,d),b.useSyncedValues(y),b.useContextCallback(`onOpenChange`,a),b.useContextCallback(`onOpenChangeComplete`,o);let x=b.useState(`open`),S=b.useState(`mounted`),C=b.useState(`payload`);R({store:b,actionsRef:l});let T=x||S,E=L.useMemo(()=>({store:b}),[b]);return(0,I.jsx)(B.Provider,{value:!1,children:(0,I.jsxs)(V.Provider,{value:E,children:[T&&(0,I.jsx)(z,{store:b,parentContext:v?.store.context,isDrawer:p}),typeof n==`function`?n({payload:C}):n]})})}var q={...O,...A},J=L.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...o}=e,{store:s}=H(),c=s.useState(`open`),l=s.useState(`nested`),u=s.useState(`mounted`);return b(`div`,e,{state:{open:c,transitionStatus:s.useState(`transitionStatus`)},ref:[s.context.backdropRef,t],stateAttributesMapping:q,props:[{role:`presentation`,hidden:!u,style:{userSelect:`none`,WebkitUserSelect:`none`}},o],enabled:a||!l})}),Y=function(e){return e.nestedDialogs=`--nested-dialogs`,e}({}),X=function(e){return e[e.open=x.open]=`open`,e[e.closed=x.closed]=`closed`,e[e.startingStyle=x.startingStyle]=`startingStyle`,e[e.endingStyle=x.endingStyle]=`endingStyle`,e.nested=`data-nested`,e.nestedDialogOpen=`data-nested-dialog-open`,e}({}),Z=L.createContext(void 0);function Q(){let e=L.useContext(Z);if(e===void 0)throw Error(C(26));return e}var $={...O,...A,nestedDialogOpen(e){return e?{[X.nestedDialogOpen]:``}:null}},ee=L.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,initialFocus:o,...s}=e,{store:c}=H(),l=c.useState(`descriptionElementId`),u=c.useState(`disablePointerDismissal`),d=c.useState(`floatingRootContext`),f=c.useState(`popupProps`),p=c.useState(`modal`),m=c.useState(`mounted`),h=c.useState(`nested`),g=c.useState(`nestedOpenDialogCount`),v=c.useState(`open`),x=c.useState(`openMethod`),C=c.useState(`titleElementId`),w=c.useState(`transitionStatus`),T=c.useState(`role`),E=d.useState(`floatingId`),D=s.id??E;Q(),_({open:v,ref:c.context.popupRef,onComplete(){v&&c.context.onOpenChangeComplete?.(!0)}});let O=o===void 0?y(c.context.popupRef):o,A=g>0,M=c.useStateSetter(`popupElement`),N=b(`div`,e,{state:{open:v,nested:h,transitionStatus:w,nestedDialogOpen:A},props:[f,{id:D,"aria-labelledby":C??void 0,"aria-describedby":l??void 0,role:T,...k,hidden:!m,onKeyDown(e){j.has(e.key)&&e.stopPropagation()},style:{[Y.nestedDialogs]:g}},s],ref:[t,c.context.popupRef,M],stateAttributesMapping:$});return(0,I.jsx)(S,{context:d,openInteractionType:x,disabled:!m,closeOnFocusOut:!u,initialFocus:O,returnFocus:a,modal:p!==!1,restoreFocus:`popup`,children:N})}),te=L.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,{store:i}=H(),a=i.useState(`mounted`),o=i.useState(`modal`),s=i.useState(`open`);return a||n?(0,I.jsx)(Z.Provider,{value:n,children:(0,I.jsxs)(c,{ref:t,...r,children:[a&&o===!0&&(0,I.jsx)(D,{ref:i.context.internalBackdropRef,inert:E(!s)}),e.children]})}):null});function ne(e){return K(e,L.useContext(B)?`drawer`:`dialog`)}export{K as a,J as i,te as n,H as o,ee as r,ne as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t}from"./jsx-runtime-2Zwg-L3c.js";import{G as n,U as r,ht as i}from"./useScrollLock-B7mQdXyv.js";import{t as a}from"./useButton-D3eS7fh5.js";import{t as o}from"./useBaseUiId-C0Zm5sUV.js";import{o as s}from"./DialogRoot-mHGRFW9m.js";var c=e(t(),1),l=c.forwardRef(function(e,t){let{render:o,className:c,style:l,disabled:u=!1,nativeButton:d=!0,...f}=e,{store:p}=s(),m=p.useState(`open`),{getButtonProps:h,buttonRef:g}=a({disabled:u,native:d}),_={disabled:u};function v(e){m&&p.setOpen(!1,r(n,e.nativeEvent))}return i(`button`,e,{state:_,ref:[t,g],props:[{onClick:v},f,h]})}),u=c.forwardRef(function(e,t){let{render:n,className:r,style:a,id:c,...l}=e,{store:u}=s(),d=o(c);return u.useSyncedValueWithCleanup(`titleElementId`,d),i(`h2`,e,{ref:t,props:[{id:d},l]})});export{l as n,u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-2Zwg-L3c.js";import{Fn as r,z as i}from"./useScrollLock-B7mQdXyv.js";var a=e(t(),1),o=e(r(),1),s=n(),c=a.forwardRef(function(e,t){let{children:n,container:r,className:c,render:l,style:u,...d}=e,{portalNode:f,portalSubtree:p}=i({container:r,ref:t,componentProps:e,elementProps:d});return!p&&!f?null:(0,s.jsxs)(a.Fragment,{children:[p,f&&o.createPortal(n,f)]})});export{c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`alert-triangle`,`AlertTriangle`,[[`path`,{d:`M12 9v4`,key:`svg-0`}],[`path`,{d:`M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0`,key:`svg-1`}],[`path`,{d:`M12 16h.01`,key:`svg-2`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t}from"./jsx-runtime-2Zwg-L3c.js";import{_ as n}from"./selection-overlay-primitives-hWJ1xjF7.js";import{t as r}from"./editable-target-BTLnvKNi.js";import{t as i}from"./createReactComponent-9UsI5fmM.js";var a=e(t(),1),o=`button, a[href], summary, [role="button"], [role="link"], [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="tab"], [role="option"], [role="checkbox"], [role="switch"], [role="radio"]`;function s(e){return e instanceof Element&&e.closest(o)!==null}function c(e,t={}){let{preventDefault:i=!1}=t,[o,c]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{function t(t){t.code===e&&(r(t.target)||s(t.target)||(i&&t.preventDefault(),c(!0)))}function a(t){t.code!==e&&t.key!==`Meta`||c(!1)}window.addEventListener(`keydown`,t),window.addEventListener(`keyup`,a);let o=n(()=>c(!1));return()=>{window.removeEventListener(`keydown`,t),window.removeEventListener(`keyup`,a),o()}},[e,i]),o}var l=i(`outline`,`arrow-back-up`,`ArrowBackUp`,[[`path`,{d:`M9 14l-4 -4l4 -4`,key:`svg-0`}],[`path`,{d:`M5 10h11a4 4 0 1 1 0 8h-1`,key:`svg-1`}]]);export{s as n,c as r,l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`arrow-left`,`ArrowLeft`,[[`path`,{d:`M5 12l14 0`,key:`svg-0`}],[`path`,{d:`M5 12l6 6`,key:`svg-1`}],[`path`,{d:`M5 12l6 -6`,key:`svg-2`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`chevron-left`,`ChevronLeft`,[[`path`,{d:`M15 6l-6 6l6 6`,key:`svg-0`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`chevron-right`,`ChevronRight`,[[`path`,{d:`M9 6l6 6l-6 6`,key:`svg-0`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`code`,`Code`,[[`path`,{d:`M7 8l-4 4l4 4`,key:`svg-0`}],[`path`,{d:`M17 8l4 4l-4 4`,key:`svg-1`}],[`path`,{d:`M14 4l-4 16`,key:`svg-2`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`eraser`,`Eraser`,[[`path`,{d:`M19 20h-10.5l-4.21 -4.3a1 1 0 0 1 0 -1.41l10 -10a1 1 0 0 1 1.41 0l5 5a1 1 0 0 1 0 1.41l-9.2 9.3`,key:`svg-0`}],[`path`,{d:`M18 13.3l-6.3 -6.3`,key:`svg-1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`focus-centered`,`FocusCentered`,[[`path`,{d:`M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-0`}],[`path`,{d:`M4 8v-2a2 2 0 0 1 2 -2h2`,key:`svg-1`}],[`path`,{d:`M4 16v2a2 2 0 0 0 2 2h2`,key:`svg-2`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v2`,key:`svg-3`}],[`path`,{d:`M16 20h2a2 2 0 0 0 2 -2v-2`,key:`svg-4`}]]);export{t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ride-overlay-DhygYdx1.js","assets/rolldown-runtime-aKtaBQYM.js","assets/jsx-runtime-2Zwg-L3c.js","assets/editor-B0tARd79.js","assets/reflow-Cv75wPSh.js","assets/style-BENGW2ZV.js","assets/slides-D9bnXqtf.js","assets/renderer-environment-DmWXvuT4.js","assets/editable-target-BTLnvKNi.js","assets/createReactComponent-9UsI5fmM.js","assets/IconTrash-DbN_RxB7.js","assets/IconArrowLeft-DFk3Krim.js","assets/IconPlayerStopFilled-BUbX6ZO5.js","assets/IconEraser-DlZQe3-r.js","assets/IconFocusCentered-C5PcDeR0.js","assets/IconPencil-C5Y-Y4dC.js","assets/IconX-AlbPkO_g.js","assets/IconPlayerPlayFilled-D4OODBX7.js","assets/storage-CvDRYh5V.js","assets/chrome-C2RCq3SI.js","assets/DialogRoot-mHGRFW9m.js","assets/useScrollLock-B7mQdXyv.js","assets/DialogTitle-CFhr-gP9.js","assets/useButton-D3eS7fh5.js","assets/useBaseUiId-C0Zm5sUV.js","assets/DialogDescription-ZtZCUsfy.js","assets/connector-labels-vVnYQJRz.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-2Zwg-L3c.js";import{o as r}from"./editor-B0tARd79.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{i as a,n as o,r as s,t as c}from"./lazy-module-DkWvu4va.js";import{t as l}from"./createReactComponent-9UsI5fmM.js";var u=e(t(),1),d={status:`idle`};function f(e,t){switch(t.type){case`activate`:case`retry`:return e.status===`failed`?{status:`idle`}:e;case`load-start`:return e.status===`idle`?{status:`loading`}:e;case`load-resolve`:return e.status===`loading`?{status:`ready`}:e;case`load-reject`:return e.status===`loading`?{status:`failed`}:e;case`load-stale`:return e.status===`loading`||e.status===`failed`?{status:`stale`}:e}}function p(e,t){return t&&e.status===`idle`}function m(e,t,n){return e.status===`ready`?t||n:!1}function h(e,t){return t&&e.status===`loading`}function g(e,t){return t&&e.status===`failed`}function _(e,t){return t&&e.status===`stale`}var v=n(),y=`absolute left-1/2 top-[var(--chrome-top)] -translate-x-1/2 coarse:top-[calc(4.5rem+var(--koboyo-host-inset-top))]`;function b(e){let{children:t}=e;return(0,v.jsx)(`div`,{className:`pointer-events-none flex flex-col items-center gap-2 ${y}`,children:t})}function x(e){let{testId:t,tone:n,children:r,action:i}=e;return(0,v.jsxs)(`div`,{role:n===`error`?`alert`:`status`,"data-testid":t,"data-overlay":!0,className:`z-10 flex min-h-8 max-w-[min(24rem,calc(100vw-9rem))] items-center gap-2 rounded-xl bg-[var(--chrome-popup)] px-3 py-1.5 text-[12px] leading-snug text-[var(--chrome-fg-600)] shadow-md ring-1 ring-[var(--chrome-ring)] ${y}`,children:[(0,v.jsx)(`span`,{className:`min-w-0`,children:r}),i?(0,v.jsx)(`button`,{type:`button`,"data-testid":i.testId,onClick:i.onClick,className:`flex h-6 shrink-0 cursor-pointer items-center rounded-lg px-2 text-[var(--chrome-fg-500)] transition-colors hover:bg-[var(--chrome-hover)] hover:text-[var(--chrome-fg-900)]`,children:i.label}):null]})}function S(e){o(e.load)}function C(e){let{active:t,retain:n=!1,feature:r,fallback:i,children:o}=e,[l,y]=(0,u.useReducer)(f,d),b=(0,u.useRef)(!1);(0,u.useEffect)(()=>{t&&!b.current&&y({type:`activate`}),b.current=t},[t]);let S=(0,u.useRef)(!0);(0,u.useEffect)(()=>(S.current=!0,()=>{S.current=!1}),[]);let C=(0,u.useRef)(0),w=p(l,t);if((0,u.useEffect)(()=>{w&&(y({type:`load-start`}),s(r.load).then(()=>{S.current&&y({type:`load-resolve`})},e=>{C.current+=1,S.current&&y({type:`load-reject`}),c(e).then(e=>{e&&S.current&&y({type:`load-stale`})})}))},[w,r]),m(l,t,n)){let e=a(r.load);return e===void 0?null:(0,v.jsx)(v.Fragment,{children:o(r.pick(e))})}return h(l,t)?(0,v.jsx)(v.Fragment,{children:i??null}):_(l,t)?(0,v.jsx)(x,{testId:`lazy-feature-stale`,tone:`error`,action:{label:`Reload`,testId:`lazy-feature-reload`,onClick:()=>window.location.reload()},children:`New version available`}):g(l,t)?(0,v.jsx)(x,{testId:`lazy-feature-error`,tone:`error`,action:{label:`Retry`,testId:`lazy-feature-retry`,onClick:()=>{if(C.current>=2){window.location.reload();return}y({type:`retry`})}},children:`Couldn't load this panel`}):null}var w={load:()=>i(()=>import(`./ride-overlay-DhygYdx1.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),pick:e=>e.RideOverlay},T={at:null};function E(){let e=r(e=>e.rideMode),t=r(e=>e.presentingIndex!==null);return(0,u.useEffect)(()=>{let e=e=>{T.at={x:e.clientX,y:e.clientY}};return window.addEventListener(`pointermove`,e,{passive:!0}),()=>window.removeEventListener(`pointermove`,e)},[]),(0,v.jsx)(C,{active:e&&!t,feature:w,children:e=>(0,v.jsx)(e,{})})}var D=l(`outline`,`help`,`Help`,[[`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0`,key:`svg-0`}],[`path`,{d:`M12 17l0 .01`,key:`svg-1`}],[`path`,{d:`M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4`,key:`svg-2`}]]);export{S as a,b as c,C as i,E as n,x as o,T as r,y as s,D as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`loader-2`,`Loader2`,[[`path`,{d:`M12 3a9 9 0 1 0 9 9`,key:`svg-0`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`minus`,`Minus`,[[`path`,{d:`M5 12l14 0`,key:`svg-0`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`mood-smile`,`MoodSmile`,[[`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0`,key:`svg-0`}],[`path`,{d:`M9 10l.01 0`,key:`svg-1`}],[`path`,{d:`M15 10l.01 0`,key:`svg-2`}],[`path`,{d:`M9.5 15a3.5 3.5 0 0 0 5 0`,key:`svg-3`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`link`,`Link`,[[`path`,{d:`M9 15l6 -6`,key:`svg-0`}],[`path`,{d:`M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464`,key:`svg-1`}],[`path`,{d:`M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463`,key:`svg-2`}]]),n=e(`outline`,`note`,`Note`,[[`path`,{d:`M13 20l7 -7`,key:`svg-0`}],[`path`,{d:`M13 20v-6a1 1 0 0 1 1 -1h6v-7a2 2 0 0 0 -2 -2h-12a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7`,key:`svg-1`}]]);export{t as n,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`pencil`,`Pencil`,[[`path`,{d:`M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4`,key:`svg-0`}],[`path`,{d:`M13.5 6.5l4 4`,key:`svg-1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`photo`,`Photo`,[[`path`,{d:`M15 8h.01`,key:`svg-0`}],[`path`,{d:`M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12`,key:`svg-1`}],[`path`,{d:`M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5`,key:`svg-2`}],[`path`,{d:`M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3`,key:`svg-3`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`filled`,`player-play-filled`,`PlayerPlayFilled`,[[`path`,{d:`M6 4v16a1 1 0 0 0 1.524 .852l13 -8a1 1 0 0 0 0 -1.704l-13 -8a1 1 0 0 0 -1.524 .852z`,key:`svg-0`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`arrow-right`,`ArrowRight`,[[`path`,{d:`M5 12l14 0`,key:`svg-0`}],[`path`,{d:`M13 18l6 -6`,key:`svg-1`}],[`path`,{d:`M13 6l6 6`,key:`svg-2`}]]),n=e(`filled`,`player-stop-filled`,`PlayerStopFilled`,[[`path`,{d:`M17 4h-10a3 3 0 0 0 -3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3 -3v-10a3 3 0 0 0 -3 -3z`,key:`svg-0`}]]);export{t as n,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`plus`,`Plus`,[[`path`,{d:`M12 5l0 14`,key:`svg-0`}],[`path`,{d:`M5 12l14 0`,key:`svg-1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`arrow-up-right`,`ArrowUpRight`,[[`path`,{d:`M17 7l-10 10`,key:`svg-0`}],[`path`,{d:`M8 7l9 0l0 9`,key:`svg-1`}]]),n=e(`outline`,`device-floppy`,`DeviceFloppy`,[[`path`,{d:`M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2`,key:`svg-0`}],[`path`,{d:`M10 14a2 2 0 1 0 4 0a2 2 0 1 0 -4 0`,key:`svg-1`}],[`path`,{d:`M14 4l0 4l-6 0l0 -4`,key:`svg-2`}]]),r=e(`outline`,`presentation`,`Presentation`,[[`path`,{d:`M3 4l18 0`,key:`svg-0`}],[`path`,{d:`M4 4v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-10`,key:`svg-1`}],[`path`,{d:`M12 16l0 4`,key:`svg-2`}],[`path`,{d:`M9 20l6 0`,key:`svg-3`}],[`path`,{d:`M8 12l3 -3l2 2l3 -3`,key:`svg-4`}]]);export{n,t as r,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`search`,`Search`,[[`path`,{d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0`,key:`svg-0`}],[`path`,{d:`M21 21l-6 -6`,key:`svg-1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`sparkles`,`Sparkles`,[[`path`,{d:`M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6`,key:`svg-0`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`arrow-down`,`ArrowDown`,[[`path`,{d:`M12 5l0 14`,key:`svg-0`}],[`path`,{d:`M18 13l-6 6`,key:`svg-1`}],[`path`,{d:`M6 13l6 6`,key:`svg-2`}]]),n=e(`outline`,`arrow-up`,`ArrowUp`,[[`path`,{d:`M12 5l0 14`,key:`svg-0`}],[`path`,{d:`M18 11l-6 -6`,key:`svg-1`}],[`path`,{d:`M6 11l6 -6`,key:`svg-2`}]]),r=e(`outline`,`trash`,`Trash`,[[`path`,{d:`M4 7l16 0`,key:`svg-0`}],[`path`,{d:`M10 11l0 6`,key:`svg-1`}],[`path`,{d:`M14 11l0 6`,key:`svg-2`}],[`path`,{d:`M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12`,key:`svg-3`}],[`path`,{d:`M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3`,key:`svg-4`}]]);export{n,t as r,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`users`,`Users`,[[`path`,{d:`M5 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0`,key:`svg-0`}],[`path`,{d:`M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2`,key:`svg-1`}],[`path`,{d:`M16 3.13a4 4 0 0 1 0 7.75`,key:`svg-2`}],[`path`,{d:`M21 21v-2a4 4 0 0 0 -3 -3.85`,key:`svg-3`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createReactComponent-9UsI5fmM.js";var t=e(`outline`,`x`,`X`,[[`path`,{d:`M18 6l-12 12`,key:`svg-0`}],[`path`,{d:`M6 6l12 12`,key:`svg-1`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-2Zwg-L3c.js";import{T as r,Tn as i,c as a,ht as o,jn as s}from"./useScrollLock-B7mQdXyv.js";import{i as c,r as l}from"./tooltip-DgEojto1.js";import{O as u,S as d,_ as f,d as p,l as m,u as h,x as g,y as _}from"./menu-BPrc8Ara.js";import{t as v}from"./createReactComponent-9UsI5fmM.js";import{t as y}from"./useBaseUiId-C0Zm5sUV.js";var b=v(`outline`,`route`,`Route`,[[`path`,{d:`M3 19a2 2 0 1 0 4 0a2 2 0 0 0 -4 0`,key:`svg-0`}],[`path`,{d:`M19 7a2 2 0 1 0 0 -4a2 2 0 0 0 0 4`,key:`svg-1`}],[`path`,{d:`M11 19h5.5a3.5 3.5 0 0 0 0 -7h-8a3.5 3.5 0 0 1 0 -7h4.5`,key:`svg-2`}]]),x=e(t(),1),S=n();function C(e){let t=g().store,n=x.useMemo(()=>({parentMenu:t}),[t]);return(0,S.jsx)(h.Provider,{value:n,children:(0,S.jsx)(m,{...e})})}var w=x.forwardRef(function(e,t){let{render:n,className:m,style:h,label:v,id:b,nativeButton:S=!1,openOnHover:C=!0,delay:w=100,closeDelay:T=0,disabled:E=!1,...D}=e,O=f({label:v}),k=d(),{store:A}=g(),j=y(b),M=A.useState(`open`),N=A.useState(`floatingRootContext`),P=A.useState(`floatingTreeRoot`),F=A.useState(`triggerPopupId`,j),I=r(j,A),L=x.useCallback(e=>{let t=I(e);return e!==null&&A.select(`open`)&&A.select(`activeTriggerId`)==null&&A.update({activeTriggerId:j,activeTriggerElement:e,closeDelay:T}),t},[I,T,A,j]),R=x.useRef(null),z=x.useCallback(e=>{R.current=e,A.set(`activeTriggerElement`,e)},[A]),B=p();if(!B?.parentMenu)throw Error(s(37));A.useSyncedValue(`closeDelay`,T);let V=B.parentMenu,H=A.useState(`disabled`),U=V.useState(`disabled`),W=E||H||U,G=V.useState(`itemProps`),K=V.useState(`isActive`,O.index),q=x.useMemo(()=>({type:`submenu-trigger`,setActive(){V.select(`highlightItemOnHover`)&&V.set(`activeIndex`,O.index)}}),[V,O.index]),{getItemProps:J,itemRef:Y}=_({closeOnClick:!1,disabled:W,highlighted:K,id:j,store:A,typingRef:V.context.typingRef,nativeButton:S,itemMetadata:q,nodeId:k?.context.nodeId}),X=c(N,{enabled:A.useState(`hoverEnabled`)&&C&&!W,handleClose:l({blockPointerEvents:!0}),mouseOnly:!0,move:!0,restMs:w,delay:{open:w,close:T},shouldOpen:w>0?()=>V.select(`allowMouseEnter`):void 0,triggerElementRef:R,externalTree:P,isClosing:()=>A.select(`transitionStatus`)===`ending`}),Z=u(N,{enabled:!W,event:`mousedown`,toggle:!C,ignoreMouse:C,stickIfOpen:!1}).reference??i,Q=A.useState(`triggerProps`,!0);return delete Q.id,o(`div`,e,{state:{disabled:W,highlighted:K,open:M},stateAttributesMapping:a,props:[Z,X,Q,G,{"aria-controls":F,tabIndex:M||K?0:-1,onBlur(){K&&V.set(`activeIndex`,null)}},D,J],ref:[t,O.ref,Y,L,z]})});export{C as n,b as r,w as t};
|