@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
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4621 @@
|
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { ReactNode, JSX as JSX$1, ComponentPropsWithoutRef, ComponentProps, ButtonHTMLAttributes, HTMLAttributes, InputHTMLAttributes, ComponentType, SVGProps, TextareaHTMLAttributes, ElementType, ReactElement, OutputHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes, TimeHTMLAttributes } from 'react';
|
|
4
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
5
|
+
import * as ToastPrimitive from '@radix-ui/react-toast';
|
|
6
|
+
import { VariantProps } from 'class-variance-authority';
|
|
7
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
8
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
9
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
10
|
+
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
11
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
12
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
13
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
14
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
15
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
16
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
17
|
+
import * as lucide_react from 'lucide-react';
|
|
18
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Merge Tailwind classes with conflict resolution.
|
|
22
|
+
* Standard utility across all @theokit/ui components.
|
|
23
|
+
*/
|
|
24
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Theo UI — Theme types.
|
|
28
|
+
*
|
|
29
|
+
* A Theme is a frozen bundle of CSS-var values that the runtime can swap by
|
|
30
|
+
* setting `data-theme="<name>"` on `<html>`. The structure mirrors what lives
|
|
31
|
+
* in tokens.css so themes can be merged without ambiguity.
|
|
32
|
+
*/
|
|
33
|
+
type ThemeMode = "light" | "dark";
|
|
34
|
+
interface ColorScale {
|
|
35
|
+
background: string;
|
|
36
|
+
foreground: string;
|
|
37
|
+
card: string;
|
|
38
|
+
"card-foreground": string;
|
|
39
|
+
popover: string;
|
|
40
|
+
"popover-foreground": string;
|
|
41
|
+
primary: string;
|
|
42
|
+
"primary-deep": string;
|
|
43
|
+
"primary-glow": string;
|
|
44
|
+
"primary-foreground": string;
|
|
45
|
+
secondary: string;
|
|
46
|
+
"secondary-foreground": string;
|
|
47
|
+
accent: string;
|
|
48
|
+
"accent-deep": string;
|
|
49
|
+
"accent-foreground": string;
|
|
50
|
+
muted: string;
|
|
51
|
+
"muted-foreground": string;
|
|
52
|
+
border: string;
|
|
53
|
+
input: string;
|
|
54
|
+
ring: string;
|
|
55
|
+
success: string;
|
|
56
|
+
"success-foreground": string;
|
|
57
|
+
warning: string;
|
|
58
|
+
"warning-foreground": string;
|
|
59
|
+
destructive: string;
|
|
60
|
+
"destructive-foreground": string;
|
|
61
|
+
info: string;
|
|
62
|
+
"info-foreground": string;
|
|
63
|
+
}
|
|
64
|
+
interface ThemeFonts {
|
|
65
|
+
/** Display headlines (h1-h3, hero text). */
|
|
66
|
+
display: string;
|
|
67
|
+
/** Body / UI text. */
|
|
68
|
+
body: string;
|
|
69
|
+
/** Code, mono, paths, timestamps. */
|
|
70
|
+
mono: string;
|
|
71
|
+
}
|
|
72
|
+
interface Theme {
|
|
73
|
+
/** Stable id, used in `data-theme`. */
|
|
74
|
+
name: string;
|
|
75
|
+
/** Human-readable label for theme switchers. */
|
|
76
|
+
label: string;
|
|
77
|
+
/** Optional short description shown in switchers. */
|
|
78
|
+
description?: string;
|
|
79
|
+
fonts: ThemeFonts;
|
|
80
|
+
light: ColorScale;
|
|
81
|
+
dark: ColorScale;
|
|
82
|
+
/**
|
|
83
|
+
* Optional URL(s) to fetch before applying. The provider injects a `<link>`
|
|
84
|
+
* tag once per URL to load remote fonts. Already-injected URLs are deduped.
|
|
85
|
+
*/
|
|
86
|
+
fontUrls?: string[];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
type Density = "compact" | "comfortable" | "spacious";
|
|
90
|
+
interface DensityContextValue {
|
|
91
|
+
density: Density;
|
|
92
|
+
setDensity: (next: Density) => void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Read the current density from the active ThemeProvider context. Throws
|
|
96
|
+
* outside the provider so misuse fails loud — analogous to `useTheme`.
|
|
97
|
+
*/
|
|
98
|
+
declare function useDensity(): DensityContextValue;
|
|
99
|
+
|
|
100
|
+
interface ThemeContextValue {
|
|
101
|
+
/** Active theme (full descriptor). */
|
|
102
|
+
theme: Theme;
|
|
103
|
+
/** Active mode: light or dark. */
|
|
104
|
+
mode: ThemeMode;
|
|
105
|
+
/** All available themes. */
|
|
106
|
+
themes: Theme[];
|
|
107
|
+
/** Swap the active theme by name. */
|
|
108
|
+
setTheme: (name: string) => void;
|
|
109
|
+
/** Set light/dark explicitly. */
|
|
110
|
+
setMode: (mode: ThemeMode) => void;
|
|
111
|
+
/** Toggle light <> dark. */
|
|
112
|
+
toggleMode: () => void;
|
|
113
|
+
/** Register an additional theme at runtime. */
|
|
114
|
+
registerTheme: (theme: Theme) => void;
|
|
115
|
+
}
|
|
116
|
+
interface ThemeProviderProps {
|
|
117
|
+
children: ReactNode;
|
|
118
|
+
/**
|
|
119
|
+
* Theme to start with. Must match the `name` of an entry in `themes`.
|
|
120
|
+
* Defaults to `"violet-forge"` for backward compat — if you don't pass
|
|
121
|
+
* `violet-forge` in `themes`, set this prop explicitly.
|
|
122
|
+
*/
|
|
123
|
+
defaultTheme?: string;
|
|
124
|
+
/** Mode to start with. Defaults to `"dark"` (library is dark-first). */
|
|
125
|
+
defaultMode?: ThemeMode;
|
|
126
|
+
/**
|
|
127
|
+
* Available themes. **Required**: ThemeProvider does not auto-include any
|
|
128
|
+
* built-in theme since v0.1.0-next.0 — pass `builtinThemes` for all three
|
|
129
|
+
* Violet Forge defaults, or your own array for a slimmer bundle.
|
|
130
|
+
*
|
|
131
|
+
* Migration: consumers previously calling `<ThemeProvider>` without this
|
|
132
|
+
* prop now must pass `themes={builtinThemes}` (or use `<TheoUIProvider>`
|
|
133
|
+
* which defaults to `builtinThemes` for you).
|
|
134
|
+
*/
|
|
135
|
+
themes: Theme[];
|
|
136
|
+
/**
|
|
137
|
+
* Persist selection in localStorage under this key. Pass `null` to disable.
|
|
138
|
+
* Default: "theo-ui:theme".
|
|
139
|
+
*/
|
|
140
|
+
storageKey?: string | null;
|
|
141
|
+
/**
|
|
142
|
+
* Initial density. Drives `data-density` on `<html>` and the `--theo-control-h`
|
|
143
|
+
* / `--theo-control-px` CSS vars consumed by form-control `md` variants.
|
|
144
|
+
* Defaults to `"comfortable"` (36px controls — FAANG-tier modern density).
|
|
145
|
+
* Plan: faang-density-tightening (D3).
|
|
146
|
+
*/
|
|
147
|
+
defaultDensity?: Density;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* ThemeProvider — central registry + runtime switcher for Theo themes.
|
|
151
|
+
*
|
|
152
|
+
* Behavior:
|
|
153
|
+
* 1. On mount, injects a `<style id="theo-ui-theme-vars">` element with
|
|
154
|
+
* one CSS block per theme (`[data-theme="<name>"] { --token: ... }`).
|
|
155
|
+
* 2. Sets `data-theme` and `data-mode` on `<html>` so any element nested
|
|
156
|
+
* below inherits the right tokens (the Tailwind config consumes them).
|
|
157
|
+
* 3. Lazy-loads theme font URLs by injecting `<link rel="stylesheet">`.
|
|
158
|
+
* 4. Optionally persists choice in localStorage.
|
|
159
|
+
*/
|
|
160
|
+
declare function ThemeProvider({ children, defaultTheme, defaultMode, themes: themesProp, storageKey, defaultDensity, }: ThemeProviderProps): JSX$1.Element;
|
|
161
|
+
/**
|
|
162
|
+
* useTheme — access theme state from any component inside <ThemeProvider>.
|
|
163
|
+
* Throws if used outside the provider — fail-fast.
|
|
164
|
+
*/
|
|
165
|
+
declare function useTheme(): ThemeContextValue;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* ThemeScript — inline `<script>` for SSR-safe theme initialization.
|
|
169
|
+
*
|
|
170
|
+
* Renders a synchronous script that runs BEFORE React hydration. It reads the
|
|
171
|
+
* persisted theme + mode from localStorage (or falls back to the defaults) and
|
|
172
|
+
* sets `data-theme` / `data-mode` on `<html>`, plus the `.dark` class when
|
|
173
|
+
* mode is dark. This eliminates FOUC and avoids hydration mismatch warnings
|
|
174
|
+
* when the user's persisted choice differs from the SSR defaults.
|
|
175
|
+
*
|
|
176
|
+
* Place this in `<head>` ABOVE `<body>`. The component does not need to live
|
|
177
|
+
* inside `<ThemeProvider>`.
|
|
178
|
+
*
|
|
179
|
+
* Security: every interpolated value is passed through `safe()`, which both
|
|
180
|
+
* `JSON.stringify`s the value AND escapes `<` to `<`. The `<` escape is
|
|
181
|
+
* REQUIRED because `JSON.stringify` alone does NOT escape `/`, so a payload
|
|
182
|
+
* like `"</script><script>alert(1)</script>"` would otherwise break out of
|
|
183
|
+
* the inline `<script>` tag even though it stays inside a JS string literal.
|
|
184
|
+
* (The browser tokenizes `</script>` at the HTML layer before JS parses.)
|
|
185
|
+
*
|
|
186
|
+
* Example (Next.js App Router): see docs/design-system.md → SSR section.
|
|
187
|
+
* Pass `defaultTheme` and `defaultMode` to align with the consumer's
|
|
188
|
+
* preferred initial state. Always wrap the root in `<html
|
|
189
|
+
* suppressHydrationWarning>` to silence the expected one-render diff.
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
interface ThemeScriptProps {
|
|
193
|
+
/** Theme name to apply when no persisted value exists. Default `"violet-forge"`. */
|
|
194
|
+
defaultTheme?: string;
|
|
195
|
+
/** Mode to apply when no persisted value exists. Default `"dark"`. */
|
|
196
|
+
defaultMode?: ThemeMode;
|
|
197
|
+
/**
|
|
198
|
+
* Density to apply when no persisted value exists. Default `"comfortable"`.
|
|
199
|
+
* Mirrors `ThemeProvider`'s `defaultDensity` so the inline-script and
|
|
200
|
+
* the React provider agree on the SSR-default density (and the
|
|
201
|
+
* `data-density` attribute set by this script matches what
|
|
202
|
+
* `ThemeProvider` promotes via its post-mount hydration effect).
|
|
203
|
+
*/
|
|
204
|
+
defaultDensity?: "compact" | "comfortable" | "spacious";
|
|
205
|
+
/**
|
|
206
|
+
* localStorage namespace. Must match the `storageKey` passed to
|
|
207
|
+
* `<ThemeProvider>`. Default `"theo-ui:theme"`. Pass `null` to disable
|
|
208
|
+
* persistence reads (the script will always apply defaults).
|
|
209
|
+
*/
|
|
210
|
+
storageKey?: string | null;
|
|
211
|
+
}
|
|
212
|
+
declare function ThemeScript({ defaultTheme, defaultMode, defaultDensity, storageKey, }: ThemeScriptProps): JSX$1.Element;
|
|
213
|
+
|
|
214
|
+
interface ThemeSwitcherProps {
|
|
215
|
+
className?: string;
|
|
216
|
+
/** If true, renders mode toggle inline next to the theme menu. */
|
|
217
|
+
showModeToggle?: boolean;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* ThemeSwitcher — drop-in theme + mode picker.
|
|
221
|
+
*
|
|
222
|
+
* Two affordances:
|
|
223
|
+
* - Palette dropdown lists all registered themes with the active marked.
|
|
224
|
+
* - Optional sun/moon button toggles light/dark.
|
|
225
|
+
*
|
|
226
|
+
* Stateless wrt itself — pulls state from `useTheme()`.
|
|
227
|
+
*/
|
|
228
|
+
declare function ThemeSwitcher({ className, showModeToggle }: ThemeSwitcherProps): JSX$1.Element;
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Violet Forge — the default Theo theme.
|
|
232
|
+
*
|
|
233
|
+
* Identity: Theo violet primary (#7C3AED), burnt sienna accent (#C96442),
|
|
234
|
+
* Vercel-style neutral surfaces (pure white light / charcoal dark),
|
|
235
|
+
* Geist Sans + Geist Mono throughout.
|
|
236
|
+
*
|
|
237
|
+
* Source of truth for `data-theme` overrides. Values mirror
|
|
238
|
+
* src/styles/tokens.css for the default `:root`.
|
|
239
|
+
*/
|
|
240
|
+
declare const violetForge: Theme;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Classic Paper — light-primary with deep-navy dark mirror; Inter + JetBrains Mono.
|
|
244
|
+
*
|
|
245
|
+
* Identity: warm paper background, deep navy foreground, indigo primary
|
|
246
|
+
* (closer to traditional dashboard SaaS), Inter throughout. Maximizes
|
|
247
|
+
* legibility and familiarity — use when reading endurance > differentiation.
|
|
248
|
+
*
|
|
249
|
+
* Provides a full `dark` palette mirror so consumers toggling `.dark` still
|
|
250
|
+
* get a coherent surface (it is not "light-only" by accident).
|
|
251
|
+
*/
|
|
252
|
+
declare const classicPaper: Theme;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Aurora Terminal — dark-first, cyan-aurora primary, Geist Mono everywhere.
|
|
256
|
+
*
|
|
257
|
+
* Identity: deep oceanic background, cyan-aurora primary, aurora-pink accent.
|
|
258
|
+
* Headers use Geist with heavier tracking; body uses Geist Mono for full
|
|
259
|
+
* "developer console" feel. Suits CLI/devtools showcase.
|
|
260
|
+
*/
|
|
261
|
+
declare const auroraTerminal: Theme;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* `defineTheme(input)` — build a `Theme` from a partial override.
|
|
265
|
+
*
|
|
266
|
+
* Reduces the boilerplate of authoring a custom theme from 58 colour
|
|
267
|
+
* keys (`light` × 29 + `dark` × 29) to "just what you want to change".
|
|
268
|
+
* The merge always uses `violetForge` as the base — this is a pure,
|
|
269
|
+
* deterministic helper that does not depend on whatever theme is active
|
|
270
|
+
* at the call site.
|
|
271
|
+
*
|
|
272
|
+
* The `Theme` object it returns is drop-in compatible with
|
|
273
|
+
* `<ThemeProvider themes={[...]}>` — same shape as `violetForge`,
|
|
274
|
+
* `classicPaper`, and `auroraTerminal`.
|
|
275
|
+
*
|
|
276
|
+
* Honest caveat: if you override `light.primary` but NOT `dark.primary`,
|
|
277
|
+
* the two modes will use different colours — your override in light,
|
|
278
|
+
* Violet Forge's default in dark. That's intentional. Pass both sides
|
|
279
|
+
* to keep them in sync.
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* import { defineTheme, hex } from "@theokit/ui";
|
|
283
|
+
* export const corp = defineTheme({
|
|
284
|
+
* name: "corp",
|
|
285
|
+
* light: { primary: hex("#0EA5E9") },
|
|
286
|
+
* dark: { primary: hex("#38BDF8") },
|
|
287
|
+
* });
|
|
288
|
+
*
|
|
289
|
+
* Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.1.
|
|
290
|
+
*/
|
|
291
|
+
|
|
292
|
+
interface DefineThemeInput {
|
|
293
|
+
/**
|
|
294
|
+
* Stable id used in `data-theme="<name>"` on the root element. Must
|
|
295
|
+
* match `/^[a-z][a-z0-9-]*$/i` (CSS-identifier-safe). Required.
|
|
296
|
+
*/
|
|
297
|
+
name: string;
|
|
298
|
+
/**
|
|
299
|
+
* Human-readable label for theme switchers. Defaults to the
|
|
300
|
+
* capitalized version of `name` (e.g. "corp" → "Corp").
|
|
301
|
+
*/
|
|
302
|
+
label?: string;
|
|
303
|
+
/** Optional one-line description shown in switchers. */
|
|
304
|
+
description?: string;
|
|
305
|
+
/**
|
|
306
|
+
* Override light-mode colours. Any key omitted is inherited from
|
|
307
|
+
* `violetForge.light`. See `ColorScale` for the full list.
|
|
308
|
+
*/
|
|
309
|
+
light?: Partial<ColorScale>;
|
|
310
|
+
/**
|
|
311
|
+
* Override dark-mode colours. Any key omitted is inherited from
|
|
312
|
+
* `violetForge.dark`.
|
|
313
|
+
*/
|
|
314
|
+
dark?: Partial<ColorScale>;
|
|
315
|
+
/**
|
|
316
|
+
* Override fonts (`display`, `body`, `mono`). Any key omitted is
|
|
317
|
+
* inherited from `violetForge.fonts`.
|
|
318
|
+
*/
|
|
319
|
+
fonts?: Partial<ThemeFonts>;
|
|
320
|
+
/**
|
|
321
|
+
* Replace the default remote font URLs. Pass an empty array to skip
|
|
322
|
+
* font fetching entirely. Defaults to `violetForge.fontUrls` when
|
|
323
|
+
* omitted (so consumers that don't care still get Geist preloaded).
|
|
324
|
+
*/
|
|
325
|
+
fontUrls?: string[];
|
|
326
|
+
}
|
|
327
|
+
declare function defineTheme(input: DefineThemeInput): Theme;
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Color helpers that return values in the HSL string-tuple format the
|
|
331
|
+
* `ColorScale` shape expects (e.g. `"262 83% 58%"`).
|
|
332
|
+
*
|
|
333
|
+
* Why this format: matches the shadcn / Violet Forge convention where
|
|
334
|
+
* CSS variables hold the H S% L% components and consumers write
|
|
335
|
+
* `hsl(var(--primary))` (allowing alpha overlays via
|
|
336
|
+
* `hsl(var(--primary) / 0.5)`). Returning an object would force callers
|
|
337
|
+
* to write `${theme.light.primary.h} ${theme.light.primary.s}% …` —
|
|
338
|
+
* exactly the friction `hex()` is meant to remove.
|
|
339
|
+
*
|
|
340
|
+
* No external dependency: vanilla algorithm from CSS Color spec.
|
|
341
|
+
* Alpha channels are intentionally discarded — `ColorScale` is opaque;
|
|
342
|
+
* use `hsl(var(--primary) / 0.5)` in CSS for transparency.
|
|
343
|
+
*
|
|
344
|
+
* Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.2.
|
|
345
|
+
*/
|
|
346
|
+
/**
|
|
347
|
+
* Convert a hex color string to the HSL string-tuple format used by
|
|
348
|
+
* `ColorScale` ("`H S% L%`", e.g. `"262 83% 58%"`).
|
|
349
|
+
*
|
|
350
|
+
* Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`. Case-insensitive.
|
|
351
|
+
* Alpha bytes are silently dropped — use `hsl(var(--primary) / 0.5)`
|
|
352
|
+
* in CSS for transparency.
|
|
353
|
+
*
|
|
354
|
+
* @throws if the input is malformed.
|
|
355
|
+
*
|
|
356
|
+
* @example
|
|
357
|
+
* hex("#7C3AED") // "262 83% 58%"
|
|
358
|
+
* hex("#7c3aed") // "262 83% 58%" (same)
|
|
359
|
+
* hex("#abc") // expanded to "#aabbcc"
|
|
360
|
+
*/
|
|
361
|
+
declare function hex(input: string): string;
|
|
362
|
+
/**
|
|
363
|
+
* Convert an RGB triplet (each in `[0, 255]`) to the HSL string-tuple
|
|
364
|
+
* format used by `ColorScale`.
|
|
365
|
+
*
|
|
366
|
+
* @throws if any channel is out of `[0, 255]`.
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
* rgb(124, 58, 237) // "262 83% 58%"
|
|
370
|
+
*/
|
|
371
|
+
declare function rgb(r: number, g: number, b: number): string;
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Vercel Mono — razor-sharp monochrome + signature blue.
|
|
375
|
+
*
|
|
376
|
+
* Inspired by, not affiliated with Vercel. Based on Geist Design tokens
|
|
377
|
+
* (https://github.com/vercel/geist). Light = pure white + black ink + blue
|
|
378
|
+
* accent (#0070F3); dark = near-black canvas + white text + same blue.
|
|
379
|
+
*
|
|
380
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T2.1
|
|
381
|
+
*/
|
|
382
|
+
declare const vercelMono: Theme;
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* GitHub Dark — GitHub's default dark theme.
|
|
386
|
+
*
|
|
387
|
+
* Based on the canonical Primer Primitives tokens
|
|
388
|
+
* (https://github.com/primer/primitives, MIT). Light fallback uses GitHub's
|
|
389
|
+
* "light-default" Primer scale.
|
|
390
|
+
*
|
|
391
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T3.1
|
|
392
|
+
*/
|
|
393
|
+
declare const githubDark: Theme;
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Dracula — the cult OSS dark theme (https://draculatheme.com, MIT).
|
|
397
|
+
*
|
|
398
|
+
* Dark mode = canonical Dracula spec (background #282A36, signature pink
|
|
399
|
+
* #FF79C6, purple #BD93F9, etc.).
|
|
400
|
+
*
|
|
401
|
+
* Note: "light" mode is a Theo-original adaptation — Dracula upstream
|
|
402
|
+
* spec is dark-only. We darken the signature pink/purple to pass WCAG AA
|
|
403
|
+
* against light backgrounds, sacrificing palette purity for accessibility.
|
|
404
|
+
*
|
|
405
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T4.1
|
|
406
|
+
*/
|
|
407
|
+
declare const dracula: Theme;
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* One Dark / One Light — Atom's iconic syntax theme.
|
|
411
|
+
*
|
|
412
|
+
* Sources:
|
|
413
|
+
* - atom/one-dark-syntax (MIT) — dark mode canonical
|
|
414
|
+
* - atom/one-light-syntax (MIT) — light mode canonical
|
|
415
|
+
*
|
|
416
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T5.1
|
|
417
|
+
*/
|
|
418
|
+
declare const oneDark: Theme;
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Anthropic-style — claude.ai-inspired editorial calm.
|
|
422
|
+
*
|
|
423
|
+
* Inspired by, not affiliated with Anthropic. Visually informed by claude.ai's
|
|
424
|
+
* warm cream canvas + burnt sienna primary + ink-on-paper feel. No proprietary
|
|
425
|
+
* assets reproduced (font is Geist, colors are independent measurements).
|
|
426
|
+
*
|
|
427
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T6.1
|
|
428
|
+
*/
|
|
429
|
+
declare const anthropicStyle: Theme;
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* OpenAI-style — chatgpt.com-inspired minimal tech-utility.
|
|
433
|
+
*
|
|
434
|
+
* Inspired by, not affiliated with OpenAI. Pure white / charcoal canvas +
|
|
435
|
+
* signature ChatGPT green (#10A37F). Minimal saturation, high contrast.
|
|
436
|
+
*
|
|
437
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T7.1
|
|
438
|
+
*/
|
|
439
|
+
declare const openaiStyle: Theme;
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Linear Glass — linear.app-inspired glassy indigo.
|
|
443
|
+
*
|
|
444
|
+
* Inspired by, not affiliated with Linear. Refined indigo-violet primary
|
|
445
|
+
* (#5E6AD2) on near-black canvas in dark, pure white in light. Subtle
|
|
446
|
+
* glassmorphic surface temperature.
|
|
447
|
+
*
|
|
448
|
+
* Plan: .claude/knowledge-base/plans/seven-themes-plan.md T8.1
|
|
449
|
+
*/
|
|
450
|
+
declare const linearGlass: Theme;
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* All themes bundled with Theo UI. Pass to `<ThemeProvider themes={builtinThemes}>`
|
|
454
|
+
* if you want all 10 available out of the box.
|
|
455
|
+
*
|
|
456
|
+
* EC-4 note: passing the full 10-entry list triggers ~60 KB CSS injection in
|
|
457
|
+
* `<style id="theo-ui-theme-vars">`. For apps focused on 1-2 themes, prefer
|
|
458
|
+
* `themes={[violetForge, dracula]}` to keep the payload at ~12 KB.
|
|
459
|
+
*/
|
|
460
|
+
declare const builtinThemes: Theme[];
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Toast — transient notification built on Radix Toast.
|
|
464
|
+
*
|
|
465
|
+
* Composition: app mounts <Toaster /> once. Components call `toast(...)` via
|
|
466
|
+
* the `useToast()` hook (see toaster.tsx). The look is theme-aware: status
|
|
467
|
+
* icon coloured by --primary/--success/--warning/--destructive; the body
|
|
468
|
+
* card uses --popover surface.
|
|
469
|
+
*
|
|
470
|
+
* Variants:
|
|
471
|
+
* - default (neutral)
|
|
472
|
+
* - info (primary tint)
|
|
473
|
+
* - success (deploy ok, action completed)
|
|
474
|
+
* - warning (queued, permission requested)
|
|
475
|
+
* - destructive (failed, fatal)
|
|
476
|
+
*/
|
|
477
|
+
declare const toastVariants: (props?: ({
|
|
478
|
+
variant?: "success" | "warning" | "destructive" | "info" | "default" | null | undefined;
|
|
479
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
480
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
481
|
+
type ToastVariant = NonNullable<VariantProps<typeof toastVariants>["variant"]>;
|
|
482
|
+
interface ToastProps extends ComponentPropsWithoutRef<typeof ToastPrimitive.Root>, VariantProps<typeof toastVariants> {
|
|
483
|
+
}
|
|
484
|
+
declare const Toast: react.ForwardRefExoticComponent<ToastProps & react.RefAttributes<HTMLLIElement>> & {
|
|
485
|
+
Title: react.ForwardRefExoticComponent<Omit<ToastPrimitive.ToastTitleProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
486
|
+
Description: react.ForwardRefExoticComponent<Omit<ToastPrimitive.ToastDescriptionProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
487
|
+
Close: react.ForwardRefExoticComponent<Omit<ToastPrimitive.ToastCloseProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
488
|
+
Action: react.ForwardRefExoticComponent<Omit<ToastPrimitive.ToastActionProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
489
|
+
Provider: react.FC<ToastPrimitive.ToastProviderProps>;
|
|
490
|
+
Viewport: react.ForwardRefExoticComponent<ToastPrimitive.ToastViewportProps & react.RefAttributes<HTMLOListElement>>;
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
interface ToastDescriptor {
|
|
494
|
+
id: string;
|
|
495
|
+
title?: ReactNode;
|
|
496
|
+
description?: ReactNode;
|
|
497
|
+
variant?: ToastVariant;
|
|
498
|
+
/** Auto-dismiss in ms. Default 5000. Pass `null` for sticky. */
|
|
499
|
+
duration?: number | null;
|
|
500
|
+
action?: {
|
|
501
|
+
label: ReactNode;
|
|
502
|
+
onClick: () => void;
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
interface ToastContextValue {
|
|
506
|
+
toast: (descriptor: Omit<ToastDescriptor, "id">) => string;
|
|
507
|
+
dismiss: (id: string) => void;
|
|
508
|
+
}
|
|
509
|
+
interface ToasterProps {
|
|
510
|
+
children: ReactNode;
|
|
511
|
+
/** Toast viewport position. Default bottom-right. */
|
|
512
|
+
position?: "top-right" | "top-left" | "bottom-right" | "bottom-left";
|
|
513
|
+
className?: string;
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* Toaster — mount once at the app root. Wraps children in a Radix Toast
|
|
517
|
+
* Provider + Viewport and exposes the `useToast()` hook for descendants.
|
|
518
|
+
*/
|
|
519
|
+
declare function Toaster({ children, position, className }: ToasterProps): JSX$1.Element;
|
|
520
|
+
/**
|
|
521
|
+
* useToast — fire toasts from anywhere inside <Toaster>.
|
|
522
|
+
*
|
|
523
|
+
* Example:
|
|
524
|
+
* const { toast } = useToast();
|
|
525
|
+
* toast({ title: "Deployed", variant: "success" });
|
|
526
|
+
*/
|
|
527
|
+
declare function useToast(): ToastContextValue;
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* TheoUIProvider — primary entry point composing `<ThemeProvider>` and
|
|
531
|
+
* `<Toaster>` in the correct order with sensible defaults.
|
|
532
|
+
*
|
|
533
|
+
* Recommended for consumer apps to avoid hand-wiring the provider stack.
|
|
534
|
+
* Equivalent to:
|
|
535
|
+
*
|
|
536
|
+
* <ThemeProvider themes={builtinThemes} {...theme}>
|
|
537
|
+
* <Toaster {...toaster}>{children}</Toaster>
|
|
538
|
+
* </ThemeProvider>
|
|
539
|
+
*
|
|
540
|
+
* Notes:
|
|
541
|
+
* - Since v0.1.0-next.0, `<ThemeProvider>` requires the `themes` prop
|
|
542
|
+
* (T2.5 decoupling). `<TheoUIProvider>` defaults it to `builtinThemes`
|
|
543
|
+
* to preserve "works out of the box" DX. Pass `theme.themes` to override.
|
|
544
|
+
* - The `"use client"` directive is required for Next.js App Router (RSC)
|
|
545
|
+
* because `<ThemeProvider>` uses React state and effects internally.
|
|
546
|
+
* - `<Tooltip>` provider stays per-instance (Radix recommendation) — this
|
|
547
|
+
* wrapper does NOT introduce a global tooltip context.
|
|
548
|
+
* - `<ThemeProvider>` and `<Toaster>` remain independently exported for
|
|
549
|
+
* consumers who want bespoke control.
|
|
550
|
+
*
|
|
551
|
+
* SSR:
|
|
552
|
+
* - Place `<ThemeScript>` in `<head>` to avoid FOUC + hydration mismatch.
|
|
553
|
+
* - Wrap `<html lang="en" suppressHydrationWarning>`.
|
|
554
|
+
*
|
|
555
|
+
* @example
|
|
556
|
+
* import { TheoUIProvider } from "@theokit/ui";
|
|
557
|
+
*
|
|
558
|
+
* export default function App({ children }) {
|
|
559
|
+
* return <TheoUIProvider>{children}</TheoUIProvider>;
|
|
560
|
+
* }
|
|
561
|
+
*/
|
|
562
|
+
interface TheoUIProviderProps {
|
|
563
|
+
children: ReactNode;
|
|
564
|
+
/** Pass-through props for the inner `<ThemeProvider>`. Optional. */
|
|
565
|
+
theme?: Omit<ComponentProps<typeof ThemeProvider>, "children" | "themes"> & {
|
|
566
|
+
/** Override the default theme set (defaults to `builtinThemes`). */
|
|
567
|
+
themes?: ComponentProps<typeof ThemeProvider>["themes"];
|
|
568
|
+
};
|
|
569
|
+
/** Pass-through props for the inner `<Toaster>`. */
|
|
570
|
+
toaster?: Omit<ComponentProps<typeof Toaster>, "children">;
|
|
571
|
+
}
|
|
572
|
+
declare function TheoUIProvider({ children, theme, toaster }: TheoUIProviderProps): JSX$1.Element;
|
|
573
|
+
declare namespace TheoUIProvider {
|
|
574
|
+
var displayName: string;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Chat message types — structurally compatible with `vercel/ai` `UIMessage`.
|
|
579
|
+
*
|
|
580
|
+
* Verbatim of the part-type shape from `packages/ai/src/ui/ui-messages.ts`
|
|
581
|
+
* (Apache-2.0, copyright Vercel Inc., see NOTICE). Re-declared standalone so
|
|
582
|
+
* `@theokit/ui` does not take `ai` as a direct dependency — the goal is
|
|
583
|
+
* interop without coupling.
|
|
584
|
+
*
|
|
585
|
+
* Consumer code using `useChat()` from `@ai-sdk/react`:
|
|
586
|
+
*
|
|
587
|
+
* const { messages } = useChat();
|
|
588
|
+
* return messages.map((m) => <ChatMessage message={m} />);
|
|
589
|
+
*
|
|
590
|
+
* Works because the Vercel `UIMessage` shape is structurally assignable to
|
|
591
|
+
* the types declared here.
|
|
592
|
+
*/
|
|
593
|
+
type MessageRole = "system" | "user" | "assistant";
|
|
594
|
+
/**
|
|
595
|
+
* Orthogonal attachment shape used by `<AttachmentChip>` and chat composer
|
|
596
|
+
* primitives. Distinct from `FileUIPart` (which is part of the message
|
|
597
|
+
* payload) — `Attachment` is the consumer's pending-upload state.
|
|
598
|
+
*/
|
|
599
|
+
interface Attachment {
|
|
600
|
+
id: string;
|
|
601
|
+
name: string;
|
|
602
|
+
size?: string;
|
|
603
|
+
type?: string;
|
|
604
|
+
}
|
|
605
|
+
type ProviderMetadata = Record<string, Record<string, unknown>>;
|
|
606
|
+
/**
|
|
607
|
+
* A text part of a message.
|
|
608
|
+
*/
|
|
609
|
+
interface TextUIPart {
|
|
610
|
+
type: "text";
|
|
611
|
+
text: string;
|
|
612
|
+
/** "streaming" while tokens arrive; "done" when complete. */
|
|
613
|
+
state?: "streaming" | "done";
|
|
614
|
+
providerMetadata?: ProviderMetadata;
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* A reasoning ("thinking") part of a message — typically rendered as a
|
|
618
|
+
* collapsible panel.
|
|
619
|
+
*/
|
|
620
|
+
interface ReasoningUIPart {
|
|
621
|
+
type: "reasoning";
|
|
622
|
+
text: string;
|
|
623
|
+
state?: "streaming" | "done";
|
|
624
|
+
providerMetadata?: ProviderMetadata;
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* A file part of a message (image, document, audio, video).
|
|
628
|
+
*/
|
|
629
|
+
interface FileUIPart {
|
|
630
|
+
type: "file";
|
|
631
|
+
/**
|
|
632
|
+
* IANA media type (e.g. `image/png`) or top-level segment (e.g. `image`).
|
|
633
|
+
*/
|
|
634
|
+
mediaType: string;
|
|
635
|
+
filename?: string;
|
|
636
|
+
/** URL or data: URL. */
|
|
637
|
+
url: string;
|
|
638
|
+
providerMetadata?: ProviderMetadata;
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* A file emitted as part of a reasoning trace (e.g. internal scratchpad).
|
|
642
|
+
*/
|
|
643
|
+
interface ReasoningFileUIPart {
|
|
644
|
+
type: "reasoning-file";
|
|
645
|
+
mediaType: string;
|
|
646
|
+
url: string;
|
|
647
|
+
providerMetadata?: ProviderMetadata;
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* A URL source citation.
|
|
651
|
+
*/
|
|
652
|
+
interface SourceUrlUIPart {
|
|
653
|
+
type: "source-url";
|
|
654
|
+
sourceId: string;
|
|
655
|
+
url: string;
|
|
656
|
+
title?: string;
|
|
657
|
+
providerMetadata?: ProviderMetadata;
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* A document source citation.
|
|
661
|
+
*/
|
|
662
|
+
interface SourceDocumentUIPart {
|
|
663
|
+
type: "source-document";
|
|
664
|
+
sourceId: string;
|
|
665
|
+
mediaType: string;
|
|
666
|
+
title: string;
|
|
667
|
+
filename?: string;
|
|
668
|
+
providerMetadata?: ProviderMetadata;
|
|
669
|
+
}
|
|
670
|
+
/**
|
|
671
|
+
* A step boundary marker — used to delimit multi-step agent responses.
|
|
672
|
+
*/
|
|
673
|
+
interface StepStartUIPart {
|
|
674
|
+
type: "step-start";
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* A provider-specific custom content part.
|
|
678
|
+
*/
|
|
679
|
+
interface CustomContentUIPart {
|
|
680
|
+
type: "custom";
|
|
681
|
+
/** Format: `${provider}.${providerType}`. */
|
|
682
|
+
kind: `${string}.${string}`;
|
|
683
|
+
providerMetadata?: ProviderMetadata;
|
|
684
|
+
}
|
|
685
|
+
type ToolInvocationState = "input-streaming" | "input-available" | "approval-requested" | "approval-responded" | "output-available" | "output-error" | "output-denied";
|
|
686
|
+
/**
|
|
687
|
+
* A tool invocation part — covers both static (typed) and dynamic tools via
|
|
688
|
+
* the `dynamic-tool` discriminator. The `type` field follows the Vercel
|
|
689
|
+
* convention: `tool-${toolName}` for static, `dynamic-tool` for runtime.
|
|
690
|
+
*/
|
|
691
|
+
interface ToolUIPart {
|
|
692
|
+
/** `tool-${toolName}` (static) or `dynamic-tool` (runtime). */
|
|
693
|
+
type: `tool-${string}` | "dynamic-tool";
|
|
694
|
+
toolCallId: string;
|
|
695
|
+
toolName?: string;
|
|
696
|
+
title?: string;
|
|
697
|
+
state: ToolInvocationState;
|
|
698
|
+
input?: unknown;
|
|
699
|
+
output?: unknown;
|
|
700
|
+
errorText?: string;
|
|
701
|
+
providerExecuted?: boolean;
|
|
702
|
+
callProviderMetadata?: ProviderMetadata;
|
|
703
|
+
resultProviderMetadata?: ProviderMetadata;
|
|
704
|
+
approval?: {
|
|
705
|
+
id: string;
|
|
706
|
+
approved?: boolean;
|
|
707
|
+
reason?: string;
|
|
708
|
+
isAutomatic?: boolean;
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
/**
|
|
712
|
+
* A data part — typed custom application state. The `type` field follows
|
|
713
|
+
* `data-${name}` and `data` carries the payload. Consumers register a
|
|
714
|
+
* renderer per `data-${name}` via the `<ChatMessage>` `dataRenderers` prop.
|
|
715
|
+
*/
|
|
716
|
+
interface DataUIPart {
|
|
717
|
+
/** `data-${name}` */
|
|
718
|
+
type: `data-${string}`;
|
|
719
|
+
id?: string;
|
|
720
|
+
data: unknown;
|
|
721
|
+
}
|
|
722
|
+
type UIMessagePart = TextUIPart | ReasoningUIPart | FileUIPart | ReasoningFileUIPart | SourceUrlUIPart | SourceDocumentUIPart | StepStartUIPart | CustomContentUIPart | ToolUIPart | DataUIPart;
|
|
723
|
+
declare function isTextUIPart(part: UIMessagePart): part is TextUIPart;
|
|
724
|
+
declare function isReasoningUIPart(part: UIMessagePart): part is ReasoningUIPart;
|
|
725
|
+
declare function isFileUIPart(part: UIMessagePart): part is FileUIPart;
|
|
726
|
+
declare function isReasoningFileUIPart(part: UIMessagePart): part is ReasoningFileUIPart;
|
|
727
|
+
declare function isSourceUrlUIPart(part: UIMessagePart): part is SourceUrlUIPart;
|
|
728
|
+
declare function isSourceDocumentUIPart(part: UIMessagePart): part is SourceDocumentUIPart;
|
|
729
|
+
declare function isStepStartUIPart(part: UIMessagePart): part is StepStartUIPart;
|
|
730
|
+
declare function isCustomContentUIPart(part: UIMessagePart): part is CustomContentUIPart;
|
|
731
|
+
declare function isToolUIPart(part: UIMessagePart): part is ToolUIPart;
|
|
732
|
+
declare function isDataUIPart(part: UIMessagePart): part is DataUIPart;
|
|
733
|
+
/**
|
|
734
|
+
* A chat message in UI form.
|
|
735
|
+
*
|
|
736
|
+
* Field-for-field compatible with `UIMessage` from `vercel/ai` (the AI SDK's
|
|
737
|
+
* `useChat()` return type) — a consumer's `useChat()` messages flow into
|
|
738
|
+
* `<ChatMessage message={msg} />` with zero adapter.
|
|
739
|
+
*
|
|
740
|
+
* `metadata` is opaque (`unknown`) so consumers can attach arbitrary fields
|
|
741
|
+
* (timestamps, model identifiers, request IDs, …) without our type
|
|
742
|
+
* dictating shape.
|
|
743
|
+
*/
|
|
744
|
+
interface UIMessage {
|
|
745
|
+
id: string;
|
|
746
|
+
role: MessageRole;
|
|
747
|
+
parts: UIMessagePart[];
|
|
748
|
+
metadata?: unknown;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
type AgentEventType = "command" | "file_read" | "file_write" | "edit" | "lint" | "typecheck" | "build" | "tool";
|
|
752
|
+
type AgentEventStatus = "pending" | "running" | "success" | "failed";
|
|
753
|
+
interface AgentEvent$1 {
|
|
754
|
+
id: string;
|
|
755
|
+
type: AgentEventType;
|
|
756
|
+
label: string;
|
|
757
|
+
/** File path when the event is file-related. */
|
|
758
|
+
path?: string;
|
|
759
|
+
/** Diff stats for edit/write events. */
|
|
760
|
+
diff?: {
|
|
761
|
+
added: number;
|
|
762
|
+
removed: number;
|
|
763
|
+
};
|
|
764
|
+
status: AgentEventStatus;
|
|
765
|
+
timestamp?: string;
|
|
766
|
+
/** Optional expandable detail (e.g. command output, diff snippet). */
|
|
767
|
+
detail?: ReactNode;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
type PermissionOperation = "read" | "write" | "delete";
|
|
771
|
+
type PermissionDecision = "denied" | "allowed_once" | "always_allowed";
|
|
772
|
+
interface PermissionRequest {
|
|
773
|
+
/** Absolute path to the resource (file or folder). */
|
|
774
|
+
path: string;
|
|
775
|
+
/** Operations the agent wants to perform on the resource. */
|
|
776
|
+
operations: PermissionOperation[];
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
type TaskStatus = "idle" | "permission_required" | "starting" | "running" | "verifying" | "completed" | "failed";
|
|
780
|
+
type TaskStepStatus = "pending" | "running" | "done" | "skipped";
|
|
781
|
+
interface TaskStep {
|
|
782
|
+
id: string;
|
|
783
|
+
label: string;
|
|
784
|
+
status: TaskStepStatus;
|
|
785
|
+
/** 0..1 progress for in-flight steps. */
|
|
786
|
+
progress?: number;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
/**
|
|
790
|
+
* Button — primitive action element in the Violet Forge design system.
|
|
791
|
+
*
|
|
792
|
+
* Variants:
|
|
793
|
+
* - primary Theo violet fill, glow on hover (signature)
|
|
794
|
+
* - secondary surface with hairline border
|
|
795
|
+
* - accent burnt-sienna fill, celebratory actions
|
|
796
|
+
* - ghost transparent, hover lifts surface
|
|
797
|
+
* - link text-only, primary color, underline on hover
|
|
798
|
+
* - destructive for irreversible actions
|
|
799
|
+
*
|
|
800
|
+
* Sizes: sm (32px) · md (40px, default) · lg (48px) · icon (square 40px)
|
|
801
|
+
*
|
|
802
|
+
* `asChild` swaps the root for the consumer's element (Radix Slot pattern).
|
|
803
|
+
*/
|
|
804
|
+
declare const buttonVariants: (props?: ({
|
|
805
|
+
variant?: "accent" | "link" | "primary" | "secondary" | "destructive" | "ghost" | null | undefined;
|
|
806
|
+
size?: "sm" | "md" | "lg" | "icon" | null | undefined;
|
|
807
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
808
|
+
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
809
|
+
asChild?: boolean;
|
|
810
|
+
}
|
|
811
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* Badge — small status / tag indicator.
|
|
815
|
+
*
|
|
816
|
+
* Variants:
|
|
817
|
+
* - default muted surface, hairline border
|
|
818
|
+
* - primary violet outline + soft violet bg
|
|
819
|
+
* - accent burnt sienna (celebration / pro / beta)
|
|
820
|
+
* - success deploy succeeded
|
|
821
|
+
* - warning attention needed
|
|
822
|
+
* - destructive failed
|
|
823
|
+
* - outline transparent, just border
|
|
824
|
+
*
|
|
825
|
+
* Status dots are inlined via `<Badge.Dot />` for things like "Building…",
|
|
826
|
+
* "Running", "Failed" rows in deployment lists.
|
|
827
|
+
*/
|
|
828
|
+
declare const badgeVariants: (props?: ({
|
|
829
|
+
variant?: "accent" | "primary" | "success" | "warning" | "destructive" | "default" | "outline" | null | undefined;
|
|
830
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
831
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
832
|
+
interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
|
|
833
|
+
}
|
|
834
|
+
declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
|
|
835
|
+
interface BadgeDotProps extends HTMLAttributes<HTMLSpanElement> {
|
|
836
|
+
pulse?: boolean;
|
|
837
|
+
tone?: "primary" | "accent" | "success" | "warning" | "destructive" | "muted";
|
|
838
|
+
}
|
|
839
|
+
declare const Dot: react.ForwardRefExoticComponent<BadgeDotProps & react.RefAttributes<HTMLSpanElement>>;
|
|
840
|
+
declare const BadgeWithDot: typeof Badge & {
|
|
841
|
+
Dot: typeof Dot;
|
|
842
|
+
};
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* ThinkingLevelSelector — multi-state combobox for LLM reasoning budget.
|
|
846
|
+
*
|
|
847
|
+
* Mirrors the OpenClaw Control UI thinking selector. Values follow the SDK's
|
|
848
|
+
* `Agent.thinking` parameter ("minimal" | "low" | "medium" | "high" | "xhigh")
|
|
849
|
+
* plus a sentinel "off" and the special "inherited" mode that means "use the
|
|
850
|
+
* value resolved by the parent agent/session".
|
|
851
|
+
*
|
|
852
|
+
* Pure UI primitive. No backend dependency. Consumer wires `value` from agent
|
|
853
|
+
* state and persists `onChange` selections wherever it pleases.
|
|
854
|
+
*
|
|
855
|
+
* Phase 1 of `theokit-ui-parity-plan.md` (T1.1).
|
|
856
|
+
*/
|
|
857
|
+
type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
858
|
+
type ThinkingLevelOrInherited = ThinkingLevel | "inherited";
|
|
859
|
+
interface ThinkingLevelSelectorProps {
|
|
860
|
+
value: ThinkingLevelOrInherited;
|
|
861
|
+
inheritedValue?: ThinkingLevel;
|
|
862
|
+
onChange: (value: ThinkingLevelOrInherited) => void;
|
|
863
|
+
disabled?: boolean;
|
|
864
|
+
className?: string;
|
|
865
|
+
"data-testid"?: string;
|
|
866
|
+
}
|
|
867
|
+
declare const ThinkingLevelSelector: react.ForwardRefExoticComponent<ThinkingLevelSelectorProps & react.RefAttributes<HTMLSelectElement>>;
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* RunStatusPill — compact status indicator for Run/Task lifecycle states.
|
|
871
|
+
* Mirrors OpenClaw's `Run status: In progress | Done | Interrupted` pill.
|
|
872
|
+
* Closed enum mirrors SDK `Task` state (D362).
|
|
873
|
+
*/
|
|
874
|
+
type RunStatus = "queued" | "in_progress" | "finished" | "error" | "cancelled" | "interrupted";
|
|
875
|
+
interface RunStatusPillProps extends Omit<HTMLAttributes<HTMLSpanElement>, "title"> {
|
|
876
|
+
status: RunStatus;
|
|
877
|
+
detail?: string;
|
|
878
|
+
"data-testid"?: string;
|
|
879
|
+
}
|
|
880
|
+
declare const RunStatusPill: react.ForwardRefExoticComponent<RunStatusPillProps & react.RefAttributes<HTMLSpanElement>>;
|
|
881
|
+
|
|
882
|
+
/**
|
|
883
|
+
* BranchIndicator — small "×N" pill that shows when a run was retried/branched.
|
|
884
|
+
*
|
|
885
|
+
* Renders `null` when `branchCount < 2` OR when not a positive integer.
|
|
886
|
+
* EC-10 guard: parametrized over [-1, 0, 0.5] in tests.
|
|
887
|
+
*/
|
|
888
|
+
interface BranchIndicatorProps extends HTMLAttributes<HTMLSpanElement> {
|
|
889
|
+
branchCount: number;
|
|
890
|
+
tooltipText?: string;
|
|
891
|
+
"data-testid"?: string;
|
|
892
|
+
}
|
|
893
|
+
declare const BranchIndicator: react.ForwardRefExoticComponent<BranchIndicatorProps & react.RefAttributes<HTMLSpanElement>>;
|
|
894
|
+
|
|
895
|
+
/**
|
|
896
|
+
* GatewayStatusIndicator — live connection-status dot for a gateway/server.
|
|
897
|
+
*
|
|
898
|
+
* Variants:
|
|
899
|
+
* - compact : colored dot only (sidebar footer use)
|
|
900
|
+
* - labeled : dot + label + optional latency text
|
|
901
|
+
*
|
|
902
|
+
* `reconnecting` state animates with `animate-pulse` and respects
|
|
903
|
+
* `prefers-reduced-motion` automatically (Tailwind defaults).
|
|
904
|
+
*/
|
|
905
|
+
type GatewayStatus = "online" | "offline" | "degraded" | "reconnecting";
|
|
906
|
+
interface GatewayStatusIndicatorProps extends Omit<HTMLAttributes<HTMLSpanElement>, "title"> {
|
|
907
|
+
status: GatewayStatus;
|
|
908
|
+
latencyMs?: number;
|
|
909
|
+
variant?: "compact" | "labeled";
|
|
910
|
+
"data-testid"?: string;
|
|
911
|
+
}
|
|
912
|
+
declare const GatewayStatusIndicator: react.ForwardRefExoticComponent<GatewayStatusIndicatorProps & react.RefAttributes<HTMLSpanElement>>;
|
|
913
|
+
|
|
914
|
+
/**
|
|
915
|
+
* UpdateBanner — top-of-app alert when a newer version is available.
|
|
916
|
+
*
|
|
917
|
+
* Controlled. Dismiss persistence (localStorage/cookie/etc) is the consumer's
|
|
918
|
+
* responsibility (per EC-16 DOCUMENT). Component just fires `onDismiss`.
|
|
919
|
+
*/
|
|
920
|
+
interface UpdateBannerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
921
|
+
currentVersion: string;
|
|
922
|
+
latestVersion: string;
|
|
923
|
+
onUpdate: () => void;
|
|
924
|
+
onDismiss?: () => void;
|
|
925
|
+
severity?: "info" | "warn";
|
|
926
|
+
"data-testid"?: string;
|
|
927
|
+
}
|
|
928
|
+
declare const UpdateBanner: react.ForwardRefExoticComponent<UpdateBannerProps & react.RefAttributes<HTMLDivElement>>;
|
|
929
|
+
|
|
930
|
+
/**
|
|
931
|
+
* ExportChatDialog — modal letting users export a chat session in selectable
|
|
932
|
+
* formats. Async-aware: `onExport` returning a Promise disables the button
|
|
933
|
+
* until resolution.
|
|
934
|
+
*
|
|
935
|
+
* Controlled. Consumer renders the trigger and toggles `open`.
|
|
936
|
+
*/
|
|
937
|
+
type ExportFormat = "markdown" | "json" | "jsonl" | "sharegpt";
|
|
938
|
+
interface ExportChatDialogProps {
|
|
939
|
+
open: boolean;
|
|
940
|
+
onOpenChange: (open: boolean) => void;
|
|
941
|
+
onExport: (format: ExportFormat) => void | Promise<void>;
|
|
942
|
+
availableFormats?: ExportFormat[];
|
|
943
|
+
sessionLabel?: string;
|
|
944
|
+
className?: string;
|
|
945
|
+
"data-testid"?: string;
|
|
946
|
+
}
|
|
947
|
+
declare const ExportChatDialog: react.ForwardRefExoticComponent<ExportChatDialogProps & react.RefAttributes<HTMLDivElement>>;
|
|
948
|
+
|
|
949
|
+
/**
|
|
950
|
+
* StabilityBundleViewer — inspector for a stability-bundle JSON produced by a
|
|
951
|
+
* server crash. Sections (error, env, config, metadata) collapse independently.
|
|
952
|
+
*
|
|
953
|
+
* EC-9: handles bundles missing optional sections gracefully. Renderer DOES
|
|
954
|
+
* NOT redact env values — bundle writer is expected to redact at emit-time.
|
|
955
|
+
*/
|
|
956
|
+
type StabilitySeverity = "fatal" | "error" | "warn";
|
|
957
|
+
interface StabilityBundle {
|
|
958
|
+
timestamp: string;
|
|
959
|
+
severity: StabilitySeverity;
|
|
960
|
+
summary: string;
|
|
961
|
+
error?: {
|
|
962
|
+
name: string;
|
|
963
|
+
message: string;
|
|
964
|
+
stack?: string;
|
|
965
|
+
};
|
|
966
|
+
env?: Record<string, string>;
|
|
967
|
+
config?: Record<string, unknown>;
|
|
968
|
+
metadata?: Record<string, unknown>;
|
|
969
|
+
}
|
|
970
|
+
interface StabilityBundleViewerProps {
|
|
971
|
+
bundle: StabilityBundle;
|
|
972
|
+
onCopy?: () => void;
|
|
973
|
+
className?: string;
|
|
974
|
+
"data-testid"?: string;
|
|
975
|
+
}
|
|
976
|
+
declare const StabilityBundleViewer: react.ForwardRefExoticComponent<StabilityBundleViewerProps & react.RefAttributes<HTMLDivElement>>;
|
|
977
|
+
|
|
978
|
+
/**
|
|
979
|
+
* Card — surface container for grouping related content.
|
|
980
|
+
*
|
|
981
|
+
* Composition pattern (shadcn-style):
|
|
982
|
+
* <Card>
|
|
983
|
+
* <Card.Header>
|
|
984
|
+
* <Card.Title>…</Card.Title>
|
|
985
|
+
* <Card.Description>…</Card.Description>
|
|
986
|
+
* </Card.Header>
|
|
987
|
+
* <Card.Body>…</Card.Body>
|
|
988
|
+
* <Card.Footer>…</Card.Footer>
|
|
989
|
+
* </Card>
|
|
990
|
+
*
|
|
991
|
+
* The `size` prop on the root propagates to subparts via Context, so a
|
|
992
|
+
* single declaration controls padding + heading scale across the compound.
|
|
993
|
+
* Subparts used in isolation default to `md`. Subparts do NOT accept a `size`
|
|
994
|
+
* prop of their own — use `className` for granular per-subpart tweaks.
|
|
995
|
+
* (EC-8, edge-case review 2026-05-20.)
|
|
996
|
+
*/
|
|
997
|
+
type CardSize = "sm" | "md" | "lg";
|
|
998
|
+
interface CardRootProps extends HTMLAttributes<HTMLDivElement> {
|
|
999
|
+
size?: CardSize;
|
|
1000
|
+
}
|
|
1001
|
+
interface TitleProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
1002
|
+
/**
|
|
1003
|
+
* When true, renders the child element with the Card.Title styles applied
|
|
1004
|
+
* (Radix Slot pattern). Use to swap the default `<h3>` for `<h1>` / `<h2>`
|
|
1005
|
+
* when the heading hierarchy requires it.
|
|
1006
|
+
*/
|
|
1007
|
+
asChild?: boolean;
|
|
1008
|
+
}
|
|
1009
|
+
declare const Card: react.ForwardRefExoticComponent<CardRootProps & react.RefAttributes<HTMLDivElement>> & {
|
|
1010
|
+
Header: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
1011
|
+
Title: react.ForwardRefExoticComponent<TitleProps & react.RefAttributes<HTMLHeadingElement>>;
|
|
1012
|
+
Description: react.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1013
|
+
Body: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
1014
|
+
Footer: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
1015
|
+
};
|
|
1016
|
+
|
|
1017
|
+
declare const inputVariants: (props?: ({
|
|
1018
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
1019
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1020
|
+
/**
|
|
1021
|
+
* Input — text input primitive.
|
|
1022
|
+
*
|
|
1023
|
+
* Violet Forge specifics:
|
|
1024
|
+
* - height 40px (h-10) matching default Button md.
|
|
1025
|
+
* - rounded-md (6px) — slightly less than buttons to differentiate.
|
|
1026
|
+
* - focus uses violet ring (--ring).
|
|
1027
|
+
* - placeholder uses --muted-foreground.
|
|
1028
|
+
*
|
|
1029
|
+
* The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
|
|
1030
|
+
* 40px tall input from before this prop existed. EC-1 (edge-case review):
|
|
1031
|
+
* this overrides the native HTML `size` attribute (text-input columns) —
|
|
1032
|
+
* use `{...{ size: 20 } as any}` if you genuinely need the HTML attribute,
|
|
1033
|
+
* which is exceedingly rare.
|
|
1034
|
+
*/
|
|
1035
|
+
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size">, VariantProps<typeof inputVariants> {
|
|
1036
|
+
}
|
|
1037
|
+
declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
|
|
1038
|
+
|
|
1039
|
+
interface ContentProps$1 extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
|
|
1040
|
+
hideCloseButton?: boolean;
|
|
1041
|
+
}
|
|
1042
|
+
declare const Dialog: react.FC<DialogPrimitive.DialogProps> & {
|
|
1043
|
+
Trigger: react.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1044
|
+
Close: react.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1045
|
+
Content: react.ForwardRefExoticComponent<ContentProps$1 & react.RefAttributes<HTMLDivElement>>;
|
|
1046
|
+
Overlay: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1047
|
+
Header: {
|
|
1048
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
1049
|
+
displayName: string;
|
|
1050
|
+
};
|
|
1051
|
+
Body: {
|
|
1052
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
1053
|
+
displayName: string;
|
|
1054
|
+
};
|
|
1055
|
+
Footer: {
|
|
1056
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
1057
|
+
displayName: string;
|
|
1058
|
+
};
|
|
1059
|
+
Title: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
1060
|
+
Description: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1061
|
+
};
|
|
1062
|
+
|
|
1063
|
+
declare const Tabs: react.ForwardRefExoticComponent<TabsPrimitive.TabsProps & react.RefAttributes<HTMLDivElement>> & {
|
|
1064
|
+
List: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1065
|
+
Trigger: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
1066
|
+
Content: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1067
|
+
};
|
|
1068
|
+
|
|
1069
|
+
/**
|
|
1070
|
+
* Tooltip — built on Radix Tooltip.
|
|
1071
|
+
*
|
|
1072
|
+
* Visual: dark surface in light mode (and inverse in dark) with rounded-md,
|
|
1073
|
+
* shadow-md, text-body-sm. 8px delay-show default.
|
|
1074
|
+
*
|
|
1075
|
+
* Wrap your app in <Tooltip.Provider> once (or use the default delayDuration here).
|
|
1076
|
+
*/
|
|
1077
|
+
declare const Provider: react.FC<TooltipPrimitive.TooltipProviderProps>;
|
|
1078
|
+
declare const Root$2: react.FC<TooltipPrimitive.TooltipProps>;
|
|
1079
|
+
declare const Trigger$1: react.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1080
|
+
declare const Content$2: react.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1081
|
+
interface TooltipProps extends ComponentPropsWithoutRef<typeof TooltipPrimitive.Root> {
|
|
1082
|
+
label: ReactNode;
|
|
1083
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
1084
|
+
align?: "start" | "center" | "end";
|
|
1085
|
+
children: ReactNode;
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* Shorthand: <Tooltip label="…"><Button>…</Button></Tooltip>
|
|
1089
|
+
* Wraps Provider + Root + Trigger asChild + Content for the common case.
|
|
1090
|
+
* For advanced usage (controlled state, custom content), use Tooltip.Root etc. directly.
|
|
1091
|
+
*/
|
|
1092
|
+
declare const Tooltip: ({ label, side, align, delayDuration, children, ...rootProps }: TooltipProps) => ReturnType<typeof Provider>;
|
|
1093
|
+
declare const TooltipWithStatics: typeof Tooltip & {
|
|
1094
|
+
Provider: typeof Provider;
|
|
1095
|
+
Root: typeof Root$2;
|
|
1096
|
+
Trigger: typeof Trigger$1;
|
|
1097
|
+
Content: typeof Content$2;
|
|
1098
|
+
};
|
|
1099
|
+
|
|
1100
|
+
/**
|
|
1101
|
+
* ScrollArea — custom scroller with Violet Forge styling.
|
|
1102
|
+
*
|
|
1103
|
+
* Built on Radix ScrollArea so the native scrollbar is always hidden and the
|
|
1104
|
+
* custom thumb stays consistent across Chrome/Firefox/Safari/macOS-trackpad.
|
|
1105
|
+
*
|
|
1106
|
+
* Visual:
|
|
1107
|
+
* - track is transparent, only the thumb is visible.
|
|
1108
|
+
* - thumb is `--primary` at 25% opacity by default; on hover, 45% with violet glow.
|
|
1109
|
+
* - active drag bumps to 60%.
|
|
1110
|
+
* - the rounded full pill thumb plays well with the brutalist border language
|
|
1111
|
+
* but stays subtle (1.5px wide on rest, 3px on hover).
|
|
1112
|
+
*
|
|
1113
|
+
* Modes (via `type`):
|
|
1114
|
+
* - "hover" (default) — scrollbar fades in on hover/focus, otherwise hidden.
|
|
1115
|
+
* - "always" — scrollbar always visible.
|
|
1116
|
+
* - "auto" — scrollbar visible only when content overflows.
|
|
1117
|
+
* - "scroll" — Radix-managed: visible only while scrolling.
|
|
1118
|
+
*/
|
|
1119
|
+
interface ScrollAreaProps extends ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> {
|
|
1120
|
+
/**
|
|
1121
|
+
* Optional override for which scrollbar(s) to render.
|
|
1122
|
+
* Defaults: vertical only. Set to "both" for grids/tables with overflow-x.
|
|
1123
|
+
*/
|
|
1124
|
+
orientation?: "vertical" | "horizontal" | "both";
|
|
1125
|
+
/**
|
|
1126
|
+
* Thickness of the scrollbar. Default "thin" (2.5px → 3.5px on hover).
|
|
1127
|
+
* Use "regular" (8px) for content where the scrollbar should be a more prominent target.
|
|
1128
|
+
*/
|
|
1129
|
+
size?: "thin" | "regular";
|
|
1130
|
+
}
|
|
1131
|
+
interface ScrollBarProps extends ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar> {
|
|
1132
|
+
size?: "thin" | "regular";
|
|
1133
|
+
}
|
|
1134
|
+
declare const ScrollArea: react.ForwardRefExoticComponent<ScrollAreaProps & react.RefAttributes<HTMLDivElement>> & {
|
|
1135
|
+
Bar: react.ForwardRefExoticComponent<ScrollBarProps & react.RefAttributes<HTMLDivElement>>;
|
|
1136
|
+
};
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* Skeleton — placeholder block shown while content is loading.
|
|
1140
|
+
*
|
|
1141
|
+
* Uses --muted as base + a subtle shimmer that respects the violet theme.
|
|
1142
|
+
* Compose multiple Skeletons to mirror your component layout while loading.
|
|
1143
|
+
*
|
|
1144
|
+
* Accessibility (LOW-004): the default `role="status"` + `aria-live="polite"`
|
|
1145
|
+
* announces "Loading" to screen readers. In loops or grids where many
|
|
1146
|
+
* Skeletons mount simultaneously, this can be noisy. Override per-instance
|
|
1147
|
+
* with `aria-live="off"` and/or `aria-hidden` when only one container-level
|
|
1148
|
+
* loading announcement is desired:
|
|
1149
|
+
*
|
|
1150
|
+
* <div role="status" aria-live="polite" aria-label="Loading deployments">
|
|
1151
|
+
* {placeholders.map(id => (
|
|
1152
|
+
* <Skeleton key={id} aria-live="off" aria-hidden="true" className="h-8" />
|
|
1153
|
+
* ))}
|
|
1154
|
+
* </div>
|
|
1155
|
+
*/
|
|
1156
|
+
declare const Skeleton: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
1157
|
+
|
|
1158
|
+
/**
|
|
1159
|
+
* Avatar — user/team avatar with safe fallback to initials.
|
|
1160
|
+
*
|
|
1161
|
+
* Composition:
|
|
1162
|
+
* <Avatar size="md">
|
|
1163
|
+
* <Avatar.Image src="…" alt="…" />
|
|
1164
|
+
* <Avatar.Fallback>AA</Avatar.Fallback>
|
|
1165
|
+
* </Avatar>
|
|
1166
|
+
*
|
|
1167
|
+
* Built on Radix Avatar (handles image load failures → fallback automatically).
|
|
1168
|
+
* Sizes scale on the root; fallback inherits the size's text scale.
|
|
1169
|
+
*/
|
|
1170
|
+
declare const avatarVariants: (props?: ({
|
|
1171
|
+
size?: "sm" | "md" | "lg" | "xs" | "xl" | null | undefined;
|
|
1172
|
+
tone?: "accent" | "primary" | "muted" | null | undefined;
|
|
1173
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1174
|
+
interface AvatarProps extends ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>, VariantProps<typeof avatarVariants> {
|
|
1175
|
+
}
|
|
1176
|
+
declare const Avatar: react.ForwardRefExoticComponent<AvatarProps & react.RefAttributes<HTMLSpanElement>> & {
|
|
1177
|
+
Image: react.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & react.RefAttributes<HTMLImageElement>, "ref"> & react.RefAttributes<HTMLImageElement>>;
|
|
1178
|
+
Fallback: react.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & react.RefAttributes<HTMLSpanElement>, "ref"> & react.RefAttributes<HTMLSpanElement>>;
|
|
1179
|
+
};
|
|
1180
|
+
|
|
1181
|
+
/**
|
|
1182
|
+
* Label — form field label built on Radix Label.
|
|
1183
|
+
*
|
|
1184
|
+
* Behaviors:
|
|
1185
|
+
* - Clicking the label focuses the associated `htmlFor` input.
|
|
1186
|
+
* - Adds a small red asterisk when `required` is set.
|
|
1187
|
+
* - Inherits disabled visuals from the wrapper (`peer-disabled`).
|
|
1188
|
+
*/
|
|
1189
|
+
interface LabelProps$1 extends ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {
|
|
1190
|
+
required?: boolean;
|
|
1191
|
+
}
|
|
1192
|
+
declare const Label$1: react.ForwardRefExoticComponent<LabelProps$1 & react.RefAttributes<HTMLLabelElement>>;
|
|
1193
|
+
|
|
1194
|
+
/**
|
|
1195
|
+
* FormField — composition wrapper for accessible form rows.
|
|
1196
|
+
*
|
|
1197
|
+
* Provides context with a generated `id`, so children (Label, Input, Hint,
|
|
1198
|
+
* Error) wire themselves via `htmlFor` / `id` / `aria-describedby` without
|
|
1199
|
+
* the consumer having to thread IDs manually.
|
|
1200
|
+
*
|
|
1201
|
+
* Composition:
|
|
1202
|
+
* <FormField>
|
|
1203
|
+
* <FormField.Label required>Email</FormField.Label>
|
|
1204
|
+
* <FormField.Control>
|
|
1205
|
+
* <Input type="email" placeholder="…" />
|
|
1206
|
+
* </FormField.Control>
|
|
1207
|
+
* <FormField.Hint>We never share your email.</FormField.Hint>
|
|
1208
|
+
* <FormField.Error>{error}</FormField.Error>
|
|
1209
|
+
* </FormField>
|
|
1210
|
+
*
|
|
1211
|
+
* Errors take precedence over hints (only one of them shows at once).
|
|
1212
|
+
*/
|
|
1213
|
+
type FormFieldSize = "sm" | "md" | "lg";
|
|
1214
|
+
interface FormFieldProps extends HTMLAttributes<HTMLDivElement> {
|
|
1215
|
+
/** Optional explicit id override. */
|
|
1216
|
+
id?: string;
|
|
1217
|
+
/** Marks the field as invalid; switches Hint → Error and toggles aria. */
|
|
1218
|
+
invalid?: boolean;
|
|
1219
|
+
/**
|
|
1220
|
+
* Size scale propagated to Label / Hint / Error subparts via Context.
|
|
1221
|
+
* Default `md` preserves prior behavior. Subparts do NOT accept a `size`
|
|
1222
|
+
* prop of their own — use `className` for granular tweaks (EC-8).
|
|
1223
|
+
*/
|
|
1224
|
+
size?: FormFieldSize;
|
|
1225
|
+
}
|
|
1226
|
+
interface FormFieldLabelProps extends ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {
|
|
1227
|
+
required?: boolean;
|
|
1228
|
+
}
|
|
1229
|
+
declare const FormField: react.ForwardRefExoticComponent<FormFieldProps & react.RefAttributes<HTMLDivElement>> & {
|
|
1230
|
+
Label: react.ForwardRefExoticComponent<FormFieldLabelProps & react.RefAttributes<HTMLLabelElement>>;
|
|
1231
|
+
Control: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
1232
|
+
Hint: react.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1233
|
+
Error: react.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & react.RefAttributes<HTMLParagraphElement>>;
|
|
1234
|
+
};
|
|
1235
|
+
|
|
1236
|
+
/**
|
|
1237
|
+
* IconComponent — shape compatible with both lucide-react icons and custom React SVG components.
|
|
1238
|
+
*
|
|
1239
|
+
* Centralizing this here avoids TS2322 noise from `exactOptionalPropertyTypes` when mapping
|
|
1240
|
+
* icons through Record<...> structures.
|
|
1241
|
+
*/
|
|
1242
|
+
type IconComponent = ComponentType<SVGProps<SVGSVGElement> & {
|
|
1243
|
+
className?: string;
|
|
1244
|
+
}>;
|
|
1245
|
+
|
|
1246
|
+
interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1247
|
+
/** Icon shown above the title. */
|
|
1248
|
+
icon?: IconComponent;
|
|
1249
|
+
title: ReactNode;
|
|
1250
|
+
description?: ReactNode;
|
|
1251
|
+
/** Optional action slot (typically <Button>). */
|
|
1252
|
+
action?: ReactNode;
|
|
1253
|
+
/** Hint shown above the title (e.g. uppercase eyebrow). */
|
|
1254
|
+
eyebrow?: ReactNode;
|
|
1255
|
+
/** Bordered dashed surface (placeholder vibe). Default true. */
|
|
1256
|
+
dashed?: boolean;
|
|
1257
|
+
}
|
|
1258
|
+
/**
|
|
1259
|
+
* EmptyState — visual placeholder for empty lists / first-run screens.
|
|
1260
|
+
*
|
|
1261
|
+
* Composition: icon + eyebrow + title + description + action. All slots are
|
|
1262
|
+
* optional except title.
|
|
1263
|
+
*/
|
|
1264
|
+
declare const EmptyState: react.ForwardRefExoticComponent<EmptyStateProps & react.RefAttributes<HTMLDivElement>>;
|
|
1265
|
+
|
|
1266
|
+
/**
|
|
1267
|
+
* Trigger size variant (theming-and-sizes plan T1.9).
|
|
1268
|
+
* Items inside Select.Content stay md-equivalent regardless — the floating
|
|
1269
|
+
* menu is isolated from the trigger context (documented decision).
|
|
1270
|
+
*
|
|
1271
|
+
* EC-2 guard: `<Select.Trigger>` is a Radix `<button>` — no SelectHTMLAttributes
|
|
1272
|
+
* conflict to Omit. Verified before implementation.
|
|
1273
|
+
*/
|
|
1274
|
+
declare const selectTriggerVariants: (props?: ({
|
|
1275
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
1276
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1277
|
+
/**
|
|
1278
|
+
* Select — styled wrapper around Radix Select.
|
|
1279
|
+
*
|
|
1280
|
+
* Composition:
|
|
1281
|
+
* <Select value={value} onValueChange={setValue}>
|
|
1282
|
+
* <Select.Trigger>
|
|
1283
|
+
* <Select.Value placeholder="Pick…" />
|
|
1284
|
+
* </Select.Trigger>
|
|
1285
|
+
* <Select.Content>
|
|
1286
|
+
* <Select.Group>
|
|
1287
|
+
* <Select.Label>Group</Select.Label>
|
|
1288
|
+
* <Select.Item value="a">A</Select.Item>
|
|
1289
|
+
* </Select.Group>
|
|
1290
|
+
* </Select.Content>
|
|
1291
|
+
* </Select>
|
|
1292
|
+
*
|
|
1293
|
+
* Trigger matches Input height + violet focus ring. Content uses popover
|
|
1294
|
+
* surface with check on the selected item.
|
|
1295
|
+
*/
|
|
1296
|
+
interface SelectTriggerProps extends ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>, VariantProps<typeof selectTriggerVariants> {
|
|
1297
|
+
}
|
|
1298
|
+
declare const SelectTrigger: react.ForwardRefExoticComponent<SelectTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1299
|
+
declare const SelectContent: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1300
|
+
declare const SelectLabel: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1301
|
+
declare const SelectItem: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1302
|
+
declare const SelectSeparator: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
1303
|
+
declare const Select: typeof SelectPrimitive.Root & {
|
|
1304
|
+
Trigger: typeof SelectTrigger;
|
|
1305
|
+
Value: typeof SelectPrimitive.Value;
|
|
1306
|
+
Content: typeof SelectContent;
|
|
1307
|
+
Group: typeof SelectPrimitive.Group;
|
|
1308
|
+
Label: typeof SelectLabel;
|
|
1309
|
+
Item: typeof SelectItem;
|
|
1310
|
+
Separator: typeof SelectSeparator;
|
|
1311
|
+
};
|
|
1312
|
+
|
|
1313
|
+
/**
|
|
1314
|
+
* Checkbox — built on Radix Checkbox.
|
|
1315
|
+
*
|
|
1316
|
+
* Supports tri-state via `checked="indeterminate"`. Violet fill when on,
|
|
1317
|
+
* border-only when off. Themed via tokens (--primary, --background).
|
|
1318
|
+
*
|
|
1319
|
+
* The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
|
|
1320
|
+
* 16px box from before this prop existed. The `sm` size keeps a >=24px
|
|
1321
|
+
* effective tap target via an invisible expanded hit area (WCAG 2.5.5).
|
|
1322
|
+
*/
|
|
1323
|
+
declare const checkboxVariants: (props?: ({
|
|
1324
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
1325
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1326
|
+
interface CheckboxProps extends ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>, VariantProps<typeof checkboxVariants> {
|
|
1327
|
+
}
|
|
1328
|
+
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1329
|
+
|
|
1330
|
+
declare const RadioGroup$1: react.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>> & {
|
|
1331
|
+
Item: react.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
1332
|
+
};
|
|
1333
|
+
|
|
1334
|
+
/**
|
|
1335
|
+
* Switch — built on Radix Switch. Used for binary toggles (autoaccept,
|
|
1336
|
+
* dark mode preview, feature flags).
|
|
1337
|
+
*
|
|
1338
|
+
* Off-state uses --muted, on-state uses --primary with a subtle glow shadow
|
|
1339
|
+
* to mark "this is active" in the violet brand language.
|
|
1340
|
+
*
|
|
1341
|
+
* The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
|
|
1342
|
+
* 20×36 track from before this prop existed.
|
|
1343
|
+
*/
|
|
1344
|
+
declare const switchVariants: (props?: ({
|
|
1345
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
1346
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1347
|
+
interface SwitchProps extends ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, VariantProps<typeof switchVariants> {
|
|
1348
|
+
}
|
|
1349
|
+
declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1350
|
+
|
|
1351
|
+
/**
|
|
1352
|
+
* Textarea — multi-line input mirror of Input.
|
|
1353
|
+
*
|
|
1354
|
+
* Matches Input visuals (violet focus ring, --input border, --card bg).
|
|
1355
|
+
* The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
|
|
1356
|
+
* 80px (5rem) min-height + body-md text from before this prop existed.
|
|
1357
|
+
*
|
|
1358
|
+
* Note: `TextareaHTMLAttributes<HTMLTextAreaElement>` does NOT declare a
|
|
1359
|
+
* native `size` attribute (textareas use `rows` / `cols`), so no Omit is
|
|
1360
|
+
* needed — contrast with `<Input>` which had EC-1 collision.
|
|
1361
|
+
*/
|
|
1362
|
+
declare const textareaVariants: (props?: ({
|
|
1363
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
1364
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1365
|
+
interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement>, VariantProps<typeof textareaVariants> {
|
|
1366
|
+
}
|
|
1367
|
+
declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
|
|
1368
|
+
|
|
1369
|
+
interface ContextWindowBarProps extends HTMLAttributes<HTMLDivElement> {
|
|
1370
|
+
/** Tokens currently used in the context window. */
|
|
1371
|
+
used: number;
|
|
1372
|
+
/** Model's total context capacity (e.g. 200_000, 1_000_000). */
|
|
1373
|
+
total: number;
|
|
1374
|
+
/** Optional secondary label rendered on the right (e.g. model name). */
|
|
1375
|
+
trailing?: ReactNode;
|
|
1376
|
+
/** Optional title shown above the bar. */
|
|
1377
|
+
label?: ReactNode;
|
|
1378
|
+
/** Compact mode hides numbers and label; just the bar. */
|
|
1379
|
+
compact?: boolean;
|
|
1380
|
+
/**
|
|
1381
|
+
* Override warning thresholds (0..1). Defaults: warn 0.7, danger 0.9.
|
|
1382
|
+
*/
|
|
1383
|
+
warnAt?: number;
|
|
1384
|
+
dangerAt?: number;
|
|
1385
|
+
}
|
|
1386
|
+
/**
|
|
1387
|
+
* ContextWindowBar — shows how much of the model's context window has been
|
|
1388
|
+
* consumed. Color transitions: success → warning → destructive past thresholds.
|
|
1389
|
+
*
|
|
1390
|
+
* Critical for transparency: a user should always be able to glance at this
|
|
1391
|
+
* and know if the conversation is about to hit the cap.
|
|
1392
|
+
*/
|
|
1393
|
+
declare const ContextWindowBar: react.ForwardRefExoticComponent<ContextWindowBarProps & react.RefAttributes<HTMLDivElement>>;
|
|
1394
|
+
|
|
1395
|
+
type CapabilityState = "enabled" | "disabled" | "blocked" | "active";
|
|
1396
|
+
interface Capability {
|
|
1397
|
+
id: string;
|
|
1398
|
+
/** Visible label. */
|
|
1399
|
+
label: ReactNode;
|
|
1400
|
+
/** Optional icon override. */
|
|
1401
|
+
icon?: IconComponent;
|
|
1402
|
+
/** Default state. */
|
|
1403
|
+
state?: CapabilityState;
|
|
1404
|
+
/** Tooltip / longer description. */
|
|
1405
|
+
hint?: ReactNode;
|
|
1406
|
+
}
|
|
1407
|
+
interface CapabilityIndicatorProps extends HTMLAttributes<HTMLDivElement> {
|
|
1408
|
+
capabilities: Capability[];
|
|
1409
|
+
}
|
|
1410
|
+
declare const CapabilityIndicator: react.ForwardRefExoticComponent<CapabilityIndicatorProps & react.RefAttributes<HTMLUListElement>>;
|
|
1411
|
+
/** Common capability presets — re-use these so apps don't reinvent labels. */
|
|
1412
|
+
declare const capabilityPresets: {
|
|
1413
|
+
read: {
|
|
1414
|
+
readonly id: "read";
|
|
1415
|
+
readonly label: "Read files";
|
|
1416
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1417
|
+
};
|
|
1418
|
+
write: {
|
|
1419
|
+
readonly id: "write";
|
|
1420
|
+
readonly label: "Write files";
|
|
1421
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1422
|
+
};
|
|
1423
|
+
delete: {
|
|
1424
|
+
readonly id: "delete";
|
|
1425
|
+
readonly label: "Delete files";
|
|
1426
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1427
|
+
};
|
|
1428
|
+
bash: {
|
|
1429
|
+
readonly id: "bash";
|
|
1430
|
+
readonly label: "Run shell";
|
|
1431
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1432
|
+
};
|
|
1433
|
+
network: {
|
|
1434
|
+
readonly id: "network";
|
|
1435
|
+
readonly label: "Network";
|
|
1436
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1437
|
+
};
|
|
1438
|
+
deploy: {
|
|
1439
|
+
readonly id: "deploy";
|
|
1440
|
+
readonly label: "Deploy";
|
|
1441
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1442
|
+
};
|
|
1443
|
+
llm: {
|
|
1444
|
+
readonly id: "llm";
|
|
1445
|
+
readonly label: "Sub-agents";
|
|
1446
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1447
|
+
};
|
|
1448
|
+
};
|
|
1449
|
+
|
|
1450
|
+
type ToolEnablement = "enabled" | "ask" | "denied";
|
|
1451
|
+
interface ToolEntry {
|
|
1452
|
+
id: string;
|
|
1453
|
+
name: string;
|
|
1454
|
+
description?: ReactNode;
|
|
1455
|
+
icon?: IconComponent;
|
|
1456
|
+
enablement?: ToolEnablement;
|
|
1457
|
+
/**
|
|
1458
|
+
* Source of the tool: built-in, plugin/skill, or MCP server name.
|
|
1459
|
+
*/
|
|
1460
|
+
source?: string;
|
|
1461
|
+
/** Optional badge text (e.g. "destructive", "experimental"). */
|
|
1462
|
+
badge?: ReactNode;
|
|
1463
|
+
}
|
|
1464
|
+
interface ToolsListProps extends Omit<HTMLAttributes<HTMLDivElement>, "title" | "onChange"> {
|
|
1465
|
+
tools: ToolEntry[];
|
|
1466
|
+
/** Title above the list. */
|
|
1467
|
+
title?: ReactNode;
|
|
1468
|
+
/**
|
|
1469
|
+
* Fires when the consumer toggles a tool's enablement state.
|
|
1470
|
+
* Cycle: enabled → ask → denied → enabled.
|
|
1471
|
+
*/
|
|
1472
|
+
onEnablementChange?: (id: string, next: ToolEnablement) => void;
|
|
1473
|
+
}
|
|
1474
|
+
/**
|
|
1475
|
+
* ToolsList — surface every tool the agent could call, with its enablement
|
|
1476
|
+
* state. Click the chip to cycle: Allowed → Ask → Denied.
|
|
1477
|
+
*/
|
|
1478
|
+
declare const ToolsList: react.ForwardRefExoticComponent<ToolsListProps & react.RefAttributes<HTMLDivElement>>;
|
|
1479
|
+
|
|
1480
|
+
type PermissionDecisionKind = "allow" | "ask" | "deny";
|
|
1481
|
+
interface PermissionRule {
|
|
1482
|
+
id: string;
|
|
1483
|
+
/** Tool the rule applies to. Use "*" for any. */
|
|
1484
|
+
tool: string;
|
|
1485
|
+
/** Glob path it applies to. Use "*" for any. */
|
|
1486
|
+
path: string;
|
|
1487
|
+
decision: PermissionDecisionKind;
|
|
1488
|
+
/** Optional rationale shown as helper text. */
|
|
1489
|
+
note?: string;
|
|
1490
|
+
}
|
|
1491
|
+
interface PermissionMatrixProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1492
|
+
rules: PermissionRule[];
|
|
1493
|
+
title?: ReactNode;
|
|
1494
|
+
/**
|
|
1495
|
+
* Available tools shown in the add form. Pass `undefined` (or omit) — or an
|
|
1496
|
+
* empty array — to hide the add form entirely. The form only renders when
|
|
1497
|
+
* `onAdd` is provided AND `toolOptions` has at least one entry.
|
|
1498
|
+
*/
|
|
1499
|
+
toolOptions?: string[];
|
|
1500
|
+
onAdd?: (rule: Omit<PermissionRule, "id">) => void;
|
|
1501
|
+
onRemove?: (id: string) => void;
|
|
1502
|
+
onDecisionChange?: (id: string, decision: PermissionDecisionKind) => void;
|
|
1503
|
+
}
|
|
1504
|
+
/**
|
|
1505
|
+
* PermissionMatrix — tool × path × decision grid for fine-grained access
|
|
1506
|
+
* control. Used as the "permissions" tab in the agent settings.
|
|
1507
|
+
*
|
|
1508
|
+
* One PermissionRule per row. Click the decision pill to cycle Allow → Ask → Deny.
|
|
1509
|
+
*
|
|
1510
|
+
* Design decision (2026-05-14): PermissionMatrix stays in `primitives/`
|
|
1511
|
+
* — not `composites/` — even though it renders inputs and a select. The native
|
|
1512
|
+
* `<input>` / `<select>` elements use Theo design tokens directly (border-input,
|
|
1513
|
+
* ring, font-mono) so visual parity with `Input` / `Select` primitives is
|
|
1514
|
+
* preserved. Reason for keeping it primitive: a consumer installing
|
|
1515
|
+
* `permission-matrix` from the registry gets a single self-contained file with
|
|
1516
|
+
* no transitive Theo dependencies — opposite trade-off from `EnvVarEditor`
|
|
1517
|
+
* which is intentionally a composite. Both shapes are valid; we ship one of
|
|
1518
|
+
* each so consumers can pick the dependency profile that fits their app.
|
|
1519
|
+
*/
|
|
1520
|
+
declare const PermissionMatrix: react.ForwardRefExoticComponent<PermissionMatrixProps & react.RefAttributes<HTMLDivElement>>;
|
|
1521
|
+
|
|
1522
|
+
/**
|
|
1523
|
+
* Mode — top-level density / domain the agent session is operating in.
|
|
1524
|
+
*
|
|
1525
|
+
* `chat` — conversational Q&A, lean UI.
|
|
1526
|
+
* `code` — code agent: read/plan/edit/verify inside the repo.
|
|
1527
|
+
* `infra` — operate the deployed system: metrics, deploys, logs, rollback.
|
|
1528
|
+
*
|
|
1529
|
+
* Used everywhere resources can be scoped per-mode (Skills, Agents, Rules,
|
|
1530
|
+
* SystemPrompt overrides, Sessions, …). `modes?: Mode[]` on a resource means
|
|
1531
|
+
* "only available in these modes"; omitting `modes` means "available
|
|
1532
|
+
* globally".
|
|
1533
|
+
*/
|
|
1534
|
+
type Mode = "chat" | "code" | "infra";
|
|
1535
|
+
declare const ALL_MODES: ReadonlyArray<Mode>;
|
|
1536
|
+
/** Friendly label per mode — render in chips, headers, badges. */
|
|
1537
|
+
declare const MODE_LABEL: Record<Mode, string>;
|
|
1538
|
+
|
|
1539
|
+
type SkillSource = "builtin" | "project" | "user" | "plugin";
|
|
1540
|
+
type SkillState = "enabled" | "disabled";
|
|
1541
|
+
interface Skill {
|
|
1542
|
+
id: string;
|
|
1543
|
+
name: string;
|
|
1544
|
+
description?: ReactNode;
|
|
1545
|
+
/** Where the skill comes from. */
|
|
1546
|
+
source: SkillSource;
|
|
1547
|
+
/** Optional tools the skill is allowed to use (informational). */
|
|
1548
|
+
allowedTools?: string[];
|
|
1549
|
+
/** Optional trigger keywords / patterns for discovery. */
|
|
1550
|
+
triggers?: string[];
|
|
1551
|
+
state?: SkillState;
|
|
1552
|
+
/** Modes this skill is visible in. Omit / empty = global (all modes). */
|
|
1553
|
+
modes?: Mode[];
|
|
1554
|
+
}
|
|
1555
|
+
interface SkillCardProps extends Omit<HTMLAttributes<HTMLDivElement>, "onToggle"> {
|
|
1556
|
+
skill: Skill;
|
|
1557
|
+
onToggle?: (id: string, next: SkillState) => void;
|
|
1558
|
+
}
|
|
1559
|
+
/**
|
|
1560
|
+
* SkillCard — single skill entry showing what it does, where it came from,
|
|
1561
|
+
* and which tools it needs. Toggle to enable/disable for the current session.
|
|
1562
|
+
*/
|
|
1563
|
+
declare const SkillCard: react.ForwardRefExoticComponent<SkillCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
1564
|
+
|
|
1565
|
+
/**
|
|
1566
|
+
* Rule — a user-authored behavior instruction injected into the system prompt.
|
|
1567
|
+
*
|
|
1568
|
+
* Equivalent to a single markdown file under `.claude/rules/` in Claude Code:
|
|
1569
|
+
* short imperative text the user writes once and the agent follows always.
|
|
1570
|
+
* Rules can be scoped (`global` = applies to every session; `project` = only
|
|
1571
|
+
* inside the current workspace) and toggled on/off without deletion.
|
|
1572
|
+
*/
|
|
1573
|
+
type RuleScope = "global" | "project";
|
|
1574
|
+
type RuleState = "enabled" | "disabled";
|
|
1575
|
+
interface Rule {
|
|
1576
|
+
id: string;
|
|
1577
|
+
/** Short title shown in the list. */
|
|
1578
|
+
title: string;
|
|
1579
|
+
/** Markdown body — the actual instruction injected into the prompt. */
|
|
1580
|
+
body: string;
|
|
1581
|
+
/** Where this rule applies. */
|
|
1582
|
+
scope: RuleScope;
|
|
1583
|
+
/** Whether the rule is currently active. */
|
|
1584
|
+
state: RuleState;
|
|
1585
|
+
/** Optional tags for grouping ("testing", "style", "security"). */
|
|
1586
|
+
tags?: string[];
|
|
1587
|
+
/** Modes this rule applies to. Omit / empty = global (every mode). */
|
|
1588
|
+
modes?: Mode[];
|
|
1589
|
+
/** ISO timestamp / friendly label of last edit. */
|
|
1590
|
+
updatedAt?: string;
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
interface RuleCardProps extends Omit<HTMLAttributes<HTMLElement>, "title" | "onSelect" | "onToggle"> {
|
|
1594
|
+
rule: Rule;
|
|
1595
|
+
/** Click on the card body — typically opens detail/edit view. */
|
|
1596
|
+
onSelect?: (id: string) => void;
|
|
1597
|
+
/** Click on the edit pencil. Defaults to onSelect if omitted. */
|
|
1598
|
+
onEdit?: (id: string) => void;
|
|
1599
|
+
/** Click on the trash icon. Renders the icon only when provided. */
|
|
1600
|
+
onDelete?: (id: string) => void;
|
|
1601
|
+
/** Toggle enabled/disabled. Renders the switch-like dot only when provided. */
|
|
1602
|
+
onToggle?: (id: string, next: RuleState) => void;
|
|
1603
|
+
}
|
|
1604
|
+
declare const RuleCard: react.ForwardRefExoticComponent<RuleCardProps & react.RefAttributes<HTMLElement>>;
|
|
1605
|
+
|
|
1606
|
+
interface CostMeterProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1607
|
+
/** Current cost in USD. */
|
|
1608
|
+
cost: number;
|
|
1609
|
+
/** Optional monthly budget; renders progress bar when present. */
|
|
1610
|
+
budget?: number;
|
|
1611
|
+
/** Optional title (e.g. "This session", "Monthly"). */
|
|
1612
|
+
title?: ReactNode;
|
|
1613
|
+
/** Optional delta vs previous period. */
|
|
1614
|
+
delta?: {
|
|
1615
|
+
value: number;
|
|
1616
|
+
period: string;
|
|
1617
|
+
};
|
|
1618
|
+
/** Compact mode — single-line summary. */
|
|
1619
|
+
compact?: boolean;
|
|
1620
|
+
}
|
|
1621
|
+
/**
|
|
1622
|
+
* CostMeter — gauge for token spend. Two visuals:
|
|
1623
|
+
* - card: title + big number + optional progress bar + optional delta.
|
|
1624
|
+
* - compact: chip "Coins $4.20" for nav bars.
|
|
1625
|
+
*/
|
|
1626
|
+
declare const CostMeter: react.ForwardRefExoticComponent<CostMeterProps & react.RefAttributes<HTMLDivElement>>;
|
|
1627
|
+
|
|
1628
|
+
type PlanNodeStatus = "pending" | "running" | "done" | "skipped" | "failed";
|
|
1629
|
+
interface PlanNode {
|
|
1630
|
+
id: string;
|
|
1631
|
+
label: string;
|
|
1632
|
+
status: PlanNodeStatus;
|
|
1633
|
+
/** Optional details / sub-explanation. */
|
|
1634
|
+
detail?: string;
|
|
1635
|
+
/** Sub-nodes (rendered indented). */
|
|
1636
|
+
children?: PlanNode[];
|
|
1637
|
+
}
|
|
1638
|
+
interface TaskNodeProps extends HTMLAttributes<HTMLLIElement> {
|
|
1639
|
+
node: PlanNode;
|
|
1640
|
+
depth?: number;
|
|
1641
|
+
}
|
|
1642
|
+
/**
|
|
1643
|
+
* TaskNode — single row in a task plan. Renders its own children recursively
|
|
1644
|
+
* with increasing indentation.
|
|
1645
|
+
*/
|
|
1646
|
+
declare const TaskNode: react.ForwardRefExoticComponent<TaskNodeProps & react.RefAttributes<HTMLLIElement>>;
|
|
1647
|
+
interface TaskPlanProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
1648
|
+
nodes: PlanNode[];
|
|
1649
|
+
/** Header title. */
|
|
1650
|
+
title?: ReactNode;
|
|
1651
|
+
/** Summary line shown next to the title (e.g. "3 of 7 done"). */
|
|
1652
|
+
summary?: ReactNode;
|
|
1653
|
+
}
|
|
1654
|
+
/**
|
|
1655
|
+
* TaskPlan — hierarchical task plan, à la Claude "plan mode".
|
|
1656
|
+
*
|
|
1657
|
+
* The agent emits a structured plan; the user sees each step progress from
|
|
1658
|
+
* pending → running → done (or failed/skipped). Children render with one
|
|
1659
|
+
* extra indent level and a left border to suggest hierarchy.
|
|
1660
|
+
*/
|
|
1661
|
+
declare const TaskPlan: react.ForwardRefExoticComponent<TaskPlanProps & react.RefAttributes<HTMLElement>>;
|
|
1662
|
+
|
|
1663
|
+
interface SystemPromptEditorProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1664
|
+
/** Vendor / default system prompt (read-only). */
|
|
1665
|
+
defaultPrompt: string;
|
|
1666
|
+
/** Current override; pass empty string for "use default". */
|
|
1667
|
+
override: string;
|
|
1668
|
+
onOverrideChange: (next: string) => void;
|
|
1669
|
+
/** Approximate token count for the active prompt. */
|
|
1670
|
+
tokenEstimate?: number;
|
|
1671
|
+
title?: ReactNode;
|
|
1672
|
+
}
|
|
1673
|
+
/**
|
|
1674
|
+
* SystemPromptEditor — surface the agent's system prompt with a clear
|
|
1675
|
+
* "vendor default" vs "user override" toggle.
|
|
1676
|
+
*
|
|
1677
|
+
* Behavior:
|
|
1678
|
+
* - When override is empty, the textarea shows the default (greyed out,
|
|
1679
|
+
* editable starts blank).
|
|
1680
|
+
* - When user types, override takes effect.
|
|
1681
|
+
* - "Reset to default" wipes the override.
|
|
1682
|
+
*
|
|
1683
|
+
* Critical for transparency: a user must be able to see and edit the prompt.
|
|
1684
|
+
*/
|
|
1685
|
+
declare const SystemPromptEditor: react.ForwardRefExoticComponent<SystemPromptEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
1686
|
+
|
|
1687
|
+
type MemoryScope = "global" | "project" | "session";
|
|
1688
|
+
interface MemoryLayer {
|
|
1689
|
+
scope: MemoryScope;
|
|
1690
|
+
/** File path on disk for transparency. */
|
|
1691
|
+
path: string;
|
|
1692
|
+
/** Markdown content. */
|
|
1693
|
+
content: string;
|
|
1694
|
+
/** Last modified label, e.g. "2m ago". */
|
|
1695
|
+
modifiedAt?: string;
|
|
1696
|
+
}
|
|
1697
|
+
interface MemoryEditorProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1698
|
+
layers: MemoryLayer[];
|
|
1699
|
+
/** Currently active layer for editing. */
|
|
1700
|
+
activeScope: MemoryScope;
|
|
1701
|
+
onScopeChange: (scope: MemoryScope) => void;
|
|
1702
|
+
onContentChange: (scope: MemoryScope, next: string) => void;
|
|
1703
|
+
title?: ReactNode;
|
|
1704
|
+
}
|
|
1705
|
+
/**
|
|
1706
|
+
* MemoryEditor — three-layer Markdown memory editor (global / project /
|
|
1707
|
+
* session) mirroring Claude Code's CLAUDE.md hierarchy.
|
|
1708
|
+
*
|
|
1709
|
+
* Each scope keeps its own file. Switching scopes via tab updates which
|
|
1710
|
+
* layer is being edited. Path is shown explicitly so users know where the
|
|
1711
|
+
* content lives on disk.
|
|
1712
|
+
*/
|
|
1713
|
+
declare const MemoryEditor: react.ForwardRefExoticComponent<MemoryEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
1714
|
+
|
|
1715
|
+
type HookEvent = "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "Stop" | "SessionStart" | "SessionEnd";
|
|
1716
|
+
interface HookEntry {
|
|
1717
|
+
id: string;
|
|
1718
|
+
event: HookEvent;
|
|
1719
|
+
/** Tool matcher (e.g. "Bash", "Write", "*"). */
|
|
1720
|
+
matcher: string;
|
|
1721
|
+
/** Shell command to run. */
|
|
1722
|
+
command: string;
|
|
1723
|
+
enabled?: boolean;
|
|
1724
|
+
}
|
|
1725
|
+
declare const HOOK_EVENTS: HookEvent[];
|
|
1726
|
+
interface HookConfigProps extends Omit<HTMLAttributes<HTMLDivElement>, "title" | "onToggle"> {
|
|
1727
|
+
hooks: HookEntry[];
|
|
1728
|
+
onAdd?: (hook: Omit<HookEntry, "id">) => void;
|
|
1729
|
+
onRemove?: (id: string) => void;
|
|
1730
|
+
onToggle?: (id: string, enabled: boolean) => void;
|
|
1731
|
+
title?: ReactNode;
|
|
1732
|
+
}
|
|
1733
|
+
/**
|
|
1734
|
+
* HookConfig — editor for lifecycle hooks (PreToolUse, PostToolUse, Stop…).
|
|
1735
|
+
*
|
|
1736
|
+
* Mirrors Claude Code's settings.json hooks but visual. Each row is an
|
|
1737
|
+
* { event × matcher × command } triple with on/off toggle.
|
|
1738
|
+
*/
|
|
1739
|
+
declare const HookConfig: react.ForwardRefExoticComponent<HookConfigProps & react.RefAttributes<HTMLDivElement>>;
|
|
1740
|
+
|
|
1741
|
+
type HookEventResult = "ok" | "blocked" | "error";
|
|
1742
|
+
interface HookEventEntry {
|
|
1743
|
+
id: string;
|
|
1744
|
+
/** Hook event (e.g. PreToolUse). */
|
|
1745
|
+
event: string;
|
|
1746
|
+
/** Hook matcher (e.g. Bash). */
|
|
1747
|
+
matcher: string;
|
|
1748
|
+
/** What the hook command was. */
|
|
1749
|
+
command: string;
|
|
1750
|
+
result: HookEventResult;
|
|
1751
|
+
timestamp: string;
|
|
1752
|
+
/** Optional stderr/stdout snippet. */
|
|
1753
|
+
output?: string;
|
|
1754
|
+
/** Optional duration label, e.g. "120ms". */
|
|
1755
|
+
duration?: string;
|
|
1756
|
+
}
|
|
1757
|
+
interface HookEventLogProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1758
|
+
events: HookEventEntry[];
|
|
1759
|
+
title?: ReactNode;
|
|
1760
|
+
}
|
|
1761
|
+
/**
|
|
1762
|
+
* HookEventLog — chronological list of hook firings, with result tone, the
|
|
1763
|
+
* command that ran, and an optional output preview.
|
|
1764
|
+
*/
|
|
1765
|
+
declare const HookEventLog: react.ForwardRefExoticComponent<HookEventLogProps & react.RefAttributes<HTMLDivElement>>;
|
|
1766
|
+
|
|
1767
|
+
type CronJobStatus = "idle" | "running" | "failed" | "disabled";
|
|
1768
|
+
interface CronJob {
|
|
1769
|
+
id: string;
|
|
1770
|
+
/** Human-readable job name. */
|
|
1771
|
+
name: string;
|
|
1772
|
+
/** Cron expression — e.g. every 4 hours. */
|
|
1773
|
+
schedule: string;
|
|
1774
|
+
/** What gets run (prompt or command). */
|
|
1775
|
+
prompt: string;
|
|
1776
|
+
status: CronJobStatus;
|
|
1777
|
+
/** ISO/string timestamp of last run. */
|
|
1778
|
+
lastRun?: string;
|
|
1779
|
+
/** ISO/string timestamp of next run. */
|
|
1780
|
+
nextRun?: string;
|
|
1781
|
+
/** Optional last-run result line. */
|
|
1782
|
+
lastResult?: ReactNode;
|
|
1783
|
+
}
|
|
1784
|
+
interface CronJobCardProps extends Omit<HTMLAttributes<HTMLElement>, "onToggle"> {
|
|
1785
|
+
job: CronJob;
|
|
1786
|
+
onRunNow?: (id: string) => void;
|
|
1787
|
+
onToggle?: (id: string, enabled: boolean) => void;
|
|
1788
|
+
onRemove?: (id: string) => void;
|
|
1789
|
+
}
|
|
1790
|
+
/**
|
|
1791
|
+
* CronJobCard — one scheduled agent job. Shows cron expression, prompt,
|
|
1792
|
+
* status, last/next run. Inline actions: run now, pause, delete.
|
|
1793
|
+
*/
|
|
1794
|
+
declare const CronJobCard: react.ForwardRefExoticComponent<CronJobCardProps & react.RefAttributes<HTMLElement>>;
|
|
1795
|
+
|
|
1796
|
+
type MCPServerStatus = "connected" | "degraded" | "disconnected" | "starting";
|
|
1797
|
+
interface MCPServer {
|
|
1798
|
+
id: string;
|
|
1799
|
+
/** Friendly name, e.g. "postgres". */
|
|
1800
|
+
name: string;
|
|
1801
|
+
/** Transport endpoint (stdio command or URL). */
|
|
1802
|
+
endpoint: string;
|
|
1803
|
+
status: MCPServerStatus;
|
|
1804
|
+
/** Tools exposed by the server. */
|
|
1805
|
+
tools: string[];
|
|
1806
|
+
/** Optional resources exposed. */
|
|
1807
|
+
resources?: string[];
|
|
1808
|
+
/** Diagnostic message when degraded/disconnected. */
|
|
1809
|
+
message?: ReactNode;
|
|
1810
|
+
/** Auto-restart toggle hint. */
|
|
1811
|
+
autoRestart?: boolean;
|
|
1812
|
+
}
|
|
1813
|
+
interface MCPServerCardProps extends HTMLAttributes<HTMLElement> {
|
|
1814
|
+
server: MCPServer;
|
|
1815
|
+
onRestart?: (id: string) => void;
|
|
1816
|
+
onDisconnect?: (id: string) => void;
|
|
1817
|
+
}
|
|
1818
|
+
/**
|
|
1819
|
+
* MCPServerCard — one MCP server entry showing connection status, the tools
|
|
1820
|
+
* it exposes, and inline controls (restart, disconnect).
|
|
1821
|
+
*
|
|
1822
|
+
* Pairs with claw-code's "degraded startup reporting" — failed servers can
|
|
1823
|
+
* still appear here with a recovery message.
|
|
1824
|
+
*/
|
|
1825
|
+
declare const MCPServerCard: react.ForwardRefExoticComponent<MCPServerCardProps & react.RefAttributes<HTMLElement>>;
|
|
1826
|
+
|
|
1827
|
+
type ChannelPlatform = "telegram" | "discord" | "slack" | "whatsapp" | "webhook" | "mcp";
|
|
1828
|
+
type ChannelStatus = "disconnected" | "connecting" | "connected" | "error";
|
|
1829
|
+
interface Channel {
|
|
1830
|
+
id: string;
|
|
1831
|
+
name: string;
|
|
1832
|
+
platform: ChannelPlatform;
|
|
1833
|
+
status: ChannelStatus;
|
|
1834
|
+
description?: ReactNode;
|
|
1835
|
+
lastSeen?: string;
|
|
1836
|
+
messageCount?: number;
|
|
1837
|
+
}
|
|
1838
|
+
interface ChannelCardProps extends HTMLAttributes<HTMLElement> {
|
|
1839
|
+
channel: Channel;
|
|
1840
|
+
onConfigure?: (id: string) => void;
|
|
1841
|
+
onToggle?: (id: string, enabled: boolean) => void;
|
|
1842
|
+
}
|
|
1843
|
+
/**
|
|
1844
|
+
* ChannelCard — inbound gateway connection (Telegram, Discord, Slack, …)
|
|
1845
|
+
* showing its connection status, platform, and inline controls.
|
|
1846
|
+
*
|
|
1847
|
+
* EC absorbed: the toggle reflects the *current* status. "connected" implies
|
|
1848
|
+
* enabled (toggle off disconnects); "disconnected"/"error" implies disabled
|
|
1849
|
+
* (toggle on reconnects). "connecting" is a transient state — toggle is a
|
|
1850
|
+
* no-op (button disabled).
|
|
1851
|
+
*/
|
|
1852
|
+
declare const ChannelCard: react.ForwardRefExoticComponent<ChannelCardProps & react.RefAttributes<HTMLElement>>;
|
|
1853
|
+
|
|
1854
|
+
interface ModelCapabilityFlag {
|
|
1855
|
+
id: string;
|
|
1856
|
+
label: string;
|
|
1857
|
+
icon?: IconComponent;
|
|
1858
|
+
enabled: boolean;
|
|
1859
|
+
}
|
|
1860
|
+
interface ModelInfo {
|
|
1861
|
+
id: string;
|
|
1862
|
+
/** Display name (e.g. "Opus 4.7"). */
|
|
1863
|
+
name: string;
|
|
1864
|
+
/** Vendor (Anthropic, OpenAI, …). */
|
|
1865
|
+
vendor: string;
|
|
1866
|
+
/** Optional tag (default, fast, smart, beta). */
|
|
1867
|
+
tag?: ReactNode;
|
|
1868
|
+
/** Total context window in tokens. */
|
|
1869
|
+
contextWindow: number;
|
|
1870
|
+
/** Max output tokens per turn. */
|
|
1871
|
+
maxOutput: number;
|
|
1872
|
+
/** USD per million input tokens. */
|
|
1873
|
+
pricePerMInput?: number;
|
|
1874
|
+
/** USD per million output tokens. */
|
|
1875
|
+
pricePerMOutput?: number;
|
|
1876
|
+
/** Knowledge cutoff date label (e.g. "Jan 2026"). */
|
|
1877
|
+
cutoff?: string;
|
|
1878
|
+
/** Capability flags shown as chips. */
|
|
1879
|
+
capabilities?: ModelCapabilityFlag[];
|
|
1880
|
+
/** Short description / positioning. */
|
|
1881
|
+
description?: ReactNode;
|
|
1882
|
+
}
|
|
1883
|
+
interface ModelCardProps extends Omit<HTMLAttributes<HTMLElement>, "onSelect"> {
|
|
1884
|
+
model: ModelInfo;
|
|
1885
|
+
/** Render as the currently-selected variant (violet ring). */
|
|
1886
|
+
selected?: boolean;
|
|
1887
|
+
/** Fires when user clicks to select. */
|
|
1888
|
+
onSelect?: (id: string) => void;
|
|
1889
|
+
}
|
|
1890
|
+
/**
|
|
1891
|
+
* ModelCard — full info on a model: vendor, context, output cap, pricing,
|
|
1892
|
+
* capabilities, knowledge cutoff. Used in the "switch model" surface.
|
|
1893
|
+
*/
|
|
1894
|
+
declare const ModelCard: react.ForwardRefExoticComponent<ModelCardProps & react.RefAttributes<HTMLElement>>;
|
|
1895
|
+
/** Pre-canned capability flags. */
|
|
1896
|
+
declare const modelCapabilityPresets: {
|
|
1897
|
+
vision: {
|
|
1898
|
+
readonly id: "vision";
|
|
1899
|
+
readonly label: "Vision";
|
|
1900
|
+
readonly icon: IconComponent;
|
|
1901
|
+
};
|
|
1902
|
+
tools: {
|
|
1903
|
+
readonly id: "tools";
|
|
1904
|
+
readonly label: "Tool use";
|
|
1905
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1906
|
+
};
|
|
1907
|
+
reasoning: {
|
|
1908
|
+
readonly id: "reasoning";
|
|
1909
|
+
readonly label: "Reasoning";
|
|
1910
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1911
|
+
};
|
|
1912
|
+
fineTuning: {
|
|
1913
|
+
readonly id: "ft";
|
|
1914
|
+
readonly label: "Fine-tuning";
|
|
1915
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1916
|
+
};
|
|
1917
|
+
multimodal: {
|
|
1918
|
+
readonly id: "multimodal";
|
|
1919
|
+
readonly label: "Multimodal";
|
|
1920
|
+
readonly icon: react.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & react.RefAttributes<SVGSVGElement>>;
|
|
1921
|
+
};
|
|
1922
|
+
};
|
|
1923
|
+
|
|
1924
|
+
interface AgentProfileDescriptor {
|
|
1925
|
+
id: string;
|
|
1926
|
+
/** Display name, e.g. "Coder", "Planner", "Reviewer". */
|
|
1927
|
+
name: string;
|
|
1928
|
+
/** Avatar initials (2 chars max). Falls back to first 2 letters of name. */
|
|
1929
|
+
initials?: string;
|
|
1930
|
+
/** Optional short description for tooltips and the dropdown. */
|
|
1931
|
+
description?: ReactNode;
|
|
1932
|
+
/**
|
|
1933
|
+
* Identity tone — colors the avatar so users tell agents apart at a glance.
|
|
1934
|
+
*/
|
|
1935
|
+
tone?: "primary" | "accent" | "success" | "warning" | "info" | "muted";
|
|
1936
|
+
/** Optional badge text (e.g. "experimental"). */
|
|
1937
|
+
badge?: ReactNode;
|
|
1938
|
+
}
|
|
1939
|
+
interface AgentProfileProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
|
|
1940
|
+
agents: AgentProfileDescriptor[];
|
|
1941
|
+
activeId: string;
|
|
1942
|
+
onChange?: (id: string) => void;
|
|
1943
|
+
}
|
|
1944
|
+
/**
|
|
1945
|
+
* AgentProfile — switcher between multiple agent profiles (coder, planner,
|
|
1946
|
+
* reviewer, etc.). Each profile gets its own tone so the user can spot at a
|
|
1947
|
+
* glance which "persona" is currently driving the session.
|
|
1948
|
+
*/
|
|
1949
|
+
declare const AgentProfile: react.ForwardRefExoticComponent<AgentProfileProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1950
|
+
|
|
1951
|
+
type SubAgentState = "spawning" | "running" | "completed" | "failed" | "cancelled";
|
|
1952
|
+
interface SubAgentRun {
|
|
1953
|
+
id: string;
|
|
1954
|
+
/** Profile name (matches AgentProfile.name). */
|
|
1955
|
+
agent: string;
|
|
1956
|
+
/** Short task description given to the sub-agent. */
|
|
1957
|
+
task: string;
|
|
1958
|
+
state: SubAgentState;
|
|
1959
|
+
/** Optional duration label. */
|
|
1960
|
+
duration?: string;
|
|
1961
|
+
/** Optional last status line (preview of the latest event). */
|
|
1962
|
+
lastEvent?: string;
|
|
1963
|
+
/** Optional result summary (one-liner). */
|
|
1964
|
+
result?: ReactNode;
|
|
1965
|
+
}
|
|
1966
|
+
interface SubAgentDispatchProps extends HTMLAttributes<HTMLElement> {
|
|
1967
|
+
run: SubAgentRun;
|
|
1968
|
+
/** When provided, renders a cancel button while the run is in flight. */
|
|
1969
|
+
onCancel?: (id: string) => void;
|
|
1970
|
+
}
|
|
1971
|
+
/**
|
|
1972
|
+
* SubAgentDispatch — visualization for a Task() / sub-agent invocation.
|
|
1973
|
+
*
|
|
1974
|
+
* Shows the agent name, the task summary, current state, an inline event
|
|
1975
|
+
* preview, and an optional result. Use inside the agent timeline to make
|
|
1976
|
+
* delegation visible.
|
|
1977
|
+
*/
|
|
1978
|
+
declare const SubAgentDispatch: react.ForwardRefExoticComponent<SubAgentDispatchProps & react.RefAttributes<HTMLElement>>;
|
|
1979
|
+
|
|
1980
|
+
type SessionStatus = "active" | "completed" | "failed" | "aborted";
|
|
1981
|
+
interface SessionSummary {
|
|
1982
|
+
id: string;
|
|
1983
|
+
/** Friendly title (often the first user message). */
|
|
1984
|
+
title: string;
|
|
1985
|
+
/** ISO timestamp / friendly date label. */
|
|
1986
|
+
startedAt: string;
|
|
1987
|
+
duration?: string;
|
|
1988
|
+
status: SessionStatus;
|
|
1989
|
+
/** Agent/model that ran the session. */
|
|
1990
|
+
model?: string;
|
|
1991
|
+
/** Total tokens consumed (formatted, e.g. "35.7k"). */
|
|
1992
|
+
tokens?: string;
|
|
1993
|
+
/** Total cost (USD). */
|
|
1994
|
+
cost?: number;
|
|
1995
|
+
/** Number of messages in the session. */
|
|
1996
|
+
messageCount?: number;
|
|
1997
|
+
}
|
|
1998
|
+
interface SessionTimelineProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
1999
|
+
sessions: SessionSummary[];
|
|
2000
|
+
/** Title above the list. */
|
|
2001
|
+
title?: ReactNode;
|
|
2002
|
+
/** Fires when a row is clicked. */
|
|
2003
|
+
onOpen?: (id: string) => void;
|
|
2004
|
+
}
|
|
2005
|
+
/**
|
|
2006
|
+
* SessionTimeline — historical view of past agent sessions with per-row
|
|
2007
|
+
* tokens / cost / duration / status. Click a row to open the full session.
|
|
2008
|
+
*/
|
|
2009
|
+
declare const SessionTimeline: react.ForwardRefExoticComponent<SessionTimelineProps & react.RefAttributes<HTMLDivElement>>;
|
|
2010
|
+
|
|
2011
|
+
type AuditActorKind = "user" | "agent" | "system";
|
|
2012
|
+
type AuditSeverity = "info" | "warning" | "error";
|
|
2013
|
+
interface AuditEntry {
|
|
2014
|
+
id: string;
|
|
2015
|
+
/** Who triggered the action. */
|
|
2016
|
+
actor: {
|
|
2017
|
+
kind: AuditActorKind;
|
|
2018
|
+
name: string;
|
|
2019
|
+
};
|
|
2020
|
+
/** Verb / action label, e.g. "wrote file", "ran command". */
|
|
2021
|
+
action: string;
|
|
2022
|
+
/** Target of the action (file path, command, etc). */
|
|
2023
|
+
target?: ReactNode;
|
|
2024
|
+
/** ISO timestamp / friendly label. */
|
|
2025
|
+
timestamp: string;
|
|
2026
|
+
severity?: AuditSeverity;
|
|
2027
|
+
/** Optional detail block (multi-line). */
|
|
2028
|
+
detail?: ReactNode;
|
|
2029
|
+
}
|
|
2030
|
+
interface AuditLogEntryProps extends HTMLAttributes<HTMLElement> {
|
|
2031
|
+
entry: AuditEntry;
|
|
2032
|
+
}
|
|
2033
|
+
/**
|
|
2034
|
+
* AuditLogEntry — one row in the agent audit log. Tells the user exactly
|
|
2035
|
+
* who did what and when. Severity colors the timestamp and target.
|
|
2036
|
+
*/
|
|
2037
|
+
declare const AuditLogEntry: react.ForwardRefExoticComponent<AuditLogEntryProps & react.RefAttributes<HTMLElement>>;
|
|
2038
|
+
|
|
2039
|
+
type LaneState = "started" | "blocked" | "failed" | "finished";
|
|
2040
|
+
interface LaneCard {
|
|
2041
|
+
id: string;
|
|
2042
|
+
/** Card title (e.g. task name). */
|
|
2043
|
+
title: ReactNode;
|
|
2044
|
+
/** Optional description / preview. */
|
|
2045
|
+
description?: ReactNode;
|
|
2046
|
+
/** Optional footer / metadata row. */
|
|
2047
|
+
footer?: ReactNode;
|
|
2048
|
+
}
|
|
2049
|
+
interface Lane {
|
|
2050
|
+
state: LaneState;
|
|
2051
|
+
cards: LaneCard[];
|
|
2052
|
+
}
|
|
2053
|
+
interface LaneBoardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
2054
|
+
lanes: Lane[];
|
|
2055
|
+
title?: ReactNode;
|
|
2056
|
+
}
|
|
2057
|
+
/**
|
|
2058
|
+
* LaneBoard — kanban-style task board with 4 lanes matching the claw-code
|
|
2059
|
+
* lane event schema (started/blocked/failed/finished). Each card is a
|
|
2060
|
+
* machine-readable task snapshot the agent emits.
|
|
2061
|
+
*/
|
|
2062
|
+
declare const LaneBoard: react.ForwardRefExoticComponent<LaneBoardProps & react.RefAttributes<HTMLDivElement>>;
|
|
2063
|
+
|
|
2064
|
+
interface TokenUsagePoint {
|
|
2065
|
+
/** ISO date or friendly label for the x-axis tooltip. */
|
|
2066
|
+
label: string;
|
|
2067
|
+
/** Input tokens for this period (e.g. day). */
|
|
2068
|
+
input: number;
|
|
2069
|
+
/** Output tokens for this period. */
|
|
2070
|
+
output: number;
|
|
2071
|
+
}
|
|
2072
|
+
interface TokenUsageChartProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
2073
|
+
points: TokenUsagePoint[];
|
|
2074
|
+
/** Title above the chart. */
|
|
2075
|
+
title?: ReactNode;
|
|
2076
|
+
/** Chart height in px. Default 160. */
|
|
2077
|
+
height?: number;
|
|
2078
|
+
/** Show legend below the chart. Default true. */
|
|
2079
|
+
showLegend?: boolean;
|
|
2080
|
+
/**
|
|
2081
|
+
* Maximum number of bars to render. When `points.length` exceeds this, the
|
|
2082
|
+
* series is binned (summed in equal-width windows) so the chart stays
|
|
2083
|
+
* legible and SVG node count stays bounded. Default 60.
|
|
2084
|
+
*/
|
|
2085
|
+
maxBars?: number;
|
|
2086
|
+
}
|
|
2087
|
+
/**
|
|
2088
|
+
* TokenUsageChart — stacked-bar chart of input vs output tokens over time.
|
|
2089
|
+
*
|
|
2090
|
+
* Pure SVG, no chart lib. Width is fluid; bars adjust to viewBox. Hover any
|
|
2091
|
+
* bar to see the breakdown in the tooltip slot below.
|
|
2092
|
+
*/
|
|
2093
|
+
declare const TokenUsageChart: react.ForwardRefExoticComponent<TokenUsageChartProps & react.RefAttributes<HTMLDivElement>>;
|
|
2094
|
+
|
|
2095
|
+
interface AutoCompactNoticeProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
2096
|
+
/** Optional custom title. */
|
|
2097
|
+
title?: ReactNode;
|
|
2098
|
+
/**
|
|
2099
|
+
* How many turns until the next auto-compaction. Used to render an inline
|
|
2100
|
+
* countdown chip.
|
|
2101
|
+
*/
|
|
2102
|
+
turnsRemaining?: number;
|
|
2103
|
+
/** Approx tokens that will be removed/summarized. */
|
|
2104
|
+
tokensToCompact?: number;
|
|
2105
|
+
onCompactNow?: () => void;
|
|
2106
|
+
onDismiss?: () => void;
|
|
2107
|
+
}
|
|
2108
|
+
/**
|
|
2109
|
+
* AutoCompactNotice — inline banner warning the user that the agent is
|
|
2110
|
+
* about to summarize / compact older context. Lets them act early (compact
|
|
2111
|
+
* now) or dismiss.
|
|
2112
|
+
*
|
|
2113
|
+
* Critical for transparency: a user must not be surprised by silent context
|
|
2114
|
+
* loss. This component announces it before it happens.
|
|
2115
|
+
*/
|
|
2116
|
+
declare const AutoCompactNotice: react.ForwardRefExoticComponent<AutoCompactNoticeProps & react.RefAttributes<HTMLElement>>;
|
|
2117
|
+
|
|
2118
|
+
interface HandoffParty {
|
|
2119
|
+
/** Display name, e.g. "planner". */
|
|
2120
|
+
name: string;
|
|
2121
|
+
/** Optional avatar initials (max 2 chars). */
|
|
2122
|
+
initials?: string;
|
|
2123
|
+
/** Identity tone matching AgentProfile. */
|
|
2124
|
+
tone?: "primary" | "accent" | "success" | "warning" | "info" | "muted";
|
|
2125
|
+
}
|
|
2126
|
+
interface AgentHandoffProps extends HTMLAttributes<HTMLElement> {
|
|
2127
|
+
from: HandoffParty;
|
|
2128
|
+
to: HandoffParty;
|
|
2129
|
+
/** What is being handed off — short reason / payload preview. */
|
|
2130
|
+
reason: ReactNode;
|
|
2131
|
+
/** Optional metadata footer (e.g. timestamp, token budget). */
|
|
2132
|
+
footer?: ReactNode;
|
|
2133
|
+
}
|
|
2134
|
+
/**
|
|
2135
|
+
* AgentHandoff — visual marker of one agent delegating to another. Pairs
|
|
2136
|
+
* with AgentProfile for the identity tones; place it in the timeline so the
|
|
2137
|
+
* user sees the baton being passed.
|
|
2138
|
+
*/
|
|
2139
|
+
declare const AgentHandoff: react.ForwardRefExoticComponent<AgentHandoffProps & react.RefAttributes<HTMLElement>>;
|
|
2140
|
+
|
|
2141
|
+
/**
|
|
2142
|
+
* AgentStreaming — inline "agent is thinking / typing" indicator.
|
|
2143
|
+
*
|
|
2144
|
+
* Renders inside an agent stream while the model is producing a response.
|
|
2145
|
+
* Default visual is 3 violet dots pulsing. If `partial` is provided, renders
|
|
2146
|
+
* the streamed-so-far text with a caret. Optional `model` label on the right.
|
|
2147
|
+
*/
|
|
2148
|
+
interface AgentStreamingProps extends HTMLAttributes<HTMLDivElement> {
|
|
2149
|
+
/** Streamed-so-far text. When present, replaces the dots animation. */
|
|
2150
|
+
partial?: ReactNode;
|
|
2151
|
+
/** Optional model name shown as a chip. */
|
|
2152
|
+
model?: ReactNode;
|
|
2153
|
+
}
|
|
2154
|
+
declare const AgentStreaming: react.ForwardRefExoticComponent<AgentStreamingProps & react.RefAttributes<HTMLDivElement>>;
|
|
2155
|
+
|
|
2156
|
+
/**
|
|
2157
|
+
* AgentErrorCard — inline error / blocked-state card for an agent stream.
|
|
2158
|
+
*
|
|
2159
|
+
* Renders when the agent run hits a wall it can't recover from on its own:
|
|
2160
|
+
* rate limit, context overflow, auth lost, tool failure, network error.
|
|
2161
|
+
* Severity is always destructive; the `kind` drives the icon and helps the
|
|
2162
|
+
* consumer wire recovery actions in the footer slot.
|
|
2163
|
+
*/
|
|
2164
|
+
type AgentErrorKind = "rate-limit" | "context-overflow" | "auth" | "tool-failure" | "network" | "generic";
|
|
2165
|
+
interface AgentErrorCardProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
2166
|
+
kind?: AgentErrorKind;
|
|
2167
|
+
title: ReactNode;
|
|
2168
|
+
detail?: ReactNode;
|
|
2169
|
+
/** Recovery action slot (Retry, Reset, Re-auth, etc.). */
|
|
2170
|
+
actions?: ReactNode;
|
|
2171
|
+
timestamp?: ReactNode;
|
|
2172
|
+
}
|
|
2173
|
+
declare const AgentErrorCard: react.ForwardRefExoticComponent<AgentErrorCardProps & react.RefAttributes<HTMLElement>>;
|
|
2174
|
+
|
|
2175
|
+
/**
|
|
2176
|
+
* ToolCallCard — single agent tool invocation rendered inside the stream.
|
|
2177
|
+
*
|
|
2178
|
+
* Visual: row with tool icon + tool name + target/command (mono) + status +
|
|
2179
|
+
* optional chevron. Expandable: when `output` is provided the row becomes a
|
|
2180
|
+
* `<details>` whose body renders the stdout/stderr/result block.
|
|
2181
|
+
*
|
|
2182
|
+
* Distinct from `AgentEvent` in the existing AgentTimeline by being a
|
|
2183
|
+
* stand-alone card that lives inside an AgentStream alongside chat messages.
|
|
2184
|
+
*/
|
|
2185
|
+
type ToolCallStatus = "running" | "success" | "failed" | "queued" | "skipped";
|
|
2186
|
+
interface ToolCallCardProps extends HTMLAttributes<HTMLElement> {
|
|
2187
|
+
/** Tool name (matches Theo Code / Claude Code tool registry: Bash, Edit, Read, …). */
|
|
2188
|
+
tool: ReactNode;
|
|
2189
|
+
/** Optional icon for the tool. */
|
|
2190
|
+
icon?: IconComponent;
|
|
2191
|
+
/** Target / command shown in monospace next to the tool name. */
|
|
2192
|
+
target?: ReactNode;
|
|
2193
|
+
status: ToolCallStatus;
|
|
2194
|
+
/** Optional stdout/stderr/result body. When present, the card becomes expandable. */
|
|
2195
|
+
output?: ReactNode;
|
|
2196
|
+
/** Default expanded state. Default: false (collapsed). */
|
|
2197
|
+
defaultExpanded?: boolean;
|
|
2198
|
+
/** Timestamp shown on the right. */
|
|
2199
|
+
timestamp?: ReactNode;
|
|
2200
|
+
}
|
|
2201
|
+
declare function ToolCallCard({ className, tool, icon: Icon, target, status, output, defaultExpanded, timestamp, ...props }: ToolCallCardProps): react.JSX.Element;
|
|
2202
|
+
|
|
2203
|
+
interface SectionProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
2204
|
+
title?: ReactNode;
|
|
2205
|
+
}
|
|
2206
|
+
interface ItemProps$1 extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> {
|
|
2207
|
+
icon?: ElementType;
|
|
2208
|
+
active?: boolean;
|
|
2209
|
+
count?: number | string;
|
|
2210
|
+
as?: "button" | "a";
|
|
2211
|
+
href?: string;
|
|
2212
|
+
}
|
|
2213
|
+
declare const Sidebar: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & react.RefAttributes<HTMLElement>> & {
|
|
2214
|
+
Header: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
2215
|
+
Section: react.ForwardRefExoticComponent<SectionProps & react.RefAttributes<HTMLDivElement>>;
|
|
2216
|
+
Item: react.ForwardRefExoticComponent<ItemProps$1 & react.RefAttributes<HTMLElement>>;
|
|
2217
|
+
Footer: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
2218
|
+
};
|
|
2219
|
+
|
|
2220
|
+
interface BreadcrumbItem {
|
|
2221
|
+
label: ReactNode;
|
|
2222
|
+
href?: string;
|
|
2223
|
+
}
|
|
2224
|
+
interface BreadcrumbsProps extends HTMLAttributes<HTMLElement> {
|
|
2225
|
+
items: BreadcrumbItem[];
|
|
2226
|
+
}
|
|
2227
|
+
interface ModeSwitcherOption {
|
|
2228
|
+
value: string;
|
|
2229
|
+
label: ReactNode;
|
|
2230
|
+
}
|
|
2231
|
+
interface ModeSwitcherProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
2232
|
+
value: string;
|
|
2233
|
+
options: ModeSwitcherOption[];
|
|
2234
|
+
onChange?: (value: string) => void;
|
|
2235
|
+
/**
|
|
2236
|
+
* Accessible label for the radiogroup. Defaults to "Mode".
|
|
2237
|
+
*/
|
|
2238
|
+
ariaLabel?: string;
|
|
2239
|
+
}
|
|
2240
|
+
declare const TopNav: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & react.RefAttributes<HTMLElement>> & {
|
|
2241
|
+
Left: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
2242
|
+
Center: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
2243
|
+
Right: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
2244
|
+
Breadcrumbs: react.ForwardRefExoticComponent<BreadcrumbsProps & react.RefAttributes<HTMLElement>>;
|
|
2245
|
+
ModeSwitcher: react.ForwardRefExoticComponent<ModeSwitcherProps & react.RefAttributes<HTMLDivElement>>;
|
|
2246
|
+
};
|
|
2247
|
+
|
|
2248
|
+
/**
|
|
2249
|
+
* Sheet — slide-in side panel built on Radix Dialog.
|
|
2250
|
+
*
|
|
2251
|
+
* Same Radix primitive as Dialog, but Content slides from an edge instead of
|
|
2252
|
+
* fading from center. Used for: workspace overlays (Memory, Observability,
|
|
2253
|
+
* Sub-agents), Settings, contextual filters.
|
|
2254
|
+
*
|
|
2255
|
+
* Composition:
|
|
2256
|
+
* <Sheet>
|
|
2257
|
+
* <Sheet.Trigger>Open</Sheet.Trigger>
|
|
2258
|
+
* <Sheet.Content side="right">
|
|
2259
|
+
* <Sheet.Header>
|
|
2260
|
+
* <Sheet.Title>Memory</Sheet.Title>
|
|
2261
|
+
* <Sheet.Description>Episodes and wiki pages</Sheet.Description>
|
|
2262
|
+
* </Sheet.Header>
|
|
2263
|
+
* <Sheet.Body>…</Sheet.Body>
|
|
2264
|
+
* <Sheet.Footer>…</Sheet.Footer>
|
|
2265
|
+
* </Sheet.Content>
|
|
2266
|
+
* </Sheet>
|
|
2267
|
+
*/
|
|
2268
|
+
declare const Overlay: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
2269
|
+
declare const sheetVariants: (props?: ({
|
|
2270
|
+
side?: "bottom" | "left" | "right" | "top" | null | undefined;
|
|
2271
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
2272
|
+
interface ContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
2273
|
+
hideCloseButton?: boolean;
|
|
2274
|
+
}
|
|
2275
|
+
declare const Content$1: react.ForwardRefExoticComponent<ContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
2276
|
+
declare const Header$1: {
|
|
2277
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
2278
|
+
displayName: string;
|
|
2279
|
+
};
|
|
2280
|
+
declare const Body$1: {
|
|
2281
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
2282
|
+
displayName: string;
|
|
2283
|
+
};
|
|
2284
|
+
declare const Footer: {
|
|
2285
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
2286
|
+
displayName: string;
|
|
2287
|
+
};
|
|
2288
|
+
declare const Title: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
|
|
2289
|
+
declare const Description: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
2290
|
+
declare const Sheet: typeof DialogPrimitive.Root & {
|
|
2291
|
+
Trigger: typeof DialogPrimitive.Trigger;
|
|
2292
|
+
Close: typeof DialogPrimitive.Close;
|
|
2293
|
+
Content: typeof Content$1;
|
|
2294
|
+
Overlay: typeof Overlay;
|
|
2295
|
+
Header: typeof Header$1;
|
|
2296
|
+
Body: typeof Body$1;
|
|
2297
|
+
Footer: typeof Footer;
|
|
2298
|
+
Title: typeof Title;
|
|
2299
|
+
Description: typeof Description;
|
|
2300
|
+
};
|
|
2301
|
+
|
|
2302
|
+
/**
|
|
2303
|
+
* ProjectSwitcher — sidebar header for a code agent app.
|
|
2304
|
+
*
|
|
2305
|
+
* Shows the active workspace (folder name) + branch + status dot + a tiny
|
|
2306
|
+
* `ChevronsUpDown` hint when clickable. Used in Sidebar.Header to anchor the
|
|
2307
|
+
* current project context for the session list below.
|
|
2308
|
+
*
|
|
2309
|
+
* <Sidebar.Header className="p-0">
|
|
2310
|
+
* <ProjectSwitcher
|
|
2311
|
+
* workspace="acme-web"
|
|
2312
|
+
* branch="claude/alignment-grid"
|
|
2313
|
+
* status="running"
|
|
2314
|
+
* onClick={openProjectPicker}
|
|
2315
|
+
* />
|
|
2316
|
+
* </Sidebar.Header>
|
|
2317
|
+
*
|
|
2318
|
+
* If `onClick` is omitted, renders as a static `<div>` (no chevron, not focusable).
|
|
2319
|
+
*/
|
|
2320
|
+
type ProjectStatus = "idle" | "running" | "error" | "offline";
|
|
2321
|
+
interface ProjectSwitcherProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "children"> {
|
|
2322
|
+
/** Workspace / folder name (e.g. "acme-web"). */
|
|
2323
|
+
workspace: ReactNode;
|
|
2324
|
+
/** Optional git branch. Renders inline with a GitBranch icon. */
|
|
2325
|
+
branch?: ReactNode;
|
|
2326
|
+
/** Optional status dot. Defaults to "idle". */
|
|
2327
|
+
status?: ProjectStatus;
|
|
2328
|
+
/** Brand letter / icon shown in the violet tile. Default: first char of workspace if string. */
|
|
2329
|
+
brand?: ReactNode;
|
|
2330
|
+
}
|
|
2331
|
+
declare const ProjectSwitcher: react.ForwardRefExoticComponent<ProjectSwitcherProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2332
|
+
|
|
2333
|
+
/**
|
|
2334
|
+
* SessionListItem — single row in the sidebar's Sessions list for a code agent
|
|
2335
|
+
* app. Richer than the generic `Sidebar.Item`: shows a status dot, the agent
|
|
2336
|
+
* mode last used (chat/code/infra), and a relative timestamp.
|
|
2337
|
+
*
|
|
2338
|
+
* <SessionListItem
|
|
2339
|
+
* title="Build the alignment grid demo"
|
|
2340
|
+
* status="running"
|
|
2341
|
+
* mode="code"
|
|
2342
|
+
* timestamp="2m ago"
|
|
2343
|
+
* active
|
|
2344
|
+
* onClick={() => navigate(`/session/${id}`)}
|
|
2345
|
+
* />
|
|
2346
|
+
*
|
|
2347
|
+
* The status dot maps to the agent run state and animates while running.
|
|
2348
|
+
*/
|
|
2349
|
+
type SessionRunStatus = "running" | "queued" | "completed" | "failed" | "cancelled";
|
|
2350
|
+
type SessionMode = "chat" | "code" | "infra";
|
|
2351
|
+
interface SessionListItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "children" | "title"> {
|
|
2352
|
+
/** Session title (truncated). */
|
|
2353
|
+
title: ReactNode;
|
|
2354
|
+
/** Agent run state. Drives the status dot. */
|
|
2355
|
+
status: SessionRunStatus;
|
|
2356
|
+
/** Last mode the user was viewing this session in. Optional pill. */
|
|
2357
|
+
mode?: SessionMode;
|
|
2358
|
+
/** Relative timestamp string ("2m ago", "yesterday"). */
|
|
2359
|
+
timestamp?: ReactNode;
|
|
2360
|
+
/** Optional unread count (pending agent events, new outputs). */
|
|
2361
|
+
unread?: number;
|
|
2362
|
+
/** Whether this is the currently selected session. */
|
|
2363
|
+
active?: boolean;
|
|
2364
|
+
}
|
|
2365
|
+
declare const SessionListItem: react.ForwardRefExoticComponent<SessionListItemProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2366
|
+
|
|
2367
|
+
type DataRenderer = (data: unknown, part: DataUIPart) => JSX.Element;
|
|
2368
|
+
type DataRendererMap = Record<string, DataRenderer>;
|
|
2369
|
+
interface DataPartProps {
|
|
2370
|
+
part: DataUIPart;
|
|
2371
|
+
/** Map of `data-${name}` → renderer. */
|
|
2372
|
+
renderers?: DataRendererMap;
|
|
2373
|
+
}
|
|
2374
|
+
declare function DataPart({ part, renderers }: DataPartProps): JSX.Element;
|
|
2375
|
+
|
|
2376
|
+
type ChatMessageRootProps = HTMLAttributes<HTMLDivElement> & {
|
|
2377
|
+
/** Sender role — controls layout (right-aligned bubble for `user`, left for `assistant`/`system`). */
|
|
2378
|
+
from: MessageRole;
|
|
2379
|
+
};
|
|
2380
|
+
declare const ChatMessageRoot: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
2381
|
+
/** Sender role — controls layout (right-aligned bubble for `user`, left for `assistant`/`system`). */
|
|
2382
|
+
from: MessageRole;
|
|
2383
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
2384
|
+
type ChatMessageContentVariant = "contained" | "flat";
|
|
2385
|
+
interface ChatMessageContentProps extends HTMLAttributes<HTMLDivElement> {
|
|
2386
|
+
/**
|
|
2387
|
+
* `contained` (default) — bubble surface (background + padding + radius).
|
|
2388
|
+
* Applied to user role automatically. Assistant defaults to `flat`.
|
|
2389
|
+
*
|
|
2390
|
+
* `flat` — no bubble, content flows directly. Use for assistant or system.
|
|
2391
|
+
*/
|
|
2392
|
+
variant?: ChatMessageContentVariant;
|
|
2393
|
+
}
|
|
2394
|
+
declare const ChatMessageContent: react.ForwardRefExoticComponent<ChatMessageContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
2395
|
+
interface RenderPartOptions {
|
|
2396
|
+
/** Consumer-defined renderers for `data-${name}` parts. */
|
|
2397
|
+
dataRenderers?: DataRendererMap;
|
|
2398
|
+
/** Override built-in renderers per part `type`. */
|
|
2399
|
+
partRenderers?: PartRendererMap;
|
|
2400
|
+
}
|
|
2401
|
+
type PartRendererMap = Partial<{
|
|
2402
|
+
text: (part: TextUIPart) => ReactNode;
|
|
2403
|
+
reasoning: (part: ReasoningUIPart) => ReactNode;
|
|
2404
|
+
"reasoning-file": (part: ReasoningFileUIPart) => ReactNode;
|
|
2405
|
+
file: (part: FileUIPart) => ReactNode;
|
|
2406
|
+
"source-url": (part: SourceUrlUIPart) => ReactNode;
|
|
2407
|
+
"source-document": (part: SourceDocumentUIPart) => ReactNode;
|
|
2408
|
+
tool: (part: ToolUIPart) => ReactNode;
|
|
2409
|
+
data: (part: DataUIPart) => ReactNode;
|
|
2410
|
+
"step-start": () => ReactNode;
|
|
2411
|
+
}>;
|
|
2412
|
+
declare function renderPart(part: UIMessagePart, opts?: RenderPartOptions): ReactNode;
|
|
2413
|
+
interface ChatMessageProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
2414
|
+
/** The UI message to render. Parts are dispatched automatically. */
|
|
2415
|
+
message: UIMessage;
|
|
2416
|
+
/** Optional avatar slot rendered before assistant/system content. */
|
|
2417
|
+
avatar?: ReactNode;
|
|
2418
|
+
/** Optional toolbar (copy / regenerate / branch nav) rendered below the content. */
|
|
2419
|
+
actions?: ReactNode;
|
|
2420
|
+
/** Variant of the content bubble. */
|
|
2421
|
+
variant?: ChatMessageContentVariant;
|
|
2422
|
+
/** Override built-in part renderers. */
|
|
2423
|
+
partRenderers?: PartRendererMap;
|
|
2424
|
+
/** Renderers for `data-${name}` parts. */
|
|
2425
|
+
dataRenderers?: DataRendererMap;
|
|
2426
|
+
}
|
|
2427
|
+
declare const ChatMessage: react.ForwardRefExoticComponent<ChatMessageProps & react.RefAttributes<HTMLDivElement>>;
|
|
2428
|
+
|
|
2429
|
+
interface ChatMessageResponseProps {
|
|
2430
|
+
/** Raw markdown text from the model. */
|
|
2431
|
+
text: string;
|
|
2432
|
+
/**
|
|
2433
|
+
* True while tokens are still arriving. Enables the streaming-safe
|
|
2434
|
+
* preprocess pass (auto-closes incomplete `**bold`, fences, links, math).
|
|
2435
|
+
*/
|
|
2436
|
+
isStreaming?: boolean;
|
|
2437
|
+
/** Extra className on the prose wrapper. */
|
|
2438
|
+
className?: string;
|
|
2439
|
+
}
|
|
2440
|
+
declare function ChatMessageResponseImpl({ text, isStreaming, className, }: ChatMessageResponseProps): ReactElement;
|
|
2441
|
+
declare const ChatMessageResponse: react.MemoExoticComponent<typeof ChatMessageResponseImpl>;
|
|
2442
|
+
|
|
2443
|
+
/**
|
|
2444
|
+
* `<ChatMessageActions>` + `<ChatMessageAction>` — footer toolbar for a chat
|
|
2445
|
+
* message (copy, regenerate, thumbs up/down, share, edit, …).
|
|
2446
|
+
*
|
|
2447
|
+
* Forked from `vercel/ai-elements` `<MessageActions>` + `<MessageAction>`
|
|
2448
|
+
* (Apache-2.0, see NOTICE). Adapted to TheoUI primitives: `<Button>` from
|
|
2449
|
+
* `@theokit/ui` instead of shadcn, no Tooltip primitive yet (Vercel uses
|
|
2450
|
+
* one — we render the `tooltip` prop as a `title` attribute for now; a
|
|
2451
|
+
* proper Tooltip primitive lands in a follow-up RFC).
|
|
2452
|
+
*/
|
|
2453
|
+
|
|
2454
|
+
type ChatMessageActionsProps = HTMLAttributes<HTMLDivElement>;
|
|
2455
|
+
declare function ChatMessageActions({ className, children, ...props }: ChatMessageActionsProps): JSX.Element;
|
|
2456
|
+
type ChatMessageActionProps = ComponentProps<typeof Button> & {
|
|
2457
|
+
/** Tooltip text — rendered as native `title` for now. */
|
|
2458
|
+
tooltip?: string;
|
|
2459
|
+
/** Accessible label (used by screen readers when only an icon is visible). */
|
|
2460
|
+
label?: string;
|
|
2461
|
+
children?: ReactNode;
|
|
2462
|
+
};
|
|
2463
|
+
declare function ChatMessageAction({ tooltip, label, variant, size, className, children, ...props }: ChatMessageActionProps): JSX.Element;
|
|
2464
|
+
|
|
2465
|
+
/**
|
|
2466
|
+
* `<ChatMessageToolbar>` — bottom-of-message bar holding actions + branch nav.
|
|
2467
|
+
* Forked from `vercel/ai-elements` `<MessageToolbar>` (Apache-2.0, NOTICE).
|
|
2468
|
+
*/
|
|
2469
|
+
|
|
2470
|
+
type ChatMessageToolbarProps = HTMLAttributes<HTMLDivElement>;
|
|
2471
|
+
declare function ChatMessageToolbar({ className, children, ...props }: ChatMessageToolbarProps): JSX.Element;
|
|
2472
|
+
|
|
2473
|
+
type ChatMessageBranchProps = HTMLAttributes<HTMLDivElement> & {
|
|
2474
|
+
defaultBranch?: number;
|
|
2475
|
+
onBranchChange?: (branchIndex: number) => void;
|
|
2476
|
+
};
|
|
2477
|
+
declare function ChatMessageBranch({ defaultBranch, onBranchChange, className, ...props }: ChatMessageBranchProps): JSX.Element;
|
|
2478
|
+
type ChatMessageBranchContentProps = HTMLAttributes<HTMLDivElement>;
|
|
2479
|
+
declare function ChatMessageBranchContent({ children, ...props }: ChatMessageBranchContentProps): JSX.Element;
|
|
2480
|
+
type ChatMessageBranchSelectorProps = HTMLAttributes<HTMLDivElement>;
|
|
2481
|
+
declare function ChatMessageBranchSelector({ className, ...props }: ChatMessageBranchSelectorProps): JSX.Element | null;
|
|
2482
|
+
type ChatMessageBranchPreviousProps = ComponentProps<typeof Button>;
|
|
2483
|
+
declare function ChatMessageBranchPrevious({ children, ...props }: ChatMessageBranchPreviousProps): JSX.Element;
|
|
2484
|
+
type ChatMessageBranchNextProps = ComponentProps<typeof Button>;
|
|
2485
|
+
declare function ChatMessageBranchNext({ children, ...props }: ChatMessageBranchNextProps): JSX.Element;
|
|
2486
|
+
type ChatMessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;
|
|
2487
|
+
declare function ChatMessageBranchPage({ className, ...props }: ChatMessageBranchPageProps): JSX.Element;
|
|
2488
|
+
|
|
2489
|
+
/**
|
|
2490
|
+
* `<TextPart>` — renders a `TextUIPart`.
|
|
2491
|
+
*
|
|
2492
|
+
* Delegates to `<ChatMessageResponse>` which handles markdown + streaming
|
|
2493
|
+
* preprocess + code-block highlight + memoization.
|
|
2494
|
+
*/
|
|
2495
|
+
|
|
2496
|
+
interface TextPartProps {
|
|
2497
|
+
part: TextUIPart;
|
|
2498
|
+
}
|
|
2499
|
+
declare function TextPart({ part }: TextPartProps): JSX.Element;
|
|
2500
|
+
|
|
2501
|
+
interface ReasoningPartProps {
|
|
2502
|
+
part: ReasoningUIPart;
|
|
2503
|
+
/** Open by default. Useful while the model is still streaming reasoning. */
|
|
2504
|
+
defaultOpen?: boolean;
|
|
2505
|
+
}
|
|
2506
|
+
declare function ReasoningPart({ part, defaultOpen }: ReasoningPartProps): JSX.Element;
|
|
2507
|
+
|
|
2508
|
+
interface ToolCallPartProps {
|
|
2509
|
+
part: ToolUIPart;
|
|
2510
|
+
}
|
|
2511
|
+
declare function ToolCallPart({ part }: ToolCallPartProps): JSX.Element;
|
|
2512
|
+
|
|
2513
|
+
interface FilePartProps {
|
|
2514
|
+
part: FileUIPart;
|
|
2515
|
+
}
|
|
2516
|
+
declare function FilePart({ part }: FilePartProps): JSX.Element;
|
|
2517
|
+
|
|
2518
|
+
interface SourceUrlPartProps {
|
|
2519
|
+
part: SourceUrlUIPart;
|
|
2520
|
+
}
|
|
2521
|
+
declare function SourceUrlPart({ part }: SourceUrlPartProps): JSX.Element;
|
|
2522
|
+
interface SourceDocumentPartProps {
|
|
2523
|
+
part: SourceDocumentUIPart;
|
|
2524
|
+
}
|
|
2525
|
+
declare function SourceDocumentPart({ part }: SourceDocumentPartProps): JSX.Element;
|
|
2526
|
+
|
|
2527
|
+
/**
|
|
2528
|
+
* ChatThread — simple vertical container that applies spacing + scroll.
|
|
2529
|
+
*
|
|
2530
|
+
* No virtualization or stickiness. Wrap with your own scroller for long threads.
|
|
2531
|
+
*
|
|
2532
|
+
* T4.1 (MF-4): declares the outer live region and wraps children in
|
|
2533
|
+
* LiveRegionProvider so nested AgentStreaming / AgentErrorCard / Skeleton
|
|
2534
|
+
* don't add their own aria-live (double-announcement avoided).
|
|
2535
|
+
*/
|
|
2536
|
+
declare const ChatThread: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
|
|
2537
|
+
|
|
2538
|
+
interface ModelOption {
|
|
2539
|
+
id: string;
|
|
2540
|
+
label: string;
|
|
2541
|
+
/** Optional vendor hint shown small below the label. */
|
|
2542
|
+
vendor?: string;
|
|
2543
|
+
/** Optional tag e.g. "default", "fast", "smart". */
|
|
2544
|
+
tag?: string;
|
|
2545
|
+
}
|
|
2546
|
+
interface ModelSelectorProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
|
|
2547
|
+
value: string;
|
|
2548
|
+
options: ModelOption[];
|
|
2549
|
+
onChange?: (id: string) => void;
|
|
2550
|
+
}
|
|
2551
|
+
/**
|
|
2552
|
+
* ModelSelector — chip dropdown for picking the active LLM.
|
|
2553
|
+
*
|
|
2554
|
+
* Visual: pill with violet dot + label + chevron. Dropdown uses Radix Menu.
|
|
2555
|
+
*/
|
|
2556
|
+
declare const ModelSelector: react.ForwardRefExoticComponent<ModelSelectorProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2557
|
+
|
|
2558
|
+
interface IntentOption {
|
|
2559
|
+
id: string;
|
|
2560
|
+
label: string;
|
|
2561
|
+
/** Optional one-liner shown below the label in the menu. */
|
|
2562
|
+
description?: string;
|
|
2563
|
+
/** Optional icon — defaults to a pencil for the trigger if none. */
|
|
2564
|
+
icon?: IconComponent;
|
|
2565
|
+
}
|
|
2566
|
+
interface IntentSelectorProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
|
|
2567
|
+
value: string;
|
|
2568
|
+
options: IntentOption[];
|
|
2569
|
+
onChange?: (id: string) => void;
|
|
2570
|
+
}
|
|
2571
|
+
/**
|
|
2572
|
+
* IntentSelector — chip dropdown for picking the agent's intent for the next
|
|
2573
|
+
* turn (e.g. edit / plan / review). Mirrors ModelSelector: pill trigger +
|
|
2574
|
+
* Radix DropdownMenu of options with description and a check on the active.
|
|
2575
|
+
*/
|
|
2576
|
+
declare const IntentSelector: react.ForwardRefExoticComponent<IntentSelectorProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2577
|
+
|
|
2578
|
+
interface MentionItem {
|
|
2579
|
+
id: string;
|
|
2580
|
+
/** Primary label shown on the row. */
|
|
2581
|
+
label: ReactNode;
|
|
2582
|
+
/** Secondary one-line description (optional). */
|
|
2583
|
+
description?: ReactNode;
|
|
2584
|
+
/** Optional per-row icon override. */
|
|
2585
|
+
icon?: IconComponent;
|
|
2586
|
+
}
|
|
2587
|
+
/** Trigger character — drives the default header + icon if not overridden. */
|
|
2588
|
+
type MentionTrigger = "/" | "@" | "#";
|
|
2589
|
+
interface MentionMenuProps {
|
|
2590
|
+
/** Whether the panel is open. The consumer (composer) controls this. */
|
|
2591
|
+
open: boolean;
|
|
2592
|
+
/** Trigger character that opened the menu — used for default title + icon. */
|
|
2593
|
+
trigger: MentionTrigger;
|
|
2594
|
+
/** Items to display (already filtered by the consumer). */
|
|
2595
|
+
items: MentionItem[];
|
|
2596
|
+
/** Fires when the user selects an item via click or Enter. */
|
|
2597
|
+
onSelect: (item: MentionItem) => void;
|
|
2598
|
+
/** Fires when the user dismisses (Esc, click outside). */
|
|
2599
|
+
onClose: () => void;
|
|
2600
|
+
/** Title above the list. Defaults to the trigger's domain ("Commands", "Files", "Memories"). */
|
|
2601
|
+
title?: ReactNode;
|
|
2602
|
+
/** Empty-state message when items is empty. */
|
|
2603
|
+
emptyLabel?: ReactNode;
|
|
2604
|
+
/** Override the alignment relative to its anchor. Default: above-left. */
|
|
2605
|
+
className?: string;
|
|
2606
|
+
}
|
|
2607
|
+
/**
|
|
2608
|
+
* MentionMenu — keyboard-navigable popover for slash-command / @file / #memory
|
|
2609
|
+
* triggers inside an agent composer.
|
|
2610
|
+
*
|
|
2611
|
+
* Generic by design: the consumer decides what items appear for each trigger
|
|
2612
|
+
* (commands list, file search, memory lookup, …). MentionMenu owns the visual
|
|
2613
|
+
* presentation, selection highlight, Esc/Enter/Arrow keys.
|
|
2614
|
+
*
|
|
2615
|
+
* Position: absolute, anchored to the closest positioned ancestor — usually
|
|
2616
|
+
* the composer wrapper. Default `bottom-full left-0` (above the composer).
|
|
2617
|
+
*/
|
|
2618
|
+
declare function MentionMenu({ open, trigger, items, onSelect, onClose, title, emptyLabel, className, }: MentionMenuProps): react.JSX.Element | null;
|
|
2619
|
+
|
|
2620
|
+
interface FolderSelectorProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
2621
|
+
/** Currently selected absolute path. */
|
|
2622
|
+
path: string;
|
|
2623
|
+
/**
|
|
2624
|
+
* Render in compact mode (smaller height, no chevron padding).
|
|
2625
|
+
* Default is the full-width composer variant used in the Files panel.
|
|
2626
|
+
*/
|
|
2627
|
+
compact?: boolean;
|
|
2628
|
+
}
|
|
2629
|
+
/**
|
|
2630
|
+
* FolderSelector — chip showing the active working directory.
|
|
2631
|
+
*
|
|
2632
|
+
* Visual: folder icon + monospaced path (truncated middle) + chevron.
|
|
2633
|
+
* Stateless: caller handles the actual folder-picker dialog.
|
|
2634
|
+
*/
|
|
2635
|
+
declare const FolderSelector: react.ForwardRefExoticComponent<FolderSelectorProps & react.RefAttributes<HTMLButtonElement>>;
|
|
2636
|
+
|
|
2637
|
+
interface AttachmentChipProps extends HTMLAttributes<HTMLDivElement> {
|
|
2638
|
+
attachment: Attachment;
|
|
2639
|
+
onRemove?: (id: string) => void;
|
|
2640
|
+
}
|
|
2641
|
+
/**
|
|
2642
|
+
* AttachmentChip — file pill shown in chat composer or message attachments row.
|
|
2643
|
+
*
|
|
2644
|
+
* Visual: rounded chip with type-icon + name + size + optional remove button.
|
|
2645
|
+
* Truncates the name with `text-ellipsis`; full name available via title.
|
|
2646
|
+
*/
|
|
2647
|
+
declare const AttachmentChip: react.ForwardRefExoticComponent<AttachmentChipProps & react.RefAttributes<HTMLDivElement>>;
|
|
2648
|
+
|
|
2649
|
+
interface QuickAction {
|
|
2650
|
+
id: string;
|
|
2651
|
+
label: ReactNode;
|
|
2652
|
+
/** Icon component (e.g. from lucide-react). */
|
|
2653
|
+
icon?: IconComponent;
|
|
2654
|
+
/** When true, the chip is highlighted as the suggested next action. */
|
|
2655
|
+
primary?: boolean;
|
|
2656
|
+
}
|
|
2657
|
+
interface QuickActionChipsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onSelect"> {
|
|
2658
|
+
actions: QuickAction[];
|
|
2659
|
+
onSelect?: (id: string) => void;
|
|
2660
|
+
}
|
|
2661
|
+
/**
|
|
2662
|
+
* QuickActionChips — row of intent chips below a hero composer.
|
|
2663
|
+
*
|
|
2664
|
+
* Used in Chat Home ("Escrever / Aprender / Código / Assuntos pessoais")
|
|
2665
|
+
* and the Files panel.
|
|
2666
|
+
*/
|
|
2667
|
+
declare const QuickActionChips: react.ForwardRefExoticComponent<QuickActionChipsProps & react.RefAttributes<HTMLDivElement>>;
|
|
2668
|
+
|
|
2669
|
+
interface AgentEventProps extends HTMLAttributes<HTMLDivElement> {
|
|
2670
|
+
event: AgentEvent$1;
|
|
2671
|
+
/**
|
|
2672
|
+
* If true, clicking the row toggles `event.detail` visibility.
|
|
2673
|
+
*/
|
|
2674
|
+
collapsible?: boolean;
|
|
2675
|
+
/**
|
|
2676
|
+
* Force the collapsible state (for controlled scenarios).
|
|
2677
|
+
*/
|
|
2678
|
+
defaultOpen?: boolean;
|
|
2679
|
+
}
|
|
2680
|
+
/**
|
|
2681
|
+
* AgentEvent — single event row in the agent timeline.
|
|
2682
|
+
*
|
|
2683
|
+
* Composition: type icon + label + path + diff stats + status icon + (optional) chevron.
|
|
2684
|
+
* Running events show a spinner via motion-safe:animate-spin (respects
|
|
2685
|
+
* `prefers-reduced-motion`); failed events flash red.
|
|
2686
|
+
*
|
|
2687
|
+
* When `collapsible` is true and `event.detail` is provided, the row renders as
|
|
2688
|
+
* a native `<button>` for correct keyboard and screen-reader semantics.
|
|
2689
|
+
*/
|
|
2690
|
+
declare const AgentEvent: react.ForwardRefExoticComponent<AgentEventProps & react.RefAttributes<HTMLDivElement>>;
|
|
2691
|
+
|
|
2692
|
+
interface AgentStartingStateProps extends OutputHTMLAttributes<HTMLOutputElement> {
|
|
2693
|
+
/** Title shown next to the spinner. Default "Starting up…". */
|
|
2694
|
+
label?: ReactNode;
|
|
2695
|
+
/** Optional secondary copy explaining the bootstrap step. */
|
|
2696
|
+
hint?: ReactNode;
|
|
2697
|
+
}
|
|
2698
|
+
/**
|
|
2699
|
+
* AgentStartingState — full-width skeleton shown while the agent boots.
|
|
2700
|
+
*
|
|
2701
|
+
* Visual: violet spinner + label, optional hint below. Wrapped in a soft card.
|
|
2702
|
+
* Uses semantic `<output aria-live="polite">` so screen readers announce the state.
|
|
2703
|
+
*/
|
|
2704
|
+
declare const AgentStartingState: react.ForwardRefExoticComponent<AgentStartingStateProps & react.RefAttributes<HTMLOutputElement>>;
|
|
2705
|
+
|
|
2706
|
+
interface RunStatsProps extends HTMLAttributes<HTMLDivElement> {
|
|
2707
|
+
duration?: string;
|
|
2708
|
+
/** Formatted token count, e.g. "35.7k". */
|
|
2709
|
+
tokens?: string;
|
|
2710
|
+
/** Number of files changed in the run. */
|
|
2711
|
+
filesChanged?: number;
|
|
2712
|
+
}
|
|
2713
|
+
/**
|
|
2714
|
+
* RunStats — inline metric row shown after an agent run.
|
|
2715
|
+
*
|
|
2716
|
+
* Visual: muted bullet-separated row with clock + tokens + files-changed icons.
|
|
2717
|
+
* All optional — the component skips entries that aren't provided.
|
|
2718
|
+
*/
|
|
2719
|
+
declare const RunStats: react.ForwardRefExoticComponent<RunStatsProps & react.RefAttributes<HTMLDivElement>>;
|
|
2720
|
+
|
|
2721
|
+
interface ToolCallProps extends HTMLAttributes<HTMLDivElement> {
|
|
2722
|
+
/** Tool name e.g. "bash", "read_file", "edit_file". */
|
|
2723
|
+
name?: string;
|
|
2724
|
+
/**
|
|
2725
|
+
* Summary label e.g. "Ran 2 commands", "Read 18 files".
|
|
2726
|
+
*/
|
|
2727
|
+
summary: ReactNode;
|
|
2728
|
+
/**
|
|
2729
|
+
* Collapsible payload (e.g. command, stdout, file list).
|
|
2730
|
+
*/
|
|
2731
|
+
detail?: ReactNode;
|
|
2732
|
+
defaultOpen?: boolean;
|
|
2733
|
+
/**
|
|
2734
|
+
* If true, hides the wrench icon (useful when grouping by name elsewhere).
|
|
2735
|
+
*/
|
|
2736
|
+
hideIcon?: boolean;
|
|
2737
|
+
}
|
|
2738
|
+
/**
|
|
2739
|
+
* ToolCall — collapsible row representing an agent tool invocation.
|
|
2740
|
+
*
|
|
2741
|
+
* Visual: subtle muted container, wrench icon, summary in body text,
|
|
2742
|
+
* chevron rotates on expand. Pairs with `<ToolResult>` for the rendered output.
|
|
2743
|
+
*
|
|
2744
|
+
* Typical usage inside a ChatMessage assistant body:
|
|
2745
|
+
*
|
|
2746
|
+
* <ToolCall summary="Read 18 files" detail={<ToolResult>{output}</ToolResult>} />
|
|
2747
|
+
*/
|
|
2748
|
+
declare const ToolCall: react.ForwardRefExoticComponent<ToolCallProps & react.RefAttributes<HTMLDivElement>>;
|
|
2749
|
+
|
|
2750
|
+
type Variant = "text" | "code" | "json";
|
|
2751
|
+
interface ToolResultProps extends HTMLAttributes<HTMLDivElement> {
|
|
2752
|
+
variant?: Variant;
|
|
2753
|
+
/**
|
|
2754
|
+
* Pre-formatted content. For `code`/`json`, the component uses mono font
|
|
2755
|
+
* and preserves whitespace. For `text`, normal body font.
|
|
2756
|
+
*/
|
|
2757
|
+
children: ReactNode;
|
|
2758
|
+
}
|
|
2759
|
+
/**
|
|
2760
|
+
* ToolResult — formatted output of a tool invocation.
|
|
2761
|
+
*
|
|
2762
|
+
* Three quick variants: plain text, code (monospace), json (monospace, tinted).
|
|
2763
|
+
* Always rendered as a `<div>` for predictable prop typing; code/json variants
|
|
2764
|
+
* wrap children in `<pre>` internally.
|
|
2765
|
+
*/
|
|
2766
|
+
declare const ToolResult: react.ForwardRefExoticComponent<ToolResultProps & react.RefAttributes<HTMLDivElement>>;
|
|
2767
|
+
|
|
2768
|
+
/**
|
|
2769
|
+
* Progress — accessible progress bar primitive.
|
|
2770
|
+
*
|
|
2771
|
+
* Built on `<div role="progressbar">` (NOT native `<progress>`) so Tailwind
|
|
2772
|
+
* classes can style the track + fill cross-browser (Chrome/Safari/Firefox
|
|
2773
|
+
* shadow-DOM hooks for `<progress>` diverge). Matches Radix / shadcn /
|
|
2774
|
+
* Mantine convention.
|
|
2775
|
+
*
|
|
2776
|
+
* Variants:
|
|
2777
|
+
* - intent: `default` | `success` | `warning` | `destructive` — controls fill color
|
|
2778
|
+
* - height: `h-1` (4px, default) | `h-1.5` | `h-2` | `h-3`
|
|
2779
|
+
* - indeterminate: animated bar, no value (e.g. "uploading…", "building…")
|
|
2780
|
+
*
|
|
2781
|
+
* Composition:
|
|
2782
|
+
* <Progress value={42} max={100} intent="success" aria-label="Upload" />
|
|
2783
|
+
* <Progress indeterminate aria-label="Building" />
|
|
2784
|
+
*
|
|
2785
|
+
* A11y:
|
|
2786
|
+
* - role="progressbar"
|
|
2787
|
+
* - aria-valuenow / aria-valuemin / aria-valuemax (determinate)
|
|
2788
|
+
* - aria-busy="true" when indeterminate
|
|
2789
|
+
* - Respects `prefers-reduced-motion` (no animation when set)
|
|
2790
|
+
*
|
|
2791
|
+
* Used by `<UsageMeter>` to render each metric's fill bar, but ships as a
|
|
2792
|
+
* standalone primitive for direct consumer use (deploy phase, file upload,
|
|
2793
|
+
* build progress, quota fill).
|
|
2794
|
+
*/
|
|
2795
|
+
interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, "role"> {
|
|
2796
|
+
/** Current value (0..max). Values outside the range are clamped. */
|
|
2797
|
+
value?: number;
|
|
2798
|
+
/** Maximum value. Defaults to 100. */
|
|
2799
|
+
max?: number;
|
|
2800
|
+
/** Visual intent — controls fill color. */
|
|
2801
|
+
intent?: "default" | "success" | "warning" | "destructive";
|
|
2802
|
+
/** Bar height in tailwind units. Defaults to `"h-1"` (4px). */
|
|
2803
|
+
height?: "h-1" | "h-1.5" | "h-2" | "h-3";
|
|
2804
|
+
/** When true, animated bar with no value. Omits `aria-valuenow`, adds `aria-busy`. */
|
|
2805
|
+
indeterminate?: boolean;
|
|
2806
|
+
/** Accessible label. Required if not preceded by an `aria-labelledby` element. */
|
|
2807
|
+
"aria-label"?: string;
|
|
2808
|
+
}
|
|
2809
|
+
declare const Progress: react.ForwardRefExoticComponent<ProgressProps & react.RefAttributes<HTMLDivElement>>;
|
|
2810
|
+
|
|
2811
|
+
/**
|
|
2812
|
+
* PlanBadge — semantic pricing-tier badge.
|
|
2813
|
+
*
|
|
2814
|
+
* Five canonical tiers (`free` / `hobby` / `pro` / `team` / `enterprise`) with
|
|
2815
|
+
* distinct color tokens. Consumers self-document intent with `plan="hobby"`
|
|
2816
|
+
* instead of mapping a generic `<Badge variant="outline">` to colors per app.
|
|
2817
|
+
* Future rebrand / dark-mode tweaks propagate automatically — no consumer
|
|
2818
|
+
* code change.
|
|
2819
|
+
*
|
|
2820
|
+
* Visual spec (per `theo/docs/handoff/2026-05-23-theo-ui-cloud-dashboard-gaps-brief.md`):
|
|
2821
|
+
*
|
|
2822
|
+
* | tier | bg | border | text |
|
|
2823
|
+
* |--------------|---------------------|--------------------------|-----------------------|
|
|
2824
|
+
* | free | bg-muted/40 | border-muted-foreground/20 | text-muted-foreground |
|
|
2825
|
+
* | hobby | bg-warning/10 | border-warning/30 | text-warning |
|
|
2826
|
+
* | pro | bg-primary/10 | border-primary/30 | text-primary |
|
|
2827
|
+
* | team | bg-success/10 | border-success/30 | text-success |
|
|
2828
|
+
* | enterprise | bg-foreground/5 | border-foreground/20 | text-foreground |
|
|
2829
|
+
*
|
|
2830
|
+
* Default label capitalizes the tier (`hobby → "Hobby"`, `enterprise → "Enterprise"`).
|
|
2831
|
+
*
|
|
2832
|
+
* Used by `<AccountMenu>` inline with the user name; usable standalone.
|
|
2833
|
+
*/
|
|
2834
|
+
type PlanTier = "free" | "hobby" | "pro" | "team" | "enterprise";
|
|
2835
|
+
interface PlanBadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
2836
|
+
/** Plan tier identifier. */
|
|
2837
|
+
plan: PlanTier;
|
|
2838
|
+
/** Override the display label. Defaults to the capitalized tier name. */
|
|
2839
|
+
label?: string;
|
|
2840
|
+
/** Size variant. */
|
|
2841
|
+
size?: "sm" | "md";
|
|
2842
|
+
}
|
|
2843
|
+
declare const PlanBadge: react.ForwardRefExoticComponent<PlanBadgeProps & react.RefAttributes<HTMLSpanElement>>;
|
|
2844
|
+
|
|
2845
|
+
/**
|
|
2846
|
+
* UsageMeter — multi-metric stacked usage card.
|
|
2847
|
+
*
|
|
2848
|
+
* PaaS-shape sibling of `<CostMeter>` (which is mono-USD). Displays N
|
|
2849
|
+
* metrics with arbitrary units (GB, requests, build-minutes, seats) per
|
|
2850
|
+
* the reference TheoCloud dashboard mockup. Each row = label + value/max
|
|
2851
|
+
* + `<Progress>` fill bar.
|
|
2852
|
+
*
|
|
2853
|
+
* Composition:
|
|
2854
|
+
*
|
|
2855
|
+
* <UsageMeter
|
|
2856
|
+
* title="Last 30 days"
|
|
2857
|
+
* action={<Badge variant="outline">Upgrade</Badge>}
|
|
2858
|
+
* metrics={[
|
|
2859
|
+
* { label: "Fast Data Transfer", value: 0, max: 100, unit: "GB" },
|
|
2860
|
+
* { label: "Edge Requests", value: 0, max: 1_000_000, unit: "req",
|
|
2861
|
+
* formatter: (v, m) => `${v} / ${m >= 1e6 ? `${m / 1e6}M` : m}` },
|
|
2862
|
+
* ]}
|
|
2863
|
+
* />
|
|
2864
|
+
*
|
|
2865
|
+
* Over-quota detection: when `value > max`, the value text gets the
|
|
2866
|
+
* `text-warning` class and the underlying `<Progress>` uses
|
|
2867
|
+
* `intent="warning"` (bar fills 100% via Progress's own clamping).
|
|
2868
|
+
*
|
|
2869
|
+
* `compact` mode renders only the bars (no label/value text) — useful in
|
|
2870
|
+
* narrow nav-bar slots.
|
|
2871
|
+
*
|
|
2872
|
+
* Imports the sibling `<Progress>` primitive via relative path (per RFC
|
|
2873
|
+
* dashboard-paas-primitives D3) — primitives must not depend on the
|
|
2874
|
+
* `@theokit/ui` barrel.
|
|
2875
|
+
*/
|
|
2876
|
+
interface UsageMetric {
|
|
2877
|
+
/** Display label (e.g. "Fast Data Transfer"). */
|
|
2878
|
+
label: ReactNode;
|
|
2879
|
+
/** Current consumption. */
|
|
2880
|
+
value: number;
|
|
2881
|
+
/** Maximum allowed in the current period. */
|
|
2882
|
+
max: number;
|
|
2883
|
+
/** Unit string (e.g. "GB", "req", "min"). Rendered after value/max. */
|
|
2884
|
+
unit?: string;
|
|
2885
|
+
/** Optional custom formatter — overrides default `${value} / ${max} ${unit}`. */
|
|
2886
|
+
formatter?: (value: number, max: number, unit?: string) => string;
|
|
2887
|
+
}
|
|
2888
|
+
interface UsageMeterProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
2889
|
+
/** Card title (e.g. "Last 30 days", "This billing period"). */
|
|
2890
|
+
title?: ReactNode;
|
|
2891
|
+
/** Optional right-aligned action slot (e.g. an Upgrade Badge or Button). */
|
|
2892
|
+
action?: ReactNode;
|
|
2893
|
+
/** Array of metrics to display. Order preserved. */
|
|
2894
|
+
metrics: UsageMetric[];
|
|
2895
|
+
/** When true, show only the bars without label/value text (sparkline mode). */
|
|
2896
|
+
compact?: boolean;
|
|
2897
|
+
}
|
|
2898
|
+
declare const UsageMeter: react.ForwardRefExoticComponent<UsageMeterProps & react.RefAttributes<HTMLDivElement>>;
|
|
2899
|
+
|
|
2900
|
+
/**
|
|
2901
|
+
* AccountMenu — sidebar header for PaaS surfaces.
|
|
2902
|
+
*
|
|
2903
|
+
* Renders avatar + name + (optional) plan badge + (optional) secondary line.
|
|
2904
|
+
* Dual mode: with `onClick`, renders as a `<button>` with a `ChevronsUpDown`
|
|
2905
|
+
* trailing icon (account picker affordance); without, renders as a static
|
|
2906
|
+
* `<div>` (read-only display, not focusable).
|
|
2907
|
+
*
|
|
2908
|
+
* Composition:
|
|
2909
|
+
*
|
|
2910
|
+
* <Sidebar.Header className="p-0">
|
|
2911
|
+
* <AccountMenu
|
|
2912
|
+
* name="paulohenriquevn"
|
|
2913
|
+
* avatar="https://avatars.githubusercontent.com/u/12345"
|
|
2914
|
+
* plan="hobby"
|
|
2915
|
+
* onClick={openAccountSwitcher}
|
|
2916
|
+
* />
|
|
2917
|
+
* </Sidebar.Header>
|
|
2918
|
+
*
|
|
2919
|
+
* Avatar handling:
|
|
2920
|
+
* - URL (`http(s)://` or `/`) → `<Avatar.Image>` with `<Avatar.Fallback>` initials
|
|
2921
|
+
* - Short string (≤2 chars) → treated as initials directly
|
|
2922
|
+
* - Undefined → initials derived from the first character of `name`
|
|
2923
|
+
*
|
|
2924
|
+
* PaaS-shape sibling of `<ProjectSwitcher>` (workspace + branch + agent-status).
|
|
2925
|
+
* Same dual-mode (interactive vs static) pattern; different semantics.
|
|
2926
|
+
*/
|
|
2927
|
+
interface AccountMenuProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "children" | "name"> {
|
|
2928
|
+
/** Display name (username, email, org name). */
|
|
2929
|
+
name: ReactNode;
|
|
2930
|
+
/** Avatar URL or 1-2-char initials. If undefined, derives initials from `name`. */
|
|
2931
|
+
avatar?: string;
|
|
2932
|
+
/** Plan tier — renders inline `<PlanBadge size="sm">`. Omit for none. */
|
|
2933
|
+
plan?: PlanTier;
|
|
2934
|
+
/** Optional secondary line below name (e.g. email). */
|
|
2935
|
+
secondary?: ReactNode;
|
|
2936
|
+
/** Make the row interactive (button) with a trailing chevron. */
|
|
2937
|
+
onClick?: () => void;
|
|
2938
|
+
}
|
|
2939
|
+
declare const AccountMenu: react.ForwardRefExoticComponent<AccountMenuProps & react.RefAttributes<HTMLElement>>;
|
|
2940
|
+
|
|
2941
|
+
/**
|
|
2942
|
+
* Table — semantic data table primitive with sub-components.
|
|
2943
|
+
*
|
|
2944
|
+
* Composition:
|
|
2945
|
+
* <Table density="default">
|
|
2946
|
+
* <Table.Header>
|
|
2947
|
+
* <Table.Row>
|
|
2948
|
+
* <Table.HeaderCell>Date</Table.HeaderCell>
|
|
2949
|
+
* <Table.HeaderCell align="right">Amount</Table.HeaderCell>
|
|
2950
|
+
* </Table.Row>
|
|
2951
|
+
* </Table.Header>
|
|
2952
|
+
* <Table.Body>
|
|
2953
|
+
* <Table.Row>
|
|
2954
|
+
* <Table.Cell>2026-05-23</Table.Cell>
|
|
2955
|
+
* <Table.Cell align="right" numeric>$ 42.00</Table.Cell>
|
|
2956
|
+
* </Table.Row>
|
|
2957
|
+
* </Table.Body>
|
|
2958
|
+
* </Table>
|
|
2959
|
+
*
|
|
2960
|
+
* density propagates via Context so Cells pick up vertical padding without
|
|
2961
|
+
* prop drilling. Sub-components are attached as static properties on the
|
|
2962
|
+
* root (`Table.Header`, etc.) — single import surface.
|
|
2963
|
+
*
|
|
2964
|
+
* Sortable header: pass `onSort` + `sortDirection`. The HeaderCell renders
|
|
2965
|
+
* the sort affordance (ChevronUp/ChevronDown) and triggers the consumer
|
|
2966
|
+
* callback. `sortDirection` without `onSort` is a no-op (header stays
|
|
2967
|
+
* static); `sortDirection="none"` with `onSort` shows a dimmed affordance.
|
|
2968
|
+
*/
|
|
2969
|
+
type TableDensity = "default" | "compact";
|
|
2970
|
+
type AlignKind = "left" | "center" | "right";
|
|
2971
|
+
type SortDirection = "asc" | "desc" | "none";
|
|
2972
|
+
interface TableProps extends HTMLAttributes<HTMLTableElement> {
|
|
2973
|
+
density?: TableDensity;
|
|
2974
|
+
}
|
|
2975
|
+
declare const Root$1: react.ForwardRefExoticComponent<TableProps & react.RefAttributes<HTMLTableElement>>;
|
|
2976
|
+
declare const Header: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
|
|
2977
|
+
declare const Body: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
|
|
2978
|
+
declare const Row: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableRowElement> & react.RefAttributes<HTMLTableRowElement>>;
|
|
2979
|
+
interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {
|
|
2980
|
+
align?: AlignKind;
|
|
2981
|
+
numeric?: boolean;
|
|
2982
|
+
}
|
|
2983
|
+
declare const Cell: react.ForwardRefExoticComponent<TableCellProps & react.RefAttributes<HTMLTableCellElement>>;
|
|
2984
|
+
interface TableHeaderCellProps extends ThHTMLAttributes<HTMLTableCellElement> {
|
|
2985
|
+
align?: AlignKind;
|
|
2986
|
+
/** When provided, header becomes a sort trigger. */
|
|
2987
|
+
onSort?: () => void;
|
|
2988
|
+
/** Current sort state for this column. */
|
|
2989
|
+
sortDirection?: SortDirection;
|
|
2990
|
+
}
|
|
2991
|
+
declare const HeaderCell: react.ForwardRefExoticComponent<TableHeaderCellProps & react.RefAttributes<HTMLTableCellElement>>;
|
|
2992
|
+
type TableRoot = typeof Root$1 & {
|
|
2993
|
+
Header: typeof Header;
|
|
2994
|
+
Body: typeof Body;
|
|
2995
|
+
Row: typeof Row;
|
|
2996
|
+
Cell: typeof Cell;
|
|
2997
|
+
HeaderCell: typeof HeaderCell;
|
|
2998
|
+
};
|
|
2999
|
+
declare const Table: TableRoot;
|
|
3000
|
+
|
|
3001
|
+
/**
|
|
3002
|
+
* StatusDot — semantic status indicator (colored circle + optional label).
|
|
3003
|
+
*
|
|
3004
|
+
* Five status kinds:
|
|
3005
|
+
* - `live` — deployed / verified / healthy (success)
|
|
3006
|
+
* - `building` — in-progress / queued (warning, auto-pulses)
|
|
3007
|
+
* - `failed` — error / down / rejected (destructive)
|
|
3008
|
+
* - `idle` — pending / offline (muted)
|
|
3009
|
+
* - `warning` — degraded but functional (warning, static)
|
|
3010
|
+
*
|
|
3011
|
+
* Three sizes (xs 6px, sm 8px default, md 10px). `pulse` defaults to
|
|
3012
|
+
* `true` for `building` and `false` otherwise; passing `pulse` explicitly
|
|
3013
|
+
* overrides the auto behavior. When no visible `label` AND no `aria-label`
|
|
3014
|
+
* are provided, the component auto-applies `aria-label={status}` and
|
|
3015
|
+
* emits a dev-mode warning (a status communicated only by color is
|
|
3016
|
+
* invisible to screen readers).
|
|
3017
|
+
*
|
|
3018
|
+
* @example
|
|
3019
|
+
* <StatusDot status="live" label="Production" />
|
|
3020
|
+
* <StatusDot status="building" /> // auto-pulses + auto-aria-label
|
|
3021
|
+
*/
|
|
3022
|
+
type StatusKind = "live" | "building" | "failed" | "idle" | "warning";
|
|
3023
|
+
interface StatusDotProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
|
|
3024
|
+
status: StatusKind;
|
|
3025
|
+
label?: ReactNode;
|
|
3026
|
+
size?: "xs" | "sm" | "md";
|
|
3027
|
+
pulse?: boolean;
|
|
3028
|
+
}
|
|
3029
|
+
declare const StatusDot: react.ForwardRefExoticComponent<StatusDotProps & react.RefAttributes<HTMLSpanElement>>;
|
|
3030
|
+
|
|
3031
|
+
interface CopyButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "onClick" | "children"> {
|
|
3032
|
+
/** String to copy when clicked. */
|
|
3033
|
+
value: string;
|
|
3034
|
+
/** Optional button label. Default: just the icon. */
|
|
3035
|
+
label?: ReactNode;
|
|
3036
|
+
/** Visual style. */
|
|
3037
|
+
variant?: "ghost" | "outline";
|
|
3038
|
+
/** Size. */
|
|
3039
|
+
size?: "sm" | "md";
|
|
3040
|
+
/** Callback after successful copy (e.g. analytics). */
|
|
3041
|
+
onCopied?: (value: string) => void;
|
|
3042
|
+
/** Duration of the feedback state in ms. Default 1500. */
|
|
3043
|
+
feedbackDuration?: number;
|
|
3044
|
+
}
|
|
3045
|
+
declare const CopyButton: react.ForwardRefExoticComponent<CopyButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
3046
|
+
|
|
3047
|
+
/**
|
|
3048
|
+
* Timestamp — accessible relative/absolute time primitive.
|
|
3049
|
+
*
|
|
3050
|
+
* Renders a semantic `<time datetime>` element. Format modes:
|
|
3051
|
+
* - `relative` (default) — "just now", "5 minutes ago", "2 hours ago",
|
|
3052
|
+
* "Dec 5" (>7d), "Dec 5, 2024" (different year)
|
|
3053
|
+
* - `absolute` — full localized date+time
|
|
3054
|
+
* - `both` — "Dec 5, 2026 (2 hours ago)"
|
|
3055
|
+
*
|
|
3056
|
+
* Uses zero-dep `Intl.RelativeTimeFormat`. The tooltip on hover is the
|
|
3057
|
+
* HTML `title` attribute (not the `<Tooltip>` component) — keeps this
|
|
3058
|
+
* file a true primitive without sibling-primitive imports.
|
|
3059
|
+
*
|
|
3060
|
+
* Auto-refreshes via `setInterval` (default 60_000ms); pass
|
|
3061
|
+
* `refreshInterval={0}` to disable. `aria-label` always carries the
|
|
3062
|
+
* absolute time so screen readers read "May 23, 2026 14:32 — posted
|
|
3063
|
+
* 2 hours ago".
|
|
3064
|
+
*
|
|
3065
|
+
* @param value Source date — ISO string, Date object, or **Unix ms**
|
|
3066
|
+
* (NOT seconds). Passing seconds renders ~1970.
|
|
3067
|
+
*/
|
|
3068
|
+
interface TimestampProps extends Omit<TimeHTMLAttributes<HTMLTimeElement>, "children"> {
|
|
3069
|
+
value: string | Date | number;
|
|
3070
|
+
format?: "relative" | "absolute" | "both";
|
|
3071
|
+
/** Auto-refresh interval when format=relative. Default 60000. 0 disables. */
|
|
3072
|
+
refreshInterval?: number;
|
|
3073
|
+
/** Locale for absolute formatting + Intl.RelativeTimeFormat. Default browser locale. */
|
|
3074
|
+
locale?: string;
|
|
3075
|
+
/** When true, omit the `title` tooltip. */
|
|
3076
|
+
noTooltip?: boolean;
|
|
3077
|
+
}
|
|
3078
|
+
declare const Timestamp: react.ForwardRefExoticComponent<TimestampProps & react.RefAttributes<HTMLTimeElement>>;
|
|
3079
|
+
|
|
3080
|
+
/**
|
|
3081
|
+
* StatTile — big number + label + optional delta + optional icon.
|
|
3082
|
+
*
|
|
3083
|
+
* Dual mode based on `onClick`:
|
|
3084
|
+
* - With onClick → renders as `<button>` with hover state + trailing
|
|
3085
|
+
* ArrowUpRight chevron (navigation affordance).
|
|
3086
|
+
* - Without onClick → renders as static `<div>`.
|
|
3087
|
+
*
|
|
3088
|
+
* Delta trend drives icon + color: up=success/TrendingUp, down=destructive/
|
|
3089
|
+
* TrendingDown, flat=muted/Minus. Big value uses font-display + tabular-nums.
|
|
3090
|
+
*
|
|
3091
|
+
* @example
|
|
3092
|
+
* <StatTile value="42" label="Projects" />
|
|
3093
|
+
* <StatTile value="$1,234" label="MRR" icon={DollarSign}
|
|
3094
|
+
* delta={{ value: "+12%", trend: "up" }} onClick={openBilling} />
|
|
3095
|
+
*/
|
|
3096
|
+
interface StatTileProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "value"> {
|
|
3097
|
+
value: ReactNode;
|
|
3098
|
+
label: ReactNode;
|
|
3099
|
+
icon?: ElementType;
|
|
3100
|
+
delta?: {
|
|
3101
|
+
value: ReactNode;
|
|
3102
|
+
trend: "up" | "down" | "flat";
|
|
3103
|
+
};
|
|
3104
|
+
}
|
|
3105
|
+
declare const StatTile: react.ForwardRefExoticComponent<StatTileProps & react.RefAttributes<HTMLElement>>;
|
|
3106
|
+
|
|
3107
|
+
/**
|
|
3108
|
+
* DangerZone — destructive-actions section primitive.
|
|
3109
|
+
*
|
|
3110
|
+
* Red-bordered container with a title bar and `DangerZone.Action` rows.
|
|
3111
|
+
* Each Action is laid out as title + description on the left, with a
|
|
3112
|
+
* consumer-provided action slot (typically a destructive Button) on
|
|
3113
|
+
* the right. Rows are separated by hairline dividers; the last row
|
|
3114
|
+
* has no bottom border via `last:border-b-0`.
|
|
3115
|
+
*
|
|
3116
|
+
* The consumer supplies the destructive button — this primitive never
|
|
3117
|
+
* imports `<Button>`, keeping it free of internal `@theokit/ui` deps
|
|
3118
|
+
* (true primitive).
|
|
3119
|
+
*
|
|
3120
|
+
* @example
|
|
3121
|
+
* <DangerZone>
|
|
3122
|
+
* <DangerZone.Action
|
|
3123
|
+
* title="Delete project"
|
|
3124
|
+
* description="Permanently delete this project."
|
|
3125
|
+
* action={<Button variant="destructive">Delete</Button>}
|
|
3126
|
+
* />
|
|
3127
|
+
* </DangerZone>
|
|
3128
|
+
*/
|
|
3129
|
+
interface DangerZoneProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3130
|
+
/** Section title. Default "Danger Zone". */
|
|
3131
|
+
title?: ReactNode;
|
|
3132
|
+
}
|
|
3133
|
+
declare const Root: react.ForwardRefExoticComponent<DangerZoneProps & react.RefAttributes<HTMLElement>>;
|
|
3134
|
+
interface DangerZoneActionProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
3135
|
+
title: ReactNode;
|
|
3136
|
+
description: ReactNode;
|
|
3137
|
+
/** Consumer-provided destructive button (or any ReactNode). */
|
|
3138
|
+
action: ReactNode;
|
|
3139
|
+
}
|
|
3140
|
+
declare const Action: react.ForwardRefExoticComponent<DangerZoneActionProps & react.RefAttributes<HTMLDivElement>>;
|
|
3141
|
+
type DangerZoneRoot = typeof Root & {
|
|
3142
|
+
Action: typeof Action;
|
|
3143
|
+
};
|
|
3144
|
+
declare const DangerZone: DangerZoneRoot;
|
|
3145
|
+
|
|
3146
|
+
/**
|
|
3147
|
+
* ConfirmDialog — controlled confirmation modal built on `Dialog`.
|
|
3148
|
+
*
|
|
3149
|
+
* Focuses Cancel on open (deliberate — NOT the destructive button).
|
|
3150
|
+
* `intent="destructive"` styles the confirm button with the destructive
|
|
3151
|
+
* variant. `confirmationPhrase` enables typed-confirmation guard:
|
|
3152
|
+
* the confirm button is disabled until the input value matches the
|
|
3153
|
+
* phrase exactly (case-sensitive). An empty string phrase is treated
|
|
3154
|
+
* as "no phrase required" (`!!confirmationPhrase`). Pressing Enter in
|
|
3155
|
+
* the input triggers confirm when `canConfirm` is true.
|
|
3156
|
+
*
|
|
3157
|
+
* `onConfirm` can be async. While the returned promise is pending,
|
|
3158
|
+
* both buttons are disabled and a `Loader2` spinner appears. On
|
|
3159
|
+
* resolve, the dialog closes via `onOpenChange(false)`. On reject,
|
|
3160
|
+
* the dialog stays open so the consumer can show their own error.
|
|
3161
|
+
*
|
|
3162
|
+
* @example
|
|
3163
|
+
* <ConfirmDialog
|
|
3164
|
+
* open={open} onOpenChange={setOpen}
|
|
3165
|
+
* title="Delete project"
|
|
3166
|
+
* description="This cannot be undone."
|
|
3167
|
+
* intent="destructive"
|
|
3168
|
+
* confirmationPhrase="my-project"
|
|
3169
|
+
* onConfirm={async () => api.deleteProject(id)}
|
|
3170
|
+
* />
|
|
3171
|
+
*/
|
|
3172
|
+
interface ConfirmDialogProps {
|
|
3173
|
+
open: boolean;
|
|
3174
|
+
onOpenChange: (open: boolean) => void;
|
|
3175
|
+
title: ReactNode;
|
|
3176
|
+
description: ReactNode;
|
|
3177
|
+
confirmLabel?: ReactNode;
|
|
3178
|
+
cancelLabel?: ReactNode;
|
|
3179
|
+
intent?: "default" | "destructive";
|
|
3180
|
+
confirmationPhrase?: string;
|
|
3181
|
+
onConfirm: () => void | Promise<void>;
|
|
3182
|
+
loading?: boolean;
|
|
3183
|
+
}
|
|
3184
|
+
declare const ConfirmDialog: react.ForwardRefExoticComponent<ConfirmDialogProps & react.RefAttributes<HTMLDivElement>>;
|
|
3185
|
+
|
|
3186
|
+
/**
|
|
3187
|
+
* CodeBlock — terminal command / code snippet surface.
|
|
3188
|
+
*
|
|
3189
|
+
* Pre-rendered code block with optional terminal "$ " prefix per line,
|
|
3190
|
+
* optional caption (file name), and optional CopyButton positioned top-right.
|
|
3191
|
+
* The CopyButton receives the RAW `code` (without the visual "$ " prefix),
|
|
3192
|
+
* so consumers paste only the executable command.
|
|
3193
|
+
*
|
|
3194
|
+
* @example
|
|
3195
|
+
* <CodeBlock code="theo deploy" terminal copyable />
|
|
3196
|
+
* <CodeBlock code={dotenv} caption=".env.local" copyable />
|
|
3197
|
+
*
|
|
3198
|
+
* `language` is reserved for future syntax highlighting (v1: ignored).
|
|
3199
|
+
*/
|
|
3200
|
+
interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
3201
|
+
/** Code content. Can be multiline. */
|
|
3202
|
+
code: string;
|
|
3203
|
+
/** Language hint (forward-compat; v1 ignored). */
|
|
3204
|
+
language?: string;
|
|
3205
|
+
/** When true, prefix each line with "$ " for shell commands. */
|
|
3206
|
+
terminal?: boolean;
|
|
3207
|
+
/** Show inline CopyButton in top-right. */
|
|
3208
|
+
copyable?: boolean;
|
|
3209
|
+
/** Optional caption above block (e.g. ".env.local"). */
|
|
3210
|
+
caption?: ReactNode;
|
|
3211
|
+
}
|
|
3212
|
+
declare const CodeBlock: react.ForwardRefExoticComponent<CodeBlockProps & react.RefAttributes<HTMLDivElement>>;
|
|
3213
|
+
|
|
3214
|
+
/**
|
|
3215
|
+
* Alert — persistent inline notice. Distinct from `Toast` (transient,
|
|
3216
|
+
* corner-positioned, multiple stackable) and `EmptyState` (centered card
|
|
3217
|
+
* for no-data affordances). Full-width-of-section banner that stays
|
|
3218
|
+
* visible until the user acts.
|
|
3219
|
+
*
|
|
3220
|
+
* `intent` drives icon + color tokens. `destructive` intent renders
|
|
3221
|
+
* `role="alert"` for assertive screen-reader announcement; the other
|
|
3222
|
+
* three intents render `role="status"` (polite). `onDismiss`, when
|
|
3223
|
+
* provided, renders a trailing `X` button. `action` slot accepts any
|
|
3224
|
+
* ReactNode (typically a `<Button>` or anchor).
|
|
3225
|
+
*
|
|
3226
|
+
* @example
|
|
3227
|
+
* <Alert
|
|
3228
|
+
* intent="warning"
|
|
3229
|
+
* title="Verify your email"
|
|
3230
|
+
* description="We sent a link to your email."
|
|
3231
|
+
* action={<Button size="sm" onClick={resend}>Resend</Button>}
|
|
3232
|
+
* />
|
|
3233
|
+
*/
|
|
3234
|
+
type AlertIntent = "info" | "success" | "warning" | "destructive";
|
|
3235
|
+
interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, "title" | "role"> {
|
|
3236
|
+
intent?: AlertIntent;
|
|
3237
|
+
title?: ReactNode;
|
|
3238
|
+
description?: ReactNode;
|
|
3239
|
+
action?: ReactNode;
|
|
3240
|
+
onDismiss?: () => void;
|
|
3241
|
+
}
|
|
3242
|
+
declare const Alert: react.ForwardRefExoticComponent<AlertProps & react.RefAttributes<HTMLDivElement>>;
|
|
3243
|
+
|
|
3244
|
+
/**
|
|
3245
|
+
* Pagination — accessible page-number navigation primitive.
|
|
3246
|
+
*
|
|
3247
|
+
* Renders a `<nav aria-label="Pagination">` containing a button group:
|
|
3248
|
+
* `[<<] [<] 1 ... 5 6 [7] 8 9 ... 42 [>] [>>]`. The active page carries
|
|
3249
|
+
* `aria-current="page"`. Keyboard navigation (ArrowLeft / ArrowRight /
|
|
3250
|
+
* Home / End) is wired on the nav. Ellipses are rendered as
|
|
3251
|
+
* non-interactive `<span>` elements with `aria-hidden`.
|
|
3252
|
+
*
|
|
3253
|
+
* Renders nothing when `totalPages <= 1` (the page is the whole list).
|
|
3254
|
+
*
|
|
3255
|
+
* `siblingCount` controls how many neighbors of the current page are
|
|
3256
|
+
* always visible (default 1 → "5 6 [7] 8 9"). `showJumpButtons`
|
|
3257
|
+
* toggles the first/last `<<` / `>>` buttons.
|
|
3258
|
+
*
|
|
3259
|
+
* Consumers control state (`currentPage`) and are responsible for any
|
|
3260
|
+
* URL routing — the buttons are `<button>`, not `<a>`.
|
|
3261
|
+
*
|
|
3262
|
+
* @example
|
|
3263
|
+
* <Pagination
|
|
3264
|
+
* currentPage={page}
|
|
3265
|
+
* totalPages={42}
|
|
3266
|
+
* onPageChange={setPage}
|
|
3267
|
+
* />
|
|
3268
|
+
*/
|
|
3269
|
+
interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, "onChange"> {
|
|
3270
|
+
currentPage: number;
|
|
3271
|
+
totalPages: number;
|
|
3272
|
+
onPageChange: (page: number) => void;
|
|
3273
|
+
/** Neighbors of current page that stay visible. Default 1. */
|
|
3274
|
+
siblingCount?: number;
|
|
3275
|
+
/** Render `<<` / `>>` first/last buttons. Default true. */
|
|
3276
|
+
showJumpButtons?: boolean;
|
|
3277
|
+
/** Size variant. Default md. */
|
|
3278
|
+
size?: "sm" | "md";
|
|
3279
|
+
}
|
|
3280
|
+
/**
|
|
3281
|
+
* Pure helper: compute the visible page-range with ellipses.
|
|
3282
|
+
* Exported for unit testing — most pagination bugs live here.
|
|
3283
|
+
*/
|
|
3284
|
+
declare function computePageRange(currentPage: number, totalPages: number, siblingCount?: number): Array<number | "ellipsis-start" | "ellipsis-end">;
|
|
3285
|
+
declare const Pagination: react.ForwardRefExoticComponent<PaginationProps & react.RefAttributes<HTMLElement>>;
|
|
3286
|
+
|
|
3287
|
+
/**
|
|
3288
|
+
* DropdownMenu — accessible menu primitive built on Radix.
|
|
3289
|
+
*
|
|
3290
|
+
* Composition (single import surface):
|
|
3291
|
+
* <DropdownMenu>
|
|
3292
|
+
* <DropdownMenu.Trigger>…</DropdownMenu.Trigger>
|
|
3293
|
+
* <DropdownMenu.Content>
|
|
3294
|
+
* <DropdownMenu.Label>Section</DropdownMenu.Label>
|
|
3295
|
+
* <DropdownMenu.Item onSelect={…}>Edit</DropdownMenu.Item>
|
|
3296
|
+
* <DropdownMenu.Separator />
|
|
3297
|
+
* <DropdownMenu.Item disabled>Delete</DropdownMenu.Item>
|
|
3298
|
+
* </DropdownMenu.Content>
|
|
3299
|
+
* </DropdownMenu>
|
|
3300
|
+
*
|
|
3301
|
+
* The primitive consolidates 5 prior direct-Radix usages
|
|
3302
|
+
* (`model-selector`, `intent-selector`, `agent-profile`,
|
|
3303
|
+
* `theme-switcher`, `theo-code-shell`) under a single styled
|
|
3304
|
+
* wrapper so consumers get consistent visuals + the design tokens.
|
|
3305
|
+
*
|
|
3306
|
+
* a11y note for tests: Radix's focus-guard spans intentionally
|
|
3307
|
+
* violate `aria-hidden-focus`. Tests should pass
|
|
3308
|
+
* `{ rules: { "aria-hidden-focus": { enabled: false } } }` to axe.
|
|
3309
|
+
*/
|
|
3310
|
+
declare const Trigger: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
3311
|
+
declare const Portal: react.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
3312
|
+
declare const Group: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
3313
|
+
declare const Sub: react.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
3314
|
+
declare const RadioGroup: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
3315
|
+
declare const Content: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
3316
|
+
interface ItemProps extends ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {
|
|
3317
|
+
inset?: boolean;
|
|
3318
|
+
}
|
|
3319
|
+
declare const Item: react.ForwardRefExoticComponent<ItemProps & react.RefAttributes<HTMLDivElement>>;
|
|
3320
|
+
declare const CheckboxItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
3321
|
+
declare const RadioItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
3322
|
+
interface LabelProps extends ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> {
|
|
3323
|
+
inset?: boolean;
|
|
3324
|
+
}
|
|
3325
|
+
declare const Label: react.ForwardRefExoticComponent<LabelProps & react.RefAttributes<HTMLDivElement>>;
|
|
3326
|
+
declare const Separator: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
3327
|
+
declare const Shortcut: {
|
|
3328
|
+
({ className, ...props }: HTMLAttributes<HTMLSpanElement>): react.JSX.Element;
|
|
3329
|
+
displayName: string;
|
|
3330
|
+
};
|
|
3331
|
+
declare const SubTrigger: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
3332
|
+
inset?: boolean;
|
|
3333
|
+
} & react.RefAttributes<HTMLDivElement>>;
|
|
3334
|
+
declare const SubContent: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
3335
|
+
type DropdownMenuRoot = typeof DropdownMenuPrimitive.Root & {
|
|
3336
|
+
Trigger: typeof Trigger;
|
|
3337
|
+
Portal: typeof Portal;
|
|
3338
|
+
Content: typeof Content;
|
|
3339
|
+
Item: typeof Item;
|
|
3340
|
+
CheckboxItem: typeof CheckboxItem;
|
|
3341
|
+
RadioItem: typeof RadioItem;
|
|
3342
|
+
Label: typeof Label;
|
|
3343
|
+
Separator: typeof Separator;
|
|
3344
|
+
Shortcut: typeof Shortcut;
|
|
3345
|
+
Group: typeof Group;
|
|
3346
|
+
Sub: typeof Sub;
|
|
3347
|
+
SubTrigger: typeof SubTrigger;
|
|
3348
|
+
SubContent: typeof SubContent;
|
|
3349
|
+
RadioGroup: typeof RadioGroup;
|
|
3350
|
+
};
|
|
3351
|
+
declare const DropdownMenu: DropdownMenuRoot;
|
|
3352
|
+
|
|
3353
|
+
/**
|
|
3354
|
+
* ActionBar — page-top action strip primitive.
|
|
3355
|
+
*
|
|
3356
|
+
* A horizontal flexbox row with three optional slots:
|
|
3357
|
+
* - Search input (flex-1, grows to fill)
|
|
3358
|
+
* - Filter icon button (next to search)
|
|
3359
|
+
* - Primary action button (right-aligned)
|
|
3360
|
+
*
|
|
3361
|
+
* Returns `null` when no props are provided — don't render an empty
|
|
3362
|
+
* bar. Used standalone or composed inside `<PageShell>` (Brief #5).
|
|
3363
|
+
*
|
|
3364
|
+
* @example
|
|
3365
|
+
* <ActionBar
|
|
3366
|
+
* search={{ placeholder: "Search projects…", value: q, onChange: setQ }}
|
|
3367
|
+
* primaryAction={{ label: "New project", icon: Plus, onClick: openModal }}
|
|
3368
|
+
* />
|
|
3369
|
+
*/
|
|
3370
|
+
interface ActionBarProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
3371
|
+
search?: {
|
|
3372
|
+
placeholder: string;
|
|
3373
|
+
value: string;
|
|
3374
|
+
onChange: (value: string) => void;
|
|
3375
|
+
};
|
|
3376
|
+
primaryAction?: {
|
|
3377
|
+
label: ReactNode;
|
|
3378
|
+
icon?: ElementType;
|
|
3379
|
+
onClick: () => void;
|
|
3380
|
+
loading?: boolean;
|
|
3381
|
+
};
|
|
3382
|
+
onFilterClick?: () => void;
|
|
3383
|
+
}
|
|
3384
|
+
declare const ActionBar: react.ForwardRefExoticComponent<ActionBarProps & react.RefAttributes<HTMLDivElement>>;
|
|
3385
|
+
|
|
3386
|
+
/**
|
|
3387
|
+
* PinInput — multi-slot OTP / code input primitive.
|
|
3388
|
+
*
|
|
3389
|
+
* Renders N separate boxes (default 6) that auto-advance focus on
|
|
3390
|
+
* input. Paste handling fills all slots from clipboard (whitespace
|
|
3391
|
+
* stripped). Arrow keys navigate; backspace clears current slot
|
|
3392
|
+
* then moves focus back when empty.
|
|
3393
|
+
*
|
|
3394
|
+
* Industry-standard pattern for email verification codes (Apple,
|
|
3395
|
+
* Stripe, Clerk, Auth0, GitHub two-factor).
|
|
3396
|
+
*
|
|
3397
|
+
* @example
|
|
3398
|
+
* <PinInput
|
|
3399
|
+
* length={6}
|
|
3400
|
+
* value={code}
|
|
3401
|
+
* onChange={setCode}
|
|
3402
|
+
* onComplete={(v) => verify(v)}
|
|
3403
|
+
* inputMode="numeric"
|
|
3404
|
+
* aria-label="Verification code"
|
|
3405
|
+
* />
|
|
3406
|
+
*
|
|
3407
|
+
* Note: value is treated as controlled. If you pass a complete value
|
|
3408
|
+
* on mount, onComplete will NOT fire — onComplete fires only on
|
|
3409
|
+
* transitions from incomplete → complete.
|
|
3410
|
+
*/
|
|
3411
|
+
interface PinInputProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "inputMode"> {
|
|
3412
|
+
length?: number;
|
|
3413
|
+
value?: string;
|
|
3414
|
+
onChange?: (value: string) => void;
|
|
3415
|
+
onComplete?: (value: string) => void;
|
|
3416
|
+
inputMode?: "numeric" | "alphanumeric";
|
|
3417
|
+
size?: "sm" | "md" | "lg";
|
|
3418
|
+
disabled?: boolean;
|
|
3419
|
+
error?: boolean;
|
|
3420
|
+
"aria-label": string;
|
|
3421
|
+
autoFocus?: boolean;
|
|
3422
|
+
mask?: boolean;
|
|
3423
|
+
}
|
|
3424
|
+
declare const PinInput: react.ForwardRefExoticComponent<PinInputProps & react.RefAttributes<HTMLDivElement>>;
|
|
3425
|
+
|
|
3426
|
+
/**
|
|
3427
|
+
* DataTable — generic, sortable, expandable composite over `<Table>`.
|
|
3428
|
+
*
|
|
3429
|
+
* Adds operator-grade entity-list patterns on top of the plain Table
|
|
3430
|
+
* primitive: sortable headers, sticky header, expandable rows
|
|
3431
|
+
* (multi-row by default), row action menus (Dropdown), client-side
|
|
3432
|
+
* pagination, loading skeleton rows, empty state. Both sort and
|
|
3433
|
+
* pagination support controlled OR uncontrolled mode (consumer
|
|
3434
|
+
* passes onSortChange / onPageChange to take over state).
|
|
3435
|
+
*
|
|
3436
|
+
* @example
|
|
3437
|
+
* <DataTable
|
|
3438
|
+
* columns={[
|
|
3439
|
+
* { key: "name", label: "Name", sortable: true },
|
|
3440
|
+
* { key: "status", label: "Status" },
|
|
3441
|
+
* ]}
|
|
3442
|
+
* data={domains}
|
|
3443
|
+
* rowKey={(d) => d.id}
|
|
3444
|
+
* expandable={(d) => d.status === "pending" ? <DnsRecords domain={d} /> : null}
|
|
3445
|
+
* rowActions={(d) => (
|
|
3446
|
+
* <>
|
|
3447
|
+
* <DropdownMenu.Item onSelect={() => editDomain(d)}>Edit</DropdownMenu.Item>
|
|
3448
|
+
* <DropdownMenu.Item onSelect={() => deleteDomain(d)}>Delete</DropdownMenu.Item>
|
|
3449
|
+
* </>
|
|
3450
|
+
* )}
|
|
3451
|
+
* />
|
|
3452
|
+
*/
|
|
3453
|
+
interface DataTableColumn<T> {
|
|
3454
|
+
key: string;
|
|
3455
|
+
label: ReactNode;
|
|
3456
|
+
align?: "left" | "center" | "right";
|
|
3457
|
+
sortable?: boolean;
|
|
3458
|
+
width?: string;
|
|
3459
|
+
render?: (row: T) => ReactNode;
|
|
3460
|
+
className?: string;
|
|
3461
|
+
}
|
|
3462
|
+
interface DataTableSort {
|
|
3463
|
+
key: string;
|
|
3464
|
+
direction: "asc" | "desc";
|
|
3465
|
+
}
|
|
3466
|
+
interface DataTableProps<T> {
|
|
3467
|
+
data: T[];
|
|
3468
|
+
columns: DataTableColumn<T>[];
|
|
3469
|
+
rowKey: (row: T) => string;
|
|
3470
|
+
stickyHeader?: boolean;
|
|
3471
|
+
expandable?: (row: T) => ReactNode | null;
|
|
3472
|
+
expandMode?: "single" | "multiple";
|
|
3473
|
+
rowActions?: (row: T) => ReactNode;
|
|
3474
|
+
pagination?: {
|
|
3475
|
+
pageSize: number;
|
|
3476
|
+
controlledPage?: number;
|
|
3477
|
+
onPageChange?: (page: number) => void;
|
|
3478
|
+
} | null;
|
|
3479
|
+
defaultSort?: DataTableSort;
|
|
3480
|
+
sort?: DataTableSort | null;
|
|
3481
|
+
onSortChange?: (sort: DataTableSort | null) => void;
|
|
3482
|
+
loading?: boolean;
|
|
3483
|
+
emptyState?: ReactNode;
|
|
3484
|
+
className?: string;
|
|
3485
|
+
}
|
|
3486
|
+
declare function DataTable<T>(props: DataTableProps<T>): ReactNode;
|
|
3487
|
+
|
|
3488
|
+
/**
|
|
3489
|
+
* PageShell — page-level scaffold composite.
|
|
3490
|
+
*
|
|
3491
|
+
* Renders title + optional description + optional ActionBar, then
|
|
3492
|
+
* one of four mutually-exclusive content states:
|
|
3493
|
+
* 1. loading (highest precedence)
|
|
3494
|
+
* 2. error
|
|
3495
|
+
* 3. empty
|
|
3496
|
+
* 4. children (default)
|
|
3497
|
+
*
|
|
3498
|
+
* Scope-narrowed per Brief #5 D3: PageShell does NOT manage
|
|
3499
|
+
* `document.title`. Use the optional `onTitleChange` callback to
|
|
3500
|
+
* wire your own hook (e.g. useSetPageTitle, react-helmet,
|
|
3501
|
+
* next/head).
|
|
3502
|
+
*
|
|
3503
|
+
* @example
|
|
3504
|
+
* <PageShell
|
|
3505
|
+
* title="Domains"
|
|
3506
|
+
* description="Custom domains and DNS verification."
|
|
3507
|
+
* search={{ placeholder: "Search…", value: q, onChange: setQ }}
|
|
3508
|
+
* primaryAction={{ label: "Add domain", icon: Plus, onClick: openModal }}
|
|
3509
|
+
* loading={isLoading}
|
|
3510
|
+
* error={error ? { message: error.message, onRetry: refetch } : undefined}
|
|
3511
|
+
* empty={data?.length === 0 ? { title: "No domains yet" } : undefined}
|
|
3512
|
+
* >
|
|
3513
|
+
* <DataTable columns={…} data={data} />
|
|
3514
|
+
* </PageShell>
|
|
3515
|
+
*/
|
|
3516
|
+
interface PageShellProps {
|
|
3517
|
+
title: string;
|
|
3518
|
+
description?: ReactNode;
|
|
3519
|
+
/** Optional callback invoked when `title` changes — wire to your own document.title hook. */
|
|
3520
|
+
onTitleChange?: (title: string) => void;
|
|
3521
|
+
primaryAction?: {
|
|
3522
|
+
label: ReactNode;
|
|
3523
|
+
icon?: ElementType;
|
|
3524
|
+
onClick: () => void;
|
|
3525
|
+
loading?: boolean;
|
|
3526
|
+
};
|
|
3527
|
+
search?: {
|
|
3528
|
+
placeholder: string;
|
|
3529
|
+
value: string;
|
|
3530
|
+
onChange: (v: string) => void;
|
|
3531
|
+
};
|
|
3532
|
+
onFilterClick?: () => void;
|
|
3533
|
+
loading?: boolean;
|
|
3534
|
+
/** Custom loading UI. Defaults to a centered spinner card. */
|
|
3535
|
+
loadingNode?: ReactNode;
|
|
3536
|
+
error?: {
|
|
3537
|
+
message: string;
|
|
3538
|
+
onRetry?: () => void;
|
|
3539
|
+
docsHref?: string;
|
|
3540
|
+
};
|
|
3541
|
+
empty?: {
|
|
3542
|
+
icon?: ElementType;
|
|
3543
|
+
title: string;
|
|
3544
|
+
description?: ReactNode;
|
|
3545
|
+
action?: {
|
|
3546
|
+
label: string;
|
|
3547
|
+
onClick: () => void;
|
|
3548
|
+
};
|
|
3549
|
+
};
|
|
3550
|
+
children?: ReactNode;
|
|
3551
|
+
className?: string;
|
|
3552
|
+
}
|
|
3553
|
+
declare const PageShell: react.ForwardRefExoticComponent<PageShellProps & react.RefAttributes<HTMLElement>>;
|
|
3554
|
+
|
|
3555
|
+
interface ProgressChecklistProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
3556
|
+
title?: ReactNode;
|
|
3557
|
+
steps: TaskStep[];
|
|
3558
|
+
/**
|
|
3559
|
+
* If true, shows percentage bar for running steps with `progress`.
|
|
3560
|
+
*/
|
|
3561
|
+
showProgressBars?: boolean;
|
|
3562
|
+
}
|
|
3563
|
+
/**
|
|
3564
|
+
* ProgressChecklist — right-inspector checklist.
|
|
3565
|
+
*
|
|
3566
|
+
* Visual: vertical list of steps with status dot, label, optional progress bar.
|
|
3567
|
+
* Matches WIREMOCKS §3 / §4 ("Progresso") with checkmarks and pulse on running.
|
|
3568
|
+
*/
|
|
3569
|
+
declare const ProgressChecklist: react.ForwardRefExoticComponent<ProgressChecklistProps & react.RefAttributes<HTMLDivElement>>;
|
|
3570
|
+
|
|
3571
|
+
interface FolderEntry {
|
|
3572
|
+
id: string;
|
|
3573
|
+
name: string;
|
|
3574
|
+
kind: "folder" | "file";
|
|
3575
|
+
/**
|
|
3576
|
+
* If true, the entry is expanded (icons + nested children).
|
|
3577
|
+
* Pure visual flag; toggling is the caller's job.
|
|
3578
|
+
*/
|
|
3579
|
+
open?: boolean;
|
|
3580
|
+
/**
|
|
3581
|
+
* Optional nested entries when this is a folder.
|
|
3582
|
+
*/
|
|
3583
|
+
children?: FolderEntry[];
|
|
3584
|
+
/** Optional adornment after the name (badge, modified indicator). */
|
|
3585
|
+
trailing?: ReactNode;
|
|
3586
|
+
/** Override the icon. */
|
|
3587
|
+
icon?: IconComponent;
|
|
3588
|
+
}
|
|
3589
|
+
interface FolderContextCardProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3590
|
+
title?: ReactNode;
|
|
3591
|
+
/**
|
|
3592
|
+
* Root entries shown directly in the card.
|
|
3593
|
+
*/
|
|
3594
|
+
entries: FolderEntry[];
|
|
3595
|
+
/**
|
|
3596
|
+
* Fires when an entry row is clicked.
|
|
3597
|
+
*/
|
|
3598
|
+
onEntryClick?: (id: string) => void;
|
|
3599
|
+
}
|
|
3600
|
+
/**
|
|
3601
|
+
* FolderContextCard — file/folder tree fragment for the right inspector.
|
|
3602
|
+
*
|
|
3603
|
+
* Visual: 1-level tree with chevron indicating expanded state. Renders nested
|
|
3604
|
+
* children recursively, but does not manage open state — caller controls
|
|
3605
|
+
* `entry.open` and reacts to `onEntryClick`.
|
|
3606
|
+
*/
|
|
3607
|
+
declare const FolderContextCard: react.ForwardRefExoticComponent<FolderContextCardProps & react.RefAttributes<HTMLElement>>;
|
|
3608
|
+
|
|
3609
|
+
interface ContextCardProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3610
|
+
title?: ReactNode;
|
|
3611
|
+
description?: ReactNode;
|
|
3612
|
+
/** Optional illustration slot (rendered above title). */
|
|
3613
|
+
illustration?: ReactNode;
|
|
3614
|
+
/** Icon for the title row — used when illustration is omitted. */
|
|
3615
|
+
icon?: IconComponent;
|
|
3616
|
+
}
|
|
3617
|
+
/**
|
|
3618
|
+
* ContextCard — generic "informational" card for the right inspector.
|
|
3619
|
+
*
|
|
3620
|
+
* Used as the "Contexto" card on Files screens: illustration / icon, title,
|
|
3621
|
+
* short description. Inert by design — no actions.
|
|
3622
|
+
*/
|
|
3623
|
+
declare const ContextCard: react.ForwardRefExoticComponent<ContextCardProps & react.RefAttributes<HTMLElement>>;
|
|
3624
|
+
|
|
3625
|
+
interface CreatedFile {
|
|
3626
|
+
id: string;
|
|
3627
|
+
name: string;
|
|
3628
|
+
/** Optional size for display, e.g. "42 KB". */
|
|
3629
|
+
size?: string;
|
|
3630
|
+
/** Icon override. */
|
|
3631
|
+
icon?: IconComponent;
|
|
3632
|
+
/** Optional destination metadata (e.g. "Google Drive · /Reports"). */
|
|
3633
|
+
destination?: ReactNode;
|
|
3634
|
+
/** Optional URL to open the file. */
|
|
3635
|
+
href?: string;
|
|
3636
|
+
}
|
|
3637
|
+
interface CreatedFilesCardProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3638
|
+
title?: ReactNode;
|
|
3639
|
+
files: CreatedFile[];
|
|
3640
|
+
/**
|
|
3641
|
+
* Optional CTA shown at the bottom (e.g. "Move to Google Drive").
|
|
3642
|
+
*/
|
|
3643
|
+
cta?: ReactNode;
|
|
3644
|
+
}
|
|
3645
|
+
/**
|
|
3646
|
+
* CreatedFilesCard — surfaces files produced by a completed task.
|
|
3647
|
+
*
|
|
3648
|
+
* From WIREMOCKS §2: each file is a card-like row with icon + name + destination.
|
|
3649
|
+
* Used as social proof of delivery in Task Completed views.
|
|
3650
|
+
*/
|
|
3651
|
+
declare const CreatedFilesCard: react.ForwardRefExoticComponent<CreatedFilesCardProps & react.RefAttributes<HTMLElement>>;
|
|
3652
|
+
|
|
3653
|
+
interface ArtifactPreviewProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3654
|
+
title: ReactNode;
|
|
3655
|
+
/** Optional source/destination label (e.g. "Google Drive", "Local · ~/reports"). */
|
|
3656
|
+
source?: ReactNode;
|
|
3657
|
+
/**
|
|
3658
|
+
* Tabs at the bottom of the artifact (e.g. "Expense Report | Currency Summary").
|
|
3659
|
+
* Caller controls the active state externally.
|
|
3660
|
+
*/
|
|
3661
|
+
tabs?: ReactNode;
|
|
3662
|
+
/** Top toolbar actions. Defaults to refresh + maximize + close. */
|
|
3663
|
+
toolbar?: ReactNode;
|
|
3664
|
+
onMaximize?: () => void;
|
|
3665
|
+
onRefresh?: () => void;
|
|
3666
|
+
onClose?: () => void;
|
|
3667
|
+
}
|
|
3668
|
+
/**
|
|
3669
|
+
* ArtifactPreview — shell for previewing a generated artifact (XLSX, PDF, image…).
|
|
3670
|
+
*
|
|
3671
|
+
* Renders a toolbar + content slot + optional bottom tabs. The actual preview
|
|
3672
|
+
* (spreadsheet, PDF embed, image) is the caller's `children`, so this stays
|
|
3673
|
+
* dependency-free.
|
|
3674
|
+
*/
|
|
3675
|
+
declare const ArtifactPreview: react.ForwardRefExoticComponent<ArtifactPreviewProps & react.RefAttributes<HTMLElement>>;
|
|
3676
|
+
|
|
3677
|
+
interface RailStep {
|
|
3678
|
+
id: string | number;
|
|
3679
|
+
label?: ReactNode;
|
|
3680
|
+
/**
|
|
3681
|
+
* Visual state: "complete", "current", "pending".
|
|
3682
|
+
*/
|
|
3683
|
+
state?: "complete" | "current" | "pending";
|
|
3684
|
+
}
|
|
3685
|
+
interface StepsRailProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
3686
|
+
steps: RailStep[];
|
|
3687
|
+
/**
|
|
3688
|
+
* Optional label rendered at the top of the rail (e.g. "STEPS").
|
|
3689
|
+
*/
|
|
3690
|
+
title?: ReactNode;
|
|
3691
|
+
}
|
|
3692
|
+
/**
|
|
3693
|
+
* StepsRail — vertical numbered rail with connecting line.
|
|
3694
|
+
*
|
|
3695
|
+
* Mirrors the file-organisation wiremock right rail: 5 numbered dots, current
|
|
3696
|
+
* highlighted, line connecting them.
|
|
3697
|
+
*/
|
|
3698
|
+
declare const StepsRail: react.ForwardRefExoticComponent<StepsRailProps & react.RefAttributes<HTMLElement>>;
|
|
3699
|
+
|
|
3700
|
+
interface RecentFolder {
|
|
3701
|
+
id: string;
|
|
3702
|
+
name: ReactNode;
|
|
3703
|
+
path: string;
|
|
3704
|
+
/** When true, the row is highlighted as selected. */
|
|
3705
|
+
active?: boolean;
|
|
3706
|
+
}
|
|
3707
|
+
interface RecentFoldersListProps extends Omit<HTMLAttributes<HTMLDivElement>, "title" | "onSelect"> {
|
|
3708
|
+
title?: ReactNode;
|
|
3709
|
+
folders: RecentFolder[];
|
|
3710
|
+
onSelect?: (id: string) => void;
|
|
3711
|
+
}
|
|
3712
|
+
/**
|
|
3713
|
+
* RecentFoldersList — recently-used folders for the Files picker.
|
|
3714
|
+
*
|
|
3715
|
+
* Visual: a stack of rows with folder icon + name + path (smaller, muted),
|
|
3716
|
+
* active row highlighted with violet bg.
|
|
3717
|
+
*/
|
|
3718
|
+
declare const RecentFoldersList: react.ForwardRefExoticComponent<RecentFoldersListProps & react.RefAttributes<HTMLDivElement>>;
|
|
3719
|
+
|
|
3720
|
+
type DiffLineKind = "added" | "removed" | "unchanged" | "meta";
|
|
3721
|
+
interface DiffLine {
|
|
3722
|
+
kind: DiffLineKind;
|
|
3723
|
+
/** Original line number (left side); undefined for added lines. */
|
|
3724
|
+
oldNumber?: number;
|
|
3725
|
+
/** New line number (right side); undefined for removed lines. */
|
|
3726
|
+
newNumber?: number;
|
|
3727
|
+
content: string;
|
|
3728
|
+
}
|
|
3729
|
+
interface DiffHunk {
|
|
3730
|
+
id: string;
|
|
3731
|
+
/**
|
|
3732
|
+
* Optional header (e.g. "@@ -42,7 +42,12 @@"). Caller usually formats this.
|
|
3733
|
+
*/
|
|
3734
|
+
header?: string;
|
|
3735
|
+
lines: DiffLine[];
|
|
3736
|
+
/**
|
|
3737
|
+
* If true, the hunk is rendered as a collapsed "N unmodified lines" placeholder.
|
|
3738
|
+
*/
|
|
3739
|
+
collapsed?: boolean;
|
|
3740
|
+
}
|
|
3741
|
+
interface DiffViewerProps extends HTMLAttributes<HTMLDivElement> {
|
|
3742
|
+
/** Path of the file being diffed. */
|
|
3743
|
+
path: string;
|
|
3744
|
+
/** Diff stats summary. */
|
|
3745
|
+
stats?: {
|
|
3746
|
+
added: number;
|
|
3747
|
+
removed: number;
|
|
3748
|
+
};
|
|
3749
|
+
hunks: DiffHunk[];
|
|
3750
|
+
}
|
|
3751
|
+
/**
|
|
3752
|
+
* DiffViewer — unified diff rendering, no external dep.
|
|
3753
|
+
*
|
|
3754
|
+
* Visual: two gutter columns (old/new line numbers) + sign + monospaced content.
|
|
3755
|
+
* Added/removed rows tinted in success/destructive. Collapsed hunks render as
|
|
3756
|
+
* a single muted row "N unmodified lines".
|
|
3757
|
+
*
|
|
3758
|
+
* For syntax highlighting, the consumer can render `content` via their own
|
|
3759
|
+
* highlighter and pass `unchanged` lines with already-highlighted strings (not
|
|
3760
|
+
* common; usually plain text is enough for the brutalist console aesthetic).
|
|
3761
|
+
*/
|
|
3762
|
+
declare const DiffViewer: react.ForwardRefExoticComponent<DiffViewerProps & react.RefAttributes<HTMLDivElement>>;
|
|
3763
|
+
|
|
3764
|
+
interface TerminalLine {
|
|
3765
|
+
id: string;
|
|
3766
|
+
/**
|
|
3767
|
+
* Visual kind: command (prompted), stdout, stderr, ok (success), prompt (active line).
|
|
3768
|
+
*/
|
|
3769
|
+
kind?: "command" | "stdout" | "stderr" | "ok" | "prompt";
|
|
3770
|
+
content: ReactNode;
|
|
3771
|
+
}
|
|
3772
|
+
interface TerminalPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
3773
|
+
title?: ReactNode;
|
|
3774
|
+
lines: TerminalLine[];
|
|
3775
|
+
/**
|
|
3776
|
+
* Optional prompt prefix for commands, defaults to "$".
|
|
3777
|
+
*/
|
|
3778
|
+
promptPrefix?: string;
|
|
3779
|
+
/**
|
|
3780
|
+
* Live-region politeness for screen readers. Use `"polite"` when streaming
|
|
3781
|
+
* fresh output so assistive tech announces new lines without interrupting.
|
|
3782
|
+
* Default `"off"` for static / historical views.
|
|
3783
|
+
*/
|
|
3784
|
+
live?: "off" | "polite";
|
|
3785
|
+
}
|
|
3786
|
+
/**
|
|
3787
|
+
* TerminalPanel — minimal terminal output viewer.
|
|
3788
|
+
*
|
|
3789
|
+
* Visual: dark card with mono font, "$ " prefix on command lines, color-coded
|
|
3790
|
+
* stdout/stderr/success. No interactivity (read-only) — pair with your own
|
|
3791
|
+
* pty/xterm for live shells if needed.
|
|
3792
|
+
*/
|
|
3793
|
+
declare const TerminalPanel: react.ForwardRefExoticComponent<TerminalPanelProps & react.RefAttributes<HTMLDivElement>>;
|
|
3794
|
+
|
|
3795
|
+
type TaskSource = "agent" | "bash" | "tool";
|
|
3796
|
+
type RunningTaskStatus = "running" | "completed" | "failed";
|
|
3797
|
+
interface RunningTaskItem {
|
|
3798
|
+
id: string;
|
|
3799
|
+
label: ReactNode;
|
|
3800
|
+
source: TaskSource;
|
|
3801
|
+
status: RunningTaskStatus;
|
|
3802
|
+
}
|
|
3803
|
+
interface RunningTasksPanelProps extends HTMLAttributes<HTMLElement> {
|
|
3804
|
+
tasks: RunningTaskItem[];
|
|
3805
|
+
}
|
|
3806
|
+
/**
|
|
3807
|
+
* RunningTasksPanel — split list of Running vs Completed tasks.
|
|
3808
|
+
*
|
|
3809
|
+
* Used in the Code workspace right rail to give operational visibility into
|
|
3810
|
+
* what the agent is executing (foreground/background) vs what already finished.
|
|
3811
|
+
*/
|
|
3812
|
+
declare const RunningTasksPanel: react.ForwardRefExoticComponent<RunningTasksPanelProps & react.RefAttributes<HTMLElement>>;
|
|
3813
|
+
|
|
3814
|
+
interface BrowserControlsProps extends HTMLAttributes<HTMLDivElement> {
|
|
3815
|
+
url: string;
|
|
3816
|
+
onUrlChange?: (next: string) => void;
|
|
3817
|
+
onBack?: () => void;
|
|
3818
|
+
onForward?: () => void;
|
|
3819
|
+
onReload?: () => void;
|
|
3820
|
+
/**
|
|
3821
|
+
* Disable URL editing (some previews are read-only).
|
|
3822
|
+
*/
|
|
3823
|
+
readOnlyUrl?: boolean;
|
|
3824
|
+
}
|
|
3825
|
+
/**
|
|
3826
|
+
* BrowserControls — back/forward/reload + URL bar.
|
|
3827
|
+
*
|
|
3828
|
+
* Used as the top of PreviewPanel in the Code workspace.
|
|
3829
|
+
*/
|
|
3830
|
+
declare const BrowserControls: react.ForwardRefExoticComponent<BrowserControlsProps & react.RefAttributes<HTMLDivElement>>;
|
|
3831
|
+
|
|
3832
|
+
type LogLevel = "info" | "warn" | "error" | "success" | "debug";
|
|
3833
|
+
interface LogLine {
|
|
3834
|
+
id: string;
|
|
3835
|
+
timestamp: string;
|
|
3836
|
+
level: LogLevel;
|
|
3837
|
+
message: string;
|
|
3838
|
+
source?: string;
|
|
3839
|
+
}
|
|
3840
|
+
interface BuildLogStreamProps extends HTMLAttributes<HTMLDivElement> {
|
|
3841
|
+
lines: LogLine[];
|
|
3842
|
+
/**
|
|
3843
|
+
* If true, shows level filter chips above the stream.
|
|
3844
|
+
*/
|
|
3845
|
+
filterable?: boolean;
|
|
3846
|
+
/**
|
|
3847
|
+
* Controlled filter — which levels are visible. Empty Set = show all.
|
|
3848
|
+
*
|
|
3849
|
+
* Pick one mode: either always pass `visibleLevels` + `onVisibleLevelsChange`
|
|
3850
|
+
* (controlled), or never (uncontrolled). Mixing the two between renders is
|
|
3851
|
+
* not supported and may produce surprising state.
|
|
3852
|
+
*/
|
|
3853
|
+
visibleLevels?: Set<LogLevel>;
|
|
3854
|
+
onVisibleLevelsChange?: (levels: Set<LogLevel>) => void;
|
|
3855
|
+
/**
|
|
3856
|
+
* Height of the scrollable region.
|
|
3857
|
+
*/
|
|
3858
|
+
height?: string | number;
|
|
3859
|
+
/**
|
|
3860
|
+
* Maximum number of lines rendered. When exceeded, only the tail is shown
|
|
3861
|
+
* and a banner indicates truncation. Defaults to 2000 — set higher with
|
|
3862
|
+
* caution; React reconciliation cost scales linearly.
|
|
3863
|
+
*/
|
|
3864
|
+
maxLines?: number;
|
|
3865
|
+
/**
|
|
3866
|
+
* Screen-reader live-region politeness for newly appended lines. Defaults
|
|
3867
|
+
* to `"off"` because build-log streams can be high-volume; opt into
|
|
3868
|
+
* `"polite"` only when running the build in the foreground.
|
|
3869
|
+
*/
|
|
3870
|
+
live?: "off" | "polite";
|
|
3871
|
+
}
|
|
3872
|
+
/**
|
|
3873
|
+
* BuildLogStream — terminal-like log viewer with timestamps + level coloring.
|
|
3874
|
+
*
|
|
3875
|
+
* Used in Code workspace and PaaS deployment views. Geist Mono throughout.
|
|
3876
|
+
* Lines fade in via animate-fade-in-up on mount; new lines (when prepended/appended)
|
|
3877
|
+
* are not animated to avoid feedback noise (consumer's responsibility to render
|
|
3878
|
+
* incrementally if needed).
|
|
3879
|
+
*/
|
|
3880
|
+
declare const BuildLogStream: react.ForwardRefExoticComponent<BuildLogStreamProps & react.RefAttributes<HTMLDivElement>>;
|
|
3881
|
+
|
|
3882
|
+
interface Metric {
|
|
3883
|
+
/**
|
|
3884
|
+
* Short label, e.g. "Requests/s", "p95 latency", "Error rate".
|
|
3885
|
+
*/
|
|
3886
|
+
label: string;
|
|
3887
|
+
/**
|
|
3888
|
+
* Pre-formatted value string, e.g. "1.2k", "182ms", "0.03%".
|
|
3889
|
+
* Consumer formats; the component does not parse.
|
|
3890
|
+
*/
|
|
3891
|
+
value: string;
|
|
3892
|
+
/**
|
|
3893
|
+
* Optional unit suffix appended after value with .9 opacity.
|
|
3894
|
+
*/
|
|
3895
|
+
unit?: string;
|
|
3896
|
+
/**
|
|
3897
|
+
* Optional change vs comparison period, e.g. "+12%", "-4ms", "+0.01pp".
|
|
3898
|
+
*/
|
|
3899
|
+
delta?: string;
|
|
3900
|
+
/**
|
|
3901
|
+
* If true, delta is "good" (success color); if false, "bad" (destructive).
|
|
3902
|
+
* If omitted, delta is rendered in muted (neutral).
|
|
3903
|
+
*
|
|
3904
|
+
* Caller decides semantics — "more requests" is good but "more errors" is bad.
|
|
3905
|
+
*/
|
|
3906
|
+
deltaGood?: boolean;
|
|
3907
|
+
/**
|
|
3908
|
+
* Optional sparkline data, 0..1 normalized. Consumer is responsible for normalization.
|
|
3909
|
+
*/
|
|
3910
|
+
sparkline?: number[];
|
|
3911
|
+
/**
|
|
3912
|
+
* Optional onClick to drill into the metric.
|
|
3913
|
+
*/
|
|
3914
|
+
onClick?: () => void;
|
|
3915
|
+
/**
|
|
3916
|
+
* Optional override for the clickable tile's accessible name. When the
|
|
3917
|
+
* tile is interactive (`onClick` set), defaults to `View <label> details`.
|
|
3918
|
+
* Has no effect when `onClick` is absent (tile is rendered as a non-link
|
|
3919
|
+
* `<div>` with no button semantics). T4.3.
|
|
3920
|
+
*/
|
|
3921
|
+
actionLabel?: string;
|
|
3922
|
+
}
|
|
3923
|
+
interface MetricsPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
3924
|
+
title?: ReactNode;
|
|
3925
|
+
description?: ReactNode;
|
|
3926
|
+
metrics: Metric[];
|
|
3927
|
+
/**
|
|
3928
|
+
* Grid columns. Defaults to auto-fit ~180px min.
|
|
3929
|
+
*/
|
|
3930
|
+
columns?: number;
|
|
3931
|
+
}
|
|
3932
|
+
/**
|
|
3933
|
+
* MetricsPanel — grid of metric tiles for observability dashboards.
|
|
3934
|
+
*
|
|
3935
|
+
* Visual: each tile is a soft surface with a big value (font-display),
|
|
3936
|
+
* label uppercase muted, optional delta with arrow icon + tone color,
|
|
3937
|
+
* optional CSS-only sparkline drawn as flexed bars.
|
|
3938
|
+
*
|
|
3939
|
+
* No external chart lib — keeps the registry copy-pasteable.
|
|
3940
|
+
*/
|
|
3941
|
+
declare const MetricsPanel: react.ForwardRefExoticComponent<MetricsPanelProps & react.RefAttributes<HTMLDivElement>>;
|
|
3942
|
+
|
|
3943
|
+
interface SocialProvider {
|
|
3944
|
+
id: string;
|
|
3945
|
+
label: ReactNode;
|
|
3946
|
+
/** Icon component (e.g. brand-specific SVG). */
|
|
3947
|
+
icon: IconComponent;
|
|
3948
|
+
}
|
|
3949
|
+
interface SocialAuthRowProps extends Omit<HTMLAttributes<HTMLDivElement>, "onSelect"> {
|
|
3950
|
+
providers: SocialProvider[];
|
|
3951
|
+
onSelect?: (id: string) => void;
|
|
3952
|
+
/**
|
|
3953
|
+
* Stack vertically instead of horizontally (single-column flow).
|
|
3954
|
+
*/
|
|
3955
|
+
vertical?: boolean;
|
|
3956
|
+
}
|
|
3957
|
+
/**
|
|
3958
|
+
* SocialAuthRow — row of OAuth provider buttons.
|
|
3959
|
+
*
|
|
3960
|
+
* Stateless; caller wires the redirect on `onSelect`. Buttons share Theo button
|
|
3961
|
+
* styling but with provider icon prominently on the left.
|
|
3962
|
+
*/
|
|
3963
|
+
declare const SocialAuthRow: react.ForwardRefExoticComponent<SocialAuthRowProps & react.RefAttributes<HTMLDivElement>>;
|
|
3964
|
+
|
|
3965
|
+
interface LoginSplitProps extends HTMLAttributes<HTMLDivElement> {
|
|
3966
|
+
/** Left pane content — form, brand, etc. */
|
|
3967
|
+
left: ReactNode;
|
|
3968
|
+
/** Right pane content — illustration, marketing, social proof. */
|
|
3969
|
+
right: ReactNode;
|
|
3970
|
+
/**
|
|
3971
|
+
* Optional footer rendered below both panes.
|
|
3972
|
+
*/
|
|
3973
|
+
footer?: ReactNode;
|
|
3974
|
+
/**
|
|
3975
|
+
* Reverse the split (form on the right). Default = form left.
|
|
3976
|
+
*/
|
|
3977
|
+
reverse?: boolean;
|
|
3978
|
+
}
|
|
3979
|
+
/**
|
|
3980
|
+
* LoginSplit — 50/50 split layout shell.
|
|
3981
|
+
*
|
|
3982
|
+
* Used for the auth flow. Two slots (`left`, `right`); the right pane has a
|
|
3983
|
+
* subtle violet wash so the illustration sits inside Theo identity. Mobile
|
|
3984
|
+
* collapses to single column.
|
|
3985
|
+
*/
|
|
3986
|
+
declare const LoginSplit: react.ForwardRefExoticComponent<LoginSplitProps & react.RefAttributes<HTMLDivElement>>;
|
|
3987
|
+
|
|
3988
|
+
interface SkillsListProps extends Omit<HTMLAttributes<HTMLDivElement>, "title" | "onToggle"> {
|
|
3989
|
+
skills: Skill[];
|
|
3990
|
+
title?: ReactNode;
|
|
3991
|
+
/** If true, shows a search input above the grid. */
|
|
3992
|
+
searchable?: boolean;
|
|
3993
|
+
onToggle?: (id: string, next: SkillState) => void;
|
|
3994
|
+
}
|
|
3995
|
+
/**
|
|
3996
|
+
* SkillsList — grid of SkillCards with optional search + source filter chips.
|
|
3997
|
+
* Pairs with claw-code's `claw skills` inventory but visual.
|
|
3998
|
+
*/
|
|
3999
|
+
declare const SkillsList: react.ForwardRefExoticComponent<SkillsListProps & react.RefAttributes<HTMLDivElement>>;
|
|
4000
|
+
|
|
4001
|
+
/**
|
|
4002
|
+
* SkillEditor — form for creating or editing a Skill.
|
|
4003
|
+
*/
|
|
4004
|
+
type SkillDraft = Omit<Skill, "id"> & {
|
|
4005
|
+
id?: string;
|
|
4006
|
+
instructions?: string;
|
|
4007
|
+
};
|
|
4008
|
+
interface SkillEditorProps extends Omit<HTMLAttributes<HTMLFormElement>, "onSubmit" | "onChange"> {
|
|
4009
|
+
initial?: Partial<Skill> & {
|
|
4010
|
+
instructions?: string;
|
|
4011
|
+
};
|
|
4012
|
+
onSave: (draft: SkillDraft) => void;
|
|
4013
|
+
onCancel?: () => void;
|
|
4014
|
+
onDelete?: () => void;
|
|
4015
|
+
}
|
|
4016
|
+
declare function SkillEditor({ className, initial, onSave, onCancel, onDelete, ...formProps }: SkillEditorProps): react.JSX.Element;
|
|
4017
|
+
|
|
4018
|
+
/**
|
|
4019
|
+
* RuleEditor — form for creating or editing a Rule (behavior instruction
|
|
4020
|
+
* injected into the system prompt).
|
|
4021
|
+
*/
|
|
4022
|
+
type RuleDraft = Omit<Rule, "id" | "updatedAt"> & {
|
|
4023
|
+
id?: string;
|
|
4024
|
+
tags?: string[];
|
|
4025
|
+
};
|
|
4026
|
+
interface RuleEditorProps extends Omit<HTMLAttributes<HTMLFormElement>, "onSubmit" | "onChange"> {
|
|
4027
|
+
initial?: Partial<Rule>;
|
|
4028
|
+
onSave: (draft: RuleDraft) => void;
|
|
4029
|
+
onCancel?: () => void;
|
|
4030
|
+
onDelete?: () => void;
|
|
4031
|
+
}
|
|
4032
|
+
declare function RuleEditor({ className, initial, onSave, onCancel, onDelete, ...formProps }: RuleEditorProps): react.JSX.Element;
|
|
4033
|
+
|
|
4034
|
+
interface CronJobsListProps extends Omit<HTMLAttributes<HTMLDivElement>, "title" | "onToggle"> {
|
|
4035
|
+
jobs: CronJob[];
|
|
4036
|
+
title?: ReactNode;
|
|
4037
|
+
onAdd?: () => void;
|
|
4038
|
+
onRunNow?: (id: string) => void;
|
|
4039
|
+
onToggle?: (id: string, enabled: boolean) => void;
|
|
4040
|
+
onRemove?: (id: string) => void;
|
|
4041
|
+
}
|
|
4042
|
+
/**
|
|
4043
|
+
* CronJobsList — grid of CronJobCards with a sticky "new job" action.
|
|
4044
|
+
*/
|
|
4045
|
+
declare const CronJobsList: react.ForwardRefExoticComponent<CronJobsListProps & react.RefAttributes<HTMLDivElement>>;
|
|
4046
|
+
|
|
4047
|
+
interface MCPServerListProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
4048
|
+
servers: MCPServer[];
|
|
4049
|
+
title?: ReactNode;
|
|
4050
|
+
onAdd?: () => void;
|
|
4051
|
+
onRestart?: (id: string) => void;
|
|
4052
|
+
onDisconnect?: (id: string) => void;
|
|
4053
|
+
}
|
|
4054
|
+
/**
|
|
4055
|
+
* MCPServerList — grouped MCP server inventory with status filter chips.
|
|
4056
|
+
* Surfaces degraded/disconnected servers prominently so the user can act.
|
|
4057
|
+
*/
|
|
4058
|
+
declare const MCPServerList: react.ForwardRefExoticComponent<MCPServerListProps & react.RefAttributes<HTMLDivElement>>;
|
|
4059
|
+
|
|
4060
|
+
/**
|
|
4061
|
+
* AgentEditor — form for creating or editing an Agent persona.
|
|
4062
|
+
*/
|
|
4063
|
+
interface AgentDraft extends Omit<AgentProfileDescriptor, "id"> {
|
|
4064
|
+
id?: string;
|
|
4065
|
+
systemPrompt?: string;
|
|
4066
|
+
model?: string;
|
|
4067
|
+
allowedTools?: string[];
|
|
4068
|
+
skillIds?: string[];
|
|
4069
|
+
/** Modes this agent is visible in. Omit / empty = global (all modes). */
|
|
4070
|
+
modes?: Mode[];
|
|
4071
|
+
}
|
|
4072
|
+
interface AgentEditorProps extends Omit<HTMLAttributes<HTMLFormElement>, "onSubmit" | "onChange"> {
|
|
4073
|
+
initial?: Partial<AgentDraft>;
|
|
4074
|
+
models?: Array<{
|
|
4075
|
+
id: string;
|
|
4076
|
+
label: string;
|
|
4077
|
+
}>;
|
|
4078
|
+
skills?: Array<{
|
|
4079
|
+
id: string;
|
|
4080
|
+
label: string;
|
|
4081
|
+
}>;
|
|
4082
|
+
onSave: (draft: AgentDraft) => void;
|
|
4083
|
+
onCancel?: () => void;
|
|
4084
|
+
onDelete?: () => void;
|
|
4085
|
+
}
|
|
4086
|
+
declare function AgentEditor({ className, initial, models, skills, onSave, onCancel, onDelete, ...formProps }: AgentEditorProps): react.JSX.Element;
|
|
4087
|
+
|
|
4088
|
+
/**
|
|
4089
|
+
* ApprovalCard — inline pause-and-ask card for an agent stream.
|
|
4090
|
+
*
|
|
4091
|
+
* Used when the agent wants to perform an action that requires the user's
|
|
4092
|
+
* consent (run a destructive command, use a new tool, edit outside the
|
|
4093
|
+
* sandbox, etc.). Renders as a bordered card inside the conversation stream,
|
|
4094
|
+
* pauses the visual flow, and exposes Deny / Approve / Always-allow actions.
|
|
4095
|
+
*/
|
|
4096
|
+
declare const cardVariants: (props?: ({
|
|
4097
|
+
severity?: "warning" | "destructive" | "info" | null | undefined;
|
|
4098
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
4099
|
+
type ApprovalSeverity = NonNullable<VariantProps<typeof cardVariants>["severity"]>;
|
|
4100
|
+
interface ApprovalCardProps extends Omit<HTMLAttributes<HTMLElement>, "title">, VariantProps<typeof cardVariants> {
|
|
4101
|
+
/** Short headline ("Run destructive command?"). */
|
|
4102
|
+
title: ReactNode;
|
|
4103
|
+
/** What is being requested (command, file path, tool name…). Renders monospace. */
|
|
4104
|
+
request: ReactNode;
|
|
4105
|
+
/** Optional explanation line under the request. */
|
|
4106
|
+
description?: ReactNode;
|
|
4107
|
+
/** Optional expandable details (e.g. full command, file diff). */
|
|
4108
|
+
details?: ReactNode;
|
|
4109
|
+
/** Pressing the primary "Approve" button. */
|
|
4110
|
+
onApprove?: () => void;
|
|
4111
|
+
/** Pressing "Deny". */
|
|
4112
|
+
onDeny?: () => void;
|
|
4113
|
+
/** Pressing "Always allow" — optional tertiary action. */
|
|
4114
|
+
onAlways?: () => void;
|
|
4115
|
+
/** Customise the icon shown in the corner. */
|
|
4116
|
+
icon?: IconComponent;
|
|
4117
|
+
}
|
|
4118
|
+
declare const ApprovalCard: react.ForwardRefExoticComponent<ApprovalCardProps & react.RefAttributes<HTMLElement>>;
|
|
4119
|
+
|
|
4120
|
+
type ComposerMode = "chat" | "code" | "infra";
|
|
4121
|
+
interface ChatComposerProps extends Omit<HTMLAttributes<HTMLFormElement>, "onSubmit"> {
|
|
4122
|
+
mode?: ComposerMode;
|
|
4123
|
+
value: string;
|
|
4124
|
+
onValueChange: (next: string) => void;
|
|
4125
|
+
onSubmit?: (value: string) => void;
|
|
4126
|
+
/**
|
|
4127
|
+
* If true, the composer is in "agent running" state — Send becomes a Stop button.
|
|
4128
|
+
*/
|
|
4129
|
+
running?: boolean;
|
|
4130
|
+
onStop?: () => void;
|
|
4131
|
+
/**
|
|
4132
|
+
* Slot above the textarea — used for the folder selector in Infra mode.
|
|
4133
|
+
*/
|
|
4134
|
+
contextSlot?: ReactNode;
|
|
4135
|
+
/**
|
|
4136
|
+
* Slot above the textarea for attachments / chips.
|
|
4137
|
+
*/
|
|
4138
|
+
attachmentsSlot?: ReactNode;
|
|
4139
|
+
/**
|
|
4140
|
+
* Slot on the bottom-left of the action row (e.g. custom toggles).
|
|
4141
|
+
* Overrides the default attach button entirely when provided.
|
|
4142
|
+
*/
|
|
4143
|
+
leadingActions?: ReactNode;
|
|
4144
|
+
/**
|
|
4145
|
+
* Slot on the bottom-right (e.g. model selector). Send/stop is appended after this.
|
|
4146
|
+
*/
|
|
4147
|
+
trailingActions?: ReactNode;
|
|
4148
|
+
/**
|
|
4149
|
+
* Optional attach-file callback. If omitted (and `leadingActions` is also
|
|
4150
|
+
* omitted), no attach button is rendered. This avoids fake affordances per
|
|
4151
|
+
* Quality Gate §7.
|
|
4152
|
+
*/
|
|
4153
|
+
onAttach?: () => void;
|
|
4154
|
+
/**
|
|
4155
|
+
* Optional voice-input callback. If omitted, no mic button is rendered.
|
|
4156
|
+
* Same rationale as `onAttach`.
|
|
4157
|
+
*/
|
|
4158
|
+
onVoiceInput?: () => void;
|
|
4159
|
+
/**
|
|
4160
|
+
* Accessible label for the textarea. Falls back to a mode-aware default.
|
|
4161
|
+
*/
|
|
4162
|
+
textareaLabel?: string;
|
|
4163
|
+
/**
|
|
4164
|
+
* Textarea placeholder. Defaults change by mode.
|
|
4165
|
+
*/
|
|
4166
|
+
placeholder?: string;
|
|
4167
|
+
/**
|
|
4168
|
+
* Extra textarea props (rows, maxLength…).
|
|
4169
|
+
*/
|
|
4170
|
+
textareaProps?: Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "value" | "onChange">;
|
|
4171
|
+
}
|
|
4172
|
+
/**
|
|
4173
|
+
* ChatComposer — message input area, shared by Chat / Code / Infra modes.
|
|
4174
|
+
*
|
|
4175
|
+
* Visual:
|
|
4176
|
+
* - chat / infra → soft card with violet ring on focus, generous padding
|
|
4177
|
+
* - code → compact dense form with mono font, slash prefix hint
|
|
4178
|
+
*
|
|
4179
|
+
* Stateless: caller controls `value` + handles `onSubmit`. Submit fires on Enter
|
|
4180
|
+
* (without Shift). Shift+Enter inserts a newline.
|
|
4181
|
+
*
|
|
4182
|
+
* Optional affordances (mic, attach) are opt-in via `onVoiceInput` / `onAttach`
|
|
4183
|
+
* — Quality Gate §7 forbids rendering fake controls without behavior.
|
|
4184
|
+
*/
|
|
4185
|
+
declare const ChatComposer: react.ForwardRefExoticComponent<ChatComposerProps & react.RefAttributes<HTMLFormElement>>;
|
|
4186
|
+
|
|
4187
|
+
/**
|
|
4188
|
+
* AgentComposer — ChatComposer + slash-command / @file / #memory triggers.
|
|
4189
|
+
*
|
|
4190
|
+
* Wraps ChatComposer and watches the value for three trigger characters:
|
|
4191
|
+
* `/` → slash commands (`/clear`, `/help`, …)
|
|
4192
|
+
* `@` → file references (`@src/components/Foo.tsx`)
|
|
4193
|
+
* `#` → memory entries (`#alignment-grid`)
|
|
4194
|
+
*
|
|
4195
|
+
* Detection is string-based — no textarea ref required. A trigger is active
|
|
4196
|
+
* iff the value ends with a token of the form `[\s|^]([/@#])[^\s]*` (i.e. a
|
|
4197
|
+
* trigger char preceded by start-of-string or whitespace, with no space
|
|
4198
|
+
* after).
|
|
4199
|
+
*
|
|
4200
|
+
* The consumer provides the candidate items per trigger. On selection the
|
|
4201
|
+
* trailing token is replaced with the chosen value plus a trailing space.
|
|
4202
|
+
*/
|
|
4203
|
+
type ItemsProvider = (query: string) => MentionItem[];
|
|
4204
|
+
interface AgentComposerProps extends ComponentProps<typeof ChatComposer> {
|
|
4205
|
+
/** Items shown when `/` is the active trigger. */
|
|
4206
|
+
commands?: MentionItem[] | ItemsProvider;
|
|
4207
|
+
/** Items shown when `@` is the active trigger. */
|
|
4208
|
+
files?: MentionItem[] | ItemsProvider;
|
|
4209
|
+
/** Items shown when `#` is the active trigger. */
|
|
4210
|
+
memories?: MentionItem[] | ItemsProvider;
|
|
4211
|
+
/**
|
|
4212
|
+
* What text gets inserted when an item is picked. Defaults to
|
|
4213
|
+
* `${trigger}${item.label}` (assumes `label` is a string). Override to
|
|
4214
|
+
* insert a token different from the visible label (e.g. include path,
|
|
4215
|
+
* id, …).
|
|
4216
|
+
*/
|
|
4217
|
+
resolveInsertText?: (item: MentionItem, trigger: MentionTrigger) => string;
|
|
4218
|
+
/** Optional slot for the empty-state copy per trigger. */
|
|
4219
|
+
emptyLabels?: Partial<Record<MentionTrigger, ReactNode>>;
|
|
4220
|
+
/** Outer wrapper className (the relative positioning anchor for the menu). */
|
|
4221
|
+
containerClassName?: string;
|
|
4222
|
+
}
|
|
4223
|
+
declare function AgentComposer({ value, onValueChange, commands, files, memories, resolveInsertText, emptyLabels, containerClassName, className, textareaProps, ...chatComposerProps }: AgentComposerProps): react.JSX.Element;
|
|
4224
|
+
|
|
4225
|
+
/**
|
|
4226
|
+
* AgentStream — the canonical conversation surface for a code agent.
|
|
4227
|
+
*
|
|
4228
|
+
* Interleaves chat messages (user + assistant), tool invocations, approval
|
|
4229
|
+
* gates, errors, and the live streaming indicator. Mirrors how Claude Code
|
|
4230
|
+
* presents work to the user: conversation-centric, tool calls embedded,
|
|
4231
|
+
* approvals pause the flow inline, errors surface where they happen.
|
|
4232
|
+
*
|
|
4233
|
+
* Items are rendered in array order. The consumer fully controls the data;
|
|
4234
|
+
* AgentStream is a pure presentational composite over its child primitives.
|
|
4235
|
+
*/
|
|
4236
|
+
interface ToolCallStreamItem {
|
|
4237
|
+
kind: "tool-call";
|
|
4238
|
+
id: string;
|
|
4239
|
+
tool: ReactNode;
|
|
4240
|
+
icon?: IconComponent;
|
|
4241
|
+
target?: ReactNode;
|
|
4242
|
+
status: ToolCallStatus;
|
|
4243
|
+
output?: ReactNode;
|
|
4244
|
+
defaultExpanded?: boolean;
|
|
4245
|
+
timestamp?: ReactNode;
|
|
4246
|
+
}
|
|
4247
|
+
interface ApprovalStreamItem {
|
|
4248
|
+
kind: "approval";
|
|
4249
|
+
id: string;
|
|
4250
|
+
severity?: ApprovalSeverity;
|
|
4251
|
+
title: ReactNode;
|
|
4252
|
+
request: ReactNode;
|
|
4253
|
+
description?: ReactNode;
|
|
4254
|
+
details?: ReactNode;
|
|
4255
|
+
onApprove?: () => void;
|
|
4256
|
+
onDeny?: () => void;
|
|
4257
|
+
onAlways?: () => void;
|
|
4258
|
+
}
|
|
4259
|
+
interface ErrorStreamItem {
|
|
4260
|
+
kind: "error";
|
|
4261
|
+
id: string;
|
|
4262
|
+
errorKind?: AgentErrorKind;
|
|
4263
|
+
title: ReactNode;
|
|
4264
|
+
detail?: ReactNode;
|
|
4265
|
+
actions?: ReactNode;
|
|
4266
|
+
timestamp?: ReactNode;
|
|
4267
|
+
}
|
|
4268
|
+
interface StreamingStreamItem {
|
|
4269
|
+
kind: "streaming";
|
|
4270
|
+
id: string;
|
|
4271
|
+
model?: ReactNode;
|
|
4272
|
+
partial?: ReactNode;
|
|
4273
|
+
}
|
|
4274
|
+
interface MessageStreamItem {
|
|
4275
|
+
kind: "message";
|
|
4276
|
+
id: string;
|
|
4277
|
+
message: UIMessage;
|
|
4278
|
+
}
|
|
4279
|
+
interface CustomStreamItem {
|
|
4280
|
+
kind: "custom";
|
|
4281
|
+
id: string;
|
|
4282
|
+
/** Arbitrary node — escape hatch for inline diff cards, etc. */
|
|
4283
|
+
node: ReactNode;
|
|
4284
|
+
}
|
|
4285
|
+
type AgentStreamItem = MessageStreamItem | ToolCallStreamItem | ApprovalStreamItem | ErrorStreamItem | StreamingStreamItem | CustomStreamItem;
|
|
4286
|
+
interface AgentStreamProps extends HTMLAttributes<HTMLDivElement> {
|
|
4287
|
+
items: AgentStreamItem[];
|
|
4288
|
+
}
|
|
4289
|
+
declare const AgentStream: react.ForwardRefExoticComponent<AgentStreamProps & react.RefAttributes<HTMLDivElement>>;
|
|
4290
|
+
|
|
4291
|
+
interface AgentTimelineProps extends HTMLAttributes<HTMLOListElement> {
|
|
4292
|
+
events: AgentEvent$1[];
|
|
4293
|
+
/**
|
|
4294
|
+
* If true, events with `detail` are collapsible.
|
|
4295
|
+
*/
|
|
4296
|
+
collapsible?: boolean;
|
|
4297
|
+
/**
|
|
4298
|
+
* Renders a vertical line connecting events. Default true.
|
|
4299
|
+
*/
|
|
4300
|
+
showLine?: boolean;
|
|
4301
|
+
}
|
|
4302
|
+
/**
|
|
4303
|
+
* AgentTimeline — vertical list of agent events.
|
|
4304
|
+
*
|
|
4305
|
+
* Visual: optional thin border-left running through the column, with each
|
|
4306
|
+
* AgentEvent slightly indented from the line. Events animate in via fade-in-up
|
|
4307
|
+
* when first mounted.
|
|
4308
|
+
*/
|
|
4309
|
+
declare const AgentTimeline: react.ForwardRefExoticComponent<AgentTimelineProps & react.RefAttributes<HTMLOListElement>>;
|
|
4310
|
+
|
|
4311
|
+
interface TaskHeaderProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
|
|
4312
|
+
title: ReactNode;
|
|
4313
|
+
status?: TaskStatus;
|
|
4314
|
+
/**
|
|
4315
|
+
* If provided, a chevron is shown next to the title and clicking it fires this callback.
|
|
4316
|
+
* Used as the "expand task metadata" affordance in the Infra shell.
|
|
4317
|
+
*/
|
|
4318
|
+
onToggle?: () => void;
|
|
4319
|
+
/** Right-side actions (e.g. cancel task, close panel). */
|
|
4320
|
+
actions?: ReactNode;
|
|
4321
|
+
}
|
|
4322
|
+
/**
|
|
4323
|
+
* TaskHeader — title bar for a task pane.
|
|
4324
|
+
*
|
|
4325
|
+
* Visual: display-md title with chevron + optional status badge with pulse + actions slot.
|
|
4326
|
+
*/
|
|
4327
|
+
declare const TaskHeader: react.ForwardRefExoticComponent<TaskHeaderProps & react.RefAttributes<HTMLElement>>;
|
|
4328
|
+
|
|
4329
|
+
interface PermissionModalLabels {
|
|
4330
|
+
/** "Cancel" button. */
|
|
4331
|
+
cancel: ReactNode;
|
|
4332
|
+
/** "Always allow" tertiary button. */
|
|
4333
|
+
always: ReactNode;
|
|
4334
|
+
/** "Allow once" primary button. */
|
|
4335
|
+
allow: ReactNode;
|
|
4336
|
+
/** Inline label rendered before the operation list inside the body card. */
|
|
4337
|
+
requestedOps: ReactNode;
|
|
4338
|
+
}
|
|
4339
|
+
interface PermissionModalProps {
|
|
4340
|
+
open: boolean;
|
|
4341
|
+
onOpenChange: (open: boolean) => void;
|
|
4342
|
+
request: PermissionRequest;
|
|
4343
|
+
/**
|
|
4344
|
+
* Fires when the user picks a decision. The modal does NOT auto-close;
|
|
4345
|
+
* caller decides whether the decision should dismiss the modal.
|
|
4346
|
+
*/
|
|
4347
|
+
onDecide: (decision: PermissionDecision) => void;
|
|
4348
|
+
/** Override the modal title. Defaults to "Allow Theo to {ops} files in {path}?". */
|
|
4349
|
+
title?: ReactNode;
|
|
4350
|
+
/** Override the modal description (body lead text). */
|
|
4351
|
+
description?: ReactNode;
|
|
4352
|
+
/** Override the verb used for each operation in the default copy. */
|
|
4353
|
+
operationLabels?: Partial<Record<PermissionOperation, string>>;
|
|
4354
|
+
/** Override button text + inline labels. Useful for i18n. */
|
|
4355
|
+
labels?: Partial<PermissionModalLabels>;
|
|
4356
|
+
}
|
|
4357
|
+
/**
|
|
4358
|
+
* PermissionModal — local-files access prompt built on Dialog.
|
|
4359
|
+
*
|
|
4360
|
+
* Three actions: Cancel (denied), Always allow, Allow once. Per WIREMOCKS §5,
|
|
4361
|
+
* the path is shown in the title (not hidden in body) and destructive
|
|
4362
|
+
* operations are listed inline.
|
|
4363
|
+
*
|
|
4364
|
+
* All visible text can be overridden via `title`, `description`,
|
|
4365
|
+
* `operationLabels`, and `labels`. Defaults are English; pass overrides for
|
|
4366
|
+
* other locales.
|
|
4367
|
+
*/
|
|
4368
|
+
declare function PermissionModal({ open, onOpenChange, request, onDecide, title, description, operationLabels, labels, }: PermissionModalProps): react.JSX.Element;
|
|
4369
|
+
|
|
4370
|
+
interface PreviewPanelProps extends Omit<HTMLAttributes<HTMLElement>, "content"> {
|
|
4371
|
+
url: string;
|
|
4372
|
+
onUrlChange?: (next: string) => void;
|
|
4373
|
+
onBack?: () => void;
|
|
4374
|
+
onForward?: () => void;
|
|
4375
|
+
onReload?: () => void;
|
|
4376
|
+
/**
|
|
4377
|
+
* Region rendered as the preview body. Typically an <iframe>.
|
|
4378
|
+
*/
|
|
4379
|
+
content: ReactNode;
|
|
4380
|
+
/**
|
|
4381
|
+
* Optional logs section rendered below the preview (e.g. dev server output).
|
|
4382
|
+
*/
|
|
4383
|
+
logsSlot?: ReactNode;
|
|
4384
|
+
}
|
|
4385
|
+
/**
|
|
4386
|
+
* PreviewPanel — browser preview with controls + integrated logs slot.
|
|
4387
|
+
*
|
|
4388
|
+
* The Code workspace shows live dev-server URL + HMR logs side-by-side; this
|
|
4389
|
+
* panel keeps both in a single card so the user doesn't switch contexts.
|
|
4390
|
+
*/
|
|
4391
|
+
declare const PreviewPanel: react.ForwardRefExoticComponent<PreviewPanelProps & react.RefAttributes<HTMLElement>>;
|
|
4392
|
+
|
|
4393
|
+
type DeploymentStatus = "queued" | "building" | "deploying" | "live" | "failed" | "cancelled";
|
|
4394
|
+
interface Deployment {
|
|
4395
|
+
id: string;
|
|
4396
|
+
status: DeploymentStatus;
|
|
4397
|
+
environment: string;
|
|
4398
|
+
branch: string;
|
|
4399
|
+
commitSha: string;
|
|
4400
|
+
commitMessage: string;
|
|
4401
|
+
author?: {
|
|
4402
|
+
name: string;
|
|
4403
|
+
avatarUrl?: string;
|
|
4404
|
+
};
|
|
4405
|
+
duration?: string;
|
|
4406
|
+
timeAgo: string;
|
|
4407
|
+
}
|
|
4408
|
+
interface DeploymentRowProps extends HTMLAttributes<HTMLDivElement> {
|
|
4409
|
+
deployment: Deployment;
|
|
4410
|
+
actions?: ReactNode;
|
|
4411
|
+
}
|
|
4412
|
+
/**
|
|
4413
|
+
* DeploymentRow — one row in a deployment list (table-ish layout).
|
|
4414
|
+
*
|
|
4415
|
+
* Inspired by Vercel/Railway deployment lists. Composes Badge + Badge.Dot for status,
|
|
4416
|
+
* mono font for SHA/branch, muted-foreground for metadata.
|
|
4417
|
+
*/
|
|
4418
|
+
declare const DeploymentRow: react.ForwardRefExoticComponent<DeploymentRowProps & react.RefAttributes<HTMLDivElement>>;
|
|
4419
|
+
|
|
4420
|
+
interface Project {
|
|
4421
|
+
id: string;
|
|
4422
|
+
name: string;
|
|
4423
|
+
description?: string;
|
|
4424
|
+
framework?: string;
|
|
4425
|
+
branch: string;
|
|
4426
|
+
commitSha: string;
|
|
4427
|
+
commitMessage?: string;
|
|
4428
|
+
status: DeploymentStatus;
|
|
4429
|
+
url?: string;
|
|
4430
|
+
region?: string;
|
|
4431
|
+
lastDeployedAt: string;
|
|
4432
|
+
}
|
|
4433
|
+
interface ProjectCardProps extends HTMLAttributes<HTMLAnchorElement | HTMLDivElement> {
|
|
4434
|
+
project: Project;
|
|
4435
|
+
href?: string;
|
|
4436
|
+
actions?: ReactNode;
|
|
4437
|
+
/**
|
|
4438
|
+
* Show the project description and commit message. Default true.
|
|
4439
|
+
*/
|
|
4440
|
+
detailed?: boolean;
|
|
4441
|
+
}
|
|
4442
|
+
/**
|
|
4443
|
+
* ProjectCard — surface for a project in a project listing.
|
|
4444
|
+
*
|
|
4445
|
+
* Light hover lift (no shadow inflation), violet ring on focus,
|
|
4446
|
+
* status badge with optional pulse, framework + region in muted footer.
|
|
4447
|
+
*/
|
|
4448
|
+
declare const ProjectCard: react.ForwardRefExoticComponent<ProjectCardProps & react.RefAttributes<HTMLElement>>;
|
|
4449
|
+
|
|
4450
|
+
type EnvScope = "production" | "staging" | "preview" | "all" | string;
|
|
4451
|
+
interface EnvVar {
|
|
4452
|
+
id: string;
|
|
4453
|
+
key: string;
|
|
4454
|
+
/**
|
|
4455
|
+
* Secret value. If `masked` is true, value is hidden by default.
|
|
4456
|
+
*/
|
|
4457
|
+
value: string;
|
|
4458
|
+
masked?: boolean;
|
|
4459
|
+
scope?: EnvScope;
|
|
4460
|
+
/**
|
|
4461
|
+
* Read-only marker (e.g. system-managed vars like THEO_DEPLOY_ID).
|
|
4462
|
+
*/
|
|
4463
|
+
readonly?: boolean;
|
|
4464
|
+
}
|
|
4465
|
+
interface EnvVarEditorProps extends HTMLAttributes<HTMLDivElement> {
|
|
4466
|
+
vars: EnvVar[];
|
|
4467
|
+
onAdd?: (entry: Omit<EnvVar, "id">) => void;
|
|
4468
|
+
onRemove?: (id: string) => void;
|
|
4469
|
+
/**
|
|
4470
|
+
* Available scope options for the add form. Defaults to a sensible PaaS set.
|
|
4471
|
+
*/
|
|
4472
|
+
scopeOptions?: EnvScope[];
|
|
4473
|
+
}
|
|
4474
|
+
/**
|
|
4475
|
+
* EnvVarEditor — table-like editor for environment variables.
|
|
4476
|
+
*
|
|
4477
|
+
* Mono font on keys/values, mask toggle on secret values, scope badge,
|
|
4478
|
+
* remove + copy actions. Add form sits above the list.
|
|
4479
|
+
*
|
|
4480
|
+
* Stateless: caller controls the list and reacts to onAdd / onRemove.
|
|
4481
|
+
*/
|
|
4482
|
+
declare const EnvVarEditor: react.ForwardRefExoticComponent<EnvVarEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
4483
|
+
|
|
4484
|
+
interface PreviewService {
|
|
4485
|
+
/** Service name e.g. "api", "web", "worker". */
|
|
4486
|
+
name: string;
|
|
4487
|
+
/** Live URL or null if not exposed (worker). */
|
|
4488
|
+
url?: string;
|
|
4489
|
+
status: DeploymentStatus;
|
|
4490
|
+
}
|
|
4491
|
+
interface PreviewEnv {
|
|
4492
|
+
id: string;
|
|
4493
|
+
prNumber: number;
|
|
4494
|
+
prTitle: string;
|
|
4495
|
+
branch: string;
|
|
4496
|
+
author?: {
|
|
4497
|
+
name: string;
|
|
4498
|
+
avatarUrl?: string;
|
|
4499
|
+
};
|
|
4500
|
+
services: PreviewService[];
|
|
4501
|
+
createdAt: string;
|
|
4502
|
+
}
|
|
4503
|
+
interface PreviewEnvCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
4504
|
+
env: PreviewEnv;
|
|
4505
|
+
actions?: ReactNode;
|
|
4506
|
+
}
|
|
4507
|
+
/**
|
|
4508
|
+
* PreviewEnvCard — preview environment card surfacing all services from one PR.
|
|
4509
|
+
*
|
|
4510
|
+
* Theo's killer feature: full-stack preview environments. The card shows:
|
|
4511
|
+
* - PR number + title at the top
|
|
4512
|
+
* - branch + author in the metadata row
|
|
4513
|
+
* - one badge per service with its own status + URL
|
|
4514
|
+
* - bottom action row (Open, Promote, Delete)
|
|
4515
|
+
*/
|
|
4516
|
+
declare const PreviewEnvCard: react.ForwardRefExoticComponent<PreviewEnvCardProps & react.RefAttributes<HTMLDivElement>>;
|
|
4517
|
+
|
|
4518
|
+
type DomainStatus = "verified" | "pending" | "invalid";
|
|
4519
|
+
interface Domain {
|
|
4520
|
+
id: string;
|
|
4521
|
+
hostname: string;
|
|
4522
|
+
status: DomainStatus;
|
|
4523
|
+
primary?: boolean;
|
|
4524
|
+
/**
|
|
4525
|
+
* TLS state. If true, certificate is provisioned & valid.
|
|
4526
|
+
*/
|
|
4527
|
+
tls?: boolean;
|
|
4528
|
+
/**
|
|
4529
|
+
* DNS record the user must add to verify ownership.
|
|
4530
|
+
*/
|
|
4531
|
+
verificationRecord?: {
|
|
4532
|
+
type: "TXT" | "CNAME" | "A";
|
|
4533
|
+
name: string;
|
|
4534
|
+
value: string;
|
|
4535
|
+
};
|
|
4536
|
+
}
|
|
4537
|
+
interface DomainConfigProps extends HTMLAttributes<HTMLDivElement> {
|
|
4538
|
+
domains: Domain[];
|
|
4539
|
+
onAdd?: (hostname: string) => void;
|
|
4540
|
+
onRemove?: (id: string) => void;
|
|
4541
|
+
onSetPrimary?: (id: string) => void;
|
|
4542
|
+
}
|
|
4543
|
+
/**
|
|
4544
|
+
* DomainConfig — manage custom domains for a project.
|
|
4545
|
+
*
|
|
4546
|
+
* Shows: hostname, status, TLS, primary flag, and verification DNS record when pending.
|
|
4547
|
+
* Common in every cloud dashboard (Vercel, Railway, Render).
|
|
4548
|
+
*/
|
|
4549
|
+
declare const DomainConfig: react.ForwardRefExoticComponent<DomainConfigProps & react.RefAttributes<HTMLDivElement>>;
|
|
4550
|
+
|
|
4551
|
+
interface RollbackTarget {
|
|
4552
|
+
id: string;
|
|
4553
|
+
version: string;
|
|
4554
|
+
commitSha: string;
|
|
4555
|
+
commitMessage: string;
|
|
4556
|
+
deployedAt: string;
|
|
4557
|
+
isCurrent?: boolean;
|
|
4558
|
+
/**
|
|
4559
|
+
* Optional duration of the deploy (e.g. "24s") for context.
|
|
4560
|
+
*/
|
|
4561
|
+
duration?: string;
|
|
4562
|
+
}
|
|
4563
|
+
interface RollbackUIProps extends HTMLAttributes<HTMLDivElement> {
|
|
4564
|
+
/**
|
|
4565
|
+
* Deployment history, newest first. The current deploy should have `isCurrent: true`.
|
|
4566
|
+
*/
|
|
4567
|
+
history: RollbackTarget[];
|
|
4568
|
+
/**
|
|
4569
|
+
* Fires when user confirms rollback to a specific target.
|
|
4570
|
+
*/
|
|
4571
|
+
onRollback?: (targetId: string) => void | Promise<void>;
|
|
4572
|
+
}
|
|
4573
|
+
/**
|
|
4574
|
+
* RollbackUI — instant rollback selector showing recent versions.
|
|
4575
|
+
*
|
|
4576
|
+
* The current deploy is marked, every other version offers a "Roll back" button.
|
|
4577
|
+
* On select, the row enters confirm state (Confirm / Cancel buttons inline) before
|
|
4578
|
+
* firing onRollback. This protects against accidental rollbacks while still being one click.
|
|
4579
|
+
*/
|
|
4580
|
+
declare const RollbackUI: react.ForwardRefExoticComponent<RollbackUIProps & react.RefAttributes<HTMLDivElement>>;
|
|
4581
|
+
|
|
4582
|
+
interface CommandItem {
|
|
4583
|
+
id: string;
|
|
4584
|
+
label: ReactNode;
|
|
4585
|
+
/** Optional secondary line (path, hint, shortcut). */
|
|
4586
|
+
hint?: ReactNode;
|
|
4587
|
+
/** Optional group name. Items with the same group are visually grouped. */
|
|
4588
|
+
group?: string;
|
|
4589
|
+
/** Optional icon. */
|
|
4590
|
+
icon?: IconComponent;
|
|
4591
|
+
/** Optional searchable plain-text used by the cmdk ranker. Falls back to `label` when string. */
|
|
4592
|
+
searchable?: string;
|
|
4593
|
+
}
|
|
4594
|
+
interface CommandPaletteProps {
|
|
4595
|
+
open: boolean;
|
|
4596
|
+
onOpenChange: (open: boolean) => void;
|
|
4597
|
+
items: CommandItem[];
|
|
4598
|
+
onSelect: (id: string) => void;
|
|
4599
|
+
placeholder?: string;
|
|
4600
|
+
emptyMessage?: ReactNode;
|
|
4601
|
+
/**
|
|
4602
|
+
* Optional custom filter score (0 = no match, > 0 = match). Receives the
|
|
4603
|
+
* `value` (the item's searchable text) and the current `search` query.
|
|
4604
|
+
* Defaults to cmdk's built-in fuzzy ranker which prioritizes substring +
|
|
4605
|
+
* word-boundary + consecutive matches.
|
|
4606
|
+
*/
|
|
4607
|
+
filter?: (value: string, search: string) => number;
|
|
4608
|
+
}
|
|
4609
|
+
/**
|
|
4610
|
+
* CommandPalette — Cmd+K-style global launcher with full keyboard navigation.
|
|
4611
|
+
*
|
|
4612
|
+
* Built on `cmdk` (the de-facto shadcn pattern) + Theo Dialog. Provides
|
|
4613
|
+
* out-of-the-box: ArrowUp/ArrowDown navigation, Enter selection, Escape close,
|
|
4614
|
+
* Home/End, active-item highlight via `data-selected`, and fuzzy ranking.
|
|
4615
|
+
*
|
|
4616
|
+
* Stateless: caller owns `open` / `onOpenChange` / `items`. Selecting an item
|
|
4617
|
+
* fires `onSelect(id)` and closes the dialog.
|
|
4618
|
+
*/
|
|
4619
|
+
declare function CommandPalette({ open, onOpenChange, items, onSelect, placeholder, emptyMessage, filter, }: CommandPaletteProps): react.JSX.Element;
|
|
4620
|
+
|
|
4621
|
+
export { ALL_MODES, AccountMenu, type AccountMenuProps, ActionBar, type ActionBarProps, AgentComposer, type AgentDraft, AgentEditor, AgentErrorCard, type AgentErrorKind, AgentEvent, type AgentEvent$1 as AgentEventModel, type AgentEventStatus, type AgentEventType, AgentHandoff, AgentProfile, type AgentProfileDescriptor, AgentStartingState, AgentStream, type AgentStreamItem, AgentStreaming, AgentTimeline, Alert, type AlertIntent, type AlertProps, ApprovalCard, type ApprovalSeverity, ArtifactPreview, type Attachment, AttachmentChip, type AuditActorKind, type AuditEntry, AuditLogEntry, type AuditSeverity, AutoCompactNotice, Avatar, BadgeWithDot as Badge, type BadgeProps, BranchIndicator, type BranchIndicatorProps, BrowserControls, BuildLogStream, Button, type ButtonProps, type Capability, CapabilityIndicator, type CapabilityState, Card, type Channel, ChannelCard, type ChannelPlatform, type ChannelStatus, ChatComposer, ChatMessage, ChatMessageAction, type ChatMessageActionProps, ChatMessageActions, type ChatMessageActionsProps, ChatMessageBranch, ChatMessageBranchContent, type ChatMessageBranchContentProps, ChatMessageBranchNext, type ChatMessageBranchNextProps, ChatMessageBranchPage, type ChatMessageBranchPageProps, ChatMessageBranchPrevious, type ChatMessageBranchPreviousProps, type ChatMessageBranchProps, ChatMessageBranchSelector, type ChatMessageBranchSelectorProps, ChatMessageContent, type ChatMessageContentProps, type ChatMessageContentVariant, type ChatMessageProps, ChatMessageResponse, type ChatMessageResponseProps, ChatMessageRoot, type ChatMessageRootProps, ChatMessageToolbar, type ChatMessageToolbarProps, ChatThread, Checkbox, CodeBlock, type CodeBlockProps, type ColorScale, type CommandItem, CommandPalette, type ComposerMode, ConfirmDialog, type ConfirmDialogProps, ContextCard, ContextWindowBar, CopyButton, type CopyButtonProps, CostMeter, type CreatedFile, CreatedFilesCard, type CronJob, CronJobCard, type CronJobStatus, CronJobsList, type CustomContentUIPart, DangerZone, type DangerZoneActionProps, type DangerZoneProps, DataPart, type DataPartProps, type DataRenderer, type DataRendererMap, DataTable, type DataTableColumn, type DataTableProps, type DataTableSort, type DataUIPart, type DefineThemeInput, type Density, type DensityContextValue, type Deployment, DeploymentRow, type DeploymentStatus, Dialog, type DiffHunk, type DiffLine, type DiffLineKind, DiffViewer, type Domain, DomainConfig, type DomainStatus, DropdownMenu, EmptyState, type EnvScope, type EnvVar, EnvVarEditor, ExportChatDialog, type ExportChatDialogProps, type ExportFormat, FilePart, type FilePartProps, type FileUIPart, FolderContextCard, type FolderEntry, FolderSelector, FormField, type GatewayStatus, GatewayStatusIndicator, type GatewayStatusIndicatorProps, HOOK_EVENTS, type HandoffParty, HookConfig, type HookEntry, type HookEvent, type HookEventEntry, HookEventLog, type HookEventResult, Input, type InputProps, type IntentOption, IntentSelector, Label$1 as Label, type Lane, LaneBoard, type LaneCard, type LaneState, type LogLevel, type LogLine, LoginSplit, type MCPServer, MCPServerCard, MCPServerList, type MCPServerStatus, MODE_LABEL, MemoryEditor, type MemoryLayer, type MemoryScope, type MentionItem, MentionMenu, type MentionTrigger, type MessageRole, type Metric, MetricsPanel, type Mode, type ModelCapabilityFlag, ModelCard, type ModelInfo, type ModelOption, ModelSelector, PageShell, type PageShellProps, Pagination, type PaginationProps, type PartRendererMap, type PermissionDecision, type PermissionDecisionKind, PermissionMatrix, PermissionModal, type PermissionOperation, type PermissionRequest, type PermissionRule, PinInput, type PinInputProps, PlanBadge, type PlanBadgeProps, type PlanNode, type PlanNodeStatus, type PlanTier, type PreviewEnv, PreviewEnvCard, PreviewPanel, type PreviewService, Progress, ProgressChecklist, type ProgressProps, type Project, ProjectCard, type ProjectStatus, ProjectSwitcher, type ProviderMetadata, type QuickAction, QuickActionChips, RadioGroup$1 as RadioGroup, type RailStep, type ReasoningFileUIPart, ReasoningPart, type ReasoningPartProps, type ReasoningUIPart, type RecentFolder, RecentFoldersList, type RenderPartOptions, type RollbackTarget, RollbackUI, type Rule, RuleCard, RuleEditor, type RuleScope, type RuleState, RunStats, type RunStatus, RunStatusPill, type RunStatusPillProps, type RunningTaskItem, type RunningTaskStatus, RunningTasksPanel, ScrollArea, Select, SessionListItem, type SessionMode, type SessionRunStatus, type SessionStatus, type SessionSummary, SessionTimeline, Sheet, Sidebar, Skeleton, type Skill, SkillCard, SkillEditor, type SkillSource, type SkillState, SkillsList, SocialAuthRow, type SocialProvider, SourceDocumentPart, type SourceDocumentPartProps, type SourceDocumentUIPart, SourceUrlPart, type SourceUrlPartProps, type SourceUrlUIPart, type StabilityBundle, StabilityBundleViewer, type StabilityBundleViewerProps, type StabilitySeverity, StatTile, type StatTileProps, StatusDot, type StatusDotProps, type StatusKind, type StepStartUIPart, StepsRail, SubAgentDispatch, type SubAgentRun, type SubAgentState, Switch, SystemPromptEditor, Table, type TableCellProps, type TableHeaderCellProps, type TableProps, Tabs, TaskHeader, TaskNode, TaskPlan, type TaskSource, type TaskStatus, type TaskStep, type TaskStepStatus, type TerminalLine, TerminalPanel, TextPart, type TextPartProps, type TextUIPart, Textarea, type TextareaProps, type Theme, type ThemeFonts, type ThemeMode, ThemeProvider, ThemeScript, ThemeSwitcher, TheoUIProvider, type TheoUIProviderProps, type ThinkingLevel, type ThinkingLevelOrInherited, ThinkingLevelSelector, type ThinkingLevelSelectorProps, Timestamp, type TimestampProps, Toast, type ToastVariant, Toaster, TokenUsageChart, type TokenUsagePoint, ToolCall, ToolCallCard, ToolCallPart, type ToolCallPartProps, type ToolCallStatus, type ToolEnablement, type ToolEntry, type ToolInvocationState, ToolResult, type ToolUIPart, ToolsList, TooltipWithStatics as Tooltip, TopNav, type UIMessage, type UIMessagePart, UpdateBanner, type UpdateBannerProps, UsageMeter, type UsageMeterProps, type UsageMetric, anthropicStyle, auroraTerminal, avatarVariants, badgeVariants, builtinThemes, buttonVariants, capabilityPresets, classicPaper, cn, computePageRange, defineTheme, dracula, githubDark, hex, isCustomContentUIPart, isDataUIPart, isFileUIPart, isReasoningFileUIPart, isReasoningUIPart, isSourceDocumentUIPart, isSourceUrlUIPart, isStepStartUIPart, isTextUIPart, isToolUIPart, linearGlass, modelCapabilityPresets, oneDark, openaiStyle, renderPart, rgb, sheetVariants, useDensity, useTheme, useToast, vercelMono, violetForge };
|