@usetheo/ui 0.13.0 → 0.13.1
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 +541 -69
- package/DESIGN.md +18 -18
- package/NOTICE +2 -2
- package/README.md +54 -52
- package/dist/chunk-23YEYNDS.js +89 -0
- package/dist/chunk-23YEYNDS.js.map +1 -0
- package/dist/chunk-25KBUQEQ.js +95 -0
- package/dist/chunk-25KBUQEQ.js.map +1 -0
- package/dist/chunk-2A3E5Y72.js +165 -0
- package/dist/chunk-2A3E5Y72.js.map +1 -0
- package/dist/chunk-2EUKYGH5.js +98 -0
- package/dist/chunk-2EUKYGH5.js.map +1 -0
- package/dist/chunk-2NZYMQKT.js +56 -0
- package/dist/chunk-2NZYMQKT.js.map +1 -0
- package/dist/chunk-2OVFVPSZ.js +26 -0
- package/dist/chunk-2OVFVPSZ.js.map +1 -0
- package/dist/chunk-2UP7SECE.js +78 -0
- package/dist/chunk-2UP7SECE.js.map +1 -0
- package/dist/chunk-33ETHPT7.js +112 -0
- package/dist/chunk-33ETHPT7.js.map +1 -0
- package/dist/chunk-33IIDFSM.js +43 -0
- package/dist/chunk-33IIDFSM.js.map +1 -0
- package/dist/chunk-345HYADQ.js +88 -0
- package/dist/chunk-345HYADQ.js.map +1 -0
- package/dist/chunk-3ZXZGZOX.js +57 -0
- package/dist/chunk-3ZXZGZOX.js.map +1 -0
- package/dist/chunk-45FWKR23.js +62 -0
- package/dist/chunk-45FWKR23.js.map +1 -0
- package/dist/chunk-4DTLUBRW.js +122 -0
- package/dist/chunk-4DTLUBRW.js.map +1 -0
- package/dist/chunk-4EH6F54D.js +69 -0
- package/dist/chunk-4EH6F54D.js.map +1 -0
- package/dist/chunk-4EKF4EIE.js +140 -0
- package/dist/chunk-4EKF4EIE.js.map +1 -0
- package/dist/chunk-4SMYNLTA.js +83 -0
- package/dist/chunk-4SMYNLTA.js.map +1 -0
- package/dist/chunk-4UBFLXS3.js +35 -0
- package/dist/chunk-4UBFLXS3.js.map +1 -0
- package/dist/chunk-52J7SDYH.js +48 -0
- package/dist/chunk-52J7SDYH.js.map +1 -0
- package/dist/chunk-5XCTTXC3.js +180 -0
- package/dist/chunk-5XCTTXC3.js.map +1 -0
- package/dist/chunk-624AATQZ.js +77 -0
- package/dist/chunk-624AATQZ.js.map +1 -0
- package/dist/chunk-6IODJQWC.js +47 -0
- package/dist/chunk-6IODJQWC.js.map +1 -0
- package/dist/chunk-75IDWFYX.js +134 -0
- package/dist/chunk-75IDWFYX.js.map +1 -0
- package/dist/chunk-7BGCWJQR.js +113 -0
- package/dist/chunk-7BGCWJQR.js.map +1 -0
- package/dist/chunk-7BQXMG2A.js +93 -0
- package/dist/chunk-7BQXMG2A.js.map +1 -0
- package/dist/chunk-7RFWVNQA.js +47 -0
- package/dist/chunk-7RFWVNQA.js.map +1 -0
- package/dist/chunk-7T4NK6W6.js +192 -0
- package/dist/chunk-7T4NK6W6.js.map +1 -0
- package/dist/chunk-A3OU6ICP.js +91 -0
- package/dist/chunk-A3OU6ICP.js.map +1 -0
- package/dist/chunk-ABBXLAJW.js +74 -0
- package/dist/chunk-ABBXLAJW.js.map +1 -0
- package/dist/chunk-AENNHS3S.js +83 -0
- package/dist/chunk-AENNHS3S.js.map +1 -0
- package/dist/chunk-AXNJFBYX.js +136 -0
- package/dist/chunk-AXNJFBYX.js.map +1 -0
- package/dist/chunk-AXUAQM45.js +154 -0
- package/dist/chunk-AXUAQM45.js.map +1 -0
- package/dist/chunk-B2FL7KBJ.js +65 -0
- package/dist/chunk-B2FL7KBJ.js.map +1 -0
- package/dist/chunk-BE232OKN.js +42 -0
- package/dist/chunk-BE232OKN.js.map +1 -0
- package/dist/chunk-BP4RQSX7.js +200 -0
- package/dist/chunk-BP4RQSX7.js.map +1 -0
- package/dist/chunk-BPJ3RN3U.js +112 -0
- package/dist/chunk-BPJ3RN3U.js.map +1 -0
- package/dist/chunk-BSF4Y4UT.js +77 -0
- package/dist/chunk-BSF4Y4UT.js.map +1 -0
- package/dist/chunk-BWIDDAR7.js +86 -0
- package/dist/chunk-BWIDDAR7.js.map +1 -0
- package/dist/chunk-BYUWQ6OP.js +45 -0
- package/dist/chunk-BYUWQ6OP.js.map +1 -0
- package/dist/chunk-C5ULP2P5.js +140 -0
- package/dist/chunk-C5ULP2P5.js.map +1 -0
- package/dist/chunk-CCG7PXLX.js +24 -0
- package/dist/chunk-CCG7PXLX.js.map +1 -0
- package/dist/chunk-CED2LKHI.js +117 -0
- package/dist/chunk-CED2LKHI.js.map +1 -0
- package/dist/chunk-CGWIOIEO.js +27 -0
- package/dist/chunk-CGWIOIEO.js.map +1 -0
- package/dist/chunk-CSEGVTKO.js +110 -0
- package/dist/chunk-CSEGVTKO.js.map +1 -0
- package/dist/chunk-CVFSNA4K.js +716 -0
- package/dist/chunk-CVFSNA4K.js.map +1 -0
- package/dist/chunk-E26M7ATD.js +61 -0
- package/dist/chunk-E26M7ATD.js.map +1 -0
- package/dist/chunk-E63IRXZZ.js +78 -0
- package/dist/chunk-E63IRXZZ.js.map +1 -0
- package/dist/chunk-ESJUISWY.js +45 -0
- package/dist/chunk-ESJUISWY.js.map +1 -0
- package/dist/chunk-ET7A3TQZ.js +158 -0
- package/dist/chunk-ET7A3TQZ.js.map +1 -0
- package/dist/chunk-ETTL6XGU.js +139 -0
- package/dist/chunk-ETTL6XGU.js.map +1 -0
- package/dist/chunk-EWDN56AS.js +24 -0
- package/dist/chunk-EWDN56AS.js.map +1 -0
- package/dist/chunk-FJZKA2LV.js +165 -0
- package/dist/chunk-FJZKA2LV.js.map +1 -0
- package/dist/chunk-G2WCT6PJ.js +69 -0
- package/dist/chunk-G2WCT6PJ.js.map +1 -0
- package/dist/chunk-GC52HWIL.js +41 -0
- package/dist/chunk-GC52HWIL.js.map +1 -0
- package/dist/chunk-GCKFA7X7.js +83 -0
- package/dist/chunk-GCKFA7X7.js.map +1 -0
- package/dist/chunk-GDMCDW66.js +19 -0
- package/dist/chunk-GDMCDW66.js.map +1 -0
- package/dist/chunk-GIXHBTHH.js +59 -0
- package/dist/chunk-GIXHBTHH.js.map +1 -0
- package/dist/chunk-GLEOUWPN.js +108 -0
- package/dist/chunk-GLEOUWPN.js.map +1 -0
- package/dist/chunk-GLRUM43F.js +121 -0
- package/dist/chunk-GLRUM43F.js.map +1 -0
- package/dist/chunk-H3L7WZDZ.js +74 -0
- package/dist/chunk-H3L7WZDZ.js.map +1 -0
- package/dist/chunk-H55WXDME.js +45 -0
- package/dist/chunk-H55WXDME.js.map +1 -0
- package/dist/chunk-H5QPJNVD.js +98 -0
- package/dist/chunk-H5QPJNVD.js.map +1 -0
- package/dist/chunk-HB45JHMM.js +43 -0
- package/dist/chunk-HB45JHMM.js.map +1 -0
- package/dist/chunk-HETHTYEZ.js +80 -0
- package/dist/chunk-HETHTYEZ.js.map +1 -0
- package/dist/chunk-HHSKNB32.js +55 -0
- package/dist/chunk-HHSKNB32.js.map +1 -0
- package/dist/chunk-HILOUYES.js +151 -0
- package/dist/chunk-HILOUYES.js.map +1 -0
- package/dist/chunk-HTJVHFNW.js +178 -0
- package/dist/chunk-HTJVHFNW.js.map +1 -0
- package/dist/chunk-HZ7Z22VW.js +130 -0
- package/dist/chunk-HZ7Z22VW.js.map +1 -0
- package/dist/chunk-JFKBFQA5.js +129 -0
- package/dist/chunk-JFKBFQA5.js.map +1 -0
- package/dist/chunk-JIZKW3WC.js +74 -0
- package/dist/chunk-JIZKW3WC.js.map +1 -0
- package/dist/chunk-JQTCCKZA.js +154 -0
- package/dist/chunk-JQTCCKZA.js.map +1 -0
- package/dist/chunk-JR4H3FJ2.js +74 -0
- package/dist/chunk-JR4H3FJ2.js.map +1 -0
- package/dist/chunk-JRW53TVG.js +53 -0
- package/dist/chunk-JRW53TVG.js.map +1 -0
- package/dist/chunk-JXOCE27Z.js +82 -0
- package/dist/chunk-JXOCE27Z.js.map +1 -0
- package/dist/chunk-JYW5YNF7.js +188 -0
- package/dist/chunk-JYW5YNF7.js.map +1 -0
- package/dist/chunk-K72DJOXR.js +81 -0
- package/dist/chunk-K72DJOXR.js.map +1 -0
- package/dist/chunk-KDE3NYTI.js +144 -0
- package/dist/chunk-KDE3NYTI.js.map +1 -0
- package/dist/chunk-KFUFTZLS.js +111 -0
- package/dist/chunk-KFUFTZLS.js.map +1 -0
- package/dist/chunk-KHBXI6AV.js +149 -0
- package/dist/chunk-KHBXI6AV.js.map +1 -0
- package/dist/chunk-M74ZYBOK.js +93 -0
- package/dist/chunk-M74ZYBOK.js.map +1 -0
- package/dist/chunk-ML7WLNIK.js +11 -0
- package/dist/chunk-ML7WLNIK.js.map +1 -0
- package/dist/chunk-MXB2GVEQ.js +57 -0
- package/dist/chunk-MXB2GVEQ.js.map +1 -0
- package/dist/chunk-NEMXW2LB.js +102 -0
- package/dist/chunk-NEMXW2LB.js.map +1 -0
- package/dist/chunk-OJPPSJMF.js +65 -0
- package/dist/chunk-OJPPSJMF.js.map +1 -0
- package/dist/chunk-OMR6ZGME.js +63 -0
- package/dist/chunk-OMR6ZGME.js.map +1 -0
- package/dist/chunk-ORVYP73T.js +223 -0
- package/dist/chunk-ORVYP73T.js.map +1 -0
- package/dist/chunk-OZFUUO2Q.js +50 -0
- package/dist/chunk-OZFUUO2Q.js.map +1 -0
- package/dist/chunk-P44UAK45.js +115 -0
- package/dist/chunk-P44UAK45.js.map +1 -0
- package/dist/chunk-PJUP4BJD.js +116 -0
- package/dist/chunk-PJUP4BJD.js.map +1 -0
- package/dist/chunk-PJWYIOY4.js +3 -0
- package/dist/chunk-PJWYIOY4.js.map +1 -0
- package/dist/chunk-PVCW4O37.js +147 -0
- package/dist/chunk-PVCW4O37.js.map +1 -0
- package/dist/chunk-PXT47DRZ.js +59 -0
- package/dist/chunk-PXT47DRZ.js.map +1 -0
- package/dist/chunk-PZGUZHI7.js +142 -0
- package/dist/chunk-PZGUZHI7.js.map +1 -0
- package/dist/chunk-Q2BAL2PF.js +965 -0
- package/dist/chunk-Q2BAL2PF.js.map +1 -0
- package/dist/chunk-QBUTRD2M.js +58 -0
- package/dist/chunk-QBUTRD2M.js.map +1 -0
- package/dist/chunk-QCQTTOMD.js +236 -0
- package/dist/chunk-QCQTTOMD.js.map +1 -0
- package/dist/chunk-QNYOIVQ4.js +36 -0
- package/dist/chunk-QNYOIVQ4.js.map +1 -0
- package/dist/chunk-QPURZJJM.js +88 -0
- package/dist/chunk-QPURZJJM.js.map +1 -0
- package/dist/chunk-QRXIYPWP.js +121 -0
- package/dist/chunk-QRXIYPWP.js.map +1 -0
- package/dist/chunk-QV4BQRNH.js +29 -0
- package/dist/chunk-QV4BQRNH.js.map +1 -0
- package/dist/chunk-REFY5MLN.js +212 -0
- package/dist/chunk-REFY5MLN.js.map +1 -0
- package/dist/chunk-RJ6RAMKH.js +89 -0
- package/dist/chunk-RJ6RAMKH.js.map +1 -0
- package/dist/chunk-RJBCTMVW.js +59 -0
- package/dist/chunk-RJBCTMVW.js.map +1 -0
- package/dist/chunk-RLWULF5B.js +113 -0
- package/dist/chunk-RLWULF5B.js.map +1 -0
- package/dist/chunk-RPZMFGYI.js +31 -0
- package/dist/chunk-RPZMFGYI.js.map +1 -0
- package/dist/chunk-RQT5DWGG.js +34 -0
- package/dist/chunk-RQT5DWGG.js.map +1 -0
- package/dist/chunk-SBKVVVYY.js +89 -0
- package/dist/chunk-SBKVVVYY.js.map +1 -0
- package/dist/chunk-SOJW47EZ.js +70 -0
- package/dist/chunk-SOJW47EZ.js.map +1 -0
- package/dist/chunk-SQ66DCXY.js +35 -0
- package/dist/chunk-SQ66DCXY.js.map +1 -0
- package/dist/chunk-SXKGWHAM.js +179 -0
- package/dist/chunk-SXKGWHAM.js.map +1 -0
- package/dist/chunk-T2OKGV6M.js +13 -0
- package/dist/chunk-T2OKGV6M.js.map +1 -0
- package/dist/chunk-TJLULCZW.js +108 -0
- package/dist/chunk-TJLULCZW.js.map +1 -0
- package/dist/chunk-TY6NTWN5.js +29 -0
- package/dist/chunk-TY6NTWN5.js.map +1 -0
- package/dist/chunk-U3AEEFVB.js +152 -0
- package/dist/chunk-U3AEEFVB.js.map +1 -0
- package/dist/chunk-V3HFDVZ3.js +102 -0
- package/dist/chunk-V3HFDVZ3.js.map +1 -0
- package/dist/chunk-V6H2RUVP.js +77 -0
- package/dist/chunk-V6H2RUVP.js.map +1 -0
- package/dist/chunk-VB53UMAL.js +106 -0
- package/dist/chunk-VB53UMAL.js.map +1 -0
- package/dist/chunk-VBEMLZGX.js +86 -0
- package/dist/chunk-VBEMLZGX.js.map +1 -0
- package/dist/chunk-VBQFE5RV.js +92 -0
- package/dist/chunk-VBQFE5RV.js.map +1 -0
- package/dist/chunk-VHK2OUCW.js +38 -0
- package/dist/chunk-VHK2OUCW.js.map +1 -0
- package/dist/chunk-VHTAVROO.js +53 -0
- package/dist/chunk-VHTAVROO.js.map +1 -0
- package/dist/chunk-VZX4HLBM.js +84 -0
- package/dist/chunk-VZX4HLBM.js.map +1 -0
- package/dist/chunk-W47V2F3Q.js +115 -0
- package/dist/chunk-W47V2F3Q.js.map +1 -0
- package/dist/chunk-W7I3ZX66.js +76 -0
- package/dist/chunk-W7I3ZX66.js.map +1 -0
- package/dist/chunk-WD42UBGR.js +64 -0
- package/dist/chunk-WD42UBGR.js.map +1 -0
- package/dist/chunk-XC7SYZYR.js +86 -0
- package/dist/chunk-XC7SYZYR.js.map +1 -0
- package/dist/chunk-XJA4B3F5.js +68 -0
- package/dist/chunk-XJA4B3F5.js.map +1 -0
- package/dist/chunk-XSENM65D.js +128 -0
- package/dist/chunk-XSENM65D.js.map +1 -0
- package/dist/chunk-YD2QEVHO.js +68 -0
- package/dist/chunk-YD2QEVHO.js.map +1 -0
- package/dist/chunk-YDKRUSB5.js +35 -0
- package/dist/chunk-YDKRUSB5.js.map +1 -0
- package/dist/chunk-YES6SPDT.js +55 -0
- package/dist/chunk-YES6SPDT.js.map +1 -0
- package/dist/chunk-YNDHYMPI.js +46 -0
- package/dist/chunk-YNDHYMPI.js.map +1 -0
- package/dist/chunk-YO3WEMOH.js +130 -0
- package/dist/chunk-YO3WEMOH.js.map +1 -0
- package/dist/chunk-YUFFAWNB.js +90 -0
- package/dist/chunk-YUFFAWNB.js.map +1 -0
- package/dist/chunk-YVXMWUWD.js +118 -0
- package/dist/chunk-YVXMWUWD.js.map +1 -0
- package/dist/chunk-Z6HZMGO2.js +106 -0
- package/dist/chunk-Z6HZMGO2.js.map +1 -0
- package/dist/chunk-ZAMPCRFJ.js +121 -0
- package/dist/chunk-ZAMPCRFJ.js.map +1 -0
- package/dist/chunk-ZEFOXF2I.js +87 -0
- package/dist/chunk-ZEFOXF2I.js.map +1 -0
- package/dist/chunk-ZJXOHLQE.js +66 -0
- package/dist/chunk-ZJXOHLQE.js.map +1 -0
- package/dist/chunk-ZPURFK4C.js +203 -0
- package/dist/chunk-ZPURFK4C.js.map +1 -0
- package/dist/chunk-ZZZIOTLC.js +89 -0
- package/dist/chunk-ZZZIOTLC.js.map +1 -0
- package/dist/components/composites/account-menu/account-menu.d.ts +43 -0
- package/dist/components/composites/account-menu/index.d.ts +1 -0
- package/dist/components/composites/agent-composer/agent-composer.d.ts +41 -0
- package/dist/components/composites/agent-composer/index.d.ts +1 -0
- package/dist/components/composites/agent-editor/agent-editor.d.ts +31 -0
- package/dist/components/composites/agent-editor/index.d.ts +1 -0
- package/dist/components/composites/agent-stream/agent-stream.d.ts +72 -0
- package/dist/components/composites/agent-stream/index.d.ts +2 -0
- package/dist/components/composites/agent-stream/to-agent-stream-items.d.ts +32 -0
- package/dist/components/composites/agent-timeline/agent-timeline.d.ts +22 -0
- package/dist/components/composites/agent-timeline/index.d.ts +1 -0
- package/dist/components/composites/agent-tool-renderer/agent-tool-renderer.d.ts +60 -0
- package/dist/components/composites/agent-tool-renderer/index.d.ts +1 -0
- package/dist/components/composites/agent-tool-renderer/tool-call-part.d.ts +5 -0
- package/dist/components/composites/approval-card/approval-card.d.ts +35 -0
- package/dist/components/composites/approval-card/index.d.ts +1 -0
- package/dist/components/composites/chat-composer/chat-composer.d.ts +68 -0
- package/dist/components/composites/chat-composer/index.d.ts +1 -0
- package/dist/components/composites/chat-message/chat-message-actions.d.ts +22 -0
- package/dist/components/composites/chat-message/chat-message-branch.d.ts +17 -0
- package/dist/components/composites/chat-message/chat-message-response.d.ts +15 -0
- package/dist/components/composites/chat-message/chat-message-toolbar.d.ts +7 -0
- package/dist/components/composites/chat-message/chat-message.d.ts +94 -0
- package/dist/components/composites/chat-message/index.d.ts +23 -0
- package/dist/components/composites/chat-message/parts/data-part.d.ts +9 -0
- package/dist/components/composites/chat-message/parts/file-part.d.ts +5 -0
- package/dist/components/composites/chat-message/parts/reasoning-part.d.ts +7 -0
- package/dist/components/composites/chat-message/parts/source-part.d.ts +9 -0
- package/dist/components/composites/chat-message/parts/text-part.d.ts +11 -0
- package/dist/components/composites/choice-prompt/choice-prompt.d.ts +65 -0
- package/dist/components/composites/choice-prompt/index.d.ts +2 -0
- package/dist/components/composites/code-block/code-block.d.ts +29 -0
- package/dist/components/composites/code-block/index.d.ts +1 -0
- package/dist/components/composites/command-palette/command-palette.d.ts +41 -0
- package/dist/components/composites/command-palette/index.d.ts +1 -0
- package/dist/components/composites/confirm-dialog/confirm-dialog.d.ts +41 -0
- package/dist/components/composites/confirm-dialog/index.d.ts +1 -0
- package/dist/components/composites/confirm-prompt/confirm-prompt.d.ts +31 -0
- package/dist/components/composites/confirm-prompt/index.d.ts +1 -0
- package/dist/components/composites/cron-jobs-list/cron-jobs-list.d.ts +15 -0
- package/dist/components/composites/cron-jobs-list/index.d.ts +1 -0
- package/dist/components/composites/data-table/data-table.d.ts +63 -0
- package/dist/components/composites/data-table/index.d.ts +1 -0
- package/dist/components/composites/deployment-row/deployment-row.d.ts +28 -0
- package/dist/components/composites/deployment-row/index.d.ts +1 -0
- package/dist/components/composites/domain-config/domain-config.d.ts +34 -0
- package/dist/components/composites/domain-config/index.d.ts +1 -0
- package/dist/components/composites/env-var-editor/env-var-editor.d.ts +35 -0
- package/dist/components/composites/env-var-editor/index.d.ts +1 -0
- package/dist/components/composites/mcp-server-list/index.d.ts +1 -0
- package/dist/components/composites/mcp-server-list/mcp-server-list.d.ts +15 -0
- package/dist/components/composites/metric-card/index.d.ts +2 -0
- package/dist/components/composites/metric-card/metric-card.d.ts +46 -0
- package/dist/components/composites/multi-select-prompt/index.d.ts +1 -0
- package/dist/components/composites/multi-select-prompt/multi-select-prompt.d.ts +61 -0
- package/dist/components/composites/page-shell/index.d.ts +1 -0
- package/dist/components/composites/page-shell/page-shell.d.ts +68 -0
- package/dist/components/composites/permission-modal/index.d.ts +1 -0
- package/dist/components/composites/permission-modal/permission-modal.d.ts +48 -0
- package/dist/components/composites/preview-env-card/index.d.ts +1 -0
- package/dist/components/composites/preview-env-card/preview-env-card.d.ts +36 -0
- package/dist/components/composites/preview-panel/index.d.ts +1 -0
- package/dist/components/composites/preview-panel/preview-panel.d.ts +24 -0
- package/dist/components/composites/project-card/index.d.ts +1 -0
- package/dist/components/composites/project-card/project-card.d.ts +32 -0
- package/dist/components/composites/rollback-ui/index.d.ts +1 -0
- package/dist/components/composites/rollback-ui/rollback-ui.d.ts +32 -0
- package/dist/components/composites/rule-editor/index.d.ts +1 -0
- package/dist/components/composites/rule-editor/rule-editor.d.ts +18 -0
- package/dist/components/composites/skill-editor/index.d.ts +1 -0
- package/dist/components/composites/skill-editor/skill-editor.d.ts +19 -0
- package/dist/components/composites/skills-list/index.d.ts +1 -0
- package/dist/components/composites/skills-list/skills-list.d.ts +15 -0
- package/dist/components/composites/slide-deck/context.d.ts +23 -0
- package/dist/components/composites/slide-deck/controls.d.ts +8 -0
- package/dist/components/composites/slide-deck/fragments.d.ts +20 -0
- package/dist/components/composites/slide-deck/index.d.ts +21 -0
- package/dist/components/composites/slide-deck/notes.d.ts +14 -0
- package/dist/components/composites/slide-deck/presenter-view.d.ts +15 -0
- package/dist/components/composites/slide-deck/print-styles.d.ts +21 -0
- package/dist/components/composites/slide-deck/progress-bar.d.ts +8 -0
- package/dist/components/composites/slide-deck/schema.d.ts +31 -0
- package/dist/components/composites/slide-deck/slide-deck.d.ts +78 -0
- package/dist/components/composites/slide-deck/slide-number.d.ts +11 -0
- package/dist/components/composites/slide-deck/split-deck.d.ts +2 -0
- package/dist/components/composites/slide-deck/thumbnails.d.ts +19 -0
- package/dist/components/composites/slide-deck/use-deck-hash-routing.d.ts +23 -0
- package/dist/components/composites/slide-deck/use-deck-keyboard.d.ts +25 -0
- package/dist/components/composites/slide-deck/use-deck-state.d.ts +57 -0
- package/dist/components/composites/slide-deck/use-deck-swipe.d.ts +20 -0
- package/dist/components/composites/slide-deck/use-fullscreen.d.ts +18 -0
- package/dist/components/composites/stability-bundle-viewer/index.d.ts +1 -0
- package/dist/components/composites/stability-bundle-viewer/stability-bundle-viewer.d.ts +28 -0
- package/dist/components/composites/status-indicator/index.d.ts +2 -0
- package/dist/components/composites/status-indicator/status-indicator.d.ts +31 -0
- package/dist/components/composites/task-header/index.d.ts +1 -0
- package/dist/components/composites/task-header/task-header.d.ts +20 -0
- package/dist/components/composites/text-prompt/index.d.ts +1 -0
- package/dist/components/composites/text-prompt/text-prompt.d.ts +48 -0
- package/dist/components/composites/usage-meter/index.d.ts +1 -0
- package/dist/components/composites/usage-meter/usage-meter.d.ts +56 -0
- package/dist/components/primitives/action-bar/action-bar.d.ts +34 -0
- package/dist/components/primitives/action-bar/index.d.ts +1 -0
- package/dist/components/primitives/agent-error-card/agent-error-card.d.ts +47 -0
- package/dist/components/primitives/agent-error-card/index.d.ts +1 -0
- package/dist/components/primitives/agent-event/agent-event.d.ts +25 -0
- package/dist/components/primitives/agent-event/index.d.ts +1 -0
- package/dist/components/primitives/agent-handoff/agent-handoff.d.ts +24 -0
- package/dist/components/primitives/agent-handoff/index.d.ts +1 -0
- package/dist/components/primitives/agent-profile/agent-profile.d.ts +28 -0
- package/dist/components/primitives/agent-profile/index.d.ts +1 -0
- package/dist/components/primitives/agent-starting-state/agent-starting-state.d.ts +15 -0
- package/dist/components/primitives/agent-starting-state/index.d.ts +1 -0
- package/dist/components/primitives/agent-streaming/agent-streaming.d.ts +16 -0
- package/dist/components/primitives/agent-streaming/index.d.ts +1 -0
- package/dist/components/primitives/alert/alert.d.ts +31 -0
- package/dist/components/primitives/alert/index.d.ts +1 -0
- package/dist/components/primitives/artifact-preview/artifact-preview.d.ts +25 -0
- package/dist/components/primitives/artifact-preview/index.d.ts +1 -0
- package/dist/components/primitives/attachment-chip/attachment-chip.d.ts +14 -0
- package/dist/components/primitives/attachment-chip/index.d.ts +1 -0
- package/dist/components/primitives/audit-log-entry/audit-log-entry.d.ts +29 -0
- package/dist/components/primitives/audit-log-entry/index.d.ts +1 -0
- package/dist/components/primitives/auto-compact-notice/auto-compact-notice.d.ts +24 -0
- package/dist/components/primitives/auto-compact-notice/index.d.ts +1 -0
- package/dist/components/primitives/avatar/avatar.d.ts +26 -0
- package/dist/components/primitives/avatar/index.d.ts +1 -0
- package/dist/components/primitives/badge/badge.d.ts +33 -0
- package/dist/components/primitives/badge/index.d.ts +1 -0
- package/dist/components/primitives/branch-indicator/branch-indicator.d.ts +13 -0
- package/dist/components/primitives/branch-indicator/index.d.ts +1 -0
- package/dist/components/primitives/browser-controls/browser-controls.d.ts +19 -0
- package/dist/components/primitives/browser-controls/index.d.ts +1 -0
- package/dist/components/primitives/build-log-stream/build-log-stream.d.ts +51 -0
- package/dist/components/primitives/build-log-stream/index.d.ts +1 -0
- package/dist/components/primitives/button/button.d.ts +26 -0
- package/dist/components/primitives/button/index.d.ts +1 -0
- package/dist/components/primitives/capability-indicator/capability-indicator.d.ts +57 -0
- package/dist/components/primitives/capability-indicator/index.d.ts +1 -0
- package/dist/components/primitives/card/card.d.ts +40 -0
- package/dist/components/primitives/card/index.d.ts +1 -0
- package/dist/components/primitives/channel-card/channel-card.d.ts +28 -0
- package/dist/components/primitives/channel-card/index.d.ts +1 -0
- package/dist/components/primitives/chat-thread/chat-thread.d.ts +12 -0
- package/dist/components/primitives/chat-thread/index.d.ts +1 -0
- package/dist/components/primitives/checkbox/checkbox.d.ts +20 -0
- package/dist/components/primitives/checkbox/index.d.ts +1 -0
- package/dist/components/primitives/context-card/context-card.d.ts +18 -0
- package/dist/components/primitives/context-card/index.d.ts +1 -0
- package/dist/components/primitives/context-window-bar/context-window-bar.d.ts +27 -0
- package/dist/components/primitives/context-window-bar/index.d.ts +1 -0
- package/dist/components/primitives/copy-button/copy-button.d.ts +17 -0
- package/dist/components/primitives/copy-button/index.d.ts +1 -0
- package/dist/components/primitives/cost-meter/cost-meter.d.ts +23 -0
- package/dist/components/primitives/cost-meter/index.d.ts +1 -0
- package/dist/components/primitives/created-files-card/created-files-card.d.ts +30 -0
- package/dist/components/primitives/created-files-card/index.d.ts +1 -0
- package/dist/components/primitives/cron-job-card/cron-job-card.d.ts +30 -0
- package/dist/components/primitives/cron-job-card/index.d.ts +1 -0
- package/dist/components/primitives/danger-zone/danger-zone.d.ts +40 -0
- package/dist/components/primitives/danger-zone/index.d.ts +1 -0
- package/dist/components/primitives/dialog/dialog.d.ts +26 -0
- package/dist/components/primitives/dialog/index.d.ts +1 -0
- package/dist/components/primitives/diff-viewer/diff-viewer.d.ts +45 -0
- package/dist/components/primitives/diff-viewer/index.d.ts +1 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.d.ts +68 -0
- package/dist/components/primitives/dropdown-menu/index.d.ts +1 -0
- package/dist/components/primitives/empty-state/empty-state.d.ts +22 -0
- package/dist/components/primitives/empty-state/index.d.ts +1 -0
- package/dist/components/primitives/export-chat-dialog/export-chat-dialog.d.ts +18 -0
- package/dist/components/primitives/export-chat-dialog/index.d.ts +1 -0
- package/dist/components/primitives/folder-context-card/folder-context-card.d.ts +40 -0
- package/dist/components/primitives/folder-context-card/index.d.ts +1 -0
- package/dist/components/primitives/folder-selector/folder-selector.d.ts +18 -0
- package/dist/components/primitives/folder-selector/index.d.ts +1 -0
- package/dist/components/primitives/form-field/form-field.d.ts +44 -0
- package/dist/components/primitives/form-field/index.d.ts +1 -0
- package/dist/components/primitives/gateway-status-indicator/gateway-status-indicator.d.ts +19 -0
- package/dist/components/primitives/gateway-status-indicator/index.d.ts +1 -0
- package/dist/components/primitives/hook-config/hook-config.d.ts +27 -0
- package/dist/components/primitives/hook-config/index.d.ts +1 -0
- package/dist/components/primitives/hook-event-log/hook-event-log.d.ts +27 -0
- package/dist/components/primitives/hook-event-log/index.d.ts +1 -0
- package/dist/components/primitives/input/index.d.ts +1 -0
- package/dist/components/primitives/input/input.d.ts +24 -0
- package/dist/components/primitives/intent-selector/index.d.ts +1 -0
- package/dist/components/primitives/intent-selector/intent-selector.d.ts +22 -0
- package/dist/components/primitives/label/index.d.ts +1 -0
- package/dist/components/primitives/label/label.d.ts +15 -0
- package/dist/components/primitives/lane-board/index.d.ts +1 -0
- package/dist/components/primitives/lane-board/lane-board.d.ts +26 -0
- package/dist/components/primitives/login-split/index.d.ts +1 -0
- package/dist/components/primitives/login-split/login-split.d.ts +24 -0
- package/dist/components/primitives/mcp-server-card/index.d.ts +1 -0
- package/dist/components/primitives/mcp-server-card/mcp-server-card.d.ts +32 -0
- package/dist/components/primitives/memory-editor/index.d.ts +1 -0
- package/dist/components/primitives/memory-editor/memory-editor.d.ts +29 -0
- package/dist/components/primitives/mention-menu/index.d.ts +1 -0
- package/dist/components/primitives/mention-menu/mention-menu.d.ts +44 -0
- package/dist/components/primitives/metrics-panel/index.d.ts +1 -0
- package/dist/components/primitives/metrics-panel/metrics-panel.d.ts +62 -0
- package/dist/components/primitives/model-card/index.d.ts +1 -0
- package/dist/components/primitives/model-card/model-card.d.ts +72 -0
- package/dist/components/primitives/model-selector/index.d.ts +1 -0
- package/dist/components/primitives/model-selector/model-selector.d.ts +21 -0
- package/dist/components/primitives/pagination/index.d.ts +1 -0
- package/dist/components/primitives/pagination/pagination.d.ts +44 -0
- package/dist/components/primitives/permission-matrix/index.d.ts +1 -0
- package/dist/components/primitives/permission-matrix/permission-matrix.d.ts +43 -0
- package/dist/components/primitives/pin-input/index.d.ts +1 -0
- package/dist/components/primitives/pin-input/pin-input.d.ts +41 -0
- package/dist/components/primitives/plan-badge/index.d.ts +1 -0
- package/dist/components/primitives/plan-badge/plan-badge.d.ts +35 -0
- package/dist/components/primitives/progress/index.d.ts +1 -0
- package/dist/components/primitives/progress/progress.d.ts +44 -0
- package/dist/components/primitives/progress-checklist/index.d.ts +1 -0
- package/dist/components/primitives/progress-checklist/progress-checklist.d.ts +18 -0
- package/dist/components/primitives/project-switcher/index.d.ts +1 -0
- package/dist/components/primitives/project-switcher/project-switcher.d.ts +32 -0
- package/dist/components/primitives/quick-action-chips/index.d.ts +1 -0
- package/dist/components/primitives/quick-action-chips/quick-action-chips.d.ts +22 -0
- package/dist/components/primitives/radio-group/index.d.ts +1 -0
- package/dist/components/primitives/radio-group/radio-group.d.ts +5 -0
- package/dist/components/primitives/recent-folders-list/index.d.ts +1 -0
- package/dist/components/primitives/recent-folders-list/recent-folders-list.d.ts +21 -0
- package/dist/components/primitives/rule-card/index.d.ts +1 -0
- package/dist/components/primitives/rule-card/rule-card.d.ts +15 -0
- package/dist/components/primitives/run-stats/index.d.ts +1 -0
- package/dist/components/primitives/run-stats/run-stats.d.ts +16 -0
- package/dist/components/primitives/run-status-pill/index.d.ts +1 -0
- package/dist/components/primitives/run-status-pill/run-status-pill.d.ts +13 -0
- package/dist/components/primitives/running-tasks-panel/index.d.ts +1 -0
- package/dist/components/primitives/running-tasks-panel/running-tasks-panel.d.ts +20 -0
- package/dist/components/primitives/scroll-area/index.d.ts +2 -0
- package/dist/components/primitives/scroll-area/scroll-area.d.ts +40 -0
- package/dist/components/primitives/scroll-area/use-stick-to-bottom.d.ts +20 -0
- package/dist/components/primitives/select/index.d.ts +1 -0
- package/dist/components/primitives/select/select.d.ts +50 -0
- package/dist/components/primitives/session-list-item/index.d.ts +1 -0
- package/dist/components/primitives/session-list-item/session-list-item.d.ts +35 -0
- package/dist/components/primitives/session-timeline/index.d.ts +1 -0
- package/dist/components/primitives/session-timeline/session-timeline.d.ts +32 -0
- package/dist/components/primitives/sheet/index.d.ts +1 -0
- package/dist/components/primitives/sheet/sheet.d.ts +57 -0
- package/dist/components/primitives/sidebar/index.d.ts +1 -0
- package/dist/components/primitives/sidebar/sidebar.d.ts +18 -0
- package/dist/components/primitives/skeleton/index.d.ts +1 -0
- package/dist/components/primitives/skeleton/skeleton.d.ts +21 -0
- package/dist/components/primitives/skill-card/index.d.ts +1 -0
- package/dist/components/primitives/skill-card/skill-card.d.ts +28 -0
- package/dist/components/primitives/slide/alerts.d.ts +31 -0
- package/dist/components/primitives/slide/frontmatter.d.ts +23 -0
- package/dist/components/primitives/slide/index.d.ts +16 -0
- package/dist/components/primitives/slide/json-schema.d.ts +9 -0
- package/dist/components/primitives/slide/marpit-bg.d.ts +36 -0
- package/dist/components/primitives/slide/parse.d.ts +59 -0
- package/dist/components/primitives/slide/plugin.d.ts +79 -0
- package/dist/components/primitives/slide/plugins/emoji/index.d.ts +8 -0
- package/dist/components/primitives/slide/plugins/emoji/map.d.ts +15 -0
- package/dist/components/primitives/slide/plugins/math/index.d.ts +6 -0
- package/dist/components/primitives/slide/plugins/mermaid/index.d.ts +48 -0
- package/dist/components/primitives/slide/plugins/shiki/index.d.ts +11 -0
- package/dist/components/primitives/slide/sanitize.d.ts +33 -0
- package/dist/components/primitives/slide/schema.d.ts +109 -0
- package/dist/components/primitives/slide/slide.d.ts +53 -0
- package/dist/components/primitives/slide/themes/index.d.ts +9 -0
- package/dist/components/primitives/slide/use-slide-fit.d.ts +21 -0
- package/dist/components/primitives/slide/validate.d.ts +33 -0
- package/dist/components/primitives/social-auth-row/index.d.ts +1 -0
- package/dist/components/primitives/social-auth-row/social-auth-row.d.ts +24 -0
- package/dist/components/primitives/stat-tile/index.d.ts +1 -0
- package/dist/components/primitives/stat-tile/stat-tile.d.ts +28 -0
- package/dist/components/primitives/status-dot/index.d.ts +1 -0
- package/dist/components/primitives/status-dot/status-dot.d.ts +31 -0
- package/dist/components/primitives/steps-rail/index.d.ts +1 -0
- package/dist/components/primitives/steps-rail/steps-rail.d.ts +24 -0
- package/dist/components/primitives/sub-agent-dispatch/index.d.ts +1 -0
- package/dist/components/primitives/sub-agent-dispatch/sub-agent-dispatch.d.ts +30 -0
- package/dist/components/primitives/switch/index.d.ts +1 -0
- package/dist/components/primitives/switch/switch.d.ts +20 -0
- package/dist/components/primitives/system-prompt-editor/index.d.ts +1 -0
- package/dist/components/primitives/system-prompt-editor/system-prompt-editor.d.ts +25 -0
- package/dist/components/primitives/table/index.d.ts +1 -0
- package/dist/components/primitives/table/table.d.ts +61 -0
- package/dist/components/primitives/tabs/index.d.ts +1 -0
- package/dist/components/primitives/tabs/tabs.d.ts +7 -0
- package/dist/components/primitives/task-plan/index.d.ts +1 -0
- package/dist/components/primitives/task-plan/task-plan.d.ts +36 -0
- package/dist/components/primitives/terminal-panel/index.d.ts +1 -0
- package/dist/components/primitives/terminal-panel/terminal-panel.d.ts +32 -0
- package/dist/components/primitives/textarea/index.d.ts +1 -0
- package/dist/components/primitives/textarea/textarea.d.ts +20 -0
- package/dist/components/primitives/thinking-level-selector/index.d.ts +1 -0
- package/dist/components/primitives/thinking-level-selector/thinking-level-selector.d.ts +24 -0
- package/dist/components/primitives/timestamp/index.d.ts +1 -0
- package/dist/components/primitives/timestamp/timestamp.d.ts +34 -0
- package/dist/components/primitives/toast/index.d.ts +2 -0
- package/dist/components/primitives/toast/toast.d.ts +34 -0
- package/dist/components/primitives/toast/toaster.d.ts +38 -0
- package/dist/components/primitives/token-usage-chart/index.d.ts +2 -0
- package/dist/components/primitives/token-usage-chart/token-usage-chart.d.ts +44 -0
- package/dist/components/primitives/token-usage-chart/usage-metrics.d.ts +23 -0
- package/dist/components/primitives/tool-call/index.d.ts +1 -0
- package/dist/components/primitives/tool-call/tool-call.d.ts +30 -0
- package/dist/components/primitives/tool-call-card/index.d.ts +1 -0
- package/dist/components/primitives/tool-call-card/tool-call-card.d.ts +30 -0
- package/dist/components/primitives/tool-result/index.d.ts +1 -0
- package/dist/components/primitives/tool-result/tool-result.d.ts +19 -0
- package/dist/components/primitives/tools-list/index.d.ts +1 -0
- package/dist/components/primitives/tools-list/tools-list.d.ts +32 -0
- package/dist/components/primitives/tooltip/index.d.ts +1 -0
- package/dist/components/primitives/tooltip/tooltip.d.ts +33 -0
- package/dist/components/primitives/topnav/index.d.ts +1 -0
- package/dist/components/primitives/topnav/topnav.d.ts +29 -0
- package/dist/components/primitives/update-banner/index.d.ts +1 -0
- package/dist/components/primitives/update-banner/update-banner.d.ts +16 -0
- package/dist/components/primitives/whiteboard/index.d.ts +2 -0
- package/dist/components/primitives/whiteboard/render/freedraw.d.ts +2 -0
- package/dist/components/primitives/whiteboard/render/line.d.ts +4 -0
- package/dist/components/primitives/whiteboard/render/rough-paths.d.ts +16 -0
- package/dist/components/primitives/whiteboard/render/scene.d.ts +3 -0
- package/dist/components/primitives/whiteboard/render/shape.d.ts +5 -0
- package/dist/components/primitives/whiteboard/render/style.d.ts +24 -0
- package/dist/components/primitives/whiteboard/render/text.d.ts +2 -0
- package/dist/components/primitives/whiteboard/schema.d.ts +596 -0
- package/dist/components/primitives/whiteboard/seed.d.ts +22 -0
- package/dist/components/primitives/whiteboard/validate.d.ts +26 -0
- package/dist/components/primitives/whiteboard/viewport/use-pointer-pan.d.ts +11 -0
- package/dist/components/primitives/whiteboard/viewport/use-viewport.d.ts +33 -0
- package/dist/components/primitives/whiteboard/whiteboard.d.ts +21 -0
- package/dist/components.css +1 -1
- package/dist/composites/account-menu/index.js +4 -4
- package/dist/composites/agent-composer/index.js +6 -5
- package/dist/composites/agent-editor/index.js +8 -7
- package/dist/composites/agent-stream/index.js +21 -9
- package/dist/composites/agent-timeline/index.js +3 -3
- package/dist/composites/agent-tool-renderer/index.js +17 -0
- package/dist/composites/agent-tool-renderer/index.js.map +1 -0
- package/dist/composites/approval-card/index.js +3 -3
- package/dist/composites/chat-composer/index.js +3 -3
- package/dist/composites/chat-message/index.js +18 -4
- package/dist/composites/choice-prompt/index.js +11 -0
- package/dist/composites/choice-prompt/index.js.map +1 -0
- package/dist/composites/code-block/index.js +3 -3
- package/dist/composites/command-palette/index.js +4 -3
- package/dist/composites/confirm-dialog/index.js +6 -5
- package/dist/composites/confirm-prompt/index.js +7 -0
- package/dist/composites/confirm-prompt/index.js.map +1 -0
- package/dist/composites/cron-jobs-list/index.js +3 -3
- package/dist/composites/data-table/index.js +8 -7
- package/dist/composites/deployment-row/index.js +3 -3
- package/dist/composites/domain-config/index.js +6 -5
- package/dist/composites/env-var-editor/index.js +7 -5
- package/dist/composites/mcp-server-list/index.js +4 -3
- package/dist/composites/metric-card/index.js +5 -0
- package/dist/composites/metric-card/index.js.map +1 -0
- package/dist/composites/multi-select-prompt/index.js +11 -0
- package/dist/composites/multi-select-prompt/index.js.map +1 -0
- package/dist/composites/page-shell/index.js +6 -5
- package/dist/composites/permission-modal/index.js +5 -4
- package/dist/composites/preview-env-card/index.js +4 -4
- package/dist/composites/preview-panel/index.js +3 -3
- package/dist/composites/project-card/index.js +4 -4
- package/dist/composites/rollback-ui/index.js +5 -4
- package/dist/composites/rule-editor/index.js +9 -8
- package/dist/composites/skill-editor/index.js +9 -8
- package/dist/composites/skills-list/index.js +4 -3
- package/dist/composites/stability-bundle-viewer/index.js +3 -2
- package/dist/composites/status-indicator/index.js +4 -0
- package/dist/composites/status-indicator/index.js.map +1 -0
- package/dist/composites/task-header/index.js +3 -3
- package/dist/composites/text-prompt/index.js +10 -0
- package/dist/composites/text-prompt/index.js.map +1 -0
- package/dist/composites/usage-meter/index.js +3 -3
- package/dist/fonts-cdn.css +4 -4
- package/dist/fonts.css +2 -2
- package/dist/index.d.ts +144 -4622
- package/dist/index.js +999 -739
- package/dist/index.js.map +1 -1
- package/dist/lib/cn.d.ts +6 -0
- package/dist/lib/env.d.ts +55 -0
- package/dist/lib/live-region-context.d.ts +2 -0
- package/dist/lib/markdown/code-block.d.ts +14 -0
- package/dist/lib/markdown/inline-code.d.ts +10 -0
- package/dist/lib/markdown/math.d.ts +12 -0
- package/dist/lib/markdown/mermaid.d.ts +6 -0
- package/dist/lib/markdown/parser.d.ts +47 -0
- package/dist/lib/markdown/streaming-preprocess.d.ts +39 -0
- package/dist/lib/prompt.d.ts +40 -0
- package/dist/lib/safe-href.d.ts +27 -0
- package/dist/lib/sdk-tools-adapters/index.d.ts +1 -0
- package/dist/lib/sdk-tools-adapters/index.js +3 -0
- package/dist/lib/sdk-tools-adapters/index.js.map +1 -0
- package/dist/lib/sdk-tools-adapters/sdk-tools-adapters.d.ts +60 -0
- package/dist/lib/types.d.ts +10 -0
- package/dist/preset-v3-legacy.d.ts +7 -10
- package/dist/preset-v3-legacy.js +23 -3
- package/dist/preset-v3-legacy.js.map +1 -1
- package/dist/preset.css +2 -2
- package/dist/primitives/action-bar/index.js +2 -2
- package/dist/primitives/agent-error-card/index.js +2 -2
- package/dist/primitives/agent-event/index.js +3 -2
- package/dist/primitives/agent-handoff/index.js +2 -2
- package/dist/primitives/agent-profile/index.js +2 -2
- package/dist/primitives/agent-starting-state/index.js +2 -2
- package/dist/primitives/agent-streaming/index.js +2 -2
- package/dist/primitives/alert/index.js +2 -2
- package/dist/primitives/artifact-preview/index.js +2 -2
- package/dist/primitives/attachment-chip/index.js +2 -2
- package/dist/primitives/audit-log-entry/index.js +2 -2
- package/dist/primitives/auto-compact-notice/index.js +2 -2
- package/dist/primitives/avatar/index.js +2 -2
- package/dist/primitives/badge/index.js +2 -2
- package/dist/primitives/branch-indicator/index.js +2 -2
- package/dist/primitives/browser-controls/index.js +2 -2
- package/dist/primitives/build-log-stream/index.js +4 -2
- package/dist/primitives/button/index.js +2 -2
- package/dist/primitives/capability-indicator/index.js +2 -2
- package/dist/primitives/card/index.js +3 -2
- package/dist/primitives/channel-card/index.js +2 -2
- package/dist/primitives/chat-thread/index.js +2 -2
- package/dist/primitives/checkbox/index.js +2 -2
- package/dist/primitives/context-card/index.js +2 -2
- package/dist/primitives/context-window-bar/index.js +2 -2
- package/dist/primitives/copy-button/index.js +3 -2
- package/dist/primitives/cost-meter/index.js +2 -2
- package/dist/primitives/created-files-card/index.js +2 -2
- package/dist/primitives/cron-job-card/index.js +2 -2
- package/dist/primitives/danger-zone/index.js +2 -2
- package/dist/primitives/dialog/index.js +2 -2
- package/dist/primitives/diff-viewer/index.js +2 -2
- package/dist/primitives/dropdown-menu/index.js +2 -2
- package/dist/primitives/empty-state/index.js +2 -2
- package/dist/primitives/export-chat-dialog/index.js +3 -2
- package/dist/primitives/folder-context-card/index.js +2 -2
- package/dist/primitives/folder-selector/index.js +2 -2
- package/dist/primitives/form-field/index.js +3 -2
- package/dist/primitives/gateway-status-indicator/index.js +2 -2
- package/dist/primitives/hook-config/index.js +3 -2
- package/dist/primitives/hook-event-log/index.js +2 -2
- package/dist/primitives/input/index.js +2 -2
- package/dist/primitives/intent-selector/index.js +2 -2
- package/dist/primitives/label/index.js +2 -2
- package/dist/primitives/lane-board/index.js +2 -2
- package/dist/primitives/login-split/index.js +2 -2
- package/dist/primitives/mcp-server-card/index.js +2 -2
- package/dist/primitives/memory-editor/index.js +2 -2
- package/dist/primitives/mention-menu/index.js +3 -2
- package/dist/primitives/metrics-panel/index.js +2 -2
- package/dist/primitives/model-card/index.js +2 -2
- package/dist/primitives/model-selector/index.js +2 -2
- package/dist/primitives/pagination/index.js +2 -2
- package/dist/primitives/permission-matrix/index.js +3 -2
- package/dist/primitives/pin-input/index.js +3 -2
- package/dist/primitives/plan-badge/index.js +2 -2
- package/dist/primitives/progress/index.js +2 -2
- package/dist/primitives/progress-checklist/index.js +2 -2
- package/dist/primitives/project-switcher/index.js +2 -2
- package/dist/primitives/quick-action-chips/index.js +2 -2
- package/dist/primitives/radio-group/index.js +2 -2
- package/dist/primitives/recent-folders-list/index.js +2 -2
- package/dist/primitives/rule-card/index.js +2 -2
- package/dist/primitives/run-stats/index.js +2 -2
- package/dist/primitives/run-status-pill/index.js +2 -2
- package/dist/primitives/running-tasks-panel/index.js +2 -2
- package/dist/primitives/scroll-area/index.js +3 -2
- package/dist/primitives/select/index.js +2 -2
- package/dist/primitives/session-list-item/index.js +2 -2
- package/dist/primitives/session-timeline/index.js +2 -2
- package/dist/primitives/sheet/index.js +2 -2
- package/dist/primitives/sidebar/index.js +2 -2
- package/dist/primitives/skeleton/index.js +2 -2
- package/dist/primitives/skill-card/index.js +2 -2
- package/dist/primitives/social-auth-row/index.js +2 -2
- package/dist/primitives/stat-tile/index.js +2 -2
- package/dist/primitives/status-dot/index.js +4 -2
- package/dist/primitives/steps-rail/index.js +2 -2
- package/dist/primitives/sub-agent-dispatch/index.js +2 -2
- package/dist/primitives/switch/index.js +2 -2
- package/dist/primitives/system-prompt-editor/index.js +3 -2
- package/dist/primitives/table/index.js +3 -2
- package/dist/primitives/tabs/index.js +2 -2
- package/dist/primitives/task-plan/index.js +2 -2
- package/dist/primitives/terminal-panel/index.js +2 -2
- package/dist/primitives/textarea/index.js +2 -2
- package/dist/primitives/thinking-level-selector/index.js +3 -2
- package/dist/primitives/timestamp/index.js +4 -2
- package/dist/primitives/toast/index.js +3 -2
- package/dist/primitives/token-usage-chart/index.js +2 -2
- package/dist/primitives/tool-call/index.js +3 -2
- package/dist/primitives/tool-call-card/index.js +3 -2
- package/dist/primitives/tool-result/index.js +2 -2
- package/dist/primitives/tools-list/index.js +2 -2
- package/dist/primitives/tooltip/index.js +2 -2
- package/dist/primitives/topnav/index.js +2 -2
- package/dist/primitives/update-banner/index.js +2 -2
- package/dist/screens/theo-code-shell.d.ts +9 -0
- package/dist/screens/theo-code-shell.data.d.ts +147 -0
- package/dist/slide/index.js +2 -1
- package/dist/slide/plugins/mermaid/index.js +1 -1
- package/dist/slide/plugins/mermaid/index.js.map +1 -1
- package/dist/slide/plugins/shiki/index.js.map +1 -1
- package/dist/slide/themes/violet-forge.css +1 -1
- package/dist/slide-deck/index.js +13 -2
- package/dist/slide-deck/index.js.map +1 -1
- package/dist/styles/tailwind-preset.d.ts +29 -0
- package/dist/styles.css +3 -3
- package/dist/test/a11y.d.ts +13 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/themes/anthropic-style.d.ts +11 -0
- package/dist/themes/aurora-terminal.d.ts +9 -0
- package/dist/themes/classic-paper.d.ts +17 -0
- package/dist/themes/color-value-pattern.d.ts +22 -0
- package/dist/themes/color.d.ts +62 -0
- package/dist/themes/define.d.ts +65 -0
- package/dist/themes/density.d.ts +17 -0
- package/dist/themes/dracula.d.ts +14 -0
- package/dist/themes/github-dark.d.ts +11 -0
- package/dist/themes/index.d.ts +26 -0
- package/dist/themes/linear-glass.d.ts +11 -0
- package/dist/themes/one-dark.d.ts +11 -0
- package/dist/themes/openai-style.d.ts +10 -0
- package/dist/themes/schema.d.ts +112 -0
- package/dist/themes/theme-provider.d.ts +82 -0
- package/dist/themes/theme-script.d.ts +48 -0
- package/dist/themes/theme-switcher.d.ts +17 -0
- package/dist/themes/types.d.ts +88 -0
- package/dist/themes/vercel-mono.d.ts +11 -0
- package/dist/themes/violet-forge.d.ts +12 -0
- package/dist/theo-ui-provider.d.ts +50 -0
- package/dist/tokens-v4.css +77 -41
- package/dist/tokens.css +159 -74
- package/dist/types/agent.d.ts +19 -0
- package/dist/types/chat.d.ts +173 -0
- package/dist/types/mode.d.ts +16 -0
- package/dist/types/permission.d.ts +8 -0
- package/dist/types/rule.d.ts +28 -0
- package/dist/types/task.d.ts +9 -0
- package/dist/vite-plugin.d.ts +7 -11
- package/dist/vite-plugin.js +4 -4
- package/dist/vite-plugin.js.map +1 -1
- package/dist/whiteboard/index.js +3 -0
- package/dist/whiteboard/index.js.map +1 -1
- package/llms.txt +39 -39
- package/package.json +236 -188
- package/registry/index.json +58 -4
- package/registry/r/account-menu.json +1 -1
- package/registry/r/action-bar.json +1 -1
- package/registry/r/agent-composer.json +1 -1
- package/registry/r/agent-editor.json +1 -1
- package/registry/r/agent-error-card.json +1 -1
- package/registry/r/agent-event.json +1 -1
- package/registry/r/agent-handoff.json +1 -1
- package/registry/r/agent-profile.json +1 -1
- package/registry/r/agent-starting-state.json +1 -1
- package/registry/r/agent-stream.json +1 -1
- package/registry/r/agent-streaming.json +1 -1
- package/registry/r/agent-timeline.json +1 -1
- package/registry/r/agent-tool-renderer.json +40 -0
- package/registry/r/alert.json +1 -1
- package/registry/r/approval-card.json +1 -1
- package/registry/r/artifact-preview.json +1 -1
- package/registry/r/attachment-chip.json +1 -1
- package/registry/r/audit-log-entry.json +1 -1
- package/registry/r/auto-compact-notice.json +1 -1
- package/registry/r/avatar.json +1 -1
- package/registry/r/badge.json +1 -1
- package/registry/r/browser-controls.json +1 -1
- package/registry/r/build-log-stream.json +2 -1
- package/registry/r/button.json +1 -1
- package/registry/r/capability-indicator.json +1 -1
- package/registry/r/card.json +1 -1
- package/registry/r/chat-composer.json +1 -1
- package/registry/r/chat-message.json +11 -16
- package/registry/r/chat-thread.json +1 -1
- package/registry/r/chat-types.json +1 -1
- package/registry/r/checkbox.json +1 -1
- package/registry/r/choice-prompt.json +25 -0
- package/registry/r/cn.json +1 -1
- package/registry/r/code-block.json +1 -1
- package/registry/r/command-palette.json +1 -1
- package/registry/r/confirm-dialog.json +1 -1
- package/registry/r/confirm-prompt.json +21 -0
- package/registry/r/context-card.json +1 -1
- package/registry/r/context-window-bar.json +1 -1
- package/registry/r/copy-button.json +1 -1
- package/registry/r/cost-meter.json +1 -1
- package/registry/r/created-files-card.json +1 -1
- package/registry/r/cron-job-card.json +1 -1
- package/registry/r/cron-jobs-list.json +1 -1
- package/registry/r/danger-zone.json +1 -1
- package/registry/r/data-table.json +1 -1
- package/registry/r/deployment-row.json +1 -1
- package/registry/r/dialog.json +1 -1
- package/registry/r/diff-viewer.json +1 -1
- package/registry/r/domain-config.json +1 -1
- package/registry/r/dropdown-menu.json +2 -2
- package/registry/r/empty-state.json +1 -1
- package/registry/r/env-var-editor.json +2 -1
- package/registry/r/env.json +15 -0
- package/registry/r/folder-context-card.json +1 -1
- package/registry/r/folder-selector.json +1 -1
- package/registry/r/form-field.json +1 -1
- package/registry/r/hook-config.json +1 -1
- package/registry/r/hook-event-log.json +1 -1
- package/registry/r/input.json +1 -1
- package/registry/r/intent-selector.json +1 -1
- package/registry/r/label.json +1 -1
- package/registry/r/lane-board.json +1 -1
- package/registry/r/login-split.json +1 -1
- package/registry/r/mcp-server-card.json +1 -1
- package/registry/r/mcp-server-list.json +1 -1
- package/registry/r/memory-editor.json +1 -1
- package/registry/r/mention-menu.json +1 -1
- package/registry/r/metric-card.json +23 -0
- package/registry/r/metrics-panel.json +1 -1
- package/registry/r/model-card.json +1 -1
- package/registry/r/model-selector.json +1 -1
- package/registry/r/multi-select-prompt.json +25 -0
- package/registry/r/page-shell.json +1 -1
- package/registry/r/pagination.json +1 -1
- package/registry/r/permission-matrix.json +1 -1
- package/registry/r/permission-modal.json +1 -1
- package/registry/r/pin-input.json +1 -1
- package/registry/r/plan-badge.json +1 -1
- package/registry/r/preview-env-card.json +1 -1
- package/registry/r/preview-panel.json +1 -1
- package/registry/r/progress-checklist.json +1 -1
- package/registry/r/progress.json +1 -1
- package/registry/r/project-card.json +1 -1
- package/registry/r/project-switcher.json +1 -1
- package/registry/r/prompt.json +15 -0
- package/registry/r/quick-action-chips.json +1 -1
- package/registry/r/radio-group.json +1 -1
- package/registry/r/recent-folders-list.json +1 -1
- package/registry/r/rollback-ui.json +1 -1
- package/registry/r/rule-card.json +1 -1
- package/registry/r/rule-editor.json +1 -1
- package/registry/r/run-stats.json +1 -1
- package/registry/r/running-tasks-panel.json +1 -1
- package/registry/r/safe-href.json +1 -1
- package/registry/r/scroll-area.json +1 -1
- package/registry/r/select.json +1 -1
- package/registry/r/session-list-item.json +1 -1
- package/registry/r/session-timeline.json +1 -1
- package/registry/r/sheet.json +1 -1
- package/registry/r/sidebar.json +1 -1
- package/registry/r/skeleton.json +1 -1
- package/registry/r/skill-card.json +1 -1
- package/registry/r/skill-editor.json +1 -1
- package/registry/r/skills-list.json +1 -1
- package/registry/r/slide-deck.json +8 -8
- package/registry/r/slide-plugin-mermaid.json +1 -1
- package/registry/r/slide-plugin-shiki.json +1 -1
- package/registry/r/slide.json +6 -6
- package/registry/r/social-auth-row.json +1 -1
- package/registry/r/stat-tile.json +1 -1
- package/registry/r/status-dot.json +2 -1
- package/registry/r/status-indicator.json +20 -0
- package/registry/r/steps-rail.json +1 -1
- package/registry/r/sub-agent-dispatch.json +1 -1
- package/registry/r/switch.json +1 -1
- package/registry/r/system-prompt-editor.json +1 -1
- package/registry/r/table.json +1 -1
- package/registry/r/tabs.json +1 -1
- package/registry/r/tailwind-preset.json +1 -1
- package/registry/r/task-header.json +1 -1
- package/registry/r/task-plan.json +1 -1
- package/registry/r/terminal-panel.json +1 -1
- package/registry/r/text-prompt.json +24 -0
- package/registry/r/textarea.json +1 -1
- package/registry/r/theme-provider.json +7 -6
- package/registry/r/theo-ui-provider.json +1 -1
- package/registry/r/timestamp.json +2 -1
- package/registry/r/toast.json +2 -2
- package/registry/r/token-usage-chart.json +1 -1
- package/registry/r/tokens.json +2 -2
- package/registry/r/tool-call-card.json +1 -1
- package/registry/r/tool-call.json +1 -1
- package/registry/r/tool-result.json +1 -1
- package/registry/r/tools-list.json +1 -1
- package/registry/r/tooltip.json +1 -1
- package/registry/r/topnav.json +1 -1
- package/registry/r/usage-meter.json +1 -1
- package/registry/r/whiteboard.json +3 -3
- package/dist/chunk-2UJROWAG.js +0 -106
- package/dist/chunk-2UJROWAG.js.map +0 -1
- package/dist/chunk-2XPWOUEH.js +0 -68
- package/dist/chunk-2XPWOUEH.js.map +0 -1
- package/dist/chunk-3GHLNCM3.js +0 -42
- package/dist/chunk-3GHLNCM3.js.map +0 -1
- package/dist/chunk-3HOXC25T.js +0 -48
- package/dist/chunk-3HOXC25T.js.map +0 -1
- package/dist/chunk-3QGO5SB3.js +0 -46
- package/dist/chunk-3QGO5SB3.js.map +0 -1
- package/dist/chunk-47QJVWW2.js +0 -85
- package/dist/chunk-47QJVWW2.js.map +0 -1
- package/dist/chunk-4L63UW3I.js +0 -35
- package/dist/chunk-4L63UW3I.js.map +0 -1
- package/dist/chunk-4UUSJJFZ.js +0 -25
- package/dist/chunk-4UUSJJFZ.js.map +0 -1
- package/dist/chunk-4ZBZBRG5.js +0 -127
- package/dist/chunk-4ZBZBRG5.js.map +0 -1
- package/dist/chunk-57NXT3OX.js +0 -92
- package/dist/chunk-57NXT3OX.js.map +0 -1
- package/dist/chunk-5FF5EUZP.js +0 -44
- package/dist/chunk-5FF5EUZP.js.map +0 -1
- package/dist/chunk-5UGQXB2P.js +0 -714
- package/dist/chunk-5UGQXB2P.js.map +0 -1
- package/dist/chunk-62FT22CI.js +0 -85
- package/dist/chunk-62FT22CI.js.map +0 -1
- package/dist/chunk-673R3GSK.js +0 -19
- package/dist/chunk-673R3GSK.js.map +0 -1
- package/dist/chunk-6VINZJBV.js +0 -128
- package/dist/chunk-6VINZJBV.js.map +0 -1
- package/dist/chunk-6ZQKEY54.js +0 -149
- package/dist/chunk-6ZQKEY54.js.map +0 -1
- package/dist/chunk-74NZ5U3E.js +0 -145
- package/dist/chunk-74NZ5U3E.js.map +0 -1
- package/dist/chunk-755NWSNW.js +0 -36
- package/dist/chunk-755NWSNW.js.map +0 -1
- package/dist/chunk-7GLBWWMW.js +0 -70
- package/dist/chunk-7GLBWWMW.js.map +0 -1
- package/dist/chunk-7RXYW5VM.js +0 -88
- package/dist/chunk-7RXYW5VM.js.map +0 -1
- package/dist/chunk-AC4MGCXI.js +0 -92
- package/dist/chunk-AC4MGCXI.js.map +0 -1
- package/dist/chunk-AEVSVDT6.js +0 -67
- package/dist/chunk-AEVSVDT6.js.map +0 -1
- package/dist/chunk-AODIMN2N.js +0 -68
- package/dist/chunk-AODIMN2N.js.map +0 -1
- package/dist/chunk-ATHOPBCA.js +0 -61
- package/dist/chunk-ATHOPBCA.js.map +0 -1
- package/dist/chunk-AVPHVQZS.js +0 -73
- package/dist/chunk-AVPHVQZS.js.map +0 -1
- package/dist/chunk-AXKBNRZW.js +0 -173
- package/dist/chunk-AXKBNRZW.js.map +0 -1
- package/dist/chunk-B75MEYNR.js +0 -106
- package/dist/chunk-B75MEYNR.js.map +0 -1
- package/dist/chunk-BGKA6DI6.js +0 -34
- package/dist/chunk-BGKA6DI6.js.map +0 -1
- package/dist/chunk-BNQAJGEN.js +0 -88
- package/dist/chunk-BNQAJGEN.js.map +0 -1
- package/dist/chunk-BP2SETUC.js +0 -101
- package/dist/chunk-BP2SETUC.js.map +0 -1
- package/dist/chunk-BPUQWMBD.js +0 -79
- package/dist/chunk-BPUQWMBD.js.map +0 -1
- package/dist/chunk-BVDASR3Y.js +0 -74
- package/dist/chunk-BVDASR3Y.js.map +0 -1
- package/dist/chunk-BX7A5GUV.js +0 -78
- package/dist/chunk-BX7A5GUV.js.map +0 -1
- package/dist/chunk-CDA6RYOX.js +0 -115
- package/dist/chunk-CDA6RYOX.js.map +0 -1
- package/dist/chunk-CG7O3A42.js +0 -80
- package/dist/chunk-CG7O3A42.js.map +0 -1
- package/dist/chunk-CIYGNPKT.js +0 -76
- package/dist/chunk-CIYGNPKT.js.map +0 -1
- package/dist/chunk-CKXY4FTV.js +0 -59
- package/dist/chunk-CKXY4FTV.js.map +0 -1
- package/dist/chunk-CVOKZITR.js +0 -82
- package/dist/chunk-CVOKZITR.js.map +0 -1
- package/dist/chunk-CWFMFKDI.js +0 -82
- package/dist/chunk-CWFMFKDI.js.map +0 -1
- package/dist/chunk-CWVKSV7S.js +0 -124
- package/dist/chunk-CWVKSV7S.js.map +0 -1
- package/dist/chunk-CYOLRWOX.js +0 -63
- package/dist/chunk-CYOLRWOX.js.map +0 -1
- package/dist/chunk-D23LRJT6.js +0 -116
- package/dist/chunk-D23LRJT6.js.map +0 -1
- package/dist/chunk-DFADMEJK.js +0 -127
- package/dist/chunk-DFADMEJK.js.map +0 -1
- package/dist/chunk-DKQAHZG2.js +0 -83
- package/dist/chunk-DKQAHZG2.js.map +0 -1
- package/dist/chunk-DW247T3Q.js +0 -199
- package/dist/chunk-DW247T3Q.js.map +0 -1
- package/dist/chunk-E5A7HN6H.js +0 -32
- package/dist/chunk-E5A7HN6H.js.map +0 -1
- package/dist/chunk-EI63GTN7.js +0 -57
- package/dist/chunk-EI63GTN7.js.map +0 -1
- package/dist/chunk-EP25QJ4N.js +0 -146
- package/dist/chunk-EP25QJ4N.js.map +0 -1
- package/dist/chunk-ET44426Q.js +0 -80
- package/dist/chunk-ET44426Q.js.map +0 -1
- package/dist/chunk-ETEIDY34.js +0 -67
- package/dist/chunk-ETEIDY34.js.map +0 -1
- package/dist/chunk-EU55O4P7.js +0 -76
- package/dist/chunk-EU55O4P7.js.map +0 -1
- package/dist/chunk-F436537E.js +0 -104
- package/dist/chunk-F436537E.js.map +0 -1
- package/dist/chunk-FLBTGNQI.js +0 -86
- package/dist/chunk-FLBTGNQI.js.map +0 -1
- package/dist/chunk-FUT45NFW.js +0 -46
- package/dist/chunk-FUT45NFW.js.map +0 -1
- package/dist/chunk-G3LWNTVZ.js +0 -51
- package/dist/chunk-G3LWNTVZ.js.map +0 -1
- package/dist/chunk-GBJB5WLT.js +0 -58
- package/dist/chunk-GBJB5WLT.js.map +0 -1
- package/dist/chunk-GIEPEFRX.js +0 -110
- package/dist/chunk-GIEPEFRX.js.map +0 -1
- package/dist/chunk-GSO7MISR.js +0 -58
- package/dist/chunk-GSO7MISR.js.map +0 -1
- package/dist/chunk-GUQFYUIC.js +0 -61
- package/dist/chunk-GUQFYUIC.js.map +0 -1
- package/dist/chunk-GXBFGWQN.js +0 -81
- package/dist/chunk-GXBFGWQN.js.map +0 -1
- package/dist/chunk-H3VJMFJQ.js +0 -35
- package/dist/chunk-H3VJMFJQ.js.map +0 -1
- package/dist/chunk-HG4WEERE.js +0 -26
- package/dist/chunk-HG4WEERE.js.map +0 -1
- package/dist/chunk-HGPBGLNP.js +0 -51
- package/dist/chunk-HGPBGLNP.js.map +0 -1
- package/dist/chunk-HQFTW7SF.js +0 -141
- package/dist/chunk-HQFTW7SF.js.map +0 -1
- package/dist/chunk-I32I36LW.js +0 -113
- package/dist/chunk-I32I36LW.js.map +0 -1
- package/dist/chunk-I7WYM63C.js +0 -170
- package/dist/chunk-I7WYM63C.js.map +0 -1
- package/dist/chunk-JPTPIZ5V.js +0 -120
- package/dist/chunk-JPTPIZ5V.js.map +0 -1
- package/dist/chunk-JQXLPVWP.js +0 -74
- package/dist/chunk-JQXLPVWP.js.map +0 -1
- package/dist/chunk-K5ARID4S.js +0 -26
- package/dist/chunk-K5ARID4S.js.map +0 -1
- package/dist/chunk-K6RTLPIJ.js +0 -41
- package/dist/chunk-K6RTLPIJ.js.map +0 -1
- package/dist/chunk-K7PYLTMP.js +0 -221
- package/dist/chunk-K7PYLTMP.js.map +0 -1
- package/dist/chunk-KQNKKV2C.js +0 -56
- package/dist/chunk-KQNKKV2C.js.map +0 -1
- package/dist/chunk-KRN4NE4U.js +0 -155
- package/dist/chunk-KRN4NE4U.js.map +0 -1
- package/dist/chunk-L2BI762I.js +0 -82
- package/dist/chunk-L2BI762I.js.map +0 -1
- package/dist/chunk-LEEH63B2.js +0 -56
- package/dist/chunk-LEEH63B2.js.map +0 -1
- package/dist/chunk-LHRWVM3G.js +0 -42
- package/dist/chunk-LHRWVM3G.js.map +0 -1
- package/dist/chunk-LIGWMGXM.js +0 -117
- package/dist/chunk-LIGWMGXM.js.map +0 -1
- package/dist/chunk-LKYSX3QF.js +0 -104
- package/dist/chunk-LKYSX3QF.js.map +0 -1
- package/dist/chunk-MCIFB6VS.js +0 -54
- package/dist/chunk-MCIFB6VS.js.map +0 -1
- package/dist/chunk-MI5CXMZU.js +0 -171
- package/dist/chunk-MI5CXMZU.js.map +0 -1
- package/dist/chunk-MYEHGDC2.js +0 -152
- package/dist/chunk-MYEHGDC2.js.map +0 -1
- package/dist/chunk-NQZYY4LR.js +0 -84
- package/dist/chunk-NQZYY4LR.js.map +0 -1
- package/dist/chunk-O23LKHUR.js +0 -66
- package/dist/chunk-O23LKHUR.js.map +0 -1
- package/dist/chunk-PASI2U2R.js +0 -23
- package/dist/chunk-PASI2U2R.js.map +0 -1
- package/dist/chunk-PPH5NTHV.js +0 -34
- package/dist/chunk-PPH5NTHV.js.map +0 -1
- package/dist/chunk-PR6OZF6D.js +0 -28
- package/dist/chunk-PR6OZF6D.js.map +0 -1
- package/dist/chunk-PTHRL242.js +0 -186
- package/dist/chunk-PTHRL242.js.map +0 -1
- package/dist/chunk-PWXOXPFT.js +0 -142
- package/dist/chunk-PWXOXPFT.js.map +0 -1
- package/dist/chunk-QB6BNHO3.js +0 -112
- package/dist/chunk-QB6BNHO3.js.map +0 -1
- package/dist/chunk-QJGGTIUN.js +0 -110
- package/dist/chunk-QJGGTIUN.js.map +0 -1
- package/dist/chunk-QSOIJ6J3.js +0 -91
- package/dist/chunk-QSOIJ6J3.js.map +0 -1
- package/dist/chunk-R63ZKLQM.js +0 -45
- package/dist/chunk-R63ZKLQM.js.map +0 -1
- package/dist/chunk-RC5XME4T.js +0 -33
- package/dist/chunk-RC5XME4T.js.map +0 -1
- package/dist/chunk-RTYYJPPE.js +0 -77
- package/dist/chunk-RTYYJPPE.js.map +0 -1
- package/dist/chunk-RVOBP7PO.js +0 -116
- package/dist/chunk-RVOBP7PO.js.map +0 -1
- package/dist/chunk-SF6R5VMQ.js +0 -97
- package/dist/chunk-SF6R5VMQ.js.map +0 -1
- package/dist/chunk-SP4CP5HY.js +0 -57
- package/dist/chunk-SP4CP5HY.js.map +0 -1
- package/dist/chunk-SWJ4EUOI.js +0 -30
- package/dist/chunk-SWJ4EUOI.js.map +0 -1
- package/dist/chunk-TK24HQJJ.js +0 -128
- package/dist/chunk-TK24HQJJ.js.map +0 -1
- package/dist/chunk-UAYOOTRR.js +0 -77
- package/dist/chunk-UAYOOTRR.js.map +0 -1
- package/dist/chunk-UDTAMHXW.js +0 -55
- package/dist/chunk-UDTAMHXW.js.map +0 -1
- package/dist/chunk-UK27KR35.js +0 -73
- package/dist/chunk-UK27KR35.js.map +0 -1
- package/dist/chunk-UOMQPIB4.js +0 -48
- package/dist/chunk-UOMQPIB4.js.map +0 -1
- package/dist/chunk-UOXU7NDY.js +0 -120
- package/dist/chunk-UOXU7NDY.js.map +0 -1
- package/dist/chunk-V7OOTVK3.js +0 -106
- package/dist/chunk-V7OOTVK3.js.map +0 -1
- package/dist/chunk-VI5M7KJ2.js +0 -1022
- package/dist/chunk-VI5M7KJ2.js.map +0 -1
- package/dist/chunk-VMMATOPE.js +0 -64
- package/dist/chunk-VMMATOPE.js.map +0 -1
- package/dist/chunk-W2PVSIW3.js +0 -89
- package/dist/chunk-W2PVSIW3.js.map +0 -1
- package/dist/chunk-W3DUDZDU.js +0 -88
- package/dist/chunk-W3DUDZDU.js.map +0 -1
- package/dist/chunk-WKEUU2FU.js +0 -114
- package/dist/chunk-WKEUU2FU.js.map +0 -1
- package/dist/chunk-WKLW7RC6.js +0 -28
- package/dist/chunk-WKLW7RC6.js.map +0 -1
- package/dist/chunk-WSJGZNUH.js +0 -111
- package/dist/chunk-WSJGZNUH.js.map +0 -1
- package/dist/chunk-WVPDQMC2.js +0 -144
- package/dist/chunk-WVPDQMC2.js.map +0 -1
- package/dist/chunk-WWNH5ENT.js +0 -43
- package/dist/chunk-WWNH5ENT.js.map +0 -1
- package/dist/chunk-X5L62PXY.js +0 -112
- package/dist/chunk-X5L62PXY.js.map +0 -1
- package/dist/chunk-XGCV5E6W.js +0 -133
- package/dist/chunk-XGCV5E6W.js.map +0 -1
- package/dist/chunk-XRKIEL5M.js +0 -72
- package/dist/chunk-XRKIEL5M.js.map +0 -1
- package/dist/chunk-XUJYEADU.js +0 -80
- package/dist/chunk-XUJYEADU.js.map +0 -1
- package/dist/chunk-XVYNSIQC.js +0 -116
- package/dist/chunk-XVYNSIQC.js.map +0 -1
- package/dist/chunk-XWTISHXO.js +0 -54
- package/dist/chunk-XWTISHXO.js.map +0 -1
- package/dist/chunk-XZKEGEPT.js +0 -156
- package/dist/chunk-XZKEGEPT.js.map +0 -1
- package/dist/chunk-YOGHS4UU.js +0 -202
- package/dist/chunk-YOGHS4UU.js.map +0 -1
- package/dist/chunk-YRSKXEOD.js +0 -135
- package/dist/chunk-YRSKXEOD.js.map +0 -1
- package/dist/chunk-ZALLCR7X.js +0 -108
- package/dist/chunk-ZALLCR7X.js.map +0 -1
- package/dist/chunk-ZDAOHMCW.js +0 -46
- package/dist/chunk-ZDAOHMCW.js.map +0 -1
- package/dist/chunk-ZESICCKK.js +0 -37
- package/dist/chunk-ZESICCKK.js.map +0 -1
- package/dist/chunk-ZIKFOD6N.js +0 -87
- package/dist/chunk-ZIKFOD6N.js.map +0 -1
- package/dist/chunk-ZJRWCQEN.js +0 -76
- package/dist/chunk-ZJRWCQEN.js.map +0 -1
- package/dist/chunk-ZSRJCIWF.js +0 -24
- package/dist/chunk-ZSRJCIWF.js.map +0 -1
- package/dist/plugin-Atb0VKtr.d.ts +0 -172
- package/dist/slide/index.d.ts +0 -212
- package/dist/slide/plugins/emoji/index.d.ts +0 -29
- package/dist/slide/plugins/math/index.d.ts +0 -13
- package/dist/slide/plugins/mermaid/index.d.ts +0 -55
- package/dist/slide/plugins/shiki/index.d.ts +0 -18
- package/dist/slide-deck/index.d.ts +0 -377
- package/dist/whiteboard/index.d.ts +0 -258
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/chat.ts","../src/components/composites/chat-message/parts/data-part.tsx","../src/components/composites/chat-message/parts/file-part.tsx","../src/lib/markdown/code-block.tsx","../src/lib/markdown/inline-code.tsx","../src/lib/markdown/streaming-preprocess.ts","../src/lib/markdown/parser.ts","../src/components/composites/chat-message/chat-message-response.tsx","../src/components/composites/chat-message/parts/reasoning-part.tsx","../src/components/composites/chat-message/parts/source-part.tsx","../src/components/composites/chat-message/parts/text-part.tsx","../src/components/composites/chat-message/chat-message.tsx","../src/components/composites/chat-message/chat-message-actions.tsx","../src/components/composites/chat-message/chat-message-toolbar.tsx","../src/components/composites/chat-message/chat-message-branch.tsx"],"names":["jsxs","jsx","count","i","Fragment","useState","useEffect"],"mappings":";;;;;;;;;AA6LO,SAAS,aAAa,IAAA,EAAyC;AACpE,EAAA,OAAO,KAAK,IAAA,KAAS,MAAA;AACvB;AAEO,SAAS,kBAAkB,IAAA,EAA8C;AAC9E,EAAA,OAAO,KAAK,IAAA,KAAS,WAAA;AACvB;AAEO,SAAS,aAAa,IAAA,EAAyC;AACpE,EAAA,OAAO,KAAK,IAAA,KAAS,MAAA;AACvB;AAEO,SAAS,sBAAsB,IAAA,EAAkD;AACtF,EAAA,OAAO,KAAK,IAAA,KAAS,gBAAA;AACvB;AAEO,SAAS,kBAAkB,IAAA,EAA8C;AAC9E,EAAA,OAAO,KAAK,IAAA,KAAS,YAAA;AACvB;AAEO,SAAS,uBAAuB,IAAA,EAAmD;AACxF,EAAA,OAAO,KAAK,IAAA,KAAS,iBAAA;AACvB;AAEO,SAAS,kBAAkB,IAAA,EAA8C;AAC9E,EAAA,OAAO,KAAK,IAAA,KAAS,YAAA;AACvB;AAEO,SAAS,sBAAsB,IAAA,EAAkD;AACtF,EAAA,OAAO,KAAK,IAAA,KAAS,QAAA;AACvB;AAEO,SAAS,aAAa,IAAA,EAAyC;AACpE,EAAA,OAAO,KAAK,IAAA,KAAS,cAAA,IAAkB,IAAA,CAAK,IAAA,CAAK,WAAW,OAAO,CAAA;AACrE;AAEO,SAAS,aAAa,IAAA,EAAyC;AACpE,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AACrC;AC/MA,SAAS,eAAe,IAAA,EAA0B;AAChD,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,SAAA,EAAU,EAA+B;AACxE,EAAA,MAAM,IAAA,GAAO,eAAe,IAAI,CAAA;AAChC,EAAA,MAAM,WAAW,SAAA,GAAY,IAAA,CAAK,IAAI,CAAA,IAAK,YAAY,IAAI,CAAA;AAC3D,EAAA,IAAI,QAAA,EAAU,OAAO,QAAA,CAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAE7C,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,2EAA2E,CAAA;AAAA,MACzF,gBAAA,EAAgB,IAAA;AAAA,MAEhB,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,mHAAA,EACjB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,+BAC/C,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,YAAM;AAAA,WAAA,EAAK;AAAA,SAAA,EACnB,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACb,QAAA,kBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,EAAE,CAAA,EAClC;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;ACnCA,SAAS,QAAQ,SAAA,EAA4B;AAC3C,EAAA,OAAO,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,IAAK,SAAA,KAAc,OAAA;AACzD;AAEO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAA+B;AAC7D,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,IAAY,IAAA,CAAK,IAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,IAAK,MAAA;AAE5D,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,uBACEA,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,WAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,2FAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAC,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,4BACjDA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BACbA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAmB,QAAA,EAAA,WAAA,EAAS;AAAA;AAAA;AAAA,OAC9C;AAAA,IAEJ;AACA,IAAA,uBACED,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sDAAA;AAAA,QACV,gBAAA,EAAe,OAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAC,GAAAA,CAAC,SAAI,GAAA,EAAK,OAAA,EAAS,KAAK,KAAA,EAAO,SAAA,EAAU,kBAAA,EAAmB,OAAA,EAAQ,MAAA,EAAO,CAAA;AAAA,UAC1E,IAAA,CAAK,2BACJA,GAAAA,CAAC,gBAAW,SAAA,EAAU,yHAAA,EACnB,QAAA,EAAA,IAAA,CAAK,QAAA,EACR,CAAA,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AAEA,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,uFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,gBAAA,EAAe,SAAA;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,8BAAA,EAA+B,eAAY,MAAA,EAAO,CAAA;AAAA,QACrE,OAAA,mBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAU,sDAAA,EACzB,QAAA,EAAA,KAAA,EACH,CAAA,mBAEAA,GAAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAEfA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0EAAA,EACb,eAAK,SAAA,EACR;AAAA;AAAA;AAAA,GACF;AAEJ;AC3CA,IAAM,cAAA,GAAiB,EAAE,KAAA,EAAO,cAAA,EAAgB,MAAM,aAAA,EAAc;AAEpE,IAAI,iBAAA,GAA6B,IAAA;AACjC,IAAI,iBAAA,GAAoB,KAAA;AAExB,eAAe,eAAe,MAAA,EAA2D;AACvF,EAAA,IAAI,mBAAmB,OAAO,iBAAA;AAC9B,EAAA,IAAI,mBAAmB,OAAO,IAAA;AAC9B,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,OAAO,CAAA;AAClC,IAAA,iBAAA,GAAoB,MAAM,MAAM,iBAAA,CAAkB;AAAA,MAChD,MAAA,EAAQ,CAAC,MAAA,CAAO,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,MAClC,KAAA,EAAO;AAAA,QACL,IAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AACD,IAAA,OAAO,iBAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,iBAAA,GAAoB,IAAA;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,UAAU,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,WAAU,EAAgC;AAC5F,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,kBAAkB,MAAA,IAAU,cAAA;AAElC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,cAAA,CAAe,eAAe,CAAA,CAC3B,IAAA,CAAK,CAAC,EAAA,KAAO;AACZ,MAAA,IAAI,SAAA,IAAa,CAAC,EAAA,EAAI;AACtB,MAAA,IAAI;AAEF,QAAA,MAAM,GAAA,GAAO,EAAA,CAAW,UAAA,CAAW,IAAA,EAAM;AAAA,UACvC,IAAA,EAAM,QAAA;AAAA,UACN,QAAQ,EAAE,KAAA,EAAO,gBAAgB,KAAA,EAAO,IAAA,EAAM,gBAAgB,IAAA,EAAK;AAAA,UACnE,YAAA,EAAc;AAAA,SACf,CAAA;AACD,QAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,MACb,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAEb,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,QAAA,EAAU,gBAAgB,KAAA,EAAO,eAAA,CAAgB,IAAA,EAAM,eAAe,CAAC,CAAA;AAEjF,EAAA,MAAM,aAAa,YAA2B;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,sBAAA,EAAqB,EAAA;AAAA,MAErB,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0EAAA,EACb,sBAAY,MAAA,EACf,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,UAAA;AAAA,cACT,SAAA,EAAW,EAAA;AAAA,gBACT,iEAAA;AAAA,gBACA,kFAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,YAAA,EAAY,SAAS,QAAA,GAAW,WAAA;AAAA,cAE/B,QAAA,EAAA,MAAA,mBACCD,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAC,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAA,EAAW,eAAY,MAAA,EAAO,CAAA;AAAA,gCACnDA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,QAAA,EAAM;AAAA,eAAA,EACd,CAAA,mBAEAD,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAC,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,eAAY,MAAA,EAAO,CAAA;AAAA,gCAClDA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,MAAA,EAAI;AAAA,eAAA,EACZ;AAAA;AAAA;AAEJ,SAAA,EACF,CAAA;AAAA,QACC,uBACCA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,oFAAA;AAAA,YAEV,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAA;AAAK;AAAA,4BAG1CA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACb,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,WAAW,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA,GAAK,MAAA,EAAY,gBAAK,CAAA,EACxE;AAAA;AAAA;AAAA,GAEJ;AAEJ;ACpJO,SAAS,WAAW,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAAiC;AAC1F,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,uEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;;;ACeO,SAAS,mBAAA,CAAoB,QAAA,EAAkB,WAAA,GAAc,IAAA,EAAc;AAChF,EAAA,IAAI,CAAC,aAAa,OAAO,QAAA;AAEzB,EAAA,IAAI,GAAA,GAAM,QAAA;AAIV,EAAA,MAAM,UAAA,GAAa,qBAAqB,GAAG,CAAA;AAC3C,EAAA,IAAI,UAAA,GAAa,MAAM,CAAA,EAAG;AAExB,IAAA,GAAA,GAAM,GAAG,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,GAAI,GAAA,GAAM,GAAG,GAAG;AAAA,CAAI,CAAA,MAAA,CAAA;AAG9C,IAAA,OAAO,GAAA;AAAA,EACT;AAGA,EAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AACjD,EAAA,IAAI,cAAA,GAAiB,MAAM,CAAA,EAAG;AAC5B,IAAA,GAAA,GAAM,GAAG,GAAG,CAAA,EAAA,CAAA;AACZ,IAAA,OAAO,GAAA;AAAA,EACT;AAGA,EAAA,MAAM,eAAA,GAAkB,qBAAqB,GAAG,CAAA;AAChD,EAAA,IAAI,eAAA,GAAkB,MAAM,CAAA,EAAG;AAC7B,IAAA,GAAA,GAAM,GAAG,GAAG,CAAA,EAAA,CAAA;AAAA,EACd;AAGA,EAAA,MAAM,aAAA,GAAgB,mBAAmB,GAAG,CAAA;AAC5C,EAAA,IAAI,aAAA,GAAgB,MAAM,CAAA,EAAG;AAC3B,IAAA,GAAA,GAAM,GAAG,GAAG,CAAA,CAAA,CAAA;AAAA,EACd;AAIA,EAAA,KAAA,MAAW,UAAU,CAAC,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,GAAG,CAAA,EAAG;AAC3C,IAAA,IAAI,WAAA,CAAY,GAAA,EAAK,MAAM,CAAA,GAAI,MAAM,CAAA,EAAG;AACtC,MAAA,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,IACvB;AAAA,EACF;AAMA,EAAA,GAAA,GAAM,kBAAkB,GAAG,CAAA;AAE3B,EAAA,OAAO,GAAA;AACT;AAIA,SAAS,qBAAqB,CAAA,EAAmB;AAC/C,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,EAAE,MAAA,EAAQ;AACnB,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,GAAA,IAAO,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,IAAO,CAAA,CAAE,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AACxD,MAAA,KAAA,EAAA;AACA,MAAA,CAAA,IAAK,CAAA;AAAA,IACP,CAAA,MAAO;AACL,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,qBAAqB,CAAA,EAAmB;AAE/C,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,EAAE,MAAA,EAAQ;AACnB,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,GAAA,EAAK;AAChB,MAAA,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,OAAO,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AACxC,QAAA,CAAA,IAAK,CAAA;AACL,QAAA;AAAA,MACF;AACA,MAAA,KAAA,EAAA;AAAA,IACF;AACA,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,GAAW,MAAA,EAAwB;AAC3D,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAChC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AACxB,EAAA,OAAO,MAAM,EAAA,EAAI;AACf,IAAA,KAAA,EAAA;AACA,IAAA,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,CAAA,GAAI,OAAO,MAAM,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAmB,CAAA,EAAmB;AAE7C,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,EAAE,MAAA,EAAQ;AACnB,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,GAAA,EAAK;AAChB,MAAA,IAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,QAAA,CAAA,IAAK,CAAA;AACL,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAI,CAAA,IAAK,CAAA,CAAE,CAAA,GAAI,CAAC,MAAM,IAAA,EAAM;AAC9B,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AACA,MAAA,KAAA,EAAA;AAAA,IACF;AACA,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAA,CAAY,GAAW,MAAA,EAAwB;AACtD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAIhC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,IAAIC,MAAAA,GAAQ,CAAA;AACZ,IAAA,IAAIC,EAAAA,GAAI,CAAA;AACR,IAAA,OAAOA,EAAAA,GAAI,EAAE,MAAA,EAAQ;AACnB,MAAA,IAAI,CAAA,CAAEA,EAAC,CAAA,KAAM,MAAA,EAAQ;AACnB,QAAA,IAAI,CAAA,CAAEA,EAAAA,GAAI,CAAC,CAAA,KAAM,MAAA,EAAQ;AAEvB,UAAAA,EAAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AACA,QAAA,IAAIA,KAAI,CAAA,IAAK,CAAA,CAAEA,EAAAA,GAAI,CAAC,MAAM,IAAA,EAAM;AAC9B,UAAAA,EAAAA,EAAAA;AACA,UAAA;AAAA,QACF;AACA,QAAAD,MAAAA,EAAAA;AAAA,MACF;AACA,MAAAC,EAAAA,EAAAA;AAAA,IACF;AACA,IAAA,OAAOD,MAAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AACpC,IAAA,IAAI,EAAE,SAAA,CAAU,CAAA,EAAG,IAAI,MAAA,CAAO,MAAM,MAAM,MAAA,EAAQ;AAChD,MAAA,KAAA,EAAA;AACA,MAAA,CAAA,IAAK,MAAA,CAAO,MAAA;AAAA,IACd,CAAA,MAAO;AACL,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAkB,CAAA,EAAmB;AAE5C,EAAA,MAAM,aAAA,GAAgB,CAAA,CAAE,WAAA,CAAY,GAAG,CAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,CAAA,CAAE,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,IAAI,aAAA,KAAkB,EAAA,IAAM,aAAA,IAAiB,cAAA,EAAgB,OAAO,CAAA;AAGpE,EAAA,IAAI,CAAA,CAAE,aAAA,GAAgB,CAAC,CAAA,KAAM,KAAK,OAAO,CAAA;AAGzC,EAAA,MAAM,iBAAiB,aAAA,GAAgB,CAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,CAAA,CAAE,WAAA,CAAY,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAC5D,EAAA,IAAI,cAAA,KAAmB,IAAI,OAAO,CAAA;AAGlC,EAAA,OAAO,GAAG,CAAC,CAAA,CAAA,CAAA;AACb;;;ACnLA,eAAsB,UAAU,IAAA,EAAkC;AAChE,EAAA,MAAM,CAAC,EAAE,YAAA,EAAa,EAAG,EAAE,eAAA,EAAgB,EAAG,EAAE,GAAA,EAAK,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACzE,OAAO,0BAA0B,CAAA;AAAA,IACjC,OAAO,gBAAgB,CAAA;AAAA,IACvB,OAAO,yBAAyB;AAAA,GACjC,CAAA;AACD,EAAA,OAAO,aAAa,IAAA,EAAM;AAAA,IACxB,UAAA,EAAY,CAAC,GAAA,EAAK,CAAA;AAAA,IAClB,eAAA,EAAiB,CAAC,eAAA,EAAiB;AAAA,GACpC,CAAA;AACH;AAEA,eAAsB,YAAY,IAAA,EAAoC;AACpE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,OAAO,oBAAoB,CAAA;AACpD,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA,EAAM,EAAE,kBAAA,EAAoB,OAAO,CAAA;AACvD,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AACjC,IAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,IAAI,CAAA,GAAI,EAAC,EAAE;AAAA,EACtD;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAsB,aAAa,IAAA,EAAmC;AACpE,EAAA,MAAM,EAAE,QAAA,EAAU,aAAA,EAAc,GAAI,MAAM,OAAO,oBAAoB,CAAA;AAKrE,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,aAAA;AAAA,IACH,UAAA,EAAY;AAAA,MACV,GAAI,aAAA,CAAc,UAAA,IAAc,EAAC;AAAA,MACjC,IAAA,EAAM,CAAC,GAAI,aAAA,CAAc,UAAA,EAAY,IAAA,IAAQ,EAAC,EAAI,CAAC,WAAA,EAAa,aAAa,CAAC,CAAA;AAAA,MAC9E,GAAA,EAAK,CAAC,GAAI,aAAA,CAAc,UAAA,EAAY,GAAA,IAAO,EAAC,EAAI,CAAC,WAAA,EAAa,GAAG,CAAC,CAAA;AAAA,MAClE,IAAA,EAAM,CAAC,GAAI,aAAA,CAAc,YAAY,IAAA,IAAQ,EAAC,EAAI,CAAC,WAAA,EAAa,GAAG,CAAA,EAAG,CAAC,OAAO,CAAC;AAAA;AACjF,GACF;AACA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,EAAM,MAAM,CAAA;AAClC,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,MAAA,GAChB,IAAA,GACA,EAAE,MAAM,MAAA,EAAQ,QAAA,EAAU,CAAC,IAAI,CAAA,EAAE;AACxC;AAEA,eAAsB,WAAA,CACpB,MACA,UAAA,EACuB;AACvB,EAAA,MAAM,EAAE,QAAA,EAAAE,SAAAA,EAAU,GAAA,EAAAH,KAAAA,EAAK,MAAAD,KAAAA,EAAK,GAAI,MAAM,OAAO,mBAAmB,CAAA;AAChE,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,0BAA0B,CAAA;AAChE,EAAA,OAAO,aAAa,IAAA,EAAM;AAAA,IACxB,QAAA,EAAAI,SAAAA;AAAA,IACA,GAAA,EAAAH,KAAAA;AAAA,IACA,IAAA,EAAAD,KAAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAOA,eAAsB,oBAAA,CACpB,QAAA,EACA,IAAA,GAA6B,EAAC,EACP;AACvB,EAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,QAAA,EAAU,IAAA,CAAK,eAAe,KAAK,CAAA;AAC5E,EAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,YAAY,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,KAAK,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAa,IAAI,CAAA;AACpC,EAAA,OAAO,WAAA,CAAY,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AAC1C;AAQA,eAAsB,wBAAA,CACpB,QAAA,EACA,IAAA,GAA6B,EAAC,EACP;AACvB,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,oBAAA,CAAqB,QAAA,EAAU,IAAI,CAAA;AAAA,EAClD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAc,MAAA,EAAQ,EAAE,SAAA,EAAW,qBAAA,IAAyB,QAAQ,CAAA;AAAA,EAC7E;AACF;AC/EA,SAAS,SAAS,KAAA,EAAyC;AACzD,EAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,GAAA,CAAI,WAAW,WAAW,CAAA;AAC9D,EAAA,IAAI,KAAA,CAAM,QAAQ,GAAG,CAAA;AACnB,IAAA,OAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,OAAO,MAAM,QAAA,IAAY,CAAA,CAAE,UAAA,CAAW,WAAW,CAAC,CAAA;AAC3E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAAoD;AAC3E,EAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,EAAA,MAAM,IAAA,GAAO,OAAO,GAAA,KAAQ,QAAA,GAAW,CAAC,GAAG,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,GAAM,EAAC;AAC3E,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,CAAE,UAAA,CAAW,WAAW,CAAA,EAAG;AACtD,MAAA,OAAO,CAAA,CAAE,KAAA,CAAM,WAAA,CAAY,MAAM,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAY,QAAA,EAA6B;AAChD,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,EAAU,OAAO,QAAA;AACzC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG,OAAO,SAAS,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACrE,EAAA,IACE,YACA,OAAO,QAAA,KAAa,YACpB,OAAA,IAAW,QAAA,IACV,SAAkD,KAAA,EACnD;AACA,IAAA,OAAO,WAAA,CAAa,QAAA,CAAiD,KAAA,CAAM,QAAQ,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,EAAA;AACT;AAEA,IAAM,mBAAA,GAA+C;AAAA,EACnD,IAAA,EAAM,CAAC,KAAA,KAA8D;AACnE,IAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,MAAA,MAAM,QAAA,GAAW,gBAAgB,KAAK,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA;AACvC,MAAA,uBAAOC,GAAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAY,QAAA,EAAoB,CAAA;AAAA,IACpD;AACA,IAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,KAAA,EAAQ,gBAAM,QAAA,EAAS,CAAA;AAAA,EAChD,CAAA;AAAA;AAAA;AAAA,EAGA,GAAA,EAAK,CAAC,EAAE,QAAA,EAAS,KAAgC;AAC/C,IAAA,uBAAOA,GAAAA,CAAAG,QAAAA,EAAA,EAAG,QAAA,EAAS,CAAA;AAAA,EACrB;AACF,CAAA;AAEA,SAAS,uBAAA,CAAwB;AAAA,EAC/B,IAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,EAA2C;AACzC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,SAA8B,IAAI,CAAA;AAE1D,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,wBAAA,CAAyB,IAAA,EAAM;AAAA,MAC7B,WAAA;AAAA,MACA,UAAA,EAAY;AAAA,KACb,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAChB,MAAA,IAAI,CAAC,SAAA,EAAW,OAAA,CAAQ,IAAI,CAAA;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,WAAW,CAAC,CAAA;AAEtB,EAAA,uBACEL,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,4BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA;AAAA,QAEA,8CAAA;AAAA;AAAA,QAEA,mEAAA;AAAA,QACA,mEAAA;AAAA,QACA,oEAAA;AAAA,QACA,YAAA;AAAA,QACA,0CAAA;AAAA,QACA,6CAAA;AAAA,QACA,eAAA;AAAA,QACA,yIAAA;AAAA,QACA,kEAAA;AAAA,QACA,2DAAA;AAAA,QACA,kGAAA;AAAA,QACA,8DAAA;AAAA,QACA,kCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,yBAAA,EAAwB,EAAA;AAAA,MAEvB,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEO,IAAM,mBAAA,GAAsB,IAAA,CAAK,uBAAA,EAAyB,CAAC,MAAM,IAAA,KAAS;AAC/E,EAAA,OAAO,KAAK,IAAA,KAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,gBAAgB,IAAA,CAAK,WAAA;AAC9D,CAAC;AACD,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AC5H3B,SAAS,aAAA,CAAc,EAAE,IAAA,EAAM,WAAA,EAAY,EAAoC;AACpF,EAAA,MAAM,WAAA,GAAc,KAAK,KAAA,KAAU,WAAA;AACnC,EAAA,MAAM,OAAO,WAAA,IAAe,WAAA;AAC5B,EAAA,uBACED,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA;AAAA,MACA,qBAAA,EAAoB,EAAA;AAAA,MAEpB,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,mGAAA;AAAA,cACA,yCAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAC,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,UAAA,EAAW,eAAY,MAAA,EAAO,CAAA;AAAA,8BAC1DA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,cACd,8BAAcA,GAAAA,CAAC,UAAK,SAAA,EAAU,iBAAA,EAAkB,oBAAC,CAAA,GAAU;AAAA;AAAA;AAAA,SAC9D;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,WAAA,EAA0B,CAAA,EAClE;AAAA;AAAA;AAAA,GACF;AAEJ;ACnCO,SAAS,aAAA,CAAc,EAAE,IAAA,EAAK,EAAoC;AACvE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,GAAA;AACjC,EAAA,uBACED,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,kBAAA,EAAiB,KAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,8BAAA,EAA+B,eAAY,MAAA,EAAO,CAAA;AAAA,QAC7E,uBACCA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,IAAA;AAAA,YACN,SAAA,EAAU,+DAAA;AAAA,YACV,GAAA,EAAI,qBAAA;AAAA,YACJ,MAAA,EAAO,QAAA;AAAA,YAEN,QAAA,EAAA;AAAA;AAAA,4BAGHA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GAE5D;AAEJ;AAMO,SAAS,kBAAA,CAAmB,EAAE,IAAA,EAAK,EAAyC;AACjF,EAAA,uBACED,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,kBAAA,EAAiB,UAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,8BAAA,EAA+B,eAAY,MAAA,EAAO,CAAA;AAAA,wBAC1EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,eAAK,KAAA,EAAM,CAAA;AAAA,wBACvDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,MAAA,EAAC,CAAA;AAAA,wBACzCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,eAAK,SAAA,EAAU;AAAA;AAAA;AAAA,GAC1D;AAEJ;ACjDO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAA+B;AAC7D,EAAA,uBACEA,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,WAAA,EAAa,KAAK,KAAA,KAAU;AAAA;AAAA,GAC9B;AAEJ;ACsDO,IAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxCA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8CAAA;AAAA,QACA,IAAA,KAAS,MAAA,GACL,6BAAA,GACA,IAAA,KAAS,cACP,cAAA,GACA,WAAA;AAAA,QACN;AAAA,OACF;AAAA,MACA,wBAAA,EAAwB,IAAA;AAAA,MACvB,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AAGP;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAgBvB,IAAM,kBAAA,GAAqB,UAAA;AAAA,EAChC,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3CA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,2EAAA;AAAA;AAAA,QAEA,0BAAA;AAAA,QACA,YAAY,MAAA,IACV,iMAAA;AAAA;AAAA,QAEF,YAAY,WAAA,IACV,uUAAA;AAAA;AAAA,QAEF,gPAAA;AAAA,QACA,kFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,wBAAA,EAAuB,EAAA;AAAA,MACtB,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AAGP;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AA2B1B,SAAS,UAAA,CAAW,IAAA,EAAqB,IAAA,GAA0B,EAAC,EAAc;AACvF,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,IAAiB,EAAC;AAEzC,EAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,UAAU,IAAA,GAAO,IAAI,qBAAKA,GAAAA,CAAC,YAAS,IAAA,EAAY,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC3B,IAAA,OAAO,UAAU,SAAA,GAAY,IAAI,qBAAKA,GAAAA,CAAC,iBAAc,IAAA,EAAY,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,qBAAA,CAAsB,IAAI,CAAA,EAAG;AAC/B,IAAA,OAAO,SAAA,CAAU,gBAAgB,CAAA,GAAI,IAAI,CAAA,IAAK,IAAA;AAAA,EAChD;AACA,EAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,UAAU,IAAA,GAAO,IAAI,qBAAKA,GAAAA,CAAC,YAAS,IAAA,EAAY,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC3B,IAAA,OAAO,SAAA,CAAU,YAAY,CAAA,GAAI,IAAI,qBAAKA,GAAAA,CAAC,iBAAc,IAAA,EAAY,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,sBAAA,CAAuB,IAAI,CAAA,EAAG;AAChC,IAAA,OAAO,SAAA,CAAU,iBAAiB,CAAA,GAAI,IAAI,qBAAKA,GAAAA,CAAC,sBAAmB,IAAA,EAAY,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,IAAA,IAAI,SAAA,CAAU,IAAA,EAAM,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAC9C,IAAA,uBACEA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,eAAe,IAAA,CAAK,aAAA;AAAA,QACpB,cAAc,IAAA,CAAK;AAAA;AAAA,KACrB;AAAA,EAEJ;AACA,EAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,SAAA,CAAU,IAAA,GAAO,IAAI,CAAA,oBAAKA,IAAC,QAAA,EAAA,EAAS,IAAA,EAAY,SAAA,EAAW,IAAA,CAAK,aAAA,EAAe,CAAA;AAAA,EACxF;AACA,EAAA,IAAI,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC3B,IAAA,OACE,SAAA,CAAU,YAAY,CAAA,IAAI,oBACxBA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oBAAA,EAAqB,YAAA,EAAW,eAAA,EAAgB,CAAA;AAAA,EAGpE;AAEA,EAAA,OAAO,IAAA;AACT;AAuBO,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CACE;AAAA,IACE,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,wBACJD,IAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,IAAA,KAAS,cAAc,WAAA,GAAc,MAAA,CAAA;AAAA,QAEjE,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,wBACxBC,GAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,UAAA,CAAW,IAAA,EAAM,EAAE,eAAe,aAAA,EAAe,aAAA,EAAe,YAAA,EAAc,CAAA,EAAA,EADvE,CAAA,EAAG,KAAK,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAE7B,CACD,CAAA;AAAA,UACA;AAAA;AAAA;AAAA,KACH;AAGF,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,uBACED,IAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,GAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,SAAA;AAAA,UACC,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YACA,yBAASC,GAAAA,CAAC,SAAI,SAAA,EAAU,UAAA,EAAY,kBAAO,CAAA,GAAS;AAAA;AAAA;AAAA,OACvD;AAAA,IAEJ;AAEA,IAAA,uBACED,IAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,cAAA;AAAA,QACV,GAAA;AAAA,QACA,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,SAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA,mBAASC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,kBAAO,CAAA,GAAS,IAAA;AAAA,UACpD;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;ACjRnB,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MAClD,wBAAA,EAAuB,EAAA;AAAA,MACtB,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAUO,SAAS,iBAAA,CAAkB;AAAA,EAChC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,uBACED,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,MACtB,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,mBAAS,OAAA,EAAQ;AAAA;AAAA;AAAA,GAC9C;AAEJ;ACvDO,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qDAAA,EAAuD,SAAS,CAAA;AAAA,MAC9E,wBAAA,EAAuB,EAAA;AAAA,MACtB,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AC0BA,IAAM,oBAAA,GAAuB,cAAgD,IAAI,CAAA;AAEjF,SAAS,gBAAA,GAA8C;AACrD,EAAA,MAAM,GAAA,GAAM,WAAW,oBAAoB,CAAA;AAC3C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,EACzF;AACA,EAAA,OAAO,GAAA;AACT;AAOO,SAAS,iBAAA,CAAkB;AAAA,EAChC,aAAA,GAAgB,CAAA;AAAA,EAChB,cAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAII,SAAS,aAAa,CAAA;AAChE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA,CAAyB,EAAE,CAAA;AAE3D,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,IAAA,KAAiB;AAChB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,cAAA,GAAiB,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,YAAA,CAAa,gBAAgB,CAAA,GAAI,aAAA,GAAgB,CAAA,GAAI,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,EAC1E,GAAG,CAAC,aAAA,EAAe,QAAA,CAAS,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEjD,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,IAAA,YAAA,CAAa,gBAAgB,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,aAAA,GAAgB,IAAI,CAAC,CAAA;AAAA,EAC1E,GAAG,CAAC,aAAA,EAAe,QAAA,CAAS,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEjD,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,QAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAe,QAAA,CAAS;AAAA,KAC1B,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,aAAA,EAAe,QAAA,EAAU,YAAY;AAAA,GAClD;AAEA,EAAA,uBACEJ,GAAAA,CAAC,oBAAA,CAAqB,UAArB,EAA8B,WAAA,EAAU,uBAAsB,KAAA,EAC7D,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA,EAAI,GAAG,OAAO,CAAA,EACjE,CAAA;AAEJ;AAIO,SAAS,wBAAA,CAAyB;AAAA,EACvC,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA+C;AAC7C,EAAA,MAAM,EAAE,aAAA,EAAe,WAAA,EAAa,QAAA,KAAa,gBAAA,EAAiB;AAClE,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IACpB,MAAO,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAK,QAAA,GAA8B,CAAC,QAAwB,CAAA;AAAA,IACzF,CAAC,QAAQ;AAAA,GACX;AAEA,EAAAK,UAAU,MAAM;AACd,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,aAAA,CAAc,MAAA,EAAQ;AAC5C,MAAA,WAAA,CAAY,aAAa,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,QAAA,EAAU,WAAW,CAAC,CAAA;AAEzC,EAAA,uBACEL,IAAAG,QAAAA,EAAA,EACG,wBAAc,GAAA,CAAI,CAAC,MAAA,EAAQ,GAAA,qBAC1BH,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,4BAAA,EAA8B,GAAA,KAAQ,aAAA,GAAgB,UAAU,QAAQ,CAAA;AAAA,MAKrF,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,KAAA;AAAA;AAAA,IAJE,MAAA,EAAyB,GAAA,IAAO,CAAA,OAAA,EAAU,GAAG,CAAA;AAAA,GAMnD,CAAA,EACH,CAAA;AAEJ;AAIO,SAAS,yBAAA,CAA0B;AAAA,EACxC,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,gBAAA,EAAiB;AAC3C,EAAA,IAAI,aAAA,IAAiB,GAAG,OAAO,IAAA;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,kEAAA,EAAoE,SAAS,CAAA;AAAA,MAC3F,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAW,iBAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ;AAIO,SAAS,yBAAA,CAA0B;AAAA,EACxC,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,MAAM,EAAE,YAAA,EAAc,aAAA,EAAc,GAAI,gBAAA,EAAiB;AACzD,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,8BAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,YAAA,EAAW,iBAAA;AAAA,MACX,UAAU,aAAA,IAAiB,CAAA;AAAA,MAC3B,OAAA,EAAS,YAAA;AAAA,MACR,GAAG,KAAA;AAAA,MAEH,sCAAYA,GAAAA,CAAC,mBAAgB,SAAA,EAAU,UAAA,EAAW,eAAY,MAAA,EAAO;AAAA;AAAA,GACxE;AAEJ;AAIO,SAAS,qBAAA,CAAsB;AAAA,EACpC,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4C;AAC1C,EAAA,MAAM,EAAE,QAAA,EAAU,aAAA,EAAc,GAAI,gBAAA,EAAiB;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,YAAA,EAAW,aAAA;AAAA,MACX,UAAU,aAAA,IAAiB,CAAA;AAAA,MAC3B,OAAA,EAAS,QAAA;AAAA,MACR,GAAG,KAAA;AAAA,MAEH,sCAAYA,GAAAA,CAAC,oBAAiB,SAAA,EAAU,UAAA,EAAW,eAAY,MAAA,EAAO;AAAA;AAAA,GACzE;AAEJ;AAIO,SAAS,qBAAA,CAAsB;AAAA,EACpC,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4C;AAC1C,EAAA,MAAM,EAAE,aAAA,EAAe,aAAA,EAAc,GAAI,gBAAA,EAAiB;AAC1D,EAAA,uBACED,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,aAAA,GAAgB,CAAA;AAAA,QAAE,MAAA;AAAA,QAAK;AAAA;AAAA;AAAA,GAC1B;AAEJ","file":"chunk-Q2BAL2PF.js","sourcesContent":["/**\n * Chat message types — structurally compatible with `vercel/ai` `UIMessage`.\n *\n * Verbatim of the part-type shape from `packages/ai/src/ui/ui-messages.ts`\n * (Apache-2.0, copyright Vercel Inc., see NOTICE). Re-declared standalone so\n * `@theokit/ui` does not take `ai` as a direct dependency — the goal is\n * interop without coupling.\n *\n * Consumer code using `useChat()` from `@ai-sdk/react`:\n *\n * const { messages } = useChat();\n * return messages.map((m) => <ChatMessage message={m} />);\n *\n * Works because the Vercel `UIMessage` shape is structurally assignable to\n * the types declared here.\n */\n\nexport type MessageRole = \"system\" | \"user\" | \"assistant\";\n\n/**\n * Orthogonal attachment shape used by `<AttachmentChip>` and chat composer\n * primitives. Distinct from `FileUIPart` (which is part of the message\n * payload) — `Attachment` is the consumer's pending-upload state.\n */\nexport interface Attachment {\n id: string;\n name: string;\n size?: string;\n type?: string;\n}\n\n/* ─── Provider metadata (opaque structural slot) ─────────────────────── */\n\nexport type ProviderMetadata = Record<string, Record<string, unknown>>;\n\n/* ─── Part types — 11 discriminated kinds ────────────────────────────── */\n\n/**\n * A text part of a message.\n */\nexport interface TextUIPart {\n type: \"text\";\n text: string;\n /** \"streaming\" while tokens arrive; \"done\" when complete. */\n state?: \"streaming\" | \"done\";\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * A reasoning (\"thinking\") part of a message — typically rendered as a\n * collapsible panel.\n */\nexport interface ReasoningUIPart {\n type: \"reasoning\";\n text: string;\n state?: \"streaming\" | \"done\";\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * A file part of a message (image, document, audio, video).\n */\nexport interface FileUIPart {\n type: \"file\";\n /**\n * IANA media type (e.g. `image/png`) or top-level segment (e.g. `image`).\n */\n mediaType: string;\n filename?: string;\n /** URL or data: URL. */\n url: string;\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * A file emitted as part of a reasoning trace (e.g. internal scratchpad).\n */\nexport interface ReasoningFileUIPart {\n type: \"reasoning-file\";\n mediaType: string;\n url: string;\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * A URL source citation.\n */\nexport interface SourceUrlUIPart {\n type: \"source-url\";\n sourceId: string;\n url: string;\n title?: string;\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * A document source citation.\n */\nexport interface SourceDocumentUIPart {\n type: \"source-document\";\n sourceId: string;\n mediaType: string;\n title: string;\n filename?: string;\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * A step boundary marker — used to delimit multi-step agent responses.\n */\nexport interface StepStartUIPart {\n type: \"step-start\";\n}\n\n/**\n * A provider-specific custom content part.\n */\nexport interface CustomContentUIPart {\n type: \"custom\";\n /** Format: `${provider}.${providerType}`. */\n kind: `${string}.${string}`;\n providerMetadata?: ProviderMetadata;\n}\n\n/* ─── Tool invocation states (mirrors Vercel) ────────────────────────── */\n\nexport type ToolInvocationState =\n | \"input-streaming\"\n | \"input-available\"\n | \"approval-requested\"\n | \"approval-responded\"\n | \"output-available\"\n | \"output-error\"\n | \"output-denied\";\n\n/**\n * A tool invocation part — covers both static (typed) and dynamic tools via\n * the `dynamic-tool` discriminator. The `type` field follows the Vercel\n * convention: `tool-${toolName}` for static, `dynamic-tool` for runtime.\n */\nexport interface ToolUIPart {\n /** `tool-${toolName}` (static) or `dynamic-tool` (runtime). */\n type: `tool-${string}` | \"dynamic-tool\";\n toolCallId: string;\n toolName?: string;\n title?: string;\n state: ToolInvocationState;\n input?: unknown;\n output?: unknown;\n errorText?: string;\n providerExecuted?: boolean;\n callProviderMetadata?: ProviderMetadata;\n resultProviderMetadata?: ProviderMetadata;\n approval?: {\n id: string;\n approved?: boolean;\n reason?: string;\n isAutomatic?: boolean;\n };\n}\n\n/**\n * A data part — typed custom application state. The `type` field follows\n * `data-${name}` and `data` carries the payload. Consumers register a\n * renderer per `data-${name}` via the `<ChatMessage>` `dataRenderers` prop.\n */\nexport interface DataUIPart {\n /** `data-${name}` */\n type: `data-${string}`;\n id?: string;\n data: unknown;\n}\n\n/* ─── The discriminated union ────────────────────────────────────────── */\n\nexport type UIMessagePart =\n | TextUIPart\n | ReasoningUIPart\n | FileUIPart\n | ReasoningFileUIPart\n | SourceUrlUIPart\n | SourceDocumentUIPart\n | StepStartUIPart\n | CustomContentUIPart\n | ToolUIPart\n | DataUIPart;\n\n/* ─── Type guards ────────────────────────────────────────────────────── */\n\nexport function isTextUIPart(part: UIMessagePart): part is TextUIPart {\n return part.type === \"text\";\n}\n\nexport function isReasoningUIPart(part: UIMessagePart): part is ReasoningUIPart {\n return part.type === \"reasoning\";\n}\n\nexport function isFileUIPart(part: UIMessagePart): part is FileUIPart {\n return part.type === \"file\";\n}\n\nexport function isReasoningFileUIPart(part: UIMessagePart): part is ReasoningFileUIPart {\n return part.type === \"reasoning-file\";\n}\n\nexport function isSourceUrlUIPart(part: UIMessagePart): part is SourceUrlUIPart {\n return part.type === \"source-url\";\n}\n\nexport function isSourceDocumentUIPart(part: UIMessagePart): part is SourceDocumentUIPart {\n return part.type === \"source-document\";\n}\n\nexport function isStepStartUIPart(part: UIMessagePart): part is StepStartUIPart {\n return part.type === \"step-start\";\n}\n\nexport function isCustomContentUIPart(part: UIMessagePart): part is CustomContentUIPart {\n return part.type === \"custom\";\n}\n\nexport function isToolUIPart(part: UIMessagePart): part is ToolUIPart {\n return part.type === \"dynamic-tool\" || part.type.startsWith(\"tool-\");\n}\n\nexport function isDataUIPart(part: UIMessagePart): part is DataUIPart {\n return part.type.startsWith(\"data-\");\n}\n\n/* ─── Top-level message ──────────────────────────────────────────────── */\n\n/**\n * A chat message in UI form.\n *\n * Field-for-field compatible with `UIMessage` from `vercel/ai` (the AI SDK's\n * `useChat()` return type) — a consumer's `useChat()` messages flow into\n * `<ChatMessage message={msg} />` with zero adapter.\n *\n * `metadata` is opaque (`unknown`) so consumers can attach arbitrary fields\n * (timestamps, model identifiers, request IDs, …) without our type\n * dictating shape.\n */\nexport interface UIMessage {\n id: string;\n role: MessageRole;\n parts: UIMessagePart[];\n metadata?: unknown;\n}\n","/**\n * `<DataPart>` — renders a `DataUIPart` (`type: \"data-${name}\"`).\n *\n * Consumer-defined data parts get routed to a custom renderer via the\n * `dataRenderers` prop on `<ChatMessage>`. Without a matching renderer,\n * the part renders as a compact `<details>` JSON dump (debug-friendly).\n */\nimport { CodeIcon } from \"lucide-react\";\nimport { cn } from \"../../../../lib/cn.js\";\nimport type { DataUIPart } from \"../../../../types/chat.js\";\n\nexport type DataRenderer = (data: unknown, part: DataUIPart) => JSX.Element;\nexport type DataRendererMap = Record<string, DataRenderer>;\n\nexport interface DataPartProps {\n part: DataUIPart;\n /** Map of `data-${name}` → renderer. */\n renderers?: DataRendererMap;\n}\n\nfunction deriveDataName(part: DataUIPart): string {\n return part.type.slice(\"data-\".length);\n}\n\nexport function DataPart({ part, renderers }: DataPartProps): JSX.Element {\n const name = deriveDataName(part);\n const renderer = renderers?.[part.type] ?? renderers?.[name];\n if (renderer) return renderer(part.data, part);\n\n return (\n <details\n className={cn(\"my-2 rounded-md border border-border bg-muted/20 px-3 py-1.5 text-body-sm\")}\n data-theo-data={name}\n >\n <summary className=\"flex cursor-pointer items-center gap-1.5 font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n <CodeIcon className=\"size-3\" aria-hidden=\"true\" />\n <span>data-{name}</span>\n </summary>\n <pre className=\"mt-2 overflow-x-auto border-border border-t pt-2 text-code-sm\">\n <code>{safeStringify(part.data)}</code>\n </pre>\n </details>\n );\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","/**\n * `<FilePart>` — renders a `FileUIPart` as an image preview (`image/*`) or\n * a generic file chip (everything else).\n *\n * Security: only `http(s)` and `data:` URLs render. Anything else degrades\n * to a plain text label.\n */\nimport { FileIcon, ImageIcon } from \"lucide-react\";\nimport { cn } from \"../../../../lib/cn.js\";\nimport { safeHref } from \"../../../../lib/safe-href.js\";\nimport type { FileUIPart } from \"../../../../types/chat.js\";\n\nexport interface FilePartProps {\n part: FileUIPart;\n}\n\nfunction isImage(mediaType: string): boolean {\n return mediaType.startsWith(\"image/\") || mediaType === \"image\";\n}\n\nexport function FilePart({ part }: FilePartProps): JSX.Element {\n const safeUrl = safeHref(part.url);\n const label = part.filename ?? part.url.split(\"/\").pop() ?? \"file\";\n\n if (isImage(part.mediaType)) {\n if (!safeUrl) {\n return (\n <div\n data-slot=\"file-part\"\n className={cn(\n \"my-2 inline-flex items-center gap-2 rounded-md border border-border bg-muted/30 px-3 py-2\",\n \"text-body-sm text-muted-foreground\",\n )}\n >\n <ImageIcon className=\"size-4\" aria-hidden=\"true\" />\n <span>{label}</span>\n <span className=\"text-destructive\">(blocked)</span>\n </div>\n );\n }\n return (\n <figure\n className=\"my-3 overflow-hidden rounded-lg border border-border\"\n data-theo-file=\"image\"\n >\n <img src={safeUrl} alt={label} className=\"block max-w-full\" loading=\"lazy\" />\n {part.filename ? (\n <figcaption className=\"border-border border-t bg-muted/30 px-3 py-1.5 font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {part.filename}\n </figcaption>\n ) : null}\n </figure>\n );\n }\n\n return (\n <div\n className={cn(\n \"my-2 inline-flex items-center gap-2 rounded-md border border-border bg-card px-3 py-2\",\n \"text-body-sm\",\n )}\n data-theo-file=\"generic\"\n >\n <FileIcon className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />\n {safeUrl ? (\n <a href={safeUrl} className=\"text-primary hover:text-primary-deep hover:underline\">\n {label}\n </a>\n ) : (\n <span>{label}</span>\n )}\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {part.mediaType}\n </span>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * `<CodeBlock>` — fenced code block with syntax highlight + copy button.\n *\n * Lazy-loads `shiki` (peer-dep optional). If shiki is not installed, falls\n * back to a plain `<pre><code>` with the language label still visible. The\n * copy button works in both modes (clipboard API only).\n *\n * Inspired by `shadcn.io`'s AI code-block pattern:\n * - language label top-left\n * - copy button top-right, icon swap (Copy → Check) for ~2s after success\n * - keyboard accessible (button is a real <button>)\n * - SSR-safe: highlighted markup is sync-rendered when ready; before\n * hydration, plain text shows (matches Slide's shiki plugin behavior).\n *\n * Used by `parseMarkdownToReact` via the `components.code` override.\n */\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { cn } from \"../cn.js\";\n\nexport interface CodeBlockProps {\n /** The raw source code. Newlines preserved verbatim. */\n code: string;\n /** Language hint (`typescript`, `python`, `bash`, …). Falls through if unknown. */\n language?: string;\n /** Dual-theme map — Shiki theme names. */\n themes?: { light: string; dark: string };\n /** Extra className for the outer wrapper. */\n className?: string;\n}\n\nconst DEFAULT_THEMES = { light: \"github-light\", dark: \"github-dark\" };\n\nlet cachedHighlighter: unknown = null;\nlet highlighterFailed = false;\n\nasync function getHighlighter(themes: { light: string; dark: string }): Promise<unknown> {\n if (cachedHighlighter) return cachedHighlighter;\n if (highlighterFailed) return null;\n try {\n const shiki = await import(\"shiki\");\n cachedHighlighter = await shiki.createHighlighter({\n themes: [themes.light, themes.dark],\n langs: [\n \"ts\",\n \"tsx\",\n \"js\",\n \"jsx\",\n \"python\",\n \"go\",\n \"rust\",\n \"java\",\n \"json\",\n \"yaml\",\n \"bash\",\n \"shell\",\n \"html\",\n \"css\",\n \"sql\",\n \"markdown\",\n ],\n });\n return cachedHighlighter;\n } catch {\n highlighterFailed = true;\n return null;\n }\n}\n\nexport function CodeBlock({ code, language, themes, className }: CodeBlockProps): JSX.Element {\n const [html, setHtml] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n const effectiveThemes = themes ?? DEFAULT_THEMES;\n\n useEffect(() => {\n let cancelled = false;\n if (!language) return;\n getHighlighter(effectiveThemes)\n .then((hl) => {\n if (cancelled || !hl) return;\n try {\n // biome-ignore lint/suspicious/noExplicitAny: shiki Highlighter is untyped here\n const out = (hl as any).codeToHtml(code, {\n lang: language,\n themes: { light: effectiveThemes.light, dark: effectiveThemes.dark },\n defaultColor: \"light\",\n });\n setHtml(out);\n } catch {\n // unknown language or grammar load error — pass through plain\n }\n })\n .catch(() => {\n // peer-dep missing — silent; plain <pre><code> below renders\n });\n return () => {\n cancelled = true;\n };\n }, [code, language, effectiveThemes.light, effectiveThemes.dark, effectiveThemes]);\n\n const handleCopy = async (): Promise<void> => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n /* clipboard denied — silent */\n }\n };\n\n return (\n <div\n className={cn(\n \"group relative my-4 overflow-hidden rounded-lg border border-border bg-muted/30\",\n className,\n )}\n data-theo-code-block=\"\"\n >\n <div className=\"flex items-center justify-between border-border border-b bg-muted/50 px-3 py-1.5\">\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {language || \"text\"}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className={cn(\n \"inline-flex h-7 items-center gap-1.5 rounded-md px-2 text-label\",\n \"text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground\",\n \"focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring\",\n )}\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n >\n {copied ? (\n <>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n <span>Copied</span>\n </>\n ) : (\n <>\n <CopyIcon className=\"size-3.5\" aria-hidden=\"true\" />\n <span>Copy</span>\n </>\n )}\n </button>\n </div>\n {html ? (\n <div\n className=\"[&_pre]:!bg-transparent [&_pre]:!m-0 [&_pre]:!p-0 overflow-x-auto p-3 text-code-sm\"\n // biome-ignore lint/security/noDangerouslySetInnerHtml: Shiki output is sanitized HTML it produced itself; no user input flows through\n dangerouslySetInnerHTML={{ __html: html }}\n />\n ) : (\n <pre className=\"overflow-x-auto p-3 text-code-sm\">\n <code className={language ? `language-${language}` : undefined}>{code}</code>\n </pre>\n )}\n </div>\n );\n}\n","/**\n * `<InlineCode>` — styled inline `<code>` for markdown rendering.\n *\n * Differentiates inline code from fenced code-blocks (which use `<CodeBlock>`)\n * via subtle surface treatment. Per Violet Forge: muted background, mono\n * font, slight horizontal padding.\n */\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../cn.js\";\n\nexport type InlineCodeProps = HTMLAttributes<HTMLElement>;\n\nexport function InlineCode({ className, children, ...props }: InlineCodeProps): JSX.Element {\n return (\n <code\n className={cn(\n \"rounded bg-muted px-1.5 py-0.5 font-mono text-code-sm text-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </code>\n );\n}\n","/**\n * Streaming-safe markdown preprocessor.\n *\n * When markdown arrives token-by-token from an LLM, the tail of the buffer\n * is almost always mid-token: `**bold` (unclosed), `[link` (no `]`), an\n * unterminated ` ```fence`, an unfinished `$math$`. A vanilla markdown\n * parser treats those as literal text — the user sees `**bold` instead of\n * **bold** for the few hundred ms until the matching token arrives. This\n * \"flash\" is the single biggest UX defect of naïve streaming markdown\n * (cf. Streamdown's design note).\n *\n * The trick — adopted from Streamdown (MIT, vercel) and re-implemented\n * here — is to NEVER mutate the original buffer (the model's authoritative\n * stream), but to feed a TRANSIENTLY auto-closed copy to the parser. When\n * the next token actually closes the syntax, the temporary close was a\n * no-op and the real one takes over.\n *\n * Scope:\n * - bold/italic markers: `**`, `__`, `*`, `_`\n * - inline code: single backtick `` ` ``\n * - fenced code: triple-backtick (with optional language)\n * - inline math: `$` … `$`\n * - block math: `$$` … `$$`\n * - links: `[text](url)` — close the `)` if missing\n *\n * Out of scope (yet):\n * - reference-style links `[text][ref]` — rare in LLM output\n * - HTML tags — Tailwind v4 already sanitizes downstream\n * - tables — partial tables render OK as plain text mid-stream\n */\n\n/**\n * Auto-close incomplete markdown tokens in the tail of a streaming buffer.\n * Returns a copy that's safe to pass to the parser; the original buffer\n * stays untouched.\n *\n * `isStreaming = false` short-circuits (returns input unchanged) — the\n * close-tokens are only synthesized while content is still arriving.\n */\nexport function preprocessStreaming(markdown: string, isStreaming = true): string {\n if (!isStreaming) return markdown;\n\n let buf = markdown;\n\n /* ─── Fenced code blocks (highest priority — they swallow everything) */\n // If there's an odd number of ``` runs, the last fence is unclosed.\n const fenceCount = countTripleBackticks(buf);\n if (fenceCount % 2 === 1) {\n // Add a newline + closing fence so the parser sees a complete block.\n buf = `${buf.endsWith(\"\\n\") ? buf : `${buf}\\n`}\\`\\`\\``;\n // Once inside an unclosed fence the rest of the rules don't apply —\n // everything is code text.\n return buf;\n }\n\n /* ─── Block math `$$ … $$` (also greedy) */\n const blockMathCount = countOccurrences(buf, \"$$\");\n if (blockMathCount % 2 === 1) {\n buf = `${buf}$$`;\n return buf;\n }\n\n /* ─── Inline code, single backticks */\n const inlineBackticks = countSingleBackticks(buf);\n if (inlineBackticks % 2 === 1) {\n buf = `${buf}\\``;\n }\n\n /* ─── Inline math `$ … $` (avoid double-counting `$$`) */\n const inlineDollars = countSingleDollars(buf);\n if (inlineDollars % 2 === 1) {\n buf = `${buf}$`;\n }\n\n /* ─── Emphasis pairs */\n // Order matters: close longer markers before shorter (`**` before `*`).\n for (const marker of [\"**\", \"__\", \"*\", \"_\"]) {\n if (countMarker(buf, marker) % 2 === 1) {\n buf = `${buf}${marker}`;\n }\n }\n\n /* ─── Links: `[text](url)` — close the URL paren if missing.\n * Cheap heuristic: find the last `[` after the last `]`, and the last\n * `(` after that with no matching `)`.\n */\n buf = closeUnclosedLink(buf);\n\n return buf;\n}\n\n/* ─── Counting helpers (avoid regex global-state pitfalls) ───────────── */\n\nfunction countTripleBackticks(s: string): number {\n let count = 0;\n let i = 0;\n while (i < s.length) {\n if (s[i] === \"`\" && s[i + 1] === \"`\" && s[i + 2] === \"`\") {\n count++;\n i += 3;\n } else {\n i++;\n }\n }\n return count;\n}\n\nfunction countSingleBackticks(s: string): number {\n // Count ` characters that are NOT part of a ``` run.\n let count = 0;\n let i = 0;\n while (i < s.length) {\n if (s[i] === \"`\") {\n if (s[i + 1] === \"`\" && s[i + 2] === \"`\") {\n i += 3; // skip whole triple\n continue;\n }\n count++;\n }\n i++;\n }\n return count;\n}\n\nfunction countOccurrences(s: string, needle: string): number {\n if (needle.length === 0) return 0;\n let count = 0;\n let i = s.indexOf(needle);\n while (i !== -1) {\n count++;\n i = s.indexOf(needle, i + needle.length);\n }\n return count;\n}\n\nfunction countSingleDollars(s: string): number {\n // Single `$` that is NOT part of `$$`.\n let count = 0;\n let i = 0;\n while (i < s.length) {\n if (s[i] === \"$\") {\n if (s[i + 1] === \"$\") {\n i += 2; // skip whole pair\n continue;\n }\n // also skip escaped \\$\n if (i > 0 && s[i - 1] === \"\\\\\") {\n i++;\n continue;\n }\n count++;\n }\n i++;\n }\n return count;\n}\n\nfunction countMarker(s: string, marker: string): number {\n if (marker.length === 0) return 0;\n // For single-char markers (`*`, `_`), don't count double sequences as 2 —\n // they ARE the double marker. For double-char markers, count occurrences\n // and the single-marker pass below handles leftovers.\n if (marker.length === 1) {\n let count = 0;\n let i = 0;\n while (i < s.length) {\n if (s[i] === marker) {\n if (s[i + 1] === marker) {\n // Part of double marker — skip both.\n i += 2;\n continue;\n }\n if (i > 0 && s[i - 1] === \"\\\\\") {\n i++;\n continue;\n }\n count++;\n }\n i++;\n }\n return count;\n }\n // Multi-char marker (`**`, `__`).\n let count = 0;\n let i = 0;\n while (i <= s.length - marker.length) {\n if (s.substring(i, i + marker.length) === marker) {\n count++;\n i += marker.length;\n } else {\n i++;\n }\n }\n return count;\n}\n\nfunction closeUnclosedLink(s: string): string {\n // Look for the trailing structure `[…](…` with no closing `)`.\n const lastOpenParen = s.lastIndexOf(\"(\");\n const lastCloseParen = s.lastIndexOf(\")\");\n if (lastOpenParen === -1 || lastOpenParen <= lastCloseParen) return s;\n\n // The `(` must be immediately preceded by `]` to be a link.\n if (s[lastOpenParen - 1] !== \"]\") return s;\n\n // Confirm there's a `[` before that `]`.\n const closingBracket = lastOpenParen - 1;\n const openingBracket = s.lastIndexOf(\"[\", closingBracket - 1);\n if (openingBracket === -1) return s;\n\n // Close it.\n return `${s})`;\n}\n","/**\n * Markdown → React pipeline for chat messages.\n *\n * parseMarkdownToReact(md, opts)\n * ├─ preprocessStreaming(md, isStreaming) → auto-close incomplete tokens\n * ├─ parseBody(md) → mdast Root (micromark + GFM)\n * ├─ mdastToHast(mdastTree) → hast Root (allowDangerousHtml=false)\n * ├─ sanitizeHast(hastTree) → hast Root via hast-util-sanitize\n * └─ hastToReact(hastTree) → React tree (jsx-runtime)\n *\n * Every transform lazily imports its peer-dep so the barrel never vendors the\n * markdown stack. Consumers that install the optional peer-deps (already\n * declared by the Slide engine) get rich rendering; consumers that don't get\n * a plain-text fallback via `parseMarkdownToReactSafe`.\n */\nimport type { Root as HastRoot } from \"hast\";\nimport type { Root as MdastRoot } from \"mdast\";\nimport { type ReactElement, createElement } from \"react\";\nimport { preprocessStreaming } from \"./streaming-preprocess.js\";\n\nexport interface ParseMarkdownOptions {\n /**\n * Override individual element renderers. The `components` map is passed\n * through to `hast-util-to-jsx-runtime` (e.g. `{ code: MyCodeBlock }`).\n */\n components?: Record<string, unknown>;\n /**\n * True while tokens are still arriving from the model. Enables the\n * streaming-safe preprocess pass. Default: `false`.\n */\n isStreaming?: boolean;\n}\n\nexport async function parseBody(body: string): Promise<MdastRoot> {\n const [{ fromMarkdown }, { gfmFromMarkdown }, { gfm }] = await Promise.all([\n import(\"mdast-util-from-markdown\"),\n import(\"mdast-util-gfm\"),\n import(\"micromark-extension-gfm\"),\n ]);\n return fromMarkdown(body, {\n extensions: [gfm()],\n mdastExtensions: [gfmFromMarkdown()],\n });\n}\n\nexport async function mdastToHast(tree: MdastRoot): Promise<HastRoot> {\n const { toHast } = await import(\"mdast-util-to-hast\");\n const hast = toHast(tree, { allowDangerousHtml: false });\n if (!hast || hast.type !== \"root\") {\n return { type: \"root\", children: hast ? [hast] : [] } as HastRoot;\n }\n return hast as HastRoot;\n}\n\nexport async function sanitizeHast(tree: HastRoot): Promise<HastRoot> {\n const { sanitize, defaultSchema } = await import(\"hast-util-sanitize\");\n // Allow class names on `pre`/`code` so syntax-highlight passes survive.\n // `defaultSchema.attributes` uses a wider union than hast-util-sanitize's\n // PropertyDefinition; cast to satisfy the parameter type while preserving\n // the same runtime shape `defaultSchema` already uses.\n const schema = {\n ...defaultSchema,\n attributes: {\n ...(defaultSchema.attributes ?? {}),\n code: [...(defaultSchema.attributes?.code ?? []), [\"className\", /^language-./]],\n pre: [...(defaultSchema.attributes?.pre ?? []), [\"className\", /./]],\n span: [...(defaultSchema.attributes?.span ?? []), [\"className\", /./], [\"style\"]],\n },\n } as Parameters<typeof sanitize>[1];\n const safe = sanitize(tree, schema);\n return safe.type === \"root\"\n ? (safe as HastRoot)\n : ({ type: \"root\", children: [safe] } as HastRoot);\n}\n\nexport async function hastToReact(\n tree: HastRoot,\n components?: Record<string, unknown>,\n): Promise<ReactElement> {\n const { Fragment, jsx, jsxs } = await import(\"react/jsx-runtime\");\n const { toJsxRuntime } = await import(\"hast-util-to-jsx-runtime\");\n return toJsxRuntime(tree, {\n Fragment,\n jsx,\n jsxs,\n components,\n }) as ReactElement;\n}\n\n/**\n * Public entry point. Returns a Promise<ReactElement> ready to render inline.\n * If any peer-dep is missing at runtime, the function rejects — callers\n * should use `parseMarkdownToReactSafe` for a graceful fallback.\n */\nexport async function parseMarkdownToReact(\n markdown: string,\n opts: ParseMarkdownOptions = {},\n): Promise<ReactElement> {\n const preprocessed = preprocessStreaming(markdown, opts.isStreaming ?? false);\n const mdast = await parseBody(preprocessed);\n const hast = await mdastToHast(mdast);\n const safe = await sanitizeHast(hast);\n return hastToReact(safe, opts.components);\n}\n\n/**\n * Same as `parseMarkdownToReact` but returns a plain-text `<span>` fallback\n * if any peer-dep is missing (instead of rejecting). Used by `<ChatMessage>`\n * to keep the surface rendering when consumers opted out of the markdown\n * stack.\n */\nexport async function parseMarkdownToReactSafe(\n markdown: string,\n opts: ParseMarkdownOptions = {},\n): Promise<ReactElement> {\n try {\n return await parseMarkdownToReact(markdown, opts);\n } catch {\n return createElement(\"span\", { className: \"whitespace-pre-wrap\" }, markdown);\n }\n}\n","\"use client\";\n\n/**\n * `<ChatMessageResponse>` — markdown text renderer for a chat message body.\n *\n * Wraps `parseMarkdownToReact` with React-friendly memoization. Re-renders\n * ONLY when `text` or `isStreaming` change, so streaming a long response\n * doesn't re-parse the entire conversation history per token.\n *\n * Internally swaps the default `<code>` element for `<CodeBlock>` (fenced)\n * or `<InlineCode>` (inline), per shadcn.io's AI code-block pattern.\n *\n * Component override pattern is forked from `vercel/ai-elements`\n * `<MessageResponse>` (Apache-2.0, see NOTICE).\n */\nimport { memo, useEffect, useState } from \"react\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { CodeBlock } from \"../../../lib/markdown/code-block.js\";\nimport { InlineCode } from \"../../../lib/markdown/inline-code.js\";\nimport { parseMarkdownToReactSafe } from \"../../../lib/markdown/parser.js\";\n\nexport interface ChatMessageResponseProps {\n /** Raw markdown text from the model. */\n text: string;\n /**\n * True while tokens are still arriving. Enables the streaming-safe\n * preprocess pass (auto-closes incomplete `**bold`, fences, links, math).\n */\n isStreaming?: boolean;\n /** Extra className on the prose wrapper. */\n className?: string;\n}\n\n/**\n * Decide whether a hast `code` element is inline (single-backtick) or a\n * fenced block. Heuristic: presence of `language-X` className on `<code>`,\n * or being wrapped in `<pre>` (the runtime sees that as parent). We can't\n * see the parent here, so we use the className signal — fenced code from\n * mdast-util-from-markdown always carries `language-*`.\n */\nfunction isFenced(props: Record<string, unknown>): boolean {\n const cls = props.className as unknown as string | string[] | undefined;\n if (typeof cls === \"string\") return cls.startsWith(\"language-\");\n if (Array.isArray(cls))\n return cls.some((c) => typeof c === \"string\" && c.startsWith(\"language-\"));\n return false;\n}\n\nfunction extractLanguage(props: Record<string, unknown>): string | undefined {\n const cls = props.className as unknown as string | string[] | undefined;\n const list = typeof cls === \"string\" ? [cls] : Array.isArray(cls) ? cls : [];\n for (const c of list) {\n if (typeof c === \"string\" && c.startsWith(\"language-\")) {\n return c.slice(\"language-\".length);\n }\n }\n return undefined;\n}\n\nfunction extractText(children: ReactNode): string {\n if (typeof children === \"string\") return children;\n if (Array.isArray(children)) return children.map(extractText).join(\"\");\n if (\n children &&\n typeof children === \"object\" &&\n \"props\" in children &&\n (children as { props?: { children?: ReactNode } }).props\n ) {\n return extractText((children as { props: { children?: ReactNode } }).props.children);\n }\n return \"\";\n}\n\nconst MARKDOWN_COMPONENTS: Record<string, unknown> = {\n code: (props: Record<string, unknown> & { children?: ReactNode }) => {\n if (isFenced(props)) {\n const language = extractLanguage(props);\n const code = extractText(props.children);\n return <CodeBlock code={code} language={language} />;\n }\n return <InlineCode {...props}>{props.children}</InlineCode>;\n },\n // Strip the default `<pre>` since `<CodeBlock>` ships its own wrapper.\n // Inline `<pre>` still works for raw whitespace-preserving text.\n pre: ({ children }: { children?: ReactNode }) => {\n return <>{children}</>;\n },\n};\n\nfunction ChatMessageResponseImpl({\n text,\n isStreaming = false,\n className,\n}: ChatMessageResponseProps): ReactElement {\n const [tree, setTree] = useState<ReactElement | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n parseMarkdownToReactSafe(text, {\n isStreaming,\n components: MARKDOWN_COMPONENTS,\n }).then((next) => {\n if (!cancelled) setTree(next);\n });\n return () => {\n cancelled = true;\n };\n }, [text, isStreaming]);\n\n return (\n <div\n data-slot=\"chat-message-response-impl\"\n className={cn(\n \"prose-theo max-w-none text-body-md text-foreground leading-relaxed\",\n // First/last child margin reset — fork from vercel/ai-elements\n \"[&>*:first-child]:mt-0 [&>*:last-child]:mb-0\",\n // Heading sizes inside chat use our typescale, not browser defaults\n \"[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:font-semibold [&_h1]:text-title-lg\",\n \"[&_h2]:mt-3 [&_h2]:mb-2 [&_h2]:font-semibold [&_h2]:text-title-md\",\n \"[&_h3]:mt-3 [&_h3]:mb-1.5 [&_h3]:font-semibold [&_h3]:text-body-lg\",\n \"[&_p]:my-2\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-5\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-5\",\n \"[&_li]:my-0.5\",\n \"[&_blockquote]:my-2 [&_blockquote]:border-primary/40 [&_blockquote]:border-l-2 [&_blockquote]:pl-3 [&_blockquote]:text-muted-foreground\",\n \"[&_a:hover]:text-primary-deep [&_a]:text-primary [&_a]:underline\",\n \"[&_table]:my-3 [&_table]:w-full [&_table]:border-collapse\",\n \"[&_th]:border [&_th]:border-border [&_th]:bg-muted/40 [&_th]:px-3 [&_th]:py-1.5 [&_th]:text-left\",\n \"[&_td]:border [&_td]:border-border [&_td]:px-3 [&_td]:py-1.5\",\n \"[&_hr]:my-4 [&_hr]:border-border\",\n className,\n )}\n data-theo-chat-response=\"\"\n >\n {tree}\n </div>\n );\n}\n\nexport const ChatMessageResponse = memo(ChatMessageResponseImpl, (prev, next) => {\n return prev.text === next.text && prev.isStreaming === next.isStreaming;\n});\nChatMessageResponse.displayName = \"ChatMessageResponse\";\n","/**\n * `<ReasoningPart>` — renders a `ReasoningUIPart` as a native `<details>`\n * collapsible. The summary shows \"Show reasoning\" / \"Hide reasoning\";\n * expanded content is rendered as markdown via `<ChatMessageResponse>`.\n *\n * Native `<details>` (vs a JS-driven Collapsible) — zero JS for the toggle,\n * keyboard accessible by default, persists state via the DOM.\n */\nimport { BrainCircuitIcon } from \"lucide-react\";\nimport { cn } from \"../../../../lib/cn.js\";\nimport type { ReasoningUIPart } from \"../../../../types/chat.js\";\nimport { ChatMessageResponse } from \"../chat-message-response.js\";\n\nexport interface ReasoningPartProps {\n part: ReasoningUIPart;\n /** Open by default. Useful while the model is still streaming reasoning. */\n defaultOpen?: boolean;\n}\n\nexport function ReasoningPart({ part, defaultOpen }: ReasoningPartProps): JSX.Element {\n const isStreaming = part.state === \"streaming\";\n const open = defaultOpen ?? isStreaming;\n return (\n <details\n data-slot=\"reasoning-part\"\n className={cn(\n \"my-2 rounded-md border border-border bg-muted/20 px-3 py-2\",\n \"[&[open]]:bg-muted/40\",\n )}\n open={open}\n data-theo-reasoning=\"\"\n >\n <summary\n className={cn(\n \"cursor-pointer list-none font-mono text-label-caps text-muted-foreground uppercase tracking-wider\",\n \"flex items-center gap-1.5 marker:hidden\",\n \"transition-colors hover:text-foreground\",\n )}\n >\n <BrainCircuitIcon className=\"size-3.5\" aria-hidden=\"true\" />\n <span>Reasoning</span>\n {isStreaming ? <span className=\"text-primary/80\">…</span> : null}\n </summary>\n <div className=\"mt-2 border-border border-t pt-2\">\n <ChatMessageResponse text={part.text} isStreaming={isStreaming} />\n </div>\n </details>\n );\n}\n","/**\n * `<SourceUrlPart>` + `<SourceDocumentPart>` — render `source-url` and\n * `source-document` citations as compact link chips.\n */\nimport { ExternalLinkIcon, FileTextIcon } from \"lucide-react\";\nimport { cn } from \"../../../../lib/cn.js\";\nimport { safeHref } from \"../../../../lib/safe-href.js\";\nimport type { SourceDocumentUIPart, SourceUrlUIPart } from \"../../../../types/chat.js\";\n\nexport interface SourceUrlPartProps {\n part: SourceUrlUIPart;\n}\n\nexport function SourceUrlPart({ part }: SourceUrlPartProps): JSX.Element {\n const safe = safeHref(part.url);\n const label = part.title || part.url;\n return (\n <span\n data-slot=\"source-url-part\"\n className={cn(\n \"my-1 inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-card px-2 py-1\",\n \"align-middle font-mono text-label\",\n )}\n data-theo-source=\"url\"\n >\n <ExternalLinkIcon className=\"size-3 text-muted-foreground\" aria-hidden=\"true\" />\n {safe ? (\n <a\n href={safe}\n className=\"truncate text-primary hover:text-primary-deep hover:underline\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {label}\n </a>\n ) : (\n <span className=\"truncate text-muted-foreground\">{label}</span>\n )}\n </span>\n );\n}\n\nexport interface SourceDocumentPartProps {\n part: SourceDocumentUIPart;\n}\n\nexport function SourceDocumentPart({ part }: SourceDocumentPartProps): JSX.Element {\n return (\n <span\n data-slot=\"source-document-part\"\n className={cn(\n \"my-1 inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-card px-2 py-1\",\n \"align-middle font-mono text-label\",\n )}\n data-theo-source=\"document\"\n >\n <FileTextIcon className=\"size-3 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"truncate text-foreground\">{part.title}</span>\n <span className=\"text-muted-foreground\">·</span>\n <span className=\"text-muted-foreground\">{part.mediaType}</span>\n </span>\n );\n}\n","/**\n * `<TextPart>` — renders a `TextUIPart`.\n *\n * Delegates to `<ChatMessageResponse>` which handles markdown + streaming\n * preprocess + code-block highlight + memoization.\n */\nimport type { TextUIPart } from \"../../../../types/chat.js\";\nimport { ChatMessageResponse } from \"../chat-message-response.js\";\n\nexport interface TextPartProps {\n part: TextUIPart;\n}\n\nexport function TextPart({ part }: TextPartProps): JSX.Element {\n return (\n <ChatMessageResponse\n data-slot=\"text-part\"\n text={part.text}\n isStreaming={part.state === \"streaming\"}\n />\n );\n}\n","\"use client\";\n\n/**\n * `<ChatMessage>` — render a chat turn from a `UIMessage` (Vercel AI SDK\n * `parts: UIMessagePart[]` shape).\n *\n * Forked structural shell from `vercel/ai-elements` `<Message>` +\n * `<MessageContent>` (Apache-2.0, see NOTICE). The role-discriminated\n * styling (user-aligned right with secondary bubble, assistant-aligned\n * left with primary accent border) preserves TheoUI's Violet Forge look.\n *\n * Two consumption shapes:\n *\n * 1. **Convenience** — pass a full `UIMessage`, parts are dispatched to\n * their built-in renderers automatically:\n *\n * <ChatMessage message={msg} />\n *\n * 2. **Composable** — render children explicitly when you need to\n * compose actions/branching/custom parts:\n *\n * <ChatMessage.Root from=\"assistant\">\n * <ChatMessage.Content>\n * <ChatMessageResponse text=\"Hello **world**\" />\n * </ChatMessage.Content>\n * <ChatMessageToolbar>\n * <ChatMessageActions>\n * <ChatMessageAction tooltip=\"Copy\"><CopyIcon /></ChatMessageAction>\n * </ChatMessageActions>\n * </ChatMessageToolbar>\n * </ChatMessage.Root>\n */\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport {\n type DataUIPart,\n type FileUIPart,\n type MessageRole,\n type ReasoningFileUIPart,\n type ReasoningUIPart,\n type SourceDocumentUIPart,\n type SourceUrlUIPart,\n type TextUIPart,\n type ToolUIPart,\n type UIMessage,\n type UIMessagePart,\n isDataUIPart,\n isFileUIPart,\n isReasoningFileUIPart,\n isReasoningUIPart,\n isSourceDocumentUIPart,\n isSourceUrlUIPart,\n isStepStartUIPart,\n isTextUIPart,\n isToolUIPart,\n} from \"../../../types/chat.js\";\nimport {\n AgentToolRenderer,\n type ClassifyTool,\n type ToolRendererRegistry,\n} from \"../agent-tool-renderer/agent-tool-renderer.js\";\nimport { DataPart, type DataRendererMap } from \"./parts/data-part.js\";\nimport { FilePart } from \"./parts/file-part.js\";\nimport { ReasoningPart } from \"./parts/reasoning-part.js\";\nimport { SourceDocumentPart, SourceUrlPart } from \"./parts/source-part.js\";\nimport { TextPart } from \"./parts/text-part.js\";\n\n/* ─── <ChatMessage.Root> ─────────────────────────────────────────────── */\n\nexport type ChatMessageRootProps = HTMLAttributes<HTMLDivElement> & {\n /** Sender role — controls layout (right-aligned bubble for `user`, left for `assistant`/`system`). */\n from: MessageRole;\n};\n\nexport const ChatMessageRoot = forwardRef<HTMLDivElement, ChatMessageRootProps>(\n ({ className, from, children, ...props }, ref) => (\n <div\n data-slot=\"chat-message-root\"\n ref={ref}\n className={cn(\n \"group flex w-full max-w-[95%] flex-col gap-2\",\n from === \"user\"\n ? \"is-user ml-auto justify-end\"\n : from === \"assistant\"\n ? \"is-assistant\"\n : \"is-system\",\n className,\n )}\n data-theo-chat-message={from}\n {...props}\n >\n {children}\n </div>\n ),\n);\nChatMessageRoot.displayName = \"ChatMessageRoot\";\n\n/* ─── <ChatMessage.Content> ──────────────────────────────────────────── */\n\nexport type ChatMessageContentVariant = \"contained\" | \"flat\";\n\nexport interface ChatMessageContentProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * `contained` (default) — bubble surface (background + padding + radius).\n * Applied to user role automatically. Assistant defaults to `flat`.\n *\n * `flat` — no bubble, content flows directly. Use for assistant or system.\n */\n variant?: ChatMessageContentVariant;\n}\n\nexport const ChatMessageContent = forwardRef<HTMLDivElement, ChatMessageContentProps>(\n ({ className, variant, children, ...props }, ref) => (\n <div\n data-slot=\"chat-message-content\"\n ref={ref}\n className={cn(\n \"flex w-fit min-w-0 max-w-full flex-col gap-2 overflow-hidden text-body-md\",\n // User bubble — secondary surface, right-aligned (within the `is-user` group)\n \"group-[.is-user]:ml-auto\",\n variant !== \"flat\" &&\n \"group-[.is-user]:rounded-2xl group-[.is-user]:rounded-tr-md group-[.is-user]:border group-[.is-user]:border-border/40 group-[.is-user]:bg-secondary group-[.is-user]:px-4 group-[.is-user]:py-3\",\n // Assistant card — primary accent border-left\n variant === \"contained\" &&\n \"group-[.is-assistant]:rounded-2xl group-[.is-assistant]:rounded-tl-md group-[.is-assistant]:border group-[.is-assistant]:border-border/40 group-[.is-assistant]:border-l-2 group-[.is-assistant]:border-l-primary group-[.is-assistant]:bg-card group-[.is-assistant]:px-5 group-[.is-assistant]:py-4 group-[.is-assistant]:shadow-sm\",\n // System callout — accent-deep border\n \"group-[.is-system]:rounded-lg group-[.is-system]:border group-[.is-system]:border-accent-deep/40 group-[.is-system]:border-l-4 group-[.is-system]:bg-accent/10 group-[.is-system]:px-4 group-[.is-system]:py-2 group-[.is-system]:text-body-sm\",\n \"group-[.is-assistant]:text-foreground group-[.is-user]:text-secondary-foreground\",\n className,\n )}\n data-theo-chat-content=\"\"\n {...props}\n >\n {children}\n </div>\n ),\n);\nChatMessageContent.displayName = \"ChatMessageContent\";\n\n/* ─── Part dispatch ──────────────────────────────────────────────────── */\n\nexport interface RenderPartOptions {\n /** Consumer-defined renderers for `data-${name}` parts. */\n dataRenderers?: DataRendererMap;\n /** Override built-in renderers per part `type`. */\n partRenderers?: PartRendererMap;\n /** Registry of rich tool renderers keyed by classification kind (M5-3). */\n toolRenderers?: ToolRendererRegistry;\n /** Override the default tool classifier (M5-3). */\n classifyTool?: ClassifyTool;\n}\n\nexport type PartRendererMap = Partial<{\n text: (part: TextUIPart) => ReactNode;\n reasoning: (part: ReasoningUIPart) => ReactNode;\n \"reasoning-file\": (part: ReasoningFileUIPart) => ReactNode;\n file: (part: FileUIPart) => ReactNode;\n \"source-url\": (part: SourceUrlUIPart) => ReactNode;\n \"source-document\": (part: SourceDocumentUIPart) => ReactNode;\n tool: (part: ToolUIPart) => ReactNode;\n data: (part: DataUIPart) => ReactNode;\n \"step-start\": () => ReactNode;\n}>;\n\nexport function renderPart(part: UIMessagePart, opts: RenderPartOptions = {}): ReactNode {\n const overrides = opts.partRenderers ?? {};\n\n if (isTextUIPart(part)) {\n return overrides.text?.(part) ?? <TextPart part={part} />;\n }\n if (isReasoningUIPart(part)) {\n return overrides.reasoning?.(part) ?? <ReasoningPart part={part} />;\n }\n if (isReasoningFileUIPart(part)) {\n return overrides[\"reasoning-file\"]?.(part) ?? null;\n }\n if (isFileUIPart(part)) {\n return overrides.file?.(part) ?? <FilePart part={part} />;\n }\n if (isSourceUrlUIPart(part)) {\n return overrides[\"source-url\"]?.(part) ?? <SourceUrlPart part={part} />;\n }\n if (isSourceDocumentUIPart(part)) {\n return overrides[\"source-document\"]?.(part) ?? <SourceDocumentPart part={part} />;\n }\n if (isToolUIPart(part)) {\n if (overrides.tool) return overrides.tool(part);\n return (\n <AgentToolRenderer\n part={part}\n toolRenderers={opts.toolRenderers}\n classifyTool={opts.classifyTool}\n />\n );\n }\n if (isDataUIPart(part)) {\n return overrides.data?.(part) ?? <DataPart part={part} renderers={opts.dataRenderers} />;\n }\n if (isStepStartUIPart(part)) {\n return (\n overrides[\"step-start\"]?.() ?? (\n <hr className=\"my-3 border-border\" aria-label=\"Step boundary\" />\n )\n );\n }\n // CustomContentUIPart, or any unhandled future kind — render nothing.\n return null;\n}\n\n/* ─── <ChatMessage> convenience ──────────────────────────────────────── */\n\nexport interface ChatMessageProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** The UI message to render. Parts are dispatched automatically. */\n message: UIMessage;\n /** Optional avatar slot rendered before assistant/system content. */\n avatar?: ReactNode;\n /** Optional toolbar (copy / regenerate / branch nav) rendered below the content. */\n actions?: ReactNode;\n /** Variant of the content bubble. */\n variant?: ChatMessageContentVariant;\n /** Override built-in part renderers. */\n partRenderers?: PartRendererMap;\n /** Renderers for `data-${name}` parts. */\n dataRenderers?: DataRendererMap;\n /** Registry of rich tool renderers keyed by classification kind (M5-3). */\n toolRenderers?: ToolRendererRegistry;\n /** Override the default tool classifier (M5-3). */\n classifyTool?: ClassifyTool;\n}\n\nexport const ChatMessage = forwardRef<HTMLDivElement, ChatMessageProps>(\n (\n {\n message,\n avatar,\n actions,\n variant,\n partRenderers,\n dataRenderers,\n toolRenderers,\n classifyTool,\n className,\n ...props\n },\n ref,\n ) => {\n const inner = (\n <ChatMessageContent\n variant={variant ?? (message.role === \"assistant\" ? \"contained\" : undefined)}\n >\n {message.parts.map((part, idx) => (\n <div key={`${part.type}-${idx}`}>\n {renderPart(part, { dataRenderers, partRenderers, toolRenderers, classifyTool })}\n </div>\n ))}\n {actions}\n </ChatMessageContent>\n );\n\n if (message.role === \"user\") {\n return (\n <ChatMessageRoot\n data-slot=\"chat-message\"\n ref={ref}\n from=\"user\"\n className={className}\n {...props}\n >\n {inner}\n {avatar ? <div className=\"shrink-0\">{avatar}</div> : null}\n </ChatMessageRoot>\n );\n }\n\n return (\n <ChatMessageRoot\n data-slot=\"chat-message\"\n ref={ref}\n from={message.role}\n className={className}\n {...props}\n >\n {avatar ? <div className=\"shrink-0\">{avatar}</div> : null}\n {inner}\n </ChatMessageRoot>\n );\n },\n);\nChatMessage.displayName = \"ChatMessage\";\n","/**\n * `<ChatMessageActions>` + `<ChatMessageAction>` — footer toolbar for a chat\n * message (copy, regenerate, thumbs up/down, share, edit, …).\n *\n * Forked from `vercel/ai-elements` `<MessageActions>` + `<MessageAction>`\n * (Apache-2.0, see NOTICE). Adapted to TheoUI primitives: `<Button>` from\n * `@theokit/ui` instead of shadcn, no Tooltip primitive yet (Vercel uses\n * one — we render the `tooltip` prop as a `title` attribute for now; a\n * proper Tooltip primitive lands in a follow-up RFC).\n */\nimport type { ComponentProps, HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { Button } from \"../../primitives/button/index.js\";\n\nexport type ChatMessageActionsProps = HTMLAttributes<HTMLDivElement>;\n\nexport function ChatMessageActions({\n className,\n children,\n ...props\n}: ChatMessageActionsProps): JSX.Element {\n return (\n <div\n data-slot=\"chat-message-actions\"\n className={cn(\"flex items-center gap-1\", className)}\n data-theo-chat-actions=\"\"\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type ChatMessageActionProps = ComponentProps<typeof Button> & {\n /** Tooltip text — rendered as native `title` for now. */\n tooltip?: string;\n /** Accessible label (used by screen readers when only an icon is visible). */\n label?: string;\n children?: ReactNode;\n};\n\nexport function ChatMessageAction({\n tooltip,\n label,\n variant = \"ghost\",\n size = \"icon\",\n className,\n children,\n ...props\n}: ChatMessageActionProps): JSX.Element {\n return (\n <Button\n data-slot=\"chat-message-action\"\n type=\"button\"\n variant={variant}\n size={size}\n title={tooltip}\n className={cn(className)}\n {...props}\n >\n {children}\n <span className=\"sr-only\">{label || tooltip}</span>\n </Button>\n );\n}\n","/**\n * `<ChatMessageToolbar>` — bottom-of-message bar holding actions + branch nav.\n * Forked from `vercel/ai-elements` `<MessageToolbar>` (Apache-2.0, NOTICE).\n */\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport type ChatMessageToolbarProps = HTMLAttributes<HTMLDivElement>;\n\nexport function ChatMessageToolbar({\n className,\n children,\n ...props\n}: ChatMessageToolbarProps): JSX.Element {\n return (\n <div\n data-slot=\"chat-message-toolbar\"\n className={cn(\"mt-3 flex w-full items-center justify-between gap-3\", className)}\n data-theo-chat-toolbar=\"\"\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Message branching navigation — render multiple alternate responses for a\n * single conversation turn and let the user swipe between them.\n *\n * Forked from `vercel/ai-elements` `<MessageBranch*>` family (Apache-2.0,\n * see NOTICE). Adapted to TheoUI primitives — replaces shadcn `Button` +\n * `ButtonGroup` with our `<Button>` (no ButtonGroup primitive yet; rendered\n * as a plain wrapper).\n *\n * Composition:\n *\n * <ChatMessageBranch>\n * <ChatMessageBranchContent>\n * <FirstResponse />\n * <SecondResponse />\n * <ThirdResponse />\n * </ChatMessageBranchContent>\n * <ChatMessageBranchSelector>\n * <ChatMessageBranchPrevious />\n * <ChatMessageBranchPage />\n * <ChatMessageBranchNext />\n * </ChatMessageBranchSelector>\n * </ChatMessageBranch>\n */\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport {\n type ComponentProps,\n type HTMLAttributes,\n type ReactElement,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { Button } from \"../../primitives/button/index.js\";\n\ninterface MessageBranchContextValue {\n currentBranch: number;\n totalBranches: number;\n goToPrevious: () => void;\n goToNext: () => void;\n branches: ReactElement[];\n setBranches: (branches: ReactElement[]) => void;\n}\n\nconst MessageBranchContext = createContext<MessageBranchContextValue | null>(null);\n\nfunction useMessageBranch(): MessageBranchContextValue {\n const ctx = useContext(MessageBranchContext);\n if (!ctx) {\n throw new Error(\"ChatMessageBranch* components must be wrapped in <ChatMessageBranch>.\");\n }\n return ctx;\n}\n\nexport type ChatMessageBranchProps = HTMLAttributes<HTMLDivElement> & {\n defaultBranch?: number;\n onBranchChange?: (branchIndex: number) => void;\n};\n\nexport function ChatMessageBranch({\n defaultBranch = 0,\n onBranchChange,\n className,\n ...props\n}: ChatMessageBranchProps): JSX.Element {\n const [currentBranch, setCurrentBranch] = useState(defaultBranch);\n const [branches, setBranches] = useState<ReactElement[]>([]);\n\n const handleChange = useCallback(\n (next: number) => {\n setCurrentBranch(next);\n onBranchChange?.(next);\n },\n [onBranchChange],\n );\n\n const goToPrevious = useCallback(() => {\n handleChange(currentBranch > 0 ? currentBranch - 1 : branches.length - 1);\n }, [currentBranch, branches.length, handleChange]);\n\n const goToNext = useCallback(() => {\n handleChange(currentBranch < branches.length - 1 ? currentBranch + 1 : 0);\n }, [currentBranch, branches.length, handleChange]);\n\n const value = useMemo<MessageBranchContextValue>(\n () => ({\n branches,\n currentBranch,\n goToNext,\n goToPrevious,\n setBranches,\n totalBranches: branches.length,\n }),\n [branches, currentBranch, goToNext, goToPrevious],\n );\n\n return (\n <MessageBranchContext.Provider data-slot=\"chat-message-branch\" value={value}>\n <div className={cn(\"grid w-full gap-2\", className)} {...props} />\n </MessageBranchContext.Provider>\n );\n}\n\nexport type ChatMessageBranchContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport function ChatMessageBranchContent({\n children,\n ...props\n}: ChatMessageBranchContentProps): JSX.Element {\n const { currentBranch, setBranches, branches } = useMessageBranch();\n const childrenArray = useMemo(\n () => (Array.isArray(children) ? (children as ReactElement[]) : [children as ReactElement]),\n [children],\n );\n\n useEffect(() => {\n if (branches.length !== childrenArray.length) {\n setBranches(childrenArray);\n }\n }, [childrenArray, branches, setBranches]);\n\n return (\n <>\n {childrenArray.map((branch, idx) => (\n <div\n className={cn(\"grid gap-2 overflow-hidden\", idx === currentBranch ? \"block\" : \"hidden\")}\n key={\n // Prefer a stable element key; fall back to index\n (branch as ReactElement)?.key ?? `branch-${idx}`\n }\n {...props}\n >\n {branch}\n </div>\n ))}\n </>\n );\n}\n\nexport type ChatMessageBranchSelectorProps = HTMLAttributes<HTMLDivElement>;\n\nexport function ChatMessageBranchSelector({\n className,\n ...props\n}: ChatMessageBranchSelectorProps): JSX.Element | null {\n const { totalBranches } = useMessageBranch();\n if (totalBranches <= 1) return null;\n return (\n <div\n className={cn(\"inline-flex items-center gap-0.5 rounded-md border border-border\", className)}\n role=\"group\"\n aria-label=\"Branch selector\"\n {...props}\n />\n );\n}\n\nexport type ChatMessageBranchPreviousProps = ComponentProps<typeof Button>;\n\nexport function ChatMessageBranchPrevious({\n children,\n ...props\n}: ChatMessageBranchPreviousProps): JSX.Element {\n const { goToPrevious, totalBranches } = useMessageBranch();\n return (\n <Button\n data-slot=\"chat-message-branch-previous\"\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Previous branch\"\n disabled={totalBranches <= 1}\n onClick={goToPrevious}\n {...props}\n >\n {children ?? <ChevronLeftIcon className=\"size-3.5\" aria-hidden=\"true\" />}\n </Button>\n );\n}\n\nexport type ChatMessageBranchNextProps = ComponentProps<typeof Button>;\n\nexport function ChatMessageBranchNext({\n children,\n ...props\n}: ChatMessageBranchNextProps): JSX.Element {\n const { goToNext, totalBranches } = useMessageBranch();\n return (\n <Button\n data-slot=\"chat-message-branch-next\"\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Next branch\"\n disabled={totalBranches <= 1}\n onClick={goToNext}\n {...props}\n >\n {children ?? <ChevronRightIcon className=\"size-3.5\" aria-hidden=\"true\" />}\n </Button>\n );\n}\n\nexport type ChatMessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;\n\nexport function ChatMessageBranchPage({\n className,\n ...props\n}: ChatMessageBranchPageProps): JSX.Element {\n const { currentBranch, totalBranches } = useMessageBranch();\n return (\n <span\n data-slot=\"chat-message-branch-page\"\n className={cn(\n \"inline-flex items-center px-2 font-mono text-label-caps text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {currentBranch + 1} of {totalBranches}\n </span>\n );\n}\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var switchVariants = cva(
|
|
8
|
+
[
|
|
9
|
+
"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent",
|
|
10
|
+
"transition-[background-color,box-shadow] duration-base ease-out-soft",
|
|
11
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
12
|
+
"data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_0_8px_hsl(var(--primary)/0.35)]",
|
|
13
|
+
"data-[state=unchecked]:bg-muted",
|
|
14
|
+
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
15
|
+
],
|
|
16
|
+
{
|
|
17
|
+
variants: {
|
|
18
|
+
size: {
|
|
19
|
+
sm: "h-4 w-7",
|
|
20
|
+
md: "h-5 w-9",
|
|
21
|
+
lg: "h-6 w-11"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: { size: "md" }
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
var thumbClassBySize = {
|
|
28
|
+
sm: "size-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5",
|
|
29
|
+
md: "size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5",
|
|
30
|
+
lg: "size-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5"
|
|
31
|
+
};
|
|
32
|
+
var Switch = forwardRef(
|
|
33
|
+
({ className, size, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
34
|
+
SwitchPrimitive.Root,
|
|
35
|
+
{
|
|
36
|
+
"data-slot": "switch",
|
|
37
|
+
"data-size": size,
|
|
38
|
+
ref,
|
|
39
|
+
className: cn(switchVariants({ size }), className),
|
|
40
|
+
...props,
|
|
41
|
+
children: /* @__PURE__ */ jsx(
|
|
42
|
+
SwitchPrimitive.Thumb,
|
|
43
|
+
{
|
|
44
|
+
className: cn(
|
|
45
|
+
"pointer-events-none block rounded-full bg-card shadow-sm",
|
|
46
|
+
"transition-transform duration-base ease-out-soft",
|
|
47
|
+
thumbClassBySize[size ?? "md"]
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
);
|
|
54
|
+
Switch.displayName = "Switch";
|
|
55
|
+
|
|
56
|
+
export { Switch };
|
|
57
|
+
//# sourceMappingURL=chunk-QBUTRD2M.js.map
|
|
58
|
+
//# sourceMappingURL=chunk-QBUTRD2M.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/switch/switch.tsx"],"names":[],"mappings":";;;;;;AAgBA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB;AAAA,IACE,8FAAA;AAAA,IACA,sEAAA;AAAA,IACA,0IAAA;AAAA,IACA,gGAAA;AAAA,IACA,iCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAAK;AAElC,CAAA;AAEA,IAAM,gBAAA,GAA6F;AAAA,EACjG,EAAA,EAAI,kFAAA;AAAA,EACJ,EAAA,EAAI,kFAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAMA,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,qBAC9B,GAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,GAAA;AAAA,MACA,WAAW,EAAA,CAAG,cAAA,CAAe,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAChD,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAiB,eAAA,CAAA,KAAA;AAAA,QAAhB;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,0DAAA;AAAA,YACA,kDAAA;AAAA,YACA,gBAAA,CAAiB,QAAQ,IAAI;AAAA;AAC/B;AAAA;AACF;AAAA;AAGN;AACA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-QBUTRD2M.js","sourcesContent":["import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Switch — built on Radix Switch. Used for binary toggles (autoaccept,\n * dark mode preview, feature flags).\n *\n * Off-state uses --muted, on-state uses --primary with a subtle glow shadow\n * to mark \"this is active\" in the violet brand language.\n *\n * The `size` prop accepts `\"sm\" | \"md\" | \"lg\"`. Default `md` preserves the\n * 20×36 track from before this prop existed.\n */\nconst switchVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-[background-color,box-shadow] duration-base ease-out-soft\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_0_8px_hsl(var(--primary)/0.35)]\",\n \"data-[state=unchecked]:bg-muted\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-4 w-7\",\n md: \"h-5 w-9\",\n lg: \"h-6 w-11\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst thumbClassBySize: Record<NonNullable<VariantProps<typeof switchVariants>[\"size\"]>, string> = {\n sm: \"size-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n lg: \"size-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n};\n\ninterface SwitchProps\n extends ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchVariants> {}\n\nconst Switch = forwardRef<ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n ({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n ref={ref}\n className={cn(switchVariants({ size }), className)}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none block rounded-full bg-card shadow-sm\",\n \"transition-transform duration-base ease-out-soft\",\n thumbClassBySize[size ?? \"md\"],\n )}\n />\n </SwitchPrimitive.Root>\n ),\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch, switchVariants };\n"]}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
2
|
+
import { forwardRef, useMemo } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/components/primitives/token-usage-chart/usage-metrics.ts
|
|
6
|
+
function toUsageMetrics(points) {
|
|
7
|
+
let totalInput = 0;
|
|
8
|
+
let totalOutput = 0;
|
|
9
|
+
let peak = 0;
|
|
10
|
+
for (const p of points) {
|
|
11
|
+
totalInput += p.input;
|
|
12
|
+
totalOutput += p.output;
|
|
13
|
+
const periodTotal = p.input + p.output;
|
|
14
|
+
if (periodTotal > peak) peak = periodTotal;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
totalInput,
|
|
18
|
+
totalOutput,
|
|
19
|
+
total: totalInput + totalOutput,
|
|
20
|
+
peak,
|
|
21
|
+
pointCount: points.length
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function splitUsagePoints(points) {
|
|
25
|
+
return {
|
|
26
|
+
labels: points.map((p) => p.label),
|
|
27
|
+
input: points.map((p) => p.input),
|
|
28
|
+
output: points.map((p) => p.output)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function binPoints(points, maxBars) {
|
|
32
|
+
if (points.length <= maxBars) return points;
|
|
33
|
+
const binSize = Math.ceil(points.length / maxBars);
|
|
34
|
+
const out = [];
|
|
35
|
+
for (let i = 0; i < points.length; i += binSize) {
|
|
36
|
+
const slice = points.slice(i, i + binSize);
|
|
37
|
+
if (slice.length === 0) continue;
|
|
38
|
+
const first = slice[0]?.label ?? "";
|
|
39
|
+
const last = slice[slice.length - 1]?.label ?? first;
|
|
40
|
+
out.push({
|
|
41
|
+
label: slice.length === 1 ? first : `${first}\u2026${last}`,
|
|
42
|
+
input: slice.reduce((a, p) => a + p.input, 0),
|
|
43
|
+
output: slice.reduce((a, p) => a + p.output, 0)
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
var formatTokens = (n) => {
|
|
49
|
+
if (n >= 1e6) return `${(n / 1e6).toFixed(1)}M`;
|
|
50
|
+
if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
|
|
51
|
+
return `${n}`;
|
|
52
|
+
};
|
|
53
|
+
var TokenUsageChart = forwardRef(
|
|
54
|
+
({
|
|
55
|
+
className,
|
|
56
|
+
points,
|
|
57
|
+
title = "Token usage",
|
|
58
|
+
height = 160,
|
|
59
|
+
showLegend = true,
|
|
60
|
+
maxBars = 60,
|
|
61
|
+
maxScale,
|
|
62
|
+
splitSeries = false,
|
|
63
|
+
...props
|
|
64
|
+
}, ref) => {
|
|
65
|
+
const series = useMemo(() => binPoints(points, maxBars), [points, maxBars]);
|
|
66
|
+
const autoMax = Math.max(1, ...series.map((p) => p.input + p.output));
|
|
67
|
+
const max = maxScale && maxScale > 0 ? maxScale : autoMax;
|
|
68
|
+
const pct = (value) => Math.min(100, value / max * 100);
|
|
69
|
+
const barCount = series.length;
|
|
70
|
+
const barWidth = 100 / Math.max(1, barCount);
|
|
71
|
+
const gap = Math.min(2, barWidth * 0.2);
|
|
72
|
+
const innerWidth = barWidth - gap;
|
|
73
|
+
const total = toUsageMetrics(series).total;
|
|
74
|
+
return /* @__PURE__ */ jsxs(
|
|
75
|
+
"section",
|
|
76
|
+
{
|
|
77
|
+
"data-slot": "token-usage-chart",
|
|
78
|
+
ref,
|
|
79
|
+
className: cn("rounded-xl border bg-card p-4", className),
|
|
80
|
+
"aria-label": "Token usage over time",
|
|
81
|
+
...props,
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-baseline justify-between gap-3", children: [
|
|
84
|
+
title ? /* @__PURE__ */ jsx("h3", { className: "font-display text-title-md tracking-tight", children: title }) : /* @__PURE__ */ jsx("span", {}),
|
|
85
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-label text-muted-foreground tabular-nums", children: [
|
|
86
|
+
"total \xB7 ",
|
|
87
|
+
formatTokens(total)
|
|
88
|
+
] })
|
|
89
|
+
] }),
|
|
90
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-3 grid grid-cols-[auto_1fr] gap-2", children: [
|
|
91
|
+
/* @__PURE__ */ jsxs(
|
|
92
|
+
"div",
|
|
93
|
+
{
|
|
94
|
+
className: "grid font-mono text-label text-muted-foreground",
|
|
95
|
+
style: { height, gridTemplateRows: "1fr 1fr 1fr" },
|
|
96
|
+
"aria-hidden": "true",
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: formatTokens(max) }),
|
|
99
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: formatTokens(max / 2) }),
|
|
100
|
+
/* @__PURE__ */ jsx("span", { className: "self-end tabular-nums", children: "0" })
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ jsxs(
|
|
105
|
+
"svg",
|
|
106
|
+
{
|
|
107
|
+
viewBox: "0 0 100 100",
|
|
108
|
+
preserveAspectRatio: "none",
|
|
109
|
+
className: "w-full",
|
|
110
|
+
style: { height },
|
|
111
|
+
role: "img",
|
|
112
|
+
"aria-label": `Token usage across ${barCount} periods`,
|
|
113
|
+
children: [
|
|
114
|
+
[25, 50, 75].map((y) => /* @__PURE__ */ jsx(
|
|
115
|
+
"line",
|
|
116
|
+
{
|
|
117
|
+
x1: 0,
|
|
118
|
+
y1: y,
|
|
119
|
+
x2: 100,
|
|
120
|
+
y2: y,
|
|
121
|
+
stroke: "hsl(var(--border) / 0.4)",
|
|
122
|
+
strokeWidth: 0.2
|
|
123
|
+
},
|
|
124
|
+
y
|
|
125
|
+
)),
|
|
126
|
+
series.map((p, idx) => {
|
|
127
|
+
const x = idx * barWidth + gap / 2;
|
|
128
|
+
const titleText = `${p.label} \u2014 input ${formatTokens(p.input)} \xB7 output ${formatTokens(p.output)}`;
|
|
129
|
+
if (splitSeries) {
|
|
130
|
+
const half = innerWidth / 2;
|
|
131
|
+
const inputH2 = pct(p.input);
|
|
132
|
+
const outputH2 = pct(p.output);
|
|
133
|
+
return /* @__PURE__ */ jsxs("g", { children: [
|
|
134
|
+
/* @__PURE__ */ jsx("title", { children: titleText }),
|
|
135
|
+
/* @__PURE__ */ jsx(
|
|
136
|
+
"rect",
|
|
137
|
+
{
|
|
138
|
+
x,
|
|
139
|
+
y: 100 - inputH2,
|
|
140
|
+
width: half,
|
|
141
|
+
height: inputH2,
|
|
142
|
+
fill: "hsl(var(--accent))",
|
|
143
|
+
opacity: 0.85
|
|
144
|
+
}
|
|
145
|
+
),
|
|
146
|
+
/* @__PURE__ */ jsx(
|
|
147
|
+
"rect",
|
|
148
|
+
{
|
|
149
|
+
x: x + half,
|
|
150
|
+
y: 100 - outputH2,
|
|
151
|
+
width: half,
|
|
152
|
+
height: outputH2,
|
|
153
|
+
fill: "hsl(var(--primary))",
|
|
154
|
+
opacity: 0.85
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
] }, p.label);
|
|
158
|
+
}
|
|
159
|
+
const periodTotal = p.input + p.output;
|
|
160
|
+
const totalH = pct(periodTotal);
|
|
161
|
+
const outputH = periodTotal > 0 ? totalH * p.output / periodTotal : 0;
|
|
162
|
+
const inputH = totalH - outputH;
|
|
163
|
+
return /* @__PURE__ */ jsxs("g", { children: [
|
|
164
|
+
/* @__PURE__ */ jsx("title", { children: titleText }),
|
|
165
|
+
/* @__PURE__ */ jsx(
|
|
166
|
+
"rect",
|
|
167
|
+
{
|
|
168
|
+
x,
|
|
169
|
+
y: 100 - totalH,
|
|
170
|
+
width: innerWidth,
|
|
171
|
+
height: outputH,
|
|
172
|
+
fill: "hsl(var(--primary))",
|
|
173
|
+
opacity: 0.85
|
|
174
|
+
}
|
|
175
|
+
),
|
|
176
|
+
/* @__PURE__ */ jsx(
|
|
177
|
+
"rect",
|
|
178
|
+
{
|
|
179
|
+
x,
|
|
180
|
+
y: 100 - inputH,
|
|
181
|
+
width: innerWidth,
|
|
182
|
+
height: inputH,
|
|
183
|
+
fill: "hsl(var(--accent))",
|
|
184
|
+
opacity: 0.85
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
] }, p.label);
|
|
188
|
+
})
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] }),
|
|
193
|
+
/* @__PURE__ */ jsxs(
|
|
194
|
+
"div",
|
|
195
|
+
{
|
|
196
|
+
className: "mt-1 grid grid-cols-[auto_1fr] gap-2 font-mono text-label text-muted-foreground",
|
|
197
|
+
"aria-hidden": "true",
|
|
198
|
+
children: [
|
|
199
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true" }),
|
|
200
|
+
/* @__PURE__ */ jsx("div", { className: "grid", style: { gridTemplateColumns: `repeat(${barCount}, 1fr)` }, children: series.map((p) => /* @__PURE__ */ jsx("span", { className: "truncate text-center", children: p.label }, p.label)) })
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
),
|
|
204
|
+
/* @__PURE__ */ jsxs("table", { className: "sr-only", children: [
|
|
205
|
+
/* @__PURE__ */ jsx("caption", { children: "Token usage by period \u2014 input vs output" }),
|
|
206
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
207
|
+
/* @__PURE__ */ jsx("th", { scope: "col", children: "Period" }),
|
|
208
|
+
/* @__PURE__ */ jsx("th", { scope: "col", children: "Input tokens" }),
|
|
209
|
+
/* @__PURE__ */ jsx("th", { scope: "col", children: "Output tokens" })
|
|
210
|
+
] }) }),
|
|
211
|
+
/* @__PURE__ */ jsx("tbody", { children: series.map((p) => /* @__PURE__ */ jsxs("tr", { children: [
|
|
212
|
+
/* @__PURE__ */ jsx("td", { children: p.label }),
|
|
213
|
+
/* @__PURE__ */ jsx("td", { children: p.input }),
|
|
214
|
+
/* @__PURE__ */ jsx("td", { children: p.output })
|
|
215
|
+
] }, `a11y-${p.label}`)) })
|
|
216
|
+
] }),
|
|
217
|
+
showLegend ? /* @__PURE__ */ jsxs("footer", { className: "mt-3 flex items-center gap-4 font-mono text-label text-muted-foreground", children: [
|
|
218
|
+
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
219
|
+
/* @__PURE__ */ jsx("span", { className: "size-2 rounded-sm bg-accent", "aria-hidden": "true" }),
|
|
220
|
+
"Input"
|
|
221
|
+
] }),
|
|
222
|
+
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
223
|
+
/* @__PURE__ */ jsx("span", { className: "size-2 rounded-sm bg-primary", "aria-hidden": "true" }),
|
|
224
|
+
"Output"
|
|
225
|
+
] })
|
|
226
|
+
] }) : null
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
TokenUsageChart.displayName = "TokenUsageChart";
|
|
233
|
+
|
|
234
|
+
export { TokenUsageChart, splitUsagePoints, toUsageMetrics };
|
|
235
|
+
//# sourceMappingURL=chunk-QCQTTOMD.js.map
|
|
236
|
+
//# sourceMappingURL=chunk-QCQTTOMD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/token-usage-chart/usage-metrics.ts","../src/components/primitives/token-usage-chart/token-usage-chart.tsx"],"names":["inputH","outputH"],"mappings":"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","file":"chunk-QCQTTOMD.js","sourcesContent":["/**\n * Pure aggregate + transpose helpers for `TokenUsagePoint[]` (M5-7).\n * No React — usable to drive metric displays, fixed-scale comparisons, or\n * other chart surfaces.\n */\nimport type { TokenUsagePoint } from \"./token-usage-chart.js\";\n\nexport interface UsageMetrics {\n totalInput: number;\n totalOutput: number;\n total: number;\n /** The largest per-period total (`input + output`); 0 for an empty series. */\n peak: number;\n pointCount: number;\n}\n\n/** Aggregate totals + the peak per-period total. Pure. */\nexport function toUsageMetrics(points: TokenUsagePoint[]): UsageMetrics {\n let totalInput = 0;\n let totalOutput = 0;\n let peak = 0;\n for (const p of points) {\n totalInput += p.input;\n totalOutput += p.output;\n const periodTotal = p.input + p.output;\n if (periodTotal > peak) peak = periodTotal;\n }\n return {\n totalInput,\n totalOutput,\n total: totalInput + totalOutput,\n peak,\n pointCount: points.length,\n };\n}\n\nexport interface UsageSeries {\n labels: string[];\n input: number[];\n output: number[];\n}\n\n/** Transpose stacked points into parallel `labels`/`input`/`output` arrays. Pure. */\nexport function splitUsagePoints(points: TokenUsagePoint[]): UsageSeries {\n return {\n labels: points.map((p) => p.label),\n input: points.map((p) => p.input),\n output: points.map((p) => p.output),\n };\n}\n","import { forwardRef, useMemo } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { toUsageMetrics } from \"./usage-metrics.js\";\n\nexport interface TokenUsagePoint {\n /** ISO date or friendly label for the x-axis tooltip. */\n label: string;\n /** Input tokens for this period (e.g. day). */\n input: number;\n /** Output tokens for this period. */\n output: number;\n}\n\ninterface TokenUsageChartProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n points: TokenUsagePoint[];\n /** Title above the chart. */\n title?: ReactNode;\n /** Chart height in px. Default 160. */\n height?: number;\n /** Show legend below the chart. Default true. */\n showLegend?: boolean;\n /**\n * Maximum number of bars to render. When `points.length` exceeds this, the\n * series is binned (summed in equal-width windows) so the chart stays\n * legible and SVG node count stays bounded. Default 60.\n */\n maxBars?: number;\n /**\n * Fix the y-axis maximum (the token value mapped to 100% height) so multiple\n * charts share a scale. When omitted, the scale auto-fits the data. Bars whose\n * value exceeds `maxScale` are clamped to 100% (the tooltip + a11y table still\n * show the true number).\n */\n maxScale?: number;\n /**\n * Render input and output as two adjacent (grouped) bars per period instead of\n * one stacked bar. Default false (stacked).\n */\n splitSeries?: boolean;\n}\n\nfunction binPoints(points: TokenUsagePoint[], maxBars: number): TokenUsagePoint[] {\n if (points.length <= maxBars) return points;\n const binSize = Math.ceil(points.length / maxBars);\n const out: TokenUsagePoint[] = [];\n for (let i = 0; i < points.length; i += binSize) {\n const slice = points.slice(i, i + binSize);\n if (slice.length === 0) continue;\n const first = slice[0]?.label ?? \"\";\n const last = slice[slice.length - 1]?.label ?? first;\n out.push({\n label: slice.length === 1 ? first : `${first}…${last}`,\n input: slice.reduce((a, p) => a + p.input, 0),\n output: slice.reduce((a, p) => a + p.output, 0),\n });\n }\n return out;\n}\n\nconst formatTokens = (n: number) => {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}k`;\n return `${n}`;\n};\n\n/**\n * TokenUsageChart — stacked-bar chart of input vs output tokens over time.\n *\n * Pure SVG, no chart lib. Width is fluid; bars adjust to viewBox. Hover any\n * bar to see the breakdown in the tooltip slot below.\n */\nconst TokenUsageChart = forwardRef<HTMLDivElement, TokenUsageChartProps>(\n (\n {\n className,\n points,\n title = \"Token usage\",\n height = 160,\n showLegend = true,\n maxBars = 60,\n maxScale,\n splitSeries = false,\n ...props\n },\n ref,\n ) => {\n const series = useMemo(() => binPoints(points, maxBars), [points, maxBars]);\n const autoMax = Math.max(1, ...series.map((p) => p.input + p.output));\n const max = maxScale && maxScale > 0 ? maxScale : autoMax;\n const pct = (value: number): number => Math.min(100, (value / max) * 100);\n const barCount = series.length;\n const barWidth = 100 / Math.max(1, barCount);\n const gap = Math.min(2, barWidth * 0.2);\n const innerWidth = barWidth - gap;\n\n const total = toUsageMetrics(series).total;\n\n return (\n <section\n data-slot=\"token-usage-chart\"\n ref={ref}\n className={cn(\"rounded-xl border bg-card p-4\", className)}\n aria-label=\"Token usage over time\"\n {...props}\n >\n <header className=\"flex items-baseline justify-between gap-3\">\n {title ? (\n <h3 className=\"font-display text-title-md tracking-tight\">{title}</h3>\n ) : (\n <span />\n )}\n <span className=\"font-mono text-label text-muted-foreground tabular-nums\">\n total · {formatTokens(total)}\n </span>\n </header>\n <div className=\"mt-3 grid grid-cols-[auto_1fr] gap-2\">\n {/* Y-axis ticks */}\n <div\n className=\"grid font-mono text-label text-muted-foreground\"\n style={{ height, gridTemplateRows: \"1fr 1fr 1fr\" }}\n aria-hidden=\"true\"\n >\n <span className=\"tabular-nums\">{formatTokens(max)}</span>\n <span className=\"tabular-nums\">{formatTokens(max / 2)}</span>\n <span className=\"self-end tabular-nums\">0</span>\n </div>\n {/* Chart */}\n <svg\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"none\"\n className=\"w-full\"\n style={{ height }}\n role=\"img\"\n aria-label={`Token usage across ${barCount} periods`}\n >\n {/* gridlines */}\n {[25, 50, 75].map((y) => (\n <line\n key={y}\n x1={0}\n y1={y}\n x2={100}\n y2={y}\n stroke=\"hsl(var(--border) / 0.4)\"\n strokeWidth={0.2}\n />\n ))}\n {series.map((p, idx) => {\n const x = idx * barWidth + gap / 2;\n const titleText = `${p.label} — input ${formatTokens(p.input)} · output ${formatTokens(p.output)}`;\n if (splitSeries) {\n // Grouped: input + output as two adjacent half-width bars, each\n // scaled independently (and clamped) to the scale.\n const half = innerWidth / 2;\n const inputH = pct(p.input);\n const outputH = pct(p.output);\n return (\n <g key={p.label}>\n <title>{titleText}</title>\n <rect\n x={x}\n y={100 - inputH}\n width={half}\n height={inputH}\n fill=\"hsl(var(--accent))\"\n opacity={0.85}\n />\n <rect\n x={x + half}\n y={100 - outputH}\n width={half}\n height={outputH}\n fill=\"hsl(var(--primary))\"\n opacity={0.85}\n />\n </g>\n );\n }\n // Stacked: output on top of input. The total is clamped to the\n // scale, then split PROPORTIONALLY so the two segments tile to the\n // clamped total without overlap (a bar over `maxScale` keeps its\n // input/output ratio instead of both segments hitting 100%).\n const periodTotal = p.input + p.output;\n const totalH = pct(periodTotal);\n const outputH = periodTotal > 0 ? (totalH * p.output) / periodTotal : 0;\n const inputH = totalH - outputH;\n return (\n <g key={p.label}>\n <title>{titleText}</title>\n {/* output (top, primary tone) */}\n <rect\n x={x}\n y={100 - totalH}\n width={innerWidth}\n height={outputH}\n fill=\"hsl(var(--primary))\"\n opacity={0.85}\n />\n {/* input (bottom, accent tone) */}\n <rect\n x={x}\n y={100 - inputH}\n width={innerWidth}\n height={inputH}\n fill=\"hsl(var(--accent))\"\n opacity={0.85}\n />\n </g>\n );\n })}\n </svg>\n </div>\n {/* x-axis labels — aligned with the chart column of the parent grid */}\n <div\n className=\"mt-1 grid grid-cols-[auto_1fr] gap-2 font-mono text-label text-muted-foreground\"\n aria-hidden=\"true\"\n >\n <span aria-hidden=\"true\" />\n <div className=\"grid\" style={{ gridTemplateColumns: `repeat(${barCount}, 1fr)` }}>\n {series.map((p) => (\n <span key={p.label} className=\"truncate text-center\">\n {p.label}\n </span>\n ))}\n </div>\n </div>\n {/* Screen-reader fallback: the SVG is decorative-ish for AT users.\n * `<title>` per bar is unreliably exposed across NVDA/VoiceOver/JAWS,\n * so we ship an `sr-only` table with the same data. Sighted users\n * never see this; AT users can navigate the values cell-by-cell.\n * Reference: WCAG 1.1.1 (Non-text content). */}\n <table className=\"sr-only\">\n <caption>Token usage by period — input vs output</caption>\n <thead>\n <tr>\n <th scope=\"col\">Period</th>\n <th scope=\"col\">Input tokens</th>\n <th scope=\"col\">Output tokens</th>\n </tr>\n </thead>\n <tbody>\n {series.map((p) => (\n <tr key={`a11y-${p.label}`}>\n <td>{p.label}</td>\n <td>{p.input}</td>\n <td>{p.output}</td>\n </tr>\n ))}\n </tbody>\n </table>\n {showLegend ? (\n <footer className=\"mt-3 flex items-center gap-4 font-mono text-label text-muted-foreground\">\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"size-2 rounded-sm bg-accent\" aria-hidden=\"true\" />\n Input\n </span>\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"size-2 rounded-sm bg-primary\" aria-hidden=\"true\" />\n Output\n </span>\n </footer>\n ) : null}\n </section>\n );\n },\n);\nTokenUsageChart.displayName = \"TokenUsageChart\";\n\nexport { TokenUsageChart };\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useInLiveRegion } from './chunk-UGKI466V.js';
|
|
2
|
+
import { cn } from './chunk-EWDN56AS.js';
|
|
3
|
+
import { Loader2 } from 'lucide-react';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var AgentStartingState = forwardRef(
|
|
8
|
+
({ className, label = "Starting up\u2026", hint, ...props }, ref) => {
|
|
9
|
+
const inLiveRegion = useInLiveRegion();
|
|
10
|
+
return /* @__PURE__ */ jsxs(
|
|
11
|
+
"output",
|
|
12
|
+
{
|
|
13
|
+
"data-slot": "agent-starting-state",
|
|
14
|
+
ref,
|
|
15
|
+
"aria-live": inLiveRegion ? void 0 : "polite",
|
|
16
|
+
className: cn(
|
|
17
|
+
"flex items-center gap-3 rounded-xl border border-primary/30 border-dashed bg-primary/5 px-4 py-3",
|
|
18
|
+
className
|
|
19
|
+
),
|
|
20
|
+
...props,
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin text-primary", "aria-hidden": "true" }),
|
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "grid", children: [
|
|
24
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-body-sm text-foreground", children: label }),
|
|
25
|
+
hint ? /* @__PURE__ */ jsx("span", { className: "text-body-sm text-muted-foreground", children: hint }) : null
|
|
26
|
+
] })
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
AgentStartingState.displayName = "AgentStartingState";
|
|
33
|
+
|
|
34
|
+
export { AgentStartingState };
|
|
35
|
+
//# sourceMappingURL=chunk-QNYOIVQ4.js.map
|
|
36
|
+
//# sourceMappingURL=chunk-QNYOIVQ4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/agent-starting-state/agent-starting-state.tsx"],"names":[],"mappings":";;;;;;AAmBA,IAAM,kBAAA,GAAqB,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,qBAAgB,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAE9D,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,uBACE,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,sBAAA;AAAA,QACV,GAAA;AAAA,QACA,WAAA,EAAW,eAAe,MAAA,GAAY,QAAA;AAAA,QACtC,SAAA,EAAW,EAAA;AAAA,UACT,kGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,0BACzE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACjE,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,gBAAK,CAAA,GAAU;AAAA,WAAA,EAC/E;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA","file":"chunk-QNYOIVQ4.js","sourcesContent":["import { Loader2 } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { OutputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { useInLiveRegion } from \"../../../lib/live-region-context.js\";\n\ninterface AgentStartingStateProps extends OutputHTMLAttributes<HTMLOutputElement> {\n /** Title shown next to the spinner. Default \"Starting up…\". */\n label?: ReactNode;\n /** Optional secondary copy explaining the bootstrap step. */\n hint?: ReactNode;\n}\n\n/**\n * AgentStartingState — full-width skeleton shown while the agent boots.\n *\n * Visual: violet spinner + label, optional hint below. Wrapped in a soft card.\n * Uses semantic `<output aria-live=\"polite\">` so screen readers announce the state.\n */\nconst AgentStartingState = forwardRef<HTMLOutputElement, AgentStartingStateProps>(\n ({ className, label = \"Starting up…\", hint, ...props }, ref) => {\n // T4.1 (MF-4): omit aria-live when nested inside a container live region.\n const inLiveRegion = useInLiveRegion();\n return (\n <output\n data-slot=\"agent-starting-state\"\n ref={ref}\n aria-live={inLiveRegion ? undefined : \"polite\"}\n className={cn(\n \"flex items-center gap-3 rounded-xl border border-primary/30 border-dashed bg-primary/5 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <Loader2 className=\"size-4 animate-spin text-primary\" aria-hidden=\"true\" />\n <div className=\"grid\">\n <span className=\"font-medium text-body-sm text-foreground\">{label}</span>\n {hint ? <span className=\"text-body-sm text-muted-foreground\">{hint}</span> : null}\n </div>\n </output>\n );\n },\n);\nAgentStartingState.displayName = \"AgentStartingState\";\n\nexport { AgentStartingState };\n"]}
|