@theokit/ui 0.13.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/CHANGELOG.md +1325 -0
- package/DESIGN.md +456 -0
- package/LICENSE +201 -0
- package/NOTICE +38 -0
- package/README.md +467 -0
- package/dist/chunk-27ENTTY7.js +146 -0
- package/dist/chunk-27ENTTY7.js.map +1 -0
- package/dist/chunk-2H6TQELG.js +33 -0
- package/dist/chunk-2H6TQELG.js.map +1 -0
- package/dist/chunk-2L6MRJD4.js +120 -0
- package/dist/chunk-2L6MRJD4.js.map +1 -0
- package/dist/chunk-2Y5V2PAL.js +80 -0
- package/dist/chunk-2Y5V2PAL.js.map +1 -0
- package/dist/chunk-34NAFDVL.js +46 -0
- package/dist/chunk-34NAFDVL.js.map +1 -0
- package/dist/chunk-36KJGXEK.js +112 -0
- package/dist/chunk-36KJGXEK.js.map +1 -0
- package/dist/chunk-3BMYYNN6.js +124 -0
- package/dist/chunk-3BMYYNN6.js.map +1 -0
- package/dist/chunk-3OHV7EEI.js +34 -0
- package/dist/chunk-3OHV7EEI.js.map +1 -0
- package/dist/chunk-3QKTS6F5.js +88 -0
- package/dist/chunk-3QKTS6F5.js.map +1 -0
- package/dist/chunk-3TBXLYNM.js +42 -0
- package/dist/chunk-3TBXLYNM.js.map +1 -0
- package/dist/chunk-4AM2HSXU.js +67 -0
- package/dist/chunk-4AM2HSXU.js.map +1 -0
- package/dist/chunk-4BCGKM65.js +44 -0
- package/dist/chunk-4BCGKM65.js.map +1 -0
- package/dist/chunk-4D3JILQX.js +145 -0
- package/dist/chunk-4D3JILQX.js.map +1 -0
- package/dist/chunk-4EJU2GBG.js +48 -0
- package/dist/chunk-4EJU2GBG.js.map +1 -0
- package/dist/chunk-4WKO3G5C.js +110 -0
- package/dist/chunk-4WKO3G5C.js.map +1 -0
- package/dist/chunk-53XPKI7Q.js +97 -0
- package/dist/chunk-53XPKI7Q.js.map +1 -0
- package/dist/chunk-55TDVDPG.js +58 -0
- package/dist/chunk-55TDVDPG.js.map +1 -0
- package/dist/chunk-56BJLFW7.js +26 -0
- package/dist/chunk-56BJLFW7.js.map +1 -0
- package/dist/chunk-5HOQLE6Y.js +35 -0
- package/dist/chunk-5HOQLE6Y.js.map +1 -0
- package/dist/chunk-5TY3NYF5.js +144 -0
- package/dist/chunk-5TY3NYF5.js.map +1 -0
- package/dist/chunk-5VOSCJKQ.js +92 -0
- package/dist/chunk-5VOSCJKQ.js.map +1 -0
- package/dist/chunk-65NVO6TK.js +171 -0
- package/dist/chunk-65NVO6TK.js.map +1 -0
- package/dist/chunk-6A5TPCKP.js +64 -0
- package/dist/chunk-6A5TPCKP.js.map +1 -0
- package/dist/chunk-6CO4LEXZ.js +41 -0
- package/dist/chunk-6CO4LEXZ.js.map +1 -0
- package/dist/chunk-6FVUPNPG.js +56 -0
- package/dist/chunk-6FVUPNPG.js.map +1 -0
- package/dist/chunk-76YWTIWK.js +106 -0
- package/dist/chunk-76YWTIWK.js.map +1 -0
- package/dist/chunk-7EI7424P.js +78 -0
- package/dist/chunk-7EI7424P.js.map +1 -0
- package/dist/chunk-AHTVYOPQ.js +26 -0
- package/dist/chunk-AHTVYOPQ.js.map +1 -0
- package/dist/chunk-AJTJNHKK.js +85 -0
- package/dist/chunk-AJTJNHKK.js.map +1 -0
- package/dist/chunk-AMT3CPMC.js +155 -0
- package/dist/chunk-AMT3CPMC.js.map +1 -0
- package/dist/chunk-AX5EH73R.js +59 -0
- package/dist/chunk-AX5EH73R.js.map +1 -0
- package/dist/chunk-B3VAJSZ2.js +35 -0
- package/dist/chunk-B3VAJSZ2.js.map +1 -0
- package/dist/chunk-B4CQMQ64.js +25 -0
- package/dist/chunk-B4CQMQ64.js.map +1 -0
- package/dist/chunk-BMRZXT5T.js +115 -0
- package/dist/chunk-BMRZXT5T.js.map +1 -0
- package/dist/chunk-BYZ6OFH4.js +73 -0
- package/dist/chunk-BYZ6OFH4.js.map +1 -0
- package/dist/chunk-C55VUQ7N.js +156 -0
- package/dist/chunk-C55VUQ7N.js.map +1 -0
- package/dist/chunk-D4GEAV4C.js +91 -0
- package/dist/chunk-D4GEAV4C.js.map +1 -0
- package/dist/chunk-DC43CHAM.js +152 -0
- package/dist/chunk-DC43CHAM.js.map +1 -0
- package/dist/chunk-DKCRLN35.js +92 -0
- package/dist/chunk-DKCRLN35.js.map +1 -0
- package/dist/chunk-DN5BUDBI.js +86 -0
- package/dist/chunk-DN5BUDBI.js.map +1 -0
- package/dist/chunk-DOLKDYMS.js +88 -0
- package/dist/chunk-DOLKDYMS.js.map +1 -0
- package/dist/chunk-DW34WXCG.js +28 -0
- package/dist/chunk-DW34WXCG.js.map +1 -0
- package/dist/chunk-DZAAKHGZ.js +135 -0
- package/dist/chunk-DZAAKHGZ.js.map +1 -0
- package/dist/chunk-E4IRSSHO.js +116 -0
- package/dist/chunk-E4IRSSHO.js.map +1 -0
- package/dist/chunk-E67WQXBV.js +104 -0
- package/dist/chunk-E67WQXBV.js.map +1 -0
- package/dist/chunk-EG6IHP3H.js +128 -0
- package/dist/chunk-EG6IHP3H.js.map +1 -0
- package/dist/chunk-EO7LOXG2.js +82 -0
- package/dist/chunk-EO7LOXG2.js.map +1 -0
- package/dist/chunk-EWDN56AS.js +24 -0
- package/dist/chunk-EWDN56AS.js.map +1 -0
- package/dist/chunk-F5P5P2SC.js +141 -0
- package/dist/chunk-F5P5P2SC.js.map +1 -0
- package/dist/chunk-FAWPRZTM.js +79 -0
- package/dist/chunk-FAWPRZTM.js.map +1 -0
- package/dist/chunk-FGYJ2WPX.js +36 -0
- package/dist/chunk-FGYJ2WPX.js.map +1 -0
- package/dist/chunk-GBG3I5I5.js +46 -0
- package/dist/chunk-GBG3I5I5.js.map +1 -0
- package/dist/chunk-GDMCDW66.js +19 -0
- package/dist/chunk-GDMCDW66.js.map +1 -0
- package/dist/chunk-H6HSQCOW.js +80 -0
- package/dist/chunk-H6HSQCOW.js.map +1 -0
- package/dist/chunk-HDM4RCIF.js +111 -0
- package/dist/chunk-HDM4RCIF.js.map +1 -0
- package/dist/chunk-HNTOGGVD.js +77 -0
- package/dist/chunk-HNTOGGVD.js.map +1 -0
- package/dist/chunk-HQW2ABO4.js +28 -0
- package/dist/chunk-HQW2ABO4.js.map +1 -0
- package/dist/chunk-HRDRGZ2Y.js +76 -0
- package/dist/chunk-HRDRGZ2Y.js.map +1 -0
- package/dist/chunk-HUOVA7SF.js +83 -0
- package/dist/chunk-HUOVA7SF.js.map +1 -0
- package/dist/chunk-ITA3SNOR.js +133 -0
- package/dist/chunk-ITA3SNOR.js.map +1 -0
- package/dist/chunk-IYNUPG2G.js +61 -0
- package/dist/chunk-IYNUPG2G.js.map +1 -0
- package/dist/chunk-JJ65ZI4P.js +199 -0
- package/dist/chunk-JJ65ZI4P.js.map +1 -0
- package/dist/chunk-JRBGZ6NI.js +106 -0
- package/dist/chunk-JRBGZ6NI.js.map +1 -0
- package/dist/chunk-K45OO62F.js +108 -0
- package/dist/chunk-K45OO62F.js.map +1 -0
- package/dist/chunk-KDTKA667.js +67 -0
- package/dist/chunk-KDTKA667.js.map +1 -0
- package/dist/chunk-KI7KZBSN.js +142 -0
- package/dist/chunk-KI7KZBSN.js.map +1 -0
- package/dist/chunk-KOJ7XOPZ.js +87 -0
- package/dist/chunk-KOJ7XOPZ.js.map +1 -0
- package/dist/chunk-KQTHJ22B.js +82 -0
- package/dist/chunk-KQTHJ22B.js.map +1 -0
- package/dist/chunk-KRC43RZR.js +77 -0
- package/dist/chunk-KRC43RZR.js.map +1 -0
- package/dist/chunk-LJQOEGQ2.js +116 -0
- package/dist/chunk-LJQOEGQ2.js.map +1 -0
- package/dist/chunk-LKRNUSKZ.js +149 -0
- package/dist/chunk-LKRNUSKZ.js.map +1 -0
- package/dist/chunk-LLL7QQ52.js +76 -0
- package/dist/chunk-LLL7QQ52.js.map +1 -0
- package/dist/chunk-LQ4B5X4Y.js +56 -0
- package/dist/chunk-LQ4B5X4Y.js.map +1 -0
- package/dist/chunk-M3FSLEHQ.js +76 -0
- package/dist/chunk-M3FSLEHQ.js.map +1 -0
- package/dist/chunk-M5G3O6H6.js +57 -0
- package/dist/chunk-M5G3O6H6.js.map +1 -0
- package/dist/chunk-M6JIC5PU.js +81 -0
- package/dist/chunk-M6JIC5PU.js.map +1 -0
- package/dist/chunk-N2HJ3SLS.js +186 -0
- package/dist/chunk-N2HJ3SLS.js.map +1 -0
- package/dist/chunk-NGZWBFTP.js +45 -0
- package/dist/chunk-NGZWBFTP.js.map +1 -0
- package/dist/chunk-OAKCXT35.js +34 -0
- package/dist/chunk-OAKCXT35.js.map +1 -0
- package/dist/chunk-OSD3U3HT.js +54 -0
- package/dist/chunk-OSD3U3HT.js.map +1 -0
- package/dist/chunk-OUXESQ2R.js +42 -0
- package/dist/chunk-OUXESQ2R.js.map +1 -0
- package/dist/chunk-OY2LJHMJ.js +43 -0
- package/dist/chunk-OY2LJHMJ.js.map +1 -0
- package/dist/chunk-OYEZR4CN.js +221 -0
- package/dist/chunk-OYEZR4CN.js.map +1 -0
- package/dist/chunk-P57HUMAE.js +66 -0
- package/dist/chunk-P57HUMAE.js.map +1 -0
- package/dist/chunk-P6Y2PI6L.js +82 -0
- package/dist/chunk-P6Y2PI6L.js.map +1 -0
- package/dist/chunk-PA7TDXUQ.js +51 -0
- package/dist/chunk-PA7TDXUQ.js.map +1 -0
- package/dist/chunk-PPBGGNPV.js +112 -0
- package/dist/chunk-PPBGGNPV.js.map +1 -0
- package/dist/chunk-PRH4HKND.js +48 -0
- package/dist/chunk-PRH4HKND.js.map +1 -0
- package/dist/chunk-PSPAZJUQ.js +32 -0
- package/dist/chunk-PSPAZJUQ.js.map +1 -0
- package/dist/chunk-Q5G5CGZ2.js +170 -0
- package/dist/chunk-Q5G5CGZ2.js.map +1 -0
- package/dist/chunk-QDAF3LP7.js +89 -0
- package/dist/chunk-QDAF3LP7.js.map +1 -0
- package/dist/chunk-QGVIGNJ3.js +37 -0
- package/dist/chunk-QGVIGNJ3.js.map +1 -0
- package/dist/chunk-QNUITYSY.js +68 -0
- package/dist/chunk-QNUITYSY.js.map +1 -0
- package/dist/chunk-QSWVN3RT.js +116 -0
- package/dist/chunk-QSWVN3RT.js.map +1 -0
- package/dist/chunk-QTLQZ7OJ.js +110 -0
- package/dist/chunk-QTLQZ7OJ.js.map +1 -0
- package/dist/chunk-QYAMLIG2.js +84 -0
- package/dist/chunk-QYAMLIG2.js.map +1 -0
- package/dist/chunk-REILH4XF.js +128 -0
- package/dist/chunk-REILH4XF.js.map +1 -0
- package/dist/chunk-S6SSK6QX.js +80 -0
- package/dist/chunk-S6SSK6QX.js.map +1 -0
- package/dist/chunk-SA7ED3PN.js +68 -0
- package/dist/chunk-SA7ED3PN.js.map +1 -0
- package/dist/chunk-SIJOEM4N.js +55 -0
- package/dist/chunk-SIJOEM4N.js.map +1 -0
- package/dist/chunk-SLOKAAH2.js +70 -0
- package/dist/chunk-SLOKAAH2.js.map +1 -0
- package/dist/chunk-TR6NPSMX.js +85 -0
- package/dist/chunk-TR6NPSMX.js.map +1 -0
- package/dist/chunk-TSZ5DEAT.js +106 -0
- package/dist/chunk-TSZ5DEAT.js.map +1 -0
- package/dist/chunk-TUNVF45W.js +127 -0
- package/dist/chunk-TUNVF45W.js.map +1 -0
- package/dist/chunk-TXOBNSQ5.js +63 -0
- package/dist/chunk-TXOBNSQ5.js.map +1 -0
- package/dist/chunk-U44DRLMM.js +88 -0
- package/dist/chunk-U44DRLMM.js.map +1 -0
- package/dist/chunk-U4THNRV5.js +114 -0
- package/dist/chunk-U4THNRV5.js.map +1 -0
- package/dist/chunk-UAZOFC4W.js +72 -0
- package/dist/chunk-UAZOFC4W.js.map +1 -0
- package/dist/chunk-UGKI466V.js +12 -0
- package/dist/chunk-UGKI466V.js.map +1 -0
- package/dist/chunk-VM4RMQQN.js +11 -0
- package/dist/chunk-VM4RMQQN.js.map +1 -0
- package/dist/chunk-VQ37VLAS.js +54 -0
- package/dist/chunk-VQ37VLAS.js.map +1 -0
- package/dist/chunk-VT7VSYH5.js +73 -0
- package/dist/chunk-VT7VSYH5.js.map +1 -0
- package/dist/chunk-VTIRUCLZ.js +57 -0
- package/dist/chunk-VTIRUCLZ.js.map +1 -0
- package/dist/chunk-VVBAEYKI.js +202 -0
- package/dist/chunk-VVBAEYKI.js.map +1 -0
- package/dist/chunk-WHFIQUCC.js +120 -0
- package/dist/chunk-WHFIQUCC.js.map +1 -0
- package/dist/chunk-WPSESV5Z.js +74 -0
- package/dist/chunk-WPSESV5Z.js.map +1 -0
- package/dist/chunk-WXEXCHEN.js +51 -0
- package/dist/chunk-WXEXCHEN.js.map +1 -0
- package/dist/chunk-X2DDPD3D.js +113 -0
- package/dist/chunk-X2DDPD3D.js.map +1 -0
- package/dist/chunk-X7VIMKLD.js +127 -0
- package/dist/chunk-X7VIMKLD.js.map +1 -0
- package/dist/chunk-XJ3EG6XY.js +30 -0
- package/dist/chunk-XJ3EG6XY.js.map +1 -0
- package/dist/chunk-XOT5HWSF.js +23 -0
- package/dist/chunk-XOT5HWSF.js.map +1 -0
- package/dist/chunk-Y72IP43U.js +117 -0
- package/dist/chunk-Y72IP43U.js.map +1 -0
- package/dist/chunk-YD6FLXBV.js +61 -0
- package/dist/chunk-YD6FLXBV.js.map +1 -0
- package/dist/chunk-YEQQGYYO.js +1022 -0
- package/dist/chunk-YEQQGYYO.js.map +1 -0
- package/dist/chunk-YYW6AEIT.js +46 -0
- package/dist/chunk-YYW6AEIT.js.map +1 -0
- package/dist/chunk-ZEVGXKRU.js +104 -0
- package/dist/chunk-ZEVGXKRU.js.map +1 -0
- package/dist/chunk-ZKSMMLDP.js +74 -0
- package/dist/chunk-ZKSMMLDP.js.map +1 -0
- package/dist/chunk-ZU6IM6PK.js +101 -0
- package/dist/chunk-ZU6IM6PK.js.map +1 -0
- package/dist/chunk-ZUS5KZGO.js +714 -0
- package/dist/chunk-ZUS5KZGO.js.map +1 -0
- package/dist/chunk-ZVS2GOT2.js +58 -0
- package/dist/chunk-ZVS2GOT2.js.map +1 -0
- package/dist/chunk-ZXPDS6DH.js +3 -0
- package/dist/chunk-ZXPDS6DH.js.map +1 -0
- package/dist/chunk-ZZQQJX5Z.js +173 -0
- package/dist/chunk-ZZQQJX5Z.js.map +1 -0
- package/dist/components.css +2 -0
- package/dist/composites/account-menu/index.js +6 -0
- package/dist/composites/account-menu/index.js.map +1 -0
- package/dist/composites/agent-composer/index.js +7 -0
- package/dist/composites/agent-composer/index.js.map +1 -0
- package/dist/composites/agent-editor/index.js +10 -0
- package/dist/composites/agent-editor/index.js.map +1 -0
- package/dist/composites/agent-stream/index.js +12 -0
- package/dist/composites/agent-stream/index.js.map +1 -0
- package/dist/composites/agent-timeline/index.js +5 -0
- package/dist/composites/agent-timeline/index.js.map +1 -0
- package/dist/composites/approval-card/index.js +5 -0
- package/dist/composites/approval-card/index.js.map +1 -0
- package/dist/composites/chat-composer/index.js +6 -0
- package/dist/composites/chat-composer/index.js.map +1 -0
- package/dist/composites/chat-message/index.js +6 -0
- package/dist/composites/chat-message/index.js.map +1 -0
- package/dist/composites/code-block/index.js +5 -0
- package/dist/composites/code-block/index.js.map +1 -0
- package/dist/composites/command-palette/index.js +5 -0
- package/dist/composites/command-palette/index.js.map +1 -0
- package/dist/composites/confirm-dialog/index.js +7 -0
- package/dist/composites/confirm-dialog/index.js.map +1 -0
- package/dist/composites/cron-jobs-list/index.js +5 -0
- package/dist/composites/cron-jobs-list/index.js.map +1 -0
- package/dist/composites/data-table/index.js +10 -0
- package/dist/composites/data-table/index.js.map +1 -0
- package/dist/composites/deployment-row/index.js +5 -0
- package/dist/composites/deployment-row/index.js.map +1 -0
- package/dist/composites/domain-config/index.js +7 -0
- package/dist/composites/domain-config/index.js.map +1 -0
- package/dist/composites/env-var-editor/index.js +7 -0
- package/dist/composites/env-var-editor/index.js.map +1 -0
- package/dist/composites/mcp-server-list/index.js +5 -0
- package/dist/composites/mcp-server-list/index.js.map +1 -0
- package/dist/composites/page-shell/index.js +7 -0
- package/dist/composites/page-shell/index.js.map +1 -0
- package/dist/composites/permission-modal/index.js +6 -0
- package/dist/composites/permission-modal/index.js.map +1 -0
- package/dist/composites/preview-env-card/index.js +6 -0
- package/dist/composites/preview-env-card/index.js.map +1 -0
- package/dist/composites/preview-panel/index.js +5 -0
- package/dist/composites/preview-panel/index.js.map +1 -0
- package/dist/composites/project-card/index.js +6 -0
- package/dist/composites/project-card/index.js.map +1 -0
- package/dist/composites/rollback-ui/index.js +6 -0
- package/dist/composites/rollback-ui/index.js.map +1 -0
- package/dist/composites/rule-editor/index.js +11 -0
- package/dist/composites/rule-editor/index.js.map +1 -0
- package/dist/composites/skill-editor/index.js +11 -0
- package/dist/composites/skill-editor/index.js.map +1 -0
- package/dist/composites/skills-list/index.js +5 -0
- package/dist/composites/skills-list/index.js.map +1 -0
- package/dist/composites/stability-bundle-viewer/index.js +4 -0
- package/dist/composites/stability-bundle-viewer/index.js.map +1 -0
- package/dist/composites/task-header/index.js +5 -0
- package/dist/composites/task-header/index.js.map +1 -0
- package/dist/composites/usage-meter/index.js +5 -0
- package/dist/composites/usage-meter/index.js.map +1 -0
- package/dist/fonts/LICENSE-GEIST.txt +92 -0
- package/dist/fonts/geist-400.woff2 +0 -0
- package/dist/fonts/geist-500.woff2 +0 -0
- package/dist/fonts/geist-600.woff2 +0 -0
- package/dist/fonts/geist-mono-400.woff2 +0 -0
- package/dist/fonts/geist-mono-500.woff2 +0 -0
- package/dist/fonts/geist-mono-600.woff2 +0 -0
- package/dist/fonts-cdn.css +28 -0
- package/dist/fonts.css +75 -0
- package/dist/index.d.ts +4621 -0
- package/dist/index.js +1338 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-D5xmXqYb.d.ts +172 -0
- package/dist/preset-v3-legacy.d.ts +35 -0
- package/dist/preset-v3-legacy.js +159 -0
- package/dist/preset-v3-legacy.js.map +1 -0
- package/dist/preset.css +27 -0
- package/dist/primitives/action-bar/index.js +4 -0
- package/dist/primitives/action-bar/index.js.map +1 -0
- package/dist/primitives/agent-error-card/index.js +5 -0
- package/dist/primitives/agent-error-card/index.js.map +1 -0
- package/dist/primitives/agent-event/index.js +4 -0
- package/dist/primitives/agent-event/index.js.map +1 -0
- package/dist/primitives/agent-handoff/index.js +4 -0
- package/dist/primitives/agent-handoff/index.js.map +1 -0
- package/dist/primitives/agent-profile/index.js +4 -0
- package/dist/primitives/agent-profile/index.js.map +1 -0
- package/dist/primitives/agent-starting-state/index.js +5 -0
- package/dist/primitives/agent-starting-state/index.js.map +1 -0
- package/dist/primitives/agent-streaming/index.js +5 -0
- package/dist/primitives/agent-streaming/index.js.map +1 -0
- package/dist/primitives/alert/index.js +4 -0
- package/dist/primitives/alert/index.js.map +1 -0
- package/dist/primitives/artifact-preview/index.js +4 -0
- package/dist/primitives/artifact-preview/index.js.map +1 -0
- package/dist/primitives/attachment-chip/index.js +4 -0
- package/dist/primitives/attachment-chip/index.js.map +1 -0
- package/dist/primitives/audit-log-entry/index.js +4 -0
- package/dist/primitives/audit-log-entry/index.js.map +1 -0
- package/dist/primitives/auto-compact-notice/index.js +5 -0
- package/dist/primitives/auto-compact-notice/index.js.map +1 -0
- package/dist/primitives/avatar/index.js +4 -0
- package/dist/primitives/avatar/index.js.map +1 -0
- package/dist/primitives/badge/index.js +4 -0
- package/dist/primitives/badge/index.js.map +1 -0
- package/dist/primitives/branch-indicator/index.js +4 -0
- package/dist/primitives/branch-indicator/index.js.map +1 -0
- package/dist/primitives/browser-controls/index.js +4 -0
- package/dist/primitives/browser-controls/index.js.map +1 -0
- package/dist/primitives/build-log-stream/index.js +5 -0
- package/dist/primitives/build-log-stream/index.js.map +1 -0
- package/dist/primitives/button/index.js +4 -0
- package/dist/primitives/button/index.js.map +1 -0
- package/dist/primitives/capability-indicator/index.js +4 -0
- package/dist/primitives/capability-indicator/index.js.map +1 -0
- package/dist/primitives/card/index.js +4 -0
- package/dist/primitives/card/index.js.map +1 -0
- package/dist/primitives/channel-card/index.js +4 -0
- package/dist/primitives/channel-card/index.js.map +1 -0
- package/dist/primitives/chat-thread/index.js +5 -0
- package/dist/primitives/chat-thread/index.js.map +1 -0
- package/dist/primitives/checkbox/index.js +4 -0
- package/dist/primitives/checkbox/index.js.map +1 -0
- package/dist/primitives/context-card/index.js +4 -0
- package/dist/primitives/context-card/index.js.map +1 -0
- package/dist/primitives/context-window-bar/index.js +4 -0
- package/dist/primitives/context-window-bar/index.js.map +1 -0
- package/dist/primitives/copy-button/index.js +4 -0
- package/dist/primitives/copy-button/index.js.map +1 -0
- package/dist/primitives/cost-meter/index.js +4 -0
- package/dist/primitives/cost-meter/index.js.map +1 -0
- package/dist/primitives/created-files-card/index.js +4 -0
- package/dist/primitives/created-files-card/index.js.map +1 -0
- package/dist/primitives/cron-job-card/index.js +4 -0
- package/dist/primitives/cron-job-card/index.js.map +1 -0
- package/dist/primitives/danger-zone/index.js +4 -0
- package/dist/primitives/danger-zone/index.js.map +1 -0
- package/dist/primitives/dialog/index.js +4 -0
- package/dist/primitives/dialog/index.js.map +1 -0
- package/dist/primitives/diff-viewer/index.js +4 -0
- package/dist/primitives/diff-viewer/index.js.map +1 -0
- package/dist/primitives/dropdown-menu/index.js +4 -0
- package/dist/primitives/dropdown-menu/index.js.map +1 -0
- package/dist/primitives/empty-state/index.js +4 -0
- package/dist/primitives/empty-state/index.js.map +1 -0
- package/dist/primitives/export-chat-dialog/index.js +4 -0
- package/dist/primitives/export-chat-dialog/index.js.map +1 -0
- package/dist/primitives/folder-context-card/index.js +4 -0
- package/dist/primitives/folder-context-card/index.js.map +1 -0
- package/dist/primitives/folder-selector/index.js +4 -0
- package/dist/primitives/folder-selector/index.js.map +1 -0
- package/dist/primitives/form-field/index.js +4 -0
- package/dist/primitives/form-field/index.js.map +1 -0
- package/dist/primitives/gateway-status-indicator/index.js +4 -0
- package/dist/primitives/gateway-status-indicator/index.js.map +1 -0
- package/dist/primitives/hook-config/index.js +4 -0
- package/dist/primitives/hook-config/index.js.map +1 -0
- package/dist/primitives/hook-event-log/index.js +4 -0
- package/dist/primitives/hook-event-log/index.js.map +1 -0
- package/dist/primitives/input/index.js +4 -0
- package/dist/primitives/input/index.js.map +1 -0
- package/dist/primitives/intent-selector/index.js +4 -0
- package/dist/primitives/intent-selector/index.js.map +1 -0
- package/dist/primitives/label/index.js +4 -0
- package/dist/primitives/label/index.js.map +1 -0
- package/dist/primitives/lane-board/index.js +4 -0
- package/dist/primitives/lane-board/index.js.map +1 -0
- package/dist/primitives/login-split/index.js +4 -0
- package/dist/primitives/login-split/index.js.map +1 -0
- package/dist/primitives/mcp-server-card/index.js +4 -0
- package/dist/primitives/mcp-server-card/index.js.map +1 -0
- package/dist/primitives/memory-editor/index.js +4 -0
- package/dist/primitives/memory-editor/index.js.map +1 -0
- package/dist/primitives/mention-menu/index.js +4 -0
- package/dist/primitives/mention-menu/index.js.map +1 -0
- package/dist/primitives/metrics-panel/index.js +4 -0
- package/dist/primitives/metrics-panel/index.js.map +1 -0
- package/dist/primitives/model-card/index.js +4 -0
- package/dist/primitives/model-card/index.js.map +1 -0
- package/dist/primitives/model-selector/index.js +4 -0
- package/dist/primitives/model-selector/index.js.map +1 -0
- package/dist/primitives/pagination/index.js +4 -0
- package/dist/primitives/pagination/index.js.map +1 -0
- package/dist/primitives/permission-matrix/index.js +4 -0
- package/dist/primitives/permission-matrix/index.js.map +1 -0
- package/dist/primitives/pin-input/index.js +4 -0
- package/dist/primitives/pin-input/index.js.map +1 -0
- package/dist/primitives/plan-badge/index.js +4 -0
- package/dist/primitives/plan-badge/index.js.map +1 -0
- package/dist/primitives/progress/index.js +4 -0
- package/dist/primitives/progress/index.js.map +1 -0
- package/dist/primitives/progress-checklist/index.js +4 -0
- package/dist/primitives/progress-checklist/index.js.map +1 -0
- package/dist/primitives/project-switcher/index.js +4 -0
- package/dist/primitives/project-switcher/index.js.map +1 -0
- package/dist/primitives/quick-action-chips/index.js +4 -0
- package/dist/primitives/quick-action-chips/index.js.map +1 -0
- package/dist/primitives/radio-group/index.js +4 -0
- package/dist/primitives/radio-group/index.js.map +1 -0
- package/dist/primitives/recent-folders-list/index.js +4 -0
- package/dist/primitives/recent-folders-list/index.js.map +1 -0
- package/dist/primitives/rule-card/index.js +4 -0
- package/dist/primitives/rule-card/index.js.map +1 -0
- package/dist/primitives/run-stats/index.js +4 -0
- package/dist/primitives/run-stats/index.js.map +1 -0
- package/dist/primitives/run-status-pill/index.js +4 -0
- package/dist/primitives/run-status-pill/index.js.map +1 -0
- package/dist/primitives/running-tasks-panel/index.js +4 -0
- package/dist/primitives/running-tasks-panel/index.js.map +1 -0
- package/dist/primitives/scroll-area/index.js +4 -0
- package/dist/primitives/scroll-area/index.js.map +1 -0
- package/dist/primitives/select/index.js +4 -0
- package/dist/primitives/select/index.js.map +1 -0
- package/dist/primitives/session-list-item/index.js +4 -0
- package/dist/primitives/session-list-item/index.js.map +1 -0
- package/dist/primitives/session-timeline/index.js +4 -0
- package/dist/primitives/session-timeline/index.js.map +1 -0
- package/dist/primitives/sheet/index.js +4 -0
- package/dist/primitives/sheet/index.js.map +1 -0
- package/dist/primitives/sidebar/index.js +4 -0
- package/dist/primitives/sidebar/index.js.map +1 -0
- package/dist/primitives/skeleton/index.js +5 -0
- package/dist/primitives/skeleton/index.js.map +1 -0
- package/dist/primitives/skill-card/index.js +4 -0
- package/dist/primitives/skill-card/index.js.map +1 -0
- package/dist/primitives/social-auth-row/index.js +4 -0
- package/dist/primitives/social-auth-row/index.js.map +1 -0
- package/dist/primitives/stat-tile/index.js +4 -0
- package/dist/primitives/stat-tile/index.js.map +1 -0
- package/dist/primitives/status-dot/index.js +4 -0
- package/dist/primitives/status-dot/index.js.map +1 -0
- package/dist/primitives/steps-rail/index.js +4 -0
- package/dist/primitives/steps-rail/index.js.map +1 -0
- package/dist/primitives/sub-agent-dispatch/index.js +4 -0
- package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
- package/dist/primitives/switch/index.js +4 -0
- package/dist/primitives/switch/index.js.map +1 -0
- package/dist/primitives/system-prompt-editor/index.js +4 -0
- package/dist/primitives/system-prompt-editor/index.js.map +1 -0
- package/dist/primitives/table/index.js +4 -0
- package/dist/primitives/table/index.js.map +1 -0
- package/dist/primitives/tabs/index.js +4 -0
- package/dist/primitives/tabs/index.js.map +1 -0
- package/dist/primitives/task-plan/index.js +4 -0
- package/dist/primitives/task-plan/index.js.map +1 -0
- package/dist/primitives/terminal-panel/index.js +5 -0
- package/dist/primitives/terminal-panel/index.js.map +1 -0
- package/dist/primitives/textarea/index.js +4 -0
- package/dist/primitives/textarea/index.js.map +1 -0
- package/dist/primitives/thinking-level-selector/index.js +4 -0
- package/dist/primitives/thinking-level-selector/index.js.map +1 -0
- package/dist/primitives/timestamp/index.js +4 -0
- package/dist/primitives/timestamp/index.js.map +1 -0
- package/dist/primitives/toast/index.js +4 -0
- package/dist/primitives/toast/index.js.map +1 -0
- package/dist/primitives/token-usage-chart/index.js +4 -0
- package/dist/primitives/token-usage-chart/index.js.map +1 -0
- package/dist/primitives/tool-call/index.js +4 -0
- package/dist/primitives/tool-call/index.js.map +1 -0
- package/dist/primitives/tool-call-card/index.js +4 -0
- package/dist/primitives/tool-call-card/index.js.map +1 -0
- package/dist/primitives/tool-result/index.js +4 -0
- package/dist/primitives/tool-result/index.js.map +1 -0
- package/dist/primitives/tools-list/index.js +4 -0
- package/dist/primitives/tools-list/index.js.map +1 -0
- package/dist/primitives/tooltip/index.js +4 -0
- package/dist/primitives/tooltip/index.js.map +1 -0
- package/dist/primitives/topnav/index.js +4 -0
- package/dist/primitives/topnav/index.js.map +1 -0
- package/dist/primitives/update-banner/index.js +4 -0
- package/dist/primitives/update-banner/index.js.map +1 -0
- package/dist/slide/index.d.ts +212 -0
- package/dist/slide/index.js +3 -0
- package/dist/slide/index.js.map +1 -0
- package/dist/slide/plugins/emoji/index.d.ts +29 -0
- package/dist/slide/plugins/emoji/index.js +157 -0
- package/dist/slide/plugins/emoji/index.js.map +1 -0
- package/dist/slide/plugins/math/index.d.ts +13 -0
- package/dist/slide/plugins/math/index.js +145 -0
- package/dist/slide/plugins/math/index.js.map +1 -0
- package/dist/slide/plugins/mermaid/index.d.ts +55 -0
- package/dist/slide/plugins/mermaid/index.js +218 -0
- package/dist/slide/plugins/mermaid/index.js.map +1 -0
- package/dist/slide/plugins/shiki/index.d.ts +18 -0
- package/dist/slide/plugins/shiki/index.js +87 -0
- package/dist/slide/plugins/shiki/index.js.map +1 -0
- package/dist/slide/themes/default.css +256 -0
- package/dist/slide/themes/layouts.css +143 -0
- package/dist/slide/themes/violet-forge.css +256 -0
- package/dist/slide-deck/index.css +52 -0
- package/dist/slide-deck/index.css.map +1 -0
- package/dist/slide-deck/index.d.ts +377 -0
- package/dist/slide-deck/index.js +1111 -0
- package/dist/slide-deck/index.js.map +1 -0
- package/dist/styles-v3-legacy.css +88 -0
- package/dist/styles.css +137 -0
- package/dist/tokens-v4.css +187 -0
- package/dist/tokens.css +230 -0
- package/dist/vite-plugin.d.ts +29 -0
- package/dist/vite-plugin.js +76 -0
- package/dist/vite-plugin.js.map +1 -0
- package/dist/whiteboard/index.d.ts +258 -0
- package/dist/whiteboard/index.js +738 -0
- package/dist/whiteboard/index.js.map +1 -0
- package/llms.txt +273 -0
- package/package.json +800 -0
- package/registry/index.json +856 -0
- package/registry/r/account-menu.json +24 -0
- package/registry/r/action-bar.json +22 -0
- package/registry/r/agent-composer.json +22 -0
- package/registry/r/agent-editor.json +27 -0
- package/registry/r/agent-error-card.json +22 -0
- package/registry/r/agent-event.json +24 -0
- package/registry/r/agent-handoff.json +22 -0
- package/registry/r/agent-profile.json +23 -0
- package/registry/r/agent-starting-state.json +22 -0
- package/registry/r/agent-stream.json +27 -0
- package/registry/r/agent-streaming.json +22 -0
- package/registry/r/agent-timeline.json +22 -0
- package/registry/r/agent-types.json +15 -0
- package/registry/r/alert.json +22 -0
- package/registry/r/approval-card.json +25 -0
- package/registry/r/artifact-preview.json +22 -0
- package/registry/r/attachment-chip.json +24 -0
- package/registry/r/audit-log-entry.json +23 -0
- package/registry/r/auto-compact-notice.json +22 -0
- package/registry/r/avatar.json +23 -0
- package/registry/r/badge.json +22 -0
- package/registry/r/browser-controls.json +22 -0
- package/registry/r/build-log-stream.json +19 -0
- package/registry/r/button.json +23 -0
- package/registry/r/capability-indicator.json +23 -0
- package/registry/r/card.json +22 -0
- package/registry/r/chat-composer.json +23 -0
- package/registry/r/chat-message.json +129 -0
- package/registry/r/chat-thread.json +20 -0
- package/registry/r/chat-types.json +15 -0
- package/registry/r/checkbox.json +24 -0
- package/registry/r/cn.json +19 -0
- package/registry/r/code-block.json +21 -0
- package/registry/r/command-palette.json +25 -0
- package/registry/r/confirm-dialog.json +25 -0
- package/registry/r/context-card.json +23 -0
- package/registry/r/context-window-bar.json +20 -0
- package/registry/r/copy-button.json +22 -0
- package/registry/r/cost-meter.json +22 -0
- package/registry/r/created-files-card.json +23 -0
- package/registry/r/cron-job-card.json +22 -0
- package/registry/r/cron-jobs-list.json +23 -0
- package/registry/r/danger-zone.json +20 -0
- package/registry/r/data-table.json +27 -0
- package/registry/r/deployment-row.json +23 -0
- package/registry/r/dialog.json +23 -0
- package/registry/r/diff-viewer.json +20 -0
- package/registry/r/domain-config.json +25 -0
- package/registry/r/dropdown-menu.json +23 -0
- package/registry/r/empty-state.json +20 -0
- package/registry/r/env-var-editor.json +25 -0
- package/registry/r/folder-context-card.json +23 -0
- package/registry/r/folder-selector.json +22 -0
- package/registry/r/form-field.json +23 -0
- package/registry/r/hook-config.json +22 -0
- package/registry/r/hook-event-log.json +22 -0
- package/registry/r/input.json +22 -0
- package/registry/r/intent-selector.json +24 -0
- package/registry/r/label.json +22 -0
- package/registry/r/lane-board.json +20 -0
- package/registry/r/live-region-context.json +16 -0
- package/registry/r/login-split.json +20 -0
- package/registry/r/mcp-server-card.json +22 -0
- package/registry/r/mcp-server-list.json +23 -0
- package/registry/r/memory-editor.json +23 -0
- package/registry/r/mention-menu.json +23 -0
- package/registry/r/metrics-panel.json +22 -0
- package/registry/r/mode-types.json +15 -0
- package/registry/r/model-card.json +23 -0
- package/registry/r/model-selector.json +23 -0
- package/registry/r/page-shell.json +25 -0
- package/registry/r/pagination.json +22 -0
- package/registry/r/permission-matrix.json +22 -0
- package/registry/r/permission-modal.json +24 -0
- package/registry/r/permission-types.json +15 -0
- package/registry/r/pin-input.json +20 -0
- package/registry/r/plan-badge.json +20 -0
- package/registry/r/preview-env-card.json +25 -0
- package/registry/r/preview-panel.json +21 -0
- package/registry/r/progress-checklist.json +23 -0
- package/registry/r/progress.json +20 -0
- package/registry/r/project-card.json +25 -0
- package/registry/r/project-switcher.json +22 -0
- package/registry/r/quick-action-chips.json +21 -0
- package/registry/r/radio-group.json +23 -0
- package/registry/r/recent-folders-list.json +22 -0
- package/registry/r/rollback-ui.json +24 -0
- package/registry/r/rule-card.json +23 -0
- package/registry/r/rule-editor.json +28 -0
- package/registry/r/rule-types.json +18 -0
- package/registry/r/run-stats.json +22 -0
- package/registry/r/running-tasks-panel.json +22 -0
- package/registry/r/safe-href.json +16 -0
- package/registry/r/scroll-area.json +22 -0
- package/registry/r/select.json +24 -0
- package/registry/r/session-list-item.json +20 -0
- package/registry/r/session-timeline.json +22 -0
- package/registry/r/sheet.json +24 -0
- package/registry/r/sidebar.json +19 -0
- package/registry/r/skeleton.json +19 -0
- package/registry/r/skill-card.json +24 -0
- package/registry/r/skill-editor.json +28 -0
- package/registry/r/skills-list.json +23 -0
- package/registry/r/slide-deck.json +130 -0
- package/registry/r/slide-plugin-emoji.json +28 -0
- package/registry/r/slide-plugin-math.json +24 -0
- package/registry/r/slide-plugin-mermaid.json +23 -0
- package/registry/r/slide-plugin-shiki.json +23 -0
- package/registry/r/slide.json +123 -0
- package/registry/r/social-auth-row.json +21 -0
- package/registry/r/stat-tile.json +22 -0
- package/registry/r/status-dot.json +20 -0
- package/registry/r/steps-rail.json +20 -0
- package/registry/r/sub-agent-dispatch.json +22 -0
- package/registry/r/switch.json +23 -0
- package/registry/r/system-prompt-editor.json +22 -0
- package/registry/r/table.json +22 -0
- package/registry/r/tabs.json +22 -0
- package/registry/r/tailwind-preset.json +19 -0
- package/registry/r/task-header.json +24 -0
- package/registry/r/task-plan.json +22 -0
- package/registry/r/task-types.json +15 -0
- package/registry/r/terminal-panel.json +22 -0
- package/registry/r/textarea.json +22 -0
- package/registry/r/theme-provider.json +59 -0
- package/registry/r/theme-script.json +18 -0
- package/registry/r/theo-ui-provider.json +20 -0
- package/registry/r/timestamp.json +20 -0
- package/registry/r/toast.json +30 -0
- package/registry/r/token-usage-chart.json +20 -0
- package/registry/r/tokens.json +21 -0
- package/registry/r/tool-call-card.json +23 -0
- package/registry/r/tool-call.json +22 -0
- package/registry/r/tool-result.json +20 -0
- package/registry/r/tools-list.json +23 -0
- package/registry/r/tooltip.json +22 -0
- package/registry/r/topnav.json +22 -0
- package/registry/r/types.json +15 -0
- package/registry/r/usage-meter.json +21 -0
- package/registry/r/whiteboard.json +101 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/branch-indicator/branch-indicator.tsx"],"names":[],"mappings":";;;;AAiBO,IAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CAAC,EAAE,WAAA,EAAa,WAAA,EAAa,SAAA,EAAW,eAAe,UAAA,EAAY,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AACpF,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,WAAW,CAAA,IAAK,WAAA,GAAc,GAAG,OAAO,IAAA;AAC9D,IAAA,uBACE,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qEAAA;AAAA,UACA,yDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,eAAe,CAAA,aAAA,EAAgB,WAAA,GAAc,CAAC,CAAA,KAAA,EAAQ,WAAA,GAAc,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAA;AAAA,QACvF,eAAa,UAAA,IAAc,kBAAA;AAAA,QAC3B,mBAAA,EAAmB,WAAA;AAAA,QAClB,GAAG,IAAA;AAAA,QACL,QAAA,EAAA;AAAA,UAAA,MAAA;AAAA,UACG;AAAA;AAAA;AAAA,KACJ;AAAA,EAEJ;AACF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-2H6TQELG.js","sourcesContent":["import { type HTMLAttributes, forwardRef } from \"react\";\n\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * BranchIndicator — small \"×N\" pill that shows when a run was retried/branched.\n *\n * Renders `null` when `branchCount < 2` OR when not a positive integer.\n * EC-10 guard: parametrized over [-1, 0, 0.5] in tests.\n */\n\nexport interface BranchIndicatorProps extends HTMLAttributes<HTMLSpanElement> {\n branchCount: number;\n tooltipText?: string;\n \"data-testid\"?: string;\n}\n\nexport const BranchIndicator = forwardRef<HTMLSpanElement, BranchIndicatorProps>(\n ({ branchCount, tooltipText, className, \"data-testid\": dataTestId, ...rest }, ref) => {\n if (!Number.isInteger(branchCount) || branchCount < 2) return null;\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center rounded-full border border-border bg-muted\",\n \"px-1.5 py-0.5 font-medium text-muted-foreground text-xs\",\n className,\n )}\n title={tooltipText ?? `Run branched ${branchCount - 1} time${branchCount > 2 ? \"s\" : \"\"}`}\n data-testid={dataTestId ?? \"branch-indicator\"}\n data-branch-count={branchCount}\n {...rest}\n >\n ×{branchCount}\n </span>\n );\n },\n);\nBranchIndicator.displayName = \"BranchIndicator\";\n"]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import { Webhook, MessageCircle, Slack, Send, Settings, Power } from 'lucide-react';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var PLATFORM_ICON = {
|
|
7
|
+
telegram: Send,
|
|
8
|
+
discord: MessageCircle,
|
|
9
|
+
slack: Slack,
|
|
10
|
+
whatsapp: MessageCircle,
|
|
11
|
+
webhook: Webhook,
|
|
12
|
+
mcp: Webhook
|
|
13
|
+
};
|
|
14
|
+
var PLATFORM_LABEL = {
|
|
15
|
+
telegram: "Telegram",
|
|
16
|
+
discord: "Discord",
|
|
17
|
+
slack: "Slack",
|
|
18
|
+
whatsapp: "WhatsApp",
|
|
19
|
+
webhook: "Webhook",
|
|
20
|
+
mcp: "MCP"
|
|
21
|
+
};
|
|
22
|
+
var STATUS_CONFIG = {
|
|
23
|
+
connected: { label: "Connected", class: "border-success/40 bg-success/15 text-success" },
|
|
24
|
+
connecting: {
|
|
25
|
+
label: "Connecting",
|
|
26
|
+
class: "border-primary/40 bg-primary/15 text-primary animate-pulse"
|
|
27
|
+
},
|
|
28
|
+
disconnected: {
|
|
29
|
+
label: "Disconnected",
|
|
30
|
+
class: "border-muted-foreground/40 bg-muted/40 text-muted-foreground"
|
|
31
|
+
},
|
|
32
|
+
error: { label: "Error", class: "border-destructive/40 bg-destructive/15 text-destructive" }
|
|
33
|
+
};
|
|
34
|
+
var ChannelCard = forwardRef(
|
|
35
|
+
({ className, channel, onConfigure, onToggle, ...props }, ref) => {
|
|
36
|
+
const cfg = STATUS_CONFIG[channel.status];
|
|
37
|
+
const Icon = PLATFORM_ICON[channel.platform];
|
|
38
|
+
const enabled = channel.status === "connected";
|
|
39
|
+
const togglePending = channel.status === "connecting";
|
|
40
|
+
return /* @__PURE__ */ jsxs(
|
|
41
|
+
"article",
|
|
42
|
+
{
|
|
43
|
+
ref,
|
|
44
|
+
className: cn("grid gap-3 rounded-xl border bg-card p-4", className),
|
|
45
|
+
"aria-label": `Channel ${channel.name}`,
|
|
46
|
+
...props,
|
|
47
|
+
children: [
|
|
48
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-start justify-between gap-3", children: [
|
|
49
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
50
|
+
/* @__PURE__ */ jsx(Icon, { className: "size-4 shrink-0 text-primary", "aria-hidden": "true" }),
|
|
51
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
52
|
+
/* @__PURE__ */ jsx("h4", { className: "font-medium font-mono text-body-sm text-foreground", children: channel.name }),
|
|
53
|
+
/* @__PURE__ */ jsx("p", { className: "truncate font-mono text-label text-muted-foreground", children: PLATFORM_LABEL[channel.platform] })
|
|
54
|
+
] })
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsx(
|
|
57
|
+
"span",
|
|
58
|
+
{
|
|
59
|
+
className: cn(
|
|
60
|
+
"inline-flex shrink-0 items-center rounded-full border px-2.5 py-0.5",
|
|
61
|
+
"font-mono text-label uppercase tracking-wider",
|
|
62
|
+
cfg.class
|
|
63
|
+
),
|
|
64
|
+
children: cfg.label
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
] }),
|
|
68
|
+
channel.description ? /* @__PURE__ */ jsx("p", { className: "font-sans text-body-sm text-muted-foreground", children: channel.description }) : null,
|
|
69
|
+
(channel.lastSeen !== void 0 || channel.messageCount !== void 0) && /* @__PURE__ */ jsxs("dl", { className: "grid grid-cols-2 gap-2 font-mono text-label", children: [
|
|
70
|
+
channel.lastSeen !== void 0 ? /* @__PURE__ */ jsxs("div", { children: [
|
|
71
|
+
/* @__PURE__ */ jsx("dt", { className: "text-muted-foreground uppercase tracking-wider", children: "Last seen" }),
|
|
72
|
+
/* @__PURE__ */ jsx("dd", { className: "text-foreground", children: channel.lastSeen })
|
|
73
|
+
] }) : null,
|
|
74
|
+
channel.messageCount !== void 0 ? /* @__PURE__ */ jsxs("div", { children: [
|
|
75
|
+
/* @__PURE__ */ jsx("dt", { className: "text-muted-foreground uppercase tracking-wider", children: "Messages" }),
|
|
76
|
+
/* @__PURE__ */ jsx("dd", { className: "text-foreground", children: channel.messageCount.toLocaleString() })
|
|
77
|
+
] }) : null
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsxs("footer", { className: "flex items-center justify-end gap-1.5", children: [
|
|
80
|
+
onConfigure ? /* @__PURE__ */ jsxs(
|
|
81
|
+
"button",
|
|
82
|
+
{
|
|
83
|
+
type: "button",
|
|
84
|
+
onClick: () => onConfigure(channel.id),
|
|
85
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ jsx(Settings, { className: "size-3" }),
|
|
88
|
+
" Configure"
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
) : null,
|
|
92
|
+
onToggle ? /* @__PURE__ */ jsxs(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
type: "button",
|
|
96
|
+
onClick: () => onToggle(channel.id, !enabled),
|
|
97
|
+
disabled: togglePending,
|
|
98
|
+
"aria-pressed": enabled,
|
|
99
|
+
className: cn(
|
|
100
|
+
"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
101
|
+
togglePending && "cursor-not-allowed opacity-60",
|
|
102
|
+
enabled && "text-success"
|
|
103
|
+
),
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ jsx(Power, { className: "size-3" }),
|
|
106
|
+
enabled ? "Disconnect" : "Connect"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
) : null
|
|
110
|
+
] })
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
ChannelCard.displayName = "ChannelCard";
|
|
117
|
+
|
|
118
|
+
export { ChannelCard };
|
|
119
|
+
//# sourceMappingURL=chunk-2L6MRJD4.js.map
|
|
120
|
+
//# sourceMappingURL=chunk-2L6MRJD4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/channel-card/channel-card.tsx"],"names":[],"mappings":"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","file":"chunk-2L6MRJD4.js","sourcesContent":["import {\n type LucideIcon,\n MessageCircle,\n Power,\n Send,\n Settings,\n Slack,\n Webhook,\n} from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport type ChannelPlatform = \"telegram\" | \"discord\" | \"slack\" | \"whatsapp\" | \"webhook\" | \"mcp\";\n\nexport type ChannelStatus = \"disconnected\" | \"connecting\" | \"connected\" | \"error\";\n\nexport interface Channel {\n id: string;\n name: string;\n platform: ChannelPlatform;\n status: ChannelStatus;\n description?: ReactNode;\n lastSeen?: string;\n messageCount?: number;\n}\n\nconst PLATFORM_ICON: Record<ChannelPlatform, LucideIcon> = {\n telegram: Send,\n discord: MessageCircle,\n slack: Slack,\n whatsapp: MessageCircle,\n webhook: Webhook,\n mcp: Webhook,\n};\n\nconst PLATFORM_LABEL: Record<ChannelPlatform, string> = {\n telegram: \"Telegram\",\n discord: \"Discord\",\n slack: \"Slack\",\n whatsapp: \"WhatsApp\",\n webhook: \"Webhook\",\n mcp: \"MCP\",\n};\n\nconst STATUS_CONFIG: Record<ChannelStatus, { label: string; class: string }> = {\n connected: { label: \"Connected\", class: \"border-success/40 bg-success/15 text-success\" },\n connecting: {\n label: \"Connecting\",\n class: \"border-primary/40 bg-primary/15 text-primary animate-pulse\",\n },\n disconnected: {\n label: \"Disconnected\",\n class: \"border-muted-foreground/40 bg-muted/40 text-muted-foreground\",\n },\n error: { label: \"Error\", class: \"border-destructive/40 bg-destructive/15 text-destructive\" },\n};\n\ninterface ChannelCardProps extends HTMLAttributes<HTMLElement> {\n channel: Channel;\n onConfigure?: (id: string) => void;\n onToggle?: (id: string, enabled: boolean) => void;\n}\n\n/**\n * ChannelCard — inbound gateway connection (Telegram, Discord, Slack, …)\n * showing its connection status, platform, and inline controls.\n *\n * EC absorbed: the toggle reflects the *current* status. \"connected\" implies\n * enabled (toggle off disconnects); \"disconnected\"/\"error\" implies disabled\n * (toggle on reconnects). \"connecting\" is a transient state — toggle is a\n * no-op (button disabled).\n */\nconst ChannelCard = forwardRef<HTMLElement, ChannelCardProps>(\n ({ className, channel, onConfigure, onToggle, ...props }, ref) => {\n const cfg = STATUS_CONFIG[channel.status];\n const Icon = PLATFORM_ICON[channel.platform];\n const enabled = channel.status === \"connected\";\n const togglePending = channel.status === \"connecting\";\n\n return (\n <article\n ref={ref}\n className={cn(\"grid gap-3 rounded-xl border bg-card p-4\", className)}\n aria-label={`Channel ${channel.name}`}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Icon className=\"size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n <div className=\"min-w-0\">\n <h4 className=\"font-medium font-mono text-body-sm text-foreground\">{channel.name}</h4>\n <p className=\"truncate font-mono text-label text-muted-foreground\">\n {PLATFORM_LABEL[channel.platform]}\n </p>\n </div>\n </div>\n <span\n className={cn(\n \"inline-flex shrink-0 items-center rounded-full border px-2.5 py-0.5\",\n \"font-mono text-label uppercase tracking-wider\",\n cfg.class,\n )}\n >\n {cfg.label}\n </span>\n </header>\n\n {channel.description ? (\n <p className=\"font-sans text-body-sm text-muted-foreground\">{channel.description}</p>\n ) : null}\n\n {(channel.lastSeen !== undefined || channel.messageCount !== undefined) && (\n <dl className=\"grid grid-cols-2 gap-2 font-mono text-label\">\n {channel.lastSeen !== undefined ? (\n <div>\n <dt className=\"text-muted-foreground uppercase tracking-wider\">Last seen</dt>\n <dd className=\"text-foreground\">{channel.lastSeen}</dd>\n </div>\n ) : null}\n {channel.messageCount !== undefined ? (\n <div>\n <dt className=\"text-muted-foreground uppercase tracking-wider\">Messages</dt>\n <dd className=\"text-foreground\">{channel.messageCount.toLocaleString()}</dd>\n </div>\n ) : null}\n </dl>\n )}\n\n <footer className=\"flex items-center justify-end gap-1.5\">\n {onConfigure ? (\n <button\n type=\"button\"\n onClick={() => onConfigure(channel.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Settings className=\"size-3\" /> Configure\n </button>\n ) : null}\n {onToggle ? (\n <button\n type=\"button\"\n onClick={() => onToggle(channel.id, !enabled)}\n disabled={togglePending}\n aria-pressed={enabled}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n togglePending && \"cursor-not-allowed opacity-60\",\n enabled && \"text-success\",\n )}\n >\n <Power className=\"size-3\" />\n {enabled ? \"Disconnect\" : \"Connect\"}\n </button>\n ) : null}\n </footer>\n </article>\n );\n },\n);\nChannelCard.displayName = \"ChannelCard\";\n\nexport { ChannelCard };\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var formatTokens = (n) => {
|
|
6
|
+
if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
|
|
7
|
+
if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
|
|
8
|
+
return `${n}`;
|
|
9
|
+
};
|
|
10
|
+
var ContextWindowBar = forwardRef(
|
|
11
|
+
({
|
|
12
|
+
className,
|
|
13
|
+
used,
|
|
14
|
+
total,
|
|
15
|
+
trailing,
|
|
16
|
+
label = "Context",
|
|
17
|
+
compact,
|
|
18
|
+
warnAt = 0.7,
|
|
19
|
+
dangerAt = 0.9,
|
|
20
|
+
...props
|
|
21
|
+
}, ref) => {
|
|
22
|
+
const ratio = Math.max(0, Math.min(1, used / total));
|
|
23
|
+
const tone = ratio >= dangerAt ? "destructive" : ratio >= warnAt ? "warning" : "primary";
|
|
24
|
+
const percent = Math.round(ratio * 100);
|
|
25
|
+
const barColor = {
|
|
26
|
+
primary: "bg-primary",
|
|
27
|
+
warning: "bg-warning",
|
|
28
|
+
destructive: "bg-destructive"
|
|
29
|
+
}[tone];
|
|
30
|
+
const textColor = {
|
|
31
|
+
primary: "text-foreground",
|
|
32
|
+
warning: "text-warning",
|
|
33
|
+
destructive: "text-destructive"
|
|
34
|
+
}[tone];
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", { ref, className: cn("grid gap-1.5", className), ...props, children: [
|
|
36
|
+
!compact ? /* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: label }),
|
|
38
|
+
/* @__PURE__ */ jsxs("span", { className: cn("font-mono text-body-sm tabular-nums", textColor), children: [
|
|
39
|
+
formatTokens(used),
|
|
40
|
+
" / ",
|
|
41
|
+
formatTokens(total),
|
|
42
|
+
" ",
|
|
43
|
+
/* @__PURE__ */ jsxs("span", { className: "opacity-60", children: [
|
|
44
|
+
"(",
|
|
45
|
+
percent,
|
|
46
|
+
"%)"
|
|
47
|
+
] })
|
|
48
|
+
] })
|
|
49
|
+
] }) : null,
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
className: "h-1.5 w-full overflow-hidden rounded-full bg-muted",
|
|
54
|
+
role: "progressbar",
|
|
55
|
+
tabIndex: -1,
|
|
56
|
+
"aria-valuenow": used,
|
|
57
|
+
"aria-valuemin": 0,
|
|
58
|
+
"aria-valuemax": total,
|
|
59
|
+
"aria-label": `${percent}% of context window used`,
|
|
60
|
+
children: /* @__PURE__ */ jsx(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
className: cn(
|
|
64
|
+
"h-full rounded-full transition-[width,background-color] duration-base ease-out-soft",
|
|
65
|
+
barColor
|
|
66
|
+
),
|
|
67
|
+
style: { width: `${percent}%` }
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
trailing ? /* @__PURE__ */ jsx("div", { className: "font-mono text-label text-muted-foreground", children: trailing }) : null
|
|
73
|
+
] });
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
ContextWindowBar.displayName = "ContextWindowBar";
|
|
77
|
+
|
|
78
|
+
export { ContextWindowBar };
|
|
79
|
+
//# sourceMappingURL=chunk-2Y5V2PAL.js.map
|
|
80
|
+
//# sourceMappingURL=chunk-2Y5V2PAL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/context-window-bar/context-window-bar.tsx"],"names":[],"mappings":"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","file":"chunk-2Y5V2PAL.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface ContextWindowBarProps extends HTMLAttributes<HTMLDivElement> {\n /** Tokens currently used in the context window. */\n used: number;\n /** Model's total context capacity (e.g. 200_000, 1_000_000). */\n total: number;\n /** Optional secondary label rendered on the right (e.g. model name). */\n trailing?: ReactNode;\n /** Optional title shown above the bar. */\n label?: ReactNode;\n /** Compact mode hides numbers and label; just the bar. */\n compact?: boolean;\n /**\n * Override warning thresholds (0..1). Defaults: warn 0.7, danger 0.9.\n */\n warnAt?: number;\n dangerAt?: number;\n}\n\nconst formatTokens = (n: number) => {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}k`;\n return `${n}`;\n};\n\n/**\n * ContextWindowBar — shows how much of the model's context window has been\n * consumed. Color transitions: success → warning → destructive past thresholds.\n *\n * Critical for transparency: a user should always be able to glance at this\n * and know if the conversation is about to hit the cap.\n */\nconst ContextWindowBar = forwardRef<HTMLDivElement, ContextWindowBarProps>(\n (\n {\n className,\n used,\n total,\n trailing,\n label = \"Context\",\n compact,\n warnAt = 0.7,\n dangerAt = 0.9,\n ...props\n },\n ref,\n ) => {\n const ratio = Math.max(0, Math.min(1, used / total));\n const tone = ratio >= dangerAt ? \"destructive\" : ratio >= warnAt ? \"warning\" : \"primary\";\n const percent = Math.round(ratio * 100);\n\n const barColor = {\n primary: \"bg-primary\",\n warning: \"bg-warning\",\n destructive: \"bg-destructive\",\n }[tone];\n\n const textColor = {\n primary: \"text-foreground\",\n warning: \"text-warning\",\n destructive: \"text-destructive\",\n }[tone];\n\n return (\n <div ref={ref} className={cn(\"grid gap-1.5\", className)} {...props}>\n {!compact ? (\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {label}\n </span>\n <span className={cn(\"font-mono text-body-sm tabular-nums\", textColor)}>\n {formatTokens(used)} / {formatTokens(total)}{\" \"}\n <span className=\"opacity-60\">({percent}%)</span>\n </span>\n </div>\n ) : null}\n <div\n className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\"\n role=\"progressbar\"\n tabIndex={-1}\n aria-valuenow={used}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={`${percent}% of context window used`}\n >\n <div\n className={cn(\n \"h-full rounded-full transition-[width,background-color] duration-base ease-out-soft\",\n barColor,\n )}\n style={{ width: `${percent}%` }}\n />\n </div>\n {trailing ? (\n <div className=\"font-mono text-label text-muted-foreground\">{trailing}</div>\n ) : null}\n </div>\n );\n },\n);\nContextWindowBar.displayName = \"ContextWindowBar\";\n\nexport { ContextWindowBar };\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var Root = forwardRef(
|
|
6
|
+
({ className, title = "Danger Zone", children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
7
|
+
"section",
|
|
8
|
+
{
|
|
9
|
+
ref,
|
|
10
|
+
"aria-label": typeof title === "string" ? title : "Danger Zone",
|
|
11
|
+
className: cn("rounded-xl border border-destructive/30 bg-destructive/[0.02]", className),
|
|
12
|
+
...props,
|
|
13
|
+
children: [
|
|
14
|
+
/* @__PURE__ */ jsx("div", { className: "border-destructive/20 border-b px-5 py-3 font-sans text-destructive text-label-caps uppercase tracking-wider", children: title }),
|
|
15
|
+
children
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
)
|
|
19
|
+
);
|
|
20
|
+
Root.displayName = "DangerZone";
|
|
21
|
+
var Action = forwardRef(
|
|
22
|
+
({ className, title, description, action, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
ref,
|
|
26
|
+
className: cn(
|
|
27
|
+
"flex items-center justify-between gap-4 border-destructive/10 border-b px-5 py-4 last:border-b-0",
|
|
28
|
+
className
|
|
29
|
+
),
|
|
30
|
+
...props,
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium font-sans text-body-sm text-foreground", children: title }),
|
|
34
|
+
/* @__PURE__ */ jsx("span", { className: "mt-0.5 font-sans text-label text-muted-foreground", children: description })
|
|
35
|
+
] }),
|
|
36
|
+
/* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
);
|
|
41
|
+
Action.displayName = "DangerZone.Action";
|
|
42
|
+
var DangerZone = Object.assign(Root, { Action });
|
|
43
|
+
|
|
44
|
+
export { DangerZone };
|
|
45
|
+
//# sourceMappingURL=chunk-34NAFDVL.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-34NAFDVL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/danger-zone/danger-zone.tsx"],"names":[],"mappings":";;;;AA+BA,IAAM,IAAA,GAAO,UAAA;AAAA,EACX,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,eAAe,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACzD,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,aAAA;AAAA,MAChD,SAAA,EAAW,EAAA,CAAG,+DAAA,EAAiE,SAAS,CAAA;AAAA,MACvF,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8GAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC;AAAA;AAAA;AAAA;AAGP,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,YAAA;AASnB,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,aAAa,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpD,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,kGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EAAsD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BAC5E,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EAAqD,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EACnF,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AAGxC,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,mBAAA;AAGrB,IAAM,aAA6B,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,EAAE,QAAQ","file":"chunk-34NAFDVL.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * DangerZone — destructive-actions section primitive.\n *\n * Red-bordered container with a title bar and `DangerZone.Action` rows.\n * Each Action is laid out as title + description on the left, with a\n * consumer-provided action slot (typically a destructive Button) on\n * the right. Rows are separated by hairline dividers; the last row\n * has no bottom border via `last:border-b-0`.\n *\n * The consumer supplies the destructive button — this primitive never\n * imports `<Button>`, keeping it free of internal `@theokit/ui` deps\n * (true primitive).\n *\n * @example\n * <DangerZone>\n * <DangerZone.Action\n * title=\"Delete project\"\n * description=\"Permanently delete this project.\"\n * action={<Button variant=\"destructive\">Delete</Button>}\n * />\n * </DangerZone>\n */\nexport interface DangerZoneProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n /** Section title. Default \"Danger Zone\". */\n title?: ReactNode;\n}\n\nconst Root = forwardRef<HTMLElement, DangerZoneProps>(\n ({ className, title = \"Danger Zone\", children, ...props }, ref) => (\n <section\n ref={ref}\n aria-label={typeof title === \"string\" ? title : \"Danger Zone\"}\n className={cn(\"rounded-xl border border-destructive/30 bg-destructive/[0.02]\", className)}\n {...props}\n >\n <div className=\"border-destructive/20 border-b px-5 py-3 font-sans text-destructive text-label-caps uppercase tracking-wider\">\n {title}\n </div>\n {children}\n </section>\n ),\n);\nRoot.displayName = \"DangerZone\";\n\nexport interface DangerZoneActionProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description: ReactNode;\n /** Consumer-provided destructive button (or any ReactNode). */\n action: ReactNode;\n}\n\nconst Action = forwardRef<HTMLDivElement, DangerZoneActionProps>(\n ({ className, title, description, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-4 border-destructive/10 border-b px-5 py-4 last:border-b-0\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium font-sans text-body-sm text-foreground\">{title}</span>\n <span className=\"mt-0.5 font-sans text-label text-muted-foreground\">{description}</span>\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ),\n);\nAction.displayName = \"DangerZone.Action\";\n\ntype DangerZoneRoot = typeof Root & { Action: typeof Action };\nconst DangerZone: DangerZoneRoot = Object.assign(Root, { Action });\n\nexport { DangerZone };\n"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import { Server, RotateCcw, Plug } from 'lucide-react';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var STATUS_CONFIG = {
|
|
7
|
+
connected: { label: "Connected", class: "border-success/40 bg-success/15 text-success" },
|
|
8
|
+
starting: {
|
|
9
|
+
label: "Starting",
|
|
10
|
+
class: "border-primary/40 bg-primary/15 text-primary animate-pulse"
|
|
11
|
+
},
|
|
12
|
+
degraded: { label: "Degraded", class: "border-warning/40 bg-warning/15 text-warning" },
|
|
13
|
+
disconnected: {
|
|
14
|
+
label: "Disconnected",
|
|
15
|
+
class: "border-destructive/40 bg-destructive/15 text-destructive"
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var MCPServerCard = forwardRef(
|
|
19
|
+
({ className, server, onRestart, onDisconnect, ...props }, ref) => {
|
|
20
|
+
const cfg = STATUS_CONFIG[server.status];
|
|
21
|
+
return /* @__PURE__ */ jsxs(
|
|
22
|
+
"article",
|
|
23
|
+
{
|
|
24
|
+
ref,
|
|
25
|
+
className: cn("grid gap-3 rounded-xl border bg-card p-4", className),
|
|
26
|
+
...props,
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-start justify-between gap-3", children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Server, { className: "size-4 shrink-0 text-primary", "aria-hidden": "true" }),
|
|
31
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
32
|
+
/* @__PURE__ */ jsx("h4", { className: "font-medium font-mono text-body-sm text-foreground", children: server.name }),
|
|
33
|
+
/* @__PURE__ */ jsx("p", { className: "truncate font-mono text-label text-muted-foreground", children: server.endpoint })
|
|
34
|
+
] })
|
|
35
|
+
] }),
|
|
36
|
+
/* @__PURE__ */ jsx(
|
|
37
|
+
"span",
|
|
38
|
+
{
|
|
39
|
+
className: cn(
|
|
40
|
+
"inline-flex shrink-0 items-center rounded-full border px-2.5 py-0.5",
|
|
41
|
+
"font-mono text-label uppercase tracking-wider",
|
|
42
|
+
cfg.class
|
|
43
|
+
),
|
|
44
|
+
children: cfg.label
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
] }),
|
|
48
|
+
server.message ? /* @__PURE__ */ jsx("p", { className: "rounded-md border border-warning/30 bg-warning/10 px-3 py-2 font-mono text-code-sm text-warning", children: server.message }) : null,
|
|
49
|
+
server.tools.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
|
|
50
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: [
|
|
51
|
+
server.tools.length,
|
|
52
|
+
" tools"
|
|
53
|
+
] }),
|
|
54
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: server.tools.map((tool) => /* @__PURE__ */ jsx(
|
|
55
|
+
"span",
|
|
56
|
+
{
|
|
57
|
+
className: "inline-flex items-center rounded-md bg-muted px-2 py-0.5 font-mono text-foreground text-label",
|
|
58
|
+
children: tool
|
|
59
|
+
},
|
|
60
|
+
tool
|
|
61
|
+
)) })
|
|
62
|
+
] }) : null,
|
|
63
|
+
server.resources && server.resources.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
|
|
64
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: [
|
|
65
|
+
server.resources.length,
|
|
66
|
+
" resources"
|
|
67
|
+
] }),
|
|
68
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: server.resources.map((r) => /* @__PURE__ */ jsx(
|
|
69
|
+
"span",
|
|
70
|
+
{
|
|
71
|
+
className: "inline-flex items-center rounded-md bg-accent/10 px-2 py-0.5 font-mono text-accent text-label",
|
|
72
|
+
children: r
|
|
73
|
+
},
|
|
74
|
+
r
|
|
75
|
+
)) })
|
|
76
|
+
] }) : null,
|
|
77
|
+
/* @__PURE__ */ jsxs("footer", { className: "flex items-center justify-end gap-1.5", children: [
|
|
78
|
+
onRestart ? /* @__PURE__ */ jsxs(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: () => onRestart(server.id),
|
|
83
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ jsx(RotateCcw, { className: "size-3" }),
|
|
86
|
+
" Restart"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
) : null,
|
|
90
|
+
onDisconnect ? /* @__PURE__ */ jsxs(
|
|
91
|
+
"button",
|
|
92
|
+
{
|
|
93
|
+
type: "button",
|
|
94
|
+
onClick: () => onDisconnect(server.id),
|
|
95
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ jsx(Plug, { className: "size-3" }),
|
|
98
|
+
" Disconnect"
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
) : null
|
|
102
|
+
] })
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
MCPServerCard.displayName = "MCPServerCard";
|
|
109
|
+
|
|
110
|
+
export { MCPServerCard };
|
|
111
|
+
//# sourceMappingURL=chunk-36KJGXEK.js.map
|
|
112
|
+
//# sourceMappingURL=chunk-36KJGXEK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/mcp-server-card/mcp-server-card.tsx"],"names":[],"mappings":"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","file":"chunk-36KJGXEK.js","sourcesContent":["import { Plug, RotateCcw, Server } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport type MCPServerStatus = \"connected\" | \"degraded\" | \"disconnected\" | \"starting\";\n\nexport interface MCPServer {\n id: string;\n /** Friendly name, e.g. \"postgres\". */\n name: string;\n /** Transport endpoint (stdio command or URL). */\n endpoint: string;\n status: MCPServerStatus;\n /** Tools exposed by the server. */\n tools: string[];\n /** Optional resources exposed. */\n resources?: string[];\n /** Diagnostic message when degraded/disconnected. */\n message?: ReactNode;\n /** Auto-restart toggle hint. */\n autoRestart?: boolean;\n}\n\nconst STATUS_CONFIG: Record<MCPServerStatus, { label: string; class: string }> = {\n connected: { label: \"Connected\", class: \"border-success/40 bg-success/15 text-success\" },\n starting: {\n label: \"Starting\",\n class: \"border-primary/40 bg-primary/15 text-primary animate-pulse\",\n },\n degraded: { label: \"Degraded\", class: \"border-warning/40 bg-warning/15 text-warning\" },\n disconnected: {\n label: \"Disconnected\",\n class: \"border-destructive/40 bg-destructive/15 text-destructive\",\n },\n};\n\ninterface MCPServerCardProps extends HTMLAttributes<HTMLElement> {\n server: MCPServer;\n onRestart?: (id: string) => void;\n onDisconnect?: (id: string) => void;\n}\n\n/**\n * MCPServerCard — one MCP server entry showing connection status, the tools\n * it exposes, and inline controls (restart, disconnect).\n *\n * Pairs with claw-code's \"degraded startup reporting\" — failed servers can\n * still appear here with a recovery message.\n */\nconst MCPServerCard = forwardRef<HTMLElement, MCPServerCardProps>(\n ({ className, server, onRestart, onDisconnect, ...props }, ref) => {\n const cfg = STATUS_CONFIG[server.status];\n return (\n <article\n ref={ref}\n className={cn(\"grid gap-3 rounded-xl border bg-card p-4\", className)}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Server className=\"size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n <div className=\"min-w-0\">\n <h4 className=\"font-medium font-mono text-body-sm text-foreground\">{server.name}</h4>\n <p className=\"truncate font-mono text-label text-muted-foreground\">\n {server.endpoint}\n </p>\n </div>\n </div>\n <span\n className={cn(\n \"inline-flex shrink-0 items-center rounded-full border px-2.5 py-0.5\",\n \"font-mono text-label uppercase tracking-wider\",\n cfg.class,\n )}\n >\n {cfg.label}\n </span>\n </header>\n\n {server.message ? (\n <p className=\"rounded-md border border-warning/30 bg-warning/10 px-3 py-2 font-mono text-code-sm text-warning\">\n {server.message}\n </p>\n ) : null}\n\n {server.tools.length > 0 ? (\n <div className=\"grid gap-1.5\">\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {server.tools.length} tools\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {server.tools.map((tool) => (\n <span\n key={tool}\n className=\"inline-flex items-center rounded-md bg-muted px-2 py-0.5 font-mono text-foreground text-label\"\n >\n {tool}\n </span>\n ))}\n </div>\n </div>\n ) : null}\n\n {server.resources && server.resources.length > 0 ? (\n <div className=\"grid gap-1.5\">\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {server.resources.length} resources\n </span>\n <div className=\"flex flex-wrap gap-1.5\">\n {server.resources.map((r) => (\n <span\n key={r}\n className=\"inline-flex items-center rounded-md bg-accent/10 px-2 py-0.5 font-mono text-accent text-label\"\n >\n {r}\n </span>\n ))}\n </div>\n </div>\n ) : null}\n\n <footer className=\"flex items-center justify-end gap-1.5\">\n {onRestart ? (\n <button\n type=\"button\"\n onClick={() => onRestart(server.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <RotateCcw className=\"size-3\" /> Restart\n </button>\n ) : null}\n {onDisconnect ? (\n <button\n type=\"button\"\n onClick={() => onDisconnect(server.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Plug className=\"size-3\" /> Disconnect\n </button>\n ) : null}\n </footer>\n </article>\n );\n },\n);\nMCPServerCard.displayName = \"MCPServerCard\";\n\nexport { MCPServerCard };\n"]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { X } from 'lucide-react';
|
|
5
|
+
import { forwardRef } from 'react';
|
|
6
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var Overlay2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
9
|
+
DialogPrimitive.Overlay,
|
|
10
|
+
{
|
|
11
|
+
ref,
|
|
12
|
+
className: cn(
|
|
13
|
+
"fixed inset-0 z-50 bg-background/80",
|
|
14
|
+
"data-[state=open]:fade-in-0 data-[state=open]:animate-in",
|
|
15
|
+
"data-[state=closed]:fade-out-0 data-[state=closed]:animate-out",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
));
|
|
21
|
+
Overlay2.displayName = "Sheet.Overlay";
|
|
22
|
+
var sheetVariants = cva(
|
|
23
|
+
[
|
|
24
|
+
"fixed z-50 flex flex-col gap-3 border-border/40 bg-card text-card-foreground shadow-lg",
|
|
25
|
+
"transition duration-base ease-out-soft",
|
|
26
|
+
"data-[state=closed]:animate-out data-[state=open]:animate-in"
|
|
27
|
+
],
|
|
28
|
+
{
|
|
29
|
+
variants: {
|
|
30
|
+
side: {
|
|
31
|
+
right: "data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right inset-y-0 right-0 h-full w-3/4 max-w-md border-l",
|
|
32
|
+
left: "data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left inset-y-0 left-0 h-full w-3/4 max-w-md border-r",
|
|
33
|
+
top: "data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top inset-x-0 top-0 h-auto max-h-[80vh] border-b",
|
|
34
|
+
bottom: "data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom inset-x-0 bottom-0 h-auto max-h-[80vh] border-t"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
defaultVariants: { side: "right" }
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
var Content2 = forwardRef(
|
|
41
|
+
({ className, children, hideCloseButton, side = "right", ...props }, ref) => /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
|
|
42
|
+
/* @__PURE__ */ jsx(Overlay2, {}),
|
|
43
|
+
/* @__PURE__ */ jsxs(
|
|
44
|
+
DialogPrimitive.Content,
|
|
45
|
+
{
|
|
46
|
+
ref,
|
|
47
|
+
className: cn(sheetVariants({ side }), className),
|
|
48
|
+
...props,
|
|
49
|
+
children: [
|
|
50
|
+
children,
|
|
51
|
+
!hideCloseButton ? /* @__PURE__ */ jsxs(
|
|
52
|
+
DialogPrimitive.Close,
|
|
53
|
+
{
|
|
54
|
+
className: cn(
|
|
55
|
+
"absolute top-4 right-4 rounded-md p-1 opacity-70",
|
|
56
|
+
"transition-opacity hover:opacity-100",
|
|
57
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
|
|
58
|
+
"disabled:pointer-events-none"
|
|
59
|
+
),
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ jsx(X, { className: "size-4" }),
|
|
62
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
) : null
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
] })
|
|
70
|
+
);
|
|
71
|
+
Content2.displayName = "Sheet.Content";
|
|
72
|
+
var Header = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
73
|
+
"div",
|
|
74
|
+
{
|
|
75
|
+
className: cn("flex flex-col gap-1.5 border-border/40 border-b px-6 py-5 text-left", className),
|
|
76
|
+
...props
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
Header.displayName = "Sheet.Header";
|
|
80
|
+
var Body = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex-1 overflow-y-auto px-6 py-4 text-body-md", className), ...props });
|
|
81
|
+
Body.displayName = "Sheet.Body";
|
|
82
|
+
var Footer = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
83
|
+
"div",
|
|
84
|
+
{
|
|
85
|
+
className: cn(
|
|
86
|
+
"flex flex-col-reverse gap-2 border-border/40 border-t px-6 py-4 sm:flex-row sm:justify-end",
|
|
87
|
+
className
|
|
88
|
+
),
|
|
89
|
+
...props
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
Footer.displayName = "Sheet.Footer";
|
|
93
|
+
var Title2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
94
|
+
DialogPrimitive.Title,
|
|
95
|
+
{
|
|
96
|
+
ref,
|
|
97
|
+
className: cn("font-display text-foreground text-title-lg tracking-tight", className),
|
|
98
|
+
...props
|
|
99
|
+
}
|
|
100
|
+
));
|
|
101
|
+
Title2.displayName = "Sheet.Title";
|
|
102
|
+
var Description2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
103
|
+
DialogPrimitive.Description,
|
|
104
|
+
{
|
|
105
|
+
ref,
|
|
106
|
+
className: cn("text-body-sm text-muted-foreground", className),
|
|
107
|
+
...props
|
|
108
|
+
}
|
|
109
|
+
));
|
|
110
|
+
Description2.displayName = "Sheet.Description";
|
|
111
|
+
var Sheet = DialogPrimitive.Root;
|
|
112
|
+
Sheet.Trigger = DialogPrimitive.Trigger;
|
|
113
|
+
Sheet.Close = DialogPrimitive.Close;
|
|
114
|
+
Sheet.Content = Content2;
|
|
115
|
+
Sheet.Overlay = Overlay2;
|
|
116
|
+
Sheet.Header = Header;
|
|
117
|
+
Sheet.Body = Body;
|
|
118
|
+
Sheet.Footer = Footer;
|
|
119
|
+
Sheet.Title = Title2;
|
|
120
|
+
Sheet.Description = Description2;
|
|
121
|
+
|
|
122
|
+
export { Sheet, sheetVariants };
|
|
123
|
+
//# sourceMappingURL=chunk-3BMYYNN6.js.map
|
|
124
|
+
//# sourceMappingURL=chunk-3BMYYNN6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/sheet/sheet.tsx"],"names":["Overlay","Content","Title","Description"],"mappings":";;;;;;;AA4BA,IAAMA,QAAAA,GAAU,WAGd,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qCAAA;AAAA,MACA,0DAAA;AAAA,MACA,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD,CAAA;AACDA,QAAAA,CAAQ,WAAA,GAAc,eAAA;AAEtB,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB;AAAA,IACE,wFAAA;AAAA,IACA,wCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,KAAA,EACE,+HAAA;AAAA,QACF,IAAA,EAAM,4HAAA;AAAA,QACN,GAAA,EAAK,uHAAA;AAAA,QACL,MAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,OAAA;AAAQ;AAErC;AAQA,IAAMC,QAAAA,GAAU,UAAA;AAAA,EACd,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,eAAA,EAAiB,IAAA,GAAO,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnE,IAAA,CAAiB,wBAAhB,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACD,UAAA,EAAQ,CAAA;AAAA,oBACT,IAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,QAC/C,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,CAAC,eAAA,mBACA,IAAA;AAAA,YAAiB,eAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kDAAA;AAAA,gBACA,sCAAA;AAAA,gBACA,oIAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,QAAA,EAAS,CAAA;AAAA,gCACtB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA,WACjC,GACE;AAAA;AAAA;AAAA;AACN,GAAA,EACF;AAEJ,CAAA;AACAC,QAAAA,CAAQ,WAAA,GAAc,eAAA;AAEtB,IAAM,SAAS,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBACpC,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA,CAAG,qEAAA,EAAuE,SAAS,CAAA;AAAA,IAC7F,GAAG;AAAA;AACN,CAAA;AAEF,MAAA,CAAO,WAAA,GAAc,cAAA;AAErB,IAAM,IAAA,GAAO,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBAClC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE7F,IAAA,CAAK,WAAA,GAAc,YAAA;AAEnB,IAAM,SAAS,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBACpC,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,4FAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA;AAEF,MAAA,CAAO,WAAA,GAAc,cAAA;AAErB,IAAMC,MAAAA,GAAQ,WAGZ,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,2DAAA,EAA6D,SAAS,CAAA;AAAA,IACnF,GAAG;AAAA;AACN,CACD,CAAA;AACDA,MAAAA,CAAM,WAAA,GAAc,aAAA;AAEpB,IAAMC,YAAAA,GAAc,WAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,IAC5D,GAAG;AAAA;AACN,CACD,CAAA;AACDA,YAAAA,CAAY,WAAA,GAAc,mBAAA;AAE1B,IAAM,KAAA,GAAwB,eAAA,CAAA;AAW9B,KAAA,CAAM,OAAA,GAA0B,eAAA,CAAA,OAAA;AAChC,KAAA,CAAM,KAAA,GAAwB,eAAA,CAAA,KAAA;AAC9B,KAAA,CAAM,OAAA,GAAUF,QAAAA;AAChB,KAAA,CAAM,OAAA,GAAUD,QAAAA;AAChB,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,KAAA,CAAM,KAAA,GAAQE,MAAAA;AACd,KAAA,CAAM,WAAA,GAAcC,YAAAA","file":"chunk-3BMYYNN6.js","sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Sheet — slide-in side panel built on Radix Dialog.\n *\n * Same Radix primitive as Dialog, but Content slides from an edge instead of\n * fading from center. Used for: workspace overlays (Memory, Observability,\n * Sub-agents), Settings, contextual filters.\n *\n * Composition:\n * <Sheet>\n * <Sheet.Trigger>Open</Sheet.Trigger>\n * <Sheet.Content side=\"right\">\n * <Sheet.Header>\n * <Sheet.Title>Memory</Sheet.Title>\n * <Sheet.Description>Episodes and wiki pages</Sheet.Description>\n * </Sheet.Header>\n * <Sheet.Body>…</Sheet.Body>\n * <Sheet.Footer>…</Sheet.Footer>\n * </Sheet.Content>\n * </Sheet>\n */\n\nconst Overlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80\",\n \"data-[state=open]:fade-in-0 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:animate-out\",\n className,\n )}\n {...props}\n />\n));\nOverlay.displayName = \"Sheet.Overlay\";\n\nconst sheetVariants = cva(\n [\n \"fixed z-50 flex flex-col gap-3 border-border/40 bg-card text-card-foreground shadow-lg\",\n \"transition duration-base ease-out-soft\",\n \"data-[state=closed]:animate-out data-[state=open]:animate-in\",\n ],\n {\n variants: {\n side: {\n right:\n \"data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right inset-y-0 right-0 h-full w-3/4 max-w-md border-l\",\n left: \"data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left inset-y-0 left-0 h-full w-3/4 max-w-md border-r\",\n top: \"data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top inset-x-0 top-0 h-auto max-h-[80vh] border-b\",\n bottom:\n \"data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom inset-x-0 bottom-0 h-auto max-h-[80vh] border-t\",\n },\n },\n defaultVariants: { side: \"right\" },\n },\n);\n\ninterface ContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof sheetVariants> {\n hideCloseButton?: boolean;\n}\n\nconst Content = forwardRef<ElementRef<typeof DialogPrimitive.Content>, ContentProps>(\n ({ className, children, hideCloseButton, side = \"right\", ...props }, ref) => (\n <DialogPrimitive.Portal>\n <Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n {!hideCloseButton ? (\n <DialogPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 rounded-md p-1 opacity-70\",\n \"transition-opacity hover:opacity-100\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card\",\n \"disabled:pointer-events-none\",\n )}\n >\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n ),\n);\nContent.displayName = \"Sheet.Content\";\n\nconst Header = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col gap-1.5 border-border/40 border-b px-6 py-5 text-left\", className)}\n {...props}\n />\n);\nHeader.displayName = \"Sheet.Header\";\n\nconst Body = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex-1 overflow-y-auto px-6 py-4 text-body-md\", className)} {...props} />\n);\nBody.displayName = \"Sheet.Body\";\n\nconst Footer = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse gap-2 border-border/40 border-t px-6 py-4 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nFooter.displayName = \"Sheet.Footer\";\n\nconst Title = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"font-display text-foreground text-title-lg tracking-tight\", className)}\n {...props}\n />\n));\nTitle.displayName = \"Sheet.Title\";\n\nconst Description = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-body-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDescription.displayName = \"Sheet.Description\";\n\nconst Sheet = DialogPrimitive.Root as typeof DialogPrimitive.Root & {\n Trigger: typeof DialogPrimitive.Trigger;\n Close: typeof DialogPrimitive.Close;\n Content: typeof Content;\n Overlay: typeof Overlay;\n Header: typeof Header;\n Body: typeof Body;\n Footer: typeof Footer;\n Title: typeof Title;\n Description: typeof Description;\n};\nSheet.Trigger = DialogPrimitive.Trigger;\nSheet.Close = DialogPrimitive.Close;\nSheet.Content = Content;\nSheet.Overlay = Overlay;\nSheet.Header = Header;\nSheet.Body = Body;\nSheet.Footer = Footer;\nSheet.Title = Title;\nSheet.Description = Description;\n\nexport { Sheet, sheetVariants };\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import { Folder, ChevronDown } from 'lucide-react';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var FolderSelector = forwardRef(
|
|
7
|
+
({ className, path, compact, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
8
|
+
"button",
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
type: "button",
|
|
12
|
+
className: cn(
|
|
13
|
+
"inline-flex items-center gap-2 rounded-lg border border-border/60 bg-card",
|
|
14
|
+
"font-mono text-code-sm text-foreground",
|
|
15
|
+
"transition-colors duration-base ease-out-soft",
|
|
16
|
+
"hover:border-primary/40 hover:bg-muted",
|
|
17
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
18
|
+
compact ? "h-8 px-2.5" : "h-10 px-3",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
...props,
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ jsx(Folder, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
|
|
24
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left", children: path }),
|
|
25
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: "size-3 shrink-0 text-muted-foreground", "aria-hidden": "true" })
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
);
|
|
30
|
+
FolderSelector.displayName = "FolderSelector";
|
|
31
|
+
|
|
32
|
+
export { FolderSelector };
|
|
33
|
+
//# sourceMappingURL=chunk-3OHV7EEI.js.map
|
|
34
|
+
//# sourceMappingURL=chunk-3OHV7EEI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/folder-selector/folder-selector.tsx"],"names":[],"mappings":";;;;;AAqBA,IAAM,cAAA,GAAiB,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,SAAS,GAAG,KAAA,IAAS,GAAA,qBACvC,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,2EAAA;AAAA,QACA,wCAAA;AAAA,QACA,+CAAA;AAAA,QACA,wCAAA;AAAA,QACA,0IAAA;AAAA,QACA,UAAU,YAAA,GAAe,WAAA;AAAA,QACzB;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,uCAAA,EAAwC,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,wBAC7E,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBAC1D,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,uCAAA,EAAwC,eAAY,MAAA,EAAO;AAAA;AAAA;AAAA;AAGxF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"chunk-3OHV7EEI.js","sourcesContent":["import { ChevronDown, Folder } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ButtonHTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface FolderSelectorProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Currently selected absolute path. */\n path: string;\n /**\n * Render in compact mode (smaller height, no chevron padding).\n * Default is the full-width composer variant used in the Files panel.\n */\n compact?: boolean;\n}\n\n/**\n * FolderSelector — chip showing the active working directory.\n *\n * Visual: folder icon + monospaced path (truncated middle) + chevron.\n * Stateless: caller handles the actual folder-picker dialog.\n */\nconst FolderSelector = forwardRef<HTMLButtonElement, FolderSelectorProps>(\n ({ className, path, compact, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"inline-flex items-center gap-2 rounded-lg border border-border/60 bg-card\",\n \"font-mono text-code-sm text-foreground\",\n \"transition-colors duration-base ease-out-soft\",\n \"hover:border-primary/40 hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n compact ? \"h-8 px-2.5\" : \"h-10 px-3\",\n className,\n )}\n {...props}\n >\n <Folder className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"min-w-0 flex-1 truncate text-left\">{path}</span>\n <ChevronDown className=\"size-3 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n </button>\n ),\n);\nFolderSelector.displayName = \"FolderSelector\";\n\nexport { FolderSelector };\n"]}
|