@usetheo/ui 0.9.0-next.0 → 0.10.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -0
- package/dist/chunk-2UJROWAG.js +106 -0
- package/dist/chunk-2UJROWAG.js.map +1 -0
- package/dist/chunk-2XPWOUEH.js +68 -0
- package/dist/chunk-2XPWOUEH.js.map +1 -0
- package/dist/chunk-3GHLNCM3.js +42 -0
- package/dist/chunk-3GHLNCM3.js.map +1 -0
- package/dist/chunk-3HOXC25T.js +48 -0
- package/dist/chunk-3HOXC25T.js.map +1 -0
- package/dist/chunk-3QGO5SB3.js +46 -0
- package/dist/chunk-3QGO5SB3.js.map +1 -0
- package/dist/chunk-47QJVWW2.js +85 -0
- package/dist/chunk-47QJVWW2.js.map +1 -0
- package/dist/chunk-4L63UW3I.js +35 -0
- package/dist/chunk-4L63UW3I.js.map +1 -0
- package/dist/chunk-4UUSJJFZ.js +25 -0
- package/dist/chunk-4UUSJJFZ.js.map +1 -0
- package/dist/chunk-4ZBZBRG5.js +127 -0
- package/dist/chunk-4ZBZBRG5.js.map +1 -0
- package/dist/chunk-57NXT3OX.js +92 -0
- package/dist/chunk-57NXT3OX.js.map +1 -0
- package/dist/chunk-5FF5EUZP.js +44 -0
- package/dist/chunk-5FF5EUZP.js.map +1 -0
- package/dist/chunk-5UGQXB2P.js +714 -0
- package/dist/chunk-5UGQXB2P.js.map +1 -0
- package/dist/chunk-62FT22CI.js +85 -0
- package/dist/chunk-62FT22CI.js.map +1 -0
- package/dist/chunk-673R3GSK.js +19 -0
- package/dist/chunk-673R3GSK.js.map +1 -0
- package/dist/chunk-6VINZJBV.js +128 -0
- package/dist/chunk-6VINZJBV.js.map +1 -0
- package/dist/chunk-74NZ5U3E.js +145 -0
- package/dist/chunk-74NZ5U3E.js.map +1 -0
- package/dist/chunk-755NWSNW.js +36 -0
- package/dist/chunk-755NWSNW.js.map +1 -0
- package/dist/chunk-7GLBWWMW.js +70 -0
- package/dist/chunk-7GLBWWMW.js.map +1 -0
- package/dist/chunk-7RXYW5VM.js +88 -0
- package/dist/chunk-7RXYW5VM.js.map +1 -0
- package/dist/chunk-AC4MGCXI.js +92 -0
- package/dist/chunk-AC4MGCXI.js.map +1 -0
- package/dist/chunk-AEVSVDT6.js +67 -0
- package/dist/chunk-AEVSVDT6.js.map +1 -0
- package/dist/chunk-AODIMN2N.js +68 -0
- package/dist/chunk-AODIMN2N.js.map +1 -0
- package/dist/chunk-ATHOPBCA.js +61 -0
- package/dist/chunk-ATHOPBCA.js.map +1 -0
- package/dist/chunk-AXKBNRZW.js +173 -0
- package/dist/chunk-AXKBNRZW.js.map +1 -0
- package/dist/chunk-B75MEYNR.js +106 -0
- package/dist/chunk-B75MEYNR.js.map +1 -0
- package/dist/chunk-BGKA6DI6.js +34 -0
- package/dist/chunk-BGKA6DI6.js.map +1 -0
- package/dist/chunk-BNQAJGEN.js +88 -0
- package/dist/chunk-BNQAJGEN.js.map +1 -0
- package/dist/chunk-BP2SETUC.js +101 -0
- package/dist/chunk-BP2SETUC.js.map +1 -0
- package/dist/chunk-BPUQWMBD.js +79 -0
- package/dist/chunk-BPUQWMBD.js.map +1 -0
- package/dist/chunk-BVDASR3Y.js +74 -0
- package/dist/chunk-BVDASR3Y.js.map +1 -0
- package/dist/chunk-CDA6RYOX.js +115 -0
- package/dist/chunk-CDA6RYOX.js.map +1 -0
- package/dist/chunk-CG7O3A42.js +80 -0
- package/dist/chunk-CG7O3A42.js.map +1 -0
- package/dist/chunk-CIYGNPKT.js +76 -0
- package/dist/chunk-CIYGNPKT.js.map +1 -0
- package/dist/chunk-CKXY4FTV.js +59 -0
- package/dist/chunk-CKXY4FTV.js.map +1 -0
- package/dist/chunk-CVOKZITR.js +82 -0
- package/dist/chunk-CVOKZITR.js.map +1 -0
- package/dist/chunk-CWFMFKDI.js +82 -0
- package/dist/chunk-CWFMFKDI.js.map +1 -0
- package/dist/chunk-CWVKSV7S.js +124 -0
- package/dist/chunk-CWVKSV7S.js.map +1 -0
- package/dist/chunk-CYOLRWOX.js +63 -0
- package/dist/chunk-CYOLRWOX.js.map +1 -0
- package/dist/chunk-D23LRJT6.js +116 -0
- package/dist/chunk-D23LRJT6.js.map +1 -0
- package/dist/chunk-DAKIL5PC.js +186 -0
- package/dist/chunk-DAKIL5PC.js.map +1 -0
- package/dist/chunk-DFADMEJK.js +127 -0
- package/dist/chunk-DFADMEJK.js.map +1 -0
- package/dist/chunk-E5A7HN6H.js +32 -0
- package/dist/chunk-E5A7HN6H.js.map +1 -0
- package/dist/chunk-EI63GTN7.js +57 -0
- package/dist/chunk-EI63GTN7.js.map +1 -0
- package/dist/chunk-EP25QJ4N.js +146 -0
- package/dist/chunk-EP25QJ4N.js.map +1 -0
- package/dist/chunk-ET44426Q.js +80 -0
- package/dist/chunk-ET44426Q.js.map +1 -0
- package/dist/chunk-ETEIDY34.js +67 -0
- package/dist/chunk-ETEIDY34.js.map +1 -0
- package/dist/chunk-EU55O4P7.js +76 -0
- package/dist/chunk-EU55O4P7.js.map +1 -0
- package/dist/chunk-F436537E.js +104 -0
- package/dist/chunk-F436537E.js.map +1 -0
- package/dist/chunk-FLBTGNQI.js +86 -0
- package/dist/chunk-FLBTGNQI.js.map +1 -0
- package/dist/chunk-FUT45NFW.js +46 -0
- package/dist/chunk-FUT45NFW.js.map +1 -0
- package/dist/chunk-G3LWNTVZ.js +51 -0
- package/dist/chunk-G3LWNTVZ.js.map +1 -0
- package/dist/chunk-GBJB5WLT.js +58 -0
- package/dist/chunk-GBJB5WLT.js.map +1 -0
- package/dist/chunk-GIEPEFRX.js +110 -0
- package/dist/chunk-GIEPEFRX.js.map +1 -0
- package/dist/chunk-GSO7MISR.js +58 -0
- package/dist/chunk-GSO7MISR.js.map +1 -0
- package/dist/chunk-GUQFYUIC.js +61 -0
- package/dist/chunk-GUQFYUIC.js.map +1 -0
- package/dist/chunk-H3ANHVEL.js +83 -0
- package/dist/chunk-H3ANHVEL.js.map +1 -0
- package/dist/chunk-H3VJMFJQ.js +35 -0
- package/dist/chunk-H3VJMFJQ.js.map +1 -0
- package/dist/chunk-HG4WEERE.js +26 -0
- package/dist/chunk-HG4WEERE.js.map +1 -0
- package/dist/chunk-HGPBGLNP.js +51 -0
- package/dist/chunk-HGPBGLNP.js.map +1 -0
- package/dist/chunk-HQFTW7SF.js +141 -0
- package/dist/chunk-HQFTW7SF.js.map +1 -0
- package/dist/chunk-I7WYM63C.js +170 -0
- package/dist/chunk-I7WYM63C.js.map +1 -0
- package/dist/chunk-JQXLPVWP.js +74 -0
- package/dist/chunk-JQXLPVWP.js.map +1 -0
- package/dist/chunk-K5ARID4S.js +26 -0
- package/dist/chunk-K5ARID4S.js.map +1 -0
- package/dist/chunk-K6RTLPIJ.js +41 -0
- package/dist/chunk-K6RTLPIJ.js.map +1 -0
- package/dist/chunk-KQNKKV2C.js +56 -0
- package/dist/chunk-KQNKKV2C.js.map +1 -0
- package/dist/chunk-KRN4NE4U.js +155 -0
- package/dist/chunk-KRN4NE4U.js.map +1 -0
- package/dist/chunk-L2BI762I.js +82 -0
- package/dist/chunk-L2BI762I.js.map +1 -0
- package/dist/chunk-LEEH63B2.js +56 -0
- package/dist/chunk-LEEH63B2.js.map +1 -0
- package/dist/chunk-LHRWVM3G.js +42 -0
- package/dist/chunk-LHRWVM3G.js.map +1 -0
- package/dist/chunk-LIGWMGXM.js +117 -0
- package/dist/chunk-LIGWMGXM.js.map +1 -0
- package/dist/chunk-LKYSX3QF.js +104 -0
- package/dist/chunk-LKYSX3QF.js.map +1 -0
- package/dist/chunk-MCIFB6VS.js +54 -0
- package/dist/chunk-MCIFB6VS.js.map +1 -0
- package/dist/chunk-NQZYY4LR.js +84 -0
- package/dist/chunk-NQZYY4LR.js.map +1 -0
- package/dist/chunk-O23LKHUR.js +66 -0
- package/dist/chunk-O23LKHUR.js.map +1 -0
- package/dist/chunk-PASI2U2R.js +23 -0
- package/dist/chunk-PASI2U2R.js.map +1 -0
- package/dist/chunk-PPH5NTHV.js +34 -0
- package/dist/chunk-PPH5NTHV.js.map +1 -0
- package/dist/chunk-PR6OZF6D.js +28 -0
- package/dist/chunk-PR6OZF6D.js.map +1 -0
- package/dist/chunk-PWXOXPFT.js +142 -0
- package/dist/chunk-PWXOXPFT.js.map +1 -0
- package/dist/chunk-QB6BNHO3.js +112 -0
- package/dist/chunk-QB6BNHO3.js.map +1 -0
- package/dist/chunk-QSOIJ6J3.js +91 -0
- package/dist/chunk-QSOIJ6J3.js.map +1 -0
- package/dist/chunk-QU6RLHYH.js +156 -0
- package/dist/chunk-QU6RLHYH.js.map +1 -0
- package/dist/chunk-R63ZKLQM.js +45 -0
- package/dist/chunk-R63ZKLQM.js.map +1 -0
- package/dist/chunk-RTYYJPPE.js +77 -0
- package/dist/chunk-RTYYJPPE.js.map +1 -0
- package/dist/chunk-RVOBP7PO.js +116 -0
- package/dist/chunk-RVOBP7PO.js.map +1 -0
- package/dist/chunk-SF6R5VMQ.js +97 -0
- package/dist/chunk-SF6R5VMQ.js.map +1 -0
- package/dist/chunk-SP4CP5HY.js +57 -0
- package/dist/chunk-SP4CP5HY.js.map +1 -0
- package/dist/chunk-SWJ4EUOI.js +30 -0
- package/dist/chunk-SWJ4EUOI.js.map +1 -0
- package/dist/chunk-TK24HQJJ.js +128 -0
- package/dist/chunk-TK24HQJJ.js.map +1 -0
- package/dist/chunk-TO3UAT6O.js +221 -0
- package/dist/chunk-TO3UAT6O.js.map +1 -0
- package/dist/chunk-UAYOOTRR.js +77 -0
- package/dist/chunk-UAYOOTRR.js.map +1 -0
- package/dist/chunk-UDTAMHXW.js +55 -0
- package/dist/chunk-UDTAMHXW.js.map +1 -0
- package/dist/chunk-UGKI466V.js +12 -0
- package/dist/chunk-UGKI466V.js.map +1 -0
- package/dist/chunk-UOXU7NDY.js +120 -0
- package/dist/chunk-UOXU7NDY.js.map +1 -0
- package/dist/chunk-V7OOTVK3.js +106 -0
- package/dist/chunk-V7OOTVK3.js.map +1 -0
- package/dist/chunk-VI5M7KJ2.js +1022 -0
- package/dist/chunk-VI5M7KJ2.js.map +1 -0
- package/dist/chunk-VM4RMQQN.js +11 -0
- package/dist/chunk-VM4RMQQN.js.map +1 -0
- package/dist/chunk-VMMATOPE.js +64 -0
- package/dist/chunk-VMMATOPE.js.map +1 -0
- package/dist/chunk-W2PVSIW3.js +89 -0
- package/dist/chunk-W2PVSIW3.js.map +1 -0
- package/dist/chunk-W3DUDZDU.js +88 -0
- package/dist/chunk-W3DUDZDU.js.map +1 -0
- package/dist/chunk-WKEUU2FU.js +114 -0
- package/dist/chunk-WKEUU2FU.js.map +1 -0
- package/dist/chunk-WKLW7RC6.js +28 -0
- package/dist/chunk-WKLW7RC6.js.map +1 -0
- package/dist/chunk-WSJGZNUH.js +111 -0
- package/dist/chunk-WSJGZNUH.js.map +1 -0
- package/dist/chunk-WVPDQMC2.js +144 -0
- package/dist/chunk-WVPDQMC2.js.map +1 -0
- package/dist/chunk-WWNH5ENT.js +43 -0
- package/dist/chunk-WWNH5ENT.js.map +1 -0
- package/dist/chunk-X5L62PXY.js +112 -0
- package/dist/chunk-X5L62PXY.js.map +1 -0
- package/dist/chunk-XGCV5E6W.js +133 -0
- package/dist/chunk-XGCV5E6W.js.map +1 -0
- package/dist/chunk-XRKIEL5M.js +72 -0
- package/dist/chunk-XRKIEL5M.js.map +1 -0
- package/dist/chunk-XUJYEADU.js +80 -0
- package/dist/chunk-XUJYEADU.js.map +1 -0
- package/dist/chunk-XVYNSIQC.js +116 -0
- package/dist/chunk-XVYNSIQC.js.map +1 -0
- package/dist/chunk-XWTISHXO.js +54 -0
- package/dist/chunk-XWTISHXO.js.map +1 -0
- package/dist/chunk-YOGHS4UU.js +202 -0
- package/dist/chunk-YOGHS4UU.js.map +1 -0
- package/dist/chunk-YRSKXEOD.js +135 -0
- package/dist/chunk-YRSKXEOD.js.map +1 -0
- package/dist/chunk-ZALLCR7X.js +108 -0
- package/dist/chunk-ZALLCR7X.js.map +1 -0
- package/dist/chunk-ZDAOHMCW.js +46 -0
- package/dist/chunk-ZDAOHMCW.js.map +1 -0
- package/dist/chunk-ZESICCKK.js +37 -0
- package/dist/chunk-ZESICCKK.js.map +1 -0
- package/dist/chunk-ZIKFOD6N.js +87 -0
- package/dist/chunk-ZIKFOD6N.js.map +1 -0
- package/dist/chunk-ZJRWCQEN.js +76 -0
- package/dist/chunk-ZJRWCQEN.js.map +1 -0
- package/dist/chunk-ZSRJCIWF.js +24 -0
- package/dist/chunk-ZSRJCIWF.js.map +1 -0
- package/dist/chunk-ZXPDS6DH.js +3 -0
- package/dist/chunk-ZXPDS6DH.js.map +1 -0
- package/dist/components.css +1 -1
- package/dist/composites/account-menu/index.js +6 -0
- package/dist/composites/account-menu/index.js.map +1 -0
- package/dist/composites/agent-composer/index.js +7 -0
- package/dist/composites/agent-composer/index.js.map +1 -0
- package/dist/composites/agent-editor/index.js +10 -0
- package/dist/composites/agent-editor/index.js.map +1 -0
- package/dist/composites/agent-stream/index.js +12 -0
- package/dist/composites/agent-stream/index.js.map +1 -0
- package/dist/composites/agent-timeline/index.js +5 -0
- package/dist/composites/agent-timeline/index.js.map +1 -0
- package/dist/composites/approval-card/index.js +5 -0
- package/dist/composites/approval-card/index.js.map +1 -0
- package/dist/composites/chat-composer/index.js +6 -0
- package/dist/composites/chat-composer/index.js.map +1 -0
- package/dist/composites/chat-message/index.js +6 -0
- package/dist/composites/chat-message/index.js.map +1 -0
- package/dist/composites/code-block/index.js +5 -0
- package/dist/composites/code-block/index.js.map +1 -0
- package/dist/composites/command-palette/index.js +5 -0
- package/dist/composites/command-palette/index.js.map +1 -0
- package/dist/composites/confirm-dialog/index.js +7 -0
- package/dist/composites/confirm-dialog/index.js.map +1 -0
- package/dist/composites/cron-jobs-list/index.js +5 -0
- package/dist/composites/cron-jobs-list/index.js.map +1 -0
- package/dist/composites/deployment-row/index.js +5 -0
- package/dist/composites/deployment-row/index.js.map +1 -0
- package/dist/composites/domain-config/index.js +7 -0
- package/dist/composites/domain-config/index.js.map +1 -0
- package/dist/composites/env-var-editor/index.js +7 -0
- package/dist/composites/env-var-editor/index.js.map +1 -0
- package/dist/composites/mcp-server-list/index.js +5 -0
- package/dist/composites/mcp-server-list/index.js.map +1 -0
- package/dist/composites/permission-modal/index.js +6 -0
- package/dist/composites/permission-modal/index.js.map +1 -0
- package/dist/composites/preview-env-card/index.js +6 -0
- package/dist/composites/preview-env-card/index.js.map +1 -0
- package/dist/composites/preview-panel/index.js +5 -0
- package/dist/composites/preview-panel/index.js.map +1 -0
- package/dist/composites/project-card/index.js +6 -0
- package/dist/composites/project-card/index.js.map +1 -0
- package/dist/composites/rollback-ui/index.js +6 -0
- package/dist/composites/rollback-ui/index.js.map +1 -0
- package/dist/composites/rule-editor/index.js +11 -0
- package/dist/composites/rule-editor/index.js.map +1 -0
- package/dist/composites/skill-editor/index.js +11 -0
- package/dist/composites/skill-editor/index.js.map +1 -0
- package/dist/composites/skills-list/index.js +5 -0
- package/dist/composites/skills-list/index.js.map +1 -0
- package/dist/composites/task-header/index.js +5 -0
- package/dist/composites/task-header/index.js.map +1 -0
- package/dist/composites/usage-meter/index.js +5 -0
- package/dist/composites/usage-meter/index.js.map +1 -0
- package/dist/index.js +130 -9493
- package/dist/index.js.map +1 -1
- package/dist/primitives/agent-error-card/index.js +5 -0
- package/dist/primitives/agent-error-card/index.js.map +1 -0
- package/dist/primitives/agent-event/index.js +4 -0
- package/dist/primitives/agent-event/index.js.map +1 -0
- package/dist/primitives/agent-handoff/index.js +4 -0
- package/dist/primitives/agent-handoff/index.js.map +1 -0
- package/dist/primitives/agent-profile/index.js +4 -0
- package/dist/primitives/agent-profile/index.js.map +1 -0
- package/dist/primitives/agent-starting-state/index.js +5 -0
- package/dist/primitives/agent-starting-state/index.js.map +1 -0
- package/dist/primitives/agent-streaming/index.js +5 -0
- package/dist/primitives/agent-streaming/index.js.map +1 -0
- package/dist/primitives/alert/index.js +4 -0
- package/dist/primitives/alert/index.js.map +1 -0
- package/dist/primitives/artifact-preview/index.js +4 -0
- package/dist/primitives/artifact-preview/index.js.map +1 -0
- package/dist/primitives/attachment-chip/index.js +4 -0
- package/dist/primitives/attachment-chip/index.js.map +1 -0
- package/dist/primitives/audit-log-entry/index.js +4 -0
- package/dist/primitives/audit-log-entry/index.js.map +1 -0
- package/dist/primitives/auto-compact-notice/index.js +5 -0
- package/dist/primitives/auto-compact-notice/index.js.map +1 -0
- package/dist/primitives/avatar/index.js +4 -0
- package/dist/primitives/avatar/index.js.map +1 -0
- package/dist/primitives/badge/index.js +4 -0
- package/dist/primitives/badge/index.js.map +1 -0
- package/dist/primitives/browser-controls/index.js +4 -0
- package/dist/primitives/browser-controls/index.js.map +1 -0
- package/dist/primitives/build-log-stream/index.js +5 -0
- package/dist/primitives/build-log-stream/index.js.map +1 -0
- package/dist/primitives/button/index.js +4 -0
- package/dist/primitives/button/index.js.map +1 -0
- package/dist/primitives/capability-indicator/index.js +4 -0
- package/dist/primitives/capability-indicator/index.js.map +1 -0
- package/dist/primitives/card/index.js +4 -0
- package/dist/primitives/card/index.js.map +1 -0
- package/dist/primitives/chat-thread/index.js +5 -0
- package/dist/primitives/chat-thread/index.js.map +1 -0
- package/dist/primitives/checkbox/index.js +4 -0
- package/dist/primitives/checkbox/index.js.map +1 -0
- package/dist/primitives/context-card/index.js +4 -0
- package/dist/primitives/context-card/index.js.map +1 -0
- package/dist/primitives/context-window-bar/index.js +4 -0
- package/dist/primitives/context-window-bar/index.js.map +1 -0
- package/dist/primitives/copy-button/index.js +4 -0
- package/dist/primitives/copy-button/index.js.map +1 -0
- package/dist/primitives/cost-meter/index.js +4 -0
- package/dist/primitives/cost-meter/index.js.map +1 -0
- package/dist/primitives/created-files-card/index.js +4 -0
- package/dist/primitives/created-files-card/index.js.map +1 -0
- package/dist/primitives/cron-job-card/index.js +4 -0
- package/dist/primitives/cron-job-card/index.js.map +1 -0
- package/dist/primitives/danger-zone/index.js +4 -0
- package/dist/primitives/danger-zone/index.js.map +1 -0
- package/dist/primitives/dialog/index.js +4 -0
- package/dist/primitives/dialog/index.js.map +1 -0
- package/dist/primitives/diff-viewer/index.js +4 -0
- package/dist/primitives/diff-viewer/index.js.map +1 -0
- package/dist/primitives/empty-state/index.js +4 -0
- package/dist/primitives/empty-state/index.js.map +1 -0
- package/dist/primitives/folder-context-card/index.js +4 -0
- package/dist/primitives/folder-context-card/index.js.map +1 -0
- package/dist/primitives/folder-selector/index.js +4 -0
- package/dist/primitives/folder-selector/index.js.map +1 -0
- package/dist/primitives/form-field/index.js +4 -0
- package/dist/primitives/form-field/index.js.map +1 -0
- package/dist/primitives/hook-config/index.js +4 -0
- package/dist/primitives/hook-config/index.js.map +1 -0
- package/dist/primitives/hook-event-log/index.js +4 -0
- package/dist/primitives/hook-event-log/index.js.map +1 -0
- package/dist/primitives/input/index.js +4 -0
- package/dist/primitives/input/index.js.map +1 -0
- package/dist/primitives/intent-selector/index.js +4 -0
- package/dist/primitives/intent-selector/index.js.map +1 -0
- package/dist/primitives/label/index.js +4 -0
- package/dist/primitives/label/index.js.map +1 -0
- package/dist/primitives/lane-board/index.js +4 -0
- package/dist/primitives/lane-board/index.js.map +1 -0
- package/dist/primitives/login-split/index.js +4 -0
- package/dist/primitives/login-split/index.js.map +1 -0
- package/dist/primitives/mcp-server-card/index.js +4 -0
- package/dist/primitives/mcp-server-card/index.js.map +1 -0
- package/dist/primitives/memory-editor/index.js +4 -0
- package/dist/primitives/memory-editor/index.js.map +1 -0
- package/dist/primitives/mention-menu/index.js +4 -0
- package/dist/primitives/mention-menu/index.js.map +1 -0
- package/dist/primitives/metrics-panel/index.js +4 -0
- package/dist/primitives/metrics-panel/index.js.map +1 -0
- package/dist/primitives/model-card/index.js +4 -0
- package/dist/primitives/model-card/index.js.map +1 -0
- package/dist/primitives/model-selector/index.js +4 -0
- package/dist/primitives/model-selector/index.js.map +1 -0
- package/dist/primitives/pagination/index.js +4 -0
- package/dist/primitives/pagination/index.js.map +1 -0
- package/dist/primitives/permission-matrix/index.js +4 -0
- package/dist/primitives/permission-matrix/index.js.map +1 -0
- package/dist/primitives/plan-badge/index.js +4 -0
- package/dist/primitives/plan-badge/index.js.map +1 -0
- package/dist/primitives/progress/index.js +4 -0
- package/dist/primitives/progress/index.js.map +1 -0
- package/dist/primitives/progress-checklist/index.js +4 -0
- package/dist/primitives/progress-checklist/index.js.map +1 -0
- package/dist/primitives/project-switcher/index.js +4 -0
- package/dist/primitives/project-switcher/index.js.map +1 -0
- package/dist/primitives/quick-action-chips/index.js +4 -0
- package/dist/primitives/quick-action-chips/index.js.map +1 -0
- package/dist/primitives/radio-group/index.js +4 -0
- package/dist/primitives/radio-group/index.js.map +1 -0
- package/dist/primitives/recent-folders-list/index.js +4 -0
- package/dist/primitives/recent-folders-list/index.js.map +1 -0
- package/dist/primitives/rule-card/index.js +4 -0
- package/dist/primitives/rule-card/index.js.map +1 -0
- package/dist/primitives/run-stats/index.js +4 -0
- package/dist/primitives/run-stats/index.js.map +1 -0
- package/dist/primitives/running-tasks-panel/index.js +4 -0
- package/dist/primitives/running-tasks-panel/index.js.map +1 -0
- package/dist/primitives/scroll-area/index.js +4 -0
- package/dist/primitives/scroll-area/index.js.map +1 -0
- package/dist/primitives/select/index.js +4 -0
- package/dist/primitives/select/index.js.map +1 -0
- package/dist/primitives/session-list-item/index.js +4 -0
- package/dist/primitives/session-list-item/index.js.map +1 -0
- package/dist/primitives/session-timeline/index.js +4 -0
- package/dist/primitives/session-timeline/index.js.map +1 -0
- package/dist/primitives/sheet/index.js +4 -0
- package/dist/primitives/sheet/index.js.map +1 -0
- package/dist/primitives/sidebar/index.js +4 -0
- package/dist/primitives/sidebar/index.js.map +1 -0
- package/dist/primitives/skeleton/index.js +5 -0
- package/dist/primitives/skeleton/index.js.map +1 -0
- package/dist/primitives/skill-card/index.js +4 -0
- package/dist/primitives/skill-card/index.js.map +1 -0
- package/dist/primitives/social-auth-row/index.js +4 -0
- package/dist/primitives/social-auth-row/index.js.map +1 -0
- package/dist/primitives/stat-tile/index.js +4 -0
- package/dist/primitives/stat-tile/index.js.map +1 -0
- package/dist/primitives/status-dot/index.js +4 -0
- package/dist/primitives/status-dot/index.js.map +1 -0
- package/dist/primitives/steps-rail/index.js +4 -0
- package/dist/primitives/steps-rail/index.js.map +1 -0
- package/dist/primitives/sub-agent-dispatch/index.js +4 -0
- package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
- package/dist/primitives/switch/index.js +4 -0
- package/dist/primitives/switch/index.js.map +1 -0
- package/dist/primitives/system-prompt-editor/index.js +4 -0
- package/dist/primitives/system-prompt-editor/index.js.map +1 -0
- package/dist/primitives/table/index.js +4 -0
- package/dist/primitives/table/index.js.map +1 -0
- package/dist/primitives/tabs/index.js +4 -0
- package/dist/primitives/tabs/index.js.map +1 -0
- package/dist/primitives/task-plan/index.js +4 -0
- package/dist/primitives/task-plan/index.js.map +1 -0
- package/dist/primitives/terminal-panel/index.js +5 -0
- package/dist/primitives/terminal-panel/index.js.map +1 -0
- package/dist/primitives/textarea/index.js +4 -0
- package/dist/primitives/textarea/index.js.map +1 -0
- package/dist/primitives/timestamp/index.js +4 -0
- package/dist/primitives/timestamp/index.js.map +1 -0
- package/dist/primitives/toast/index.js +4 -0
- package/dist/primitives/toast/index.js.map +1 -0
- package/dist/primitives/token-usage-chart/index.js +4 -0
- package/dist/primitives/token-usage-chart/index.js.map +1 -0
- package/dist/primitives/tool-call/index.js +4 -0
- package/dist/primitives/tool-call/index.js.map +1 -0
- package/dist/primitives/tool-call-card/index.js +4 -0
- package/dist/primitives/tool-call-card/index.js.map +1 -0
- package/dist/primitives/tool-result/index.js +4 -0
- package/dist/primitives/tool-result/index.js.map +1 -0
- package/dist/primitives/tools-list/index.js +4 -0
- package/dist/primitives/tools-list/index.js.map +1 -0
- package/dist/primitives/tooltip/index.js +4 -0
- package/dist/primitives/tooltip/index.js.map +1 -0
- package/dist/primitives/topnav/index.js +4 -0
- package/dist/primitives/topnav/index.js.map +1 -0
- package/dist/slide/index.js +1 -712
- package/dist/slide/index.js.map +1 -1
- package/dist/slide-deck/index.js +2 -688
- package/dist/slide-deck/index.js.map +1 -1
- package/llms.txt +6 -5
- package/package.json +115 -115
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,105 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.10.0-next.0] - 2026-05-25
|
|
11
|
+
|
|
12
|
+
Minor (additive, zero breaking change) — fixes a publishing-pipeline
|
|
13
|
+
defect surfaced by the TheoCloud dashboard bundle audit
|
|
14
|
+
(`MEET-ASYNC-AMENDMENT-2026-05-24-002`). Since 0.7.0, the ~100 subpath
|
|
15
|
+
exports declared in `package.json#exports` (`./alert`, `./button`,
|
|
16
|
+
`./table`, …) were **cosmetic** — each pointed at the same
|
|
17
|
+
`./dist/index.js` (the 417 KB barrel). `import { Alert } from
|
|
18
|
+
"@usetheo/ui/alert"` resolved byte-identical to
|
|
19
|
+
`import { Alert } from "@usetheo/ui"`, and barrel tree-shaking
|
|
20
|
+
failed in consumers because of `forwardRef` side-effect bailouts,
|
|
21
|
+
`Object.assign` compound components, and `sideEffects: ["**/*.css"]`
|
|
22
|
+
conservatism. TheoCloud measured **0 KB dropped** from the 240 KB
|
|
23
|
+
minified barrel regardless of how few exports were used.
|
|
24
|
+
|
|
25
|
+
This release extends the per-component dist pattern that already
|
|
26
|
+
worked for `whiteboard` / `slide` / `slide-deck` to every primitive
|
|
27
|
+
and composite. The barrel `import { X } from "@usetheo/ui"` is
|
|
28
|
+
preserved unchanged (additive migration shape, same as `@mui/material`).
|
|
29
|
+
|
|
30
|
+
Plan: `.claude/knowledge-base/plans/subpath-tree-shaking-plan.md`
|
|
31
|
+
ADR: `.claude/knowledge-base/decisions/subpath-exports-per-component.md`
|
|
32
|
+
Brief: `theo/docs/handoff/2026-05-24-theo-ui-subpath-tree-shaking-brief-4.md`
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- **`tsup.config.ts`** auto-globs primitive + composite entries from
|
|
37
|
+
`src/components/{primitives,composites}/<name>/index.ts` at
|
|
38
|
+
config-load time. 87 primitives + 26 composites — 3 excluded
|
|
39
|
+
(`whiteboard`, `slide`, `slide-deck` retain their existing manual
|
|
40
|
+
isolated entries). New components ship subpath-shaped automatically
|
|
41
|
+
without `package.json#exports` hand-maintenance.
|
|
42
|
+
- **`splitting: true`** in tsup now dedupes shared utilities (`cn`,
|
|
43
|
+
forwardRef wrappers, theme helpers, lucide icon imports) into
|
|
44
|
+
`dist/chunk-<hash>.js` instead of inlining into every per-component
|
|
45
|
+
bundle. ~119 shared chunks emitted; barrel + per-component dist
|
|
46
|
+
files re-export from them.
|
|
47
|
+
- **`dts: { entry: ... }`** restricted to the barrel + isolated
|
|
48
|
+
engines only (D5 escalation). Generating per-component `.d.ts` for
|
|
49
|
+
all 114 entries OOMs the rollup-plugin-dts worker thread even with
|
|
50
|
+
`NODE_OPTIONS=--max-old-space-size=8192` (the flag does not
|
|
51
|
+
propagate to workers). Per-component subpaths resolve their `types`
|
|
52
|
+
field at the barrel `dist/index.d.ts` — TypeScript still finds
|
|
53
|
+
`Alert`/`AlertProps` from `import { Alert } from "@usetheo/ui/alert"`.
|
|
54
|
+
Trade-off: consumers' typecheck pulls the full type graph regardless
|
|
55
|
+
of subpath, but the JS dist (where tree-shaking matters) is
|
|
56
|
+
per-component and small.
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
|
|
60
|
+
- **`scripts/regen-subpath-exports.ts`** — runs after `tsup` and
|
|
61
|
+
rewrites `package.json#exports` so per-component subpaths point at
|
|
62
|
+
their own dist file. Refuses to write if any non-root entry still
|
|
63
|
+
points at `./dist/index.js` (permanent guard against the cosmetic-
|
|
64
|
+
subpath defect coming back). Verifies that every source-tree
|
|
65
|
+
component has a matching dist entry (EC-2 guard against silent
|
|
66
|
+
partial builds). Wired into `package.json#scripts.build` so
|
|
67
|
+
`pnpm build` produces a consistent `dist/` + `exports` map every
|
|
68
|
+
time.
|
|
69
|
+
- **`scripts/sync-exports.ts`** updated to resolve each component's
|
|
70
|
+
layer (primitives vs composites) via filesystem and emit the
|
|
71
|
+
correct per-component dist path. Stays the source-of-truth for
|
|
72
|
+
the structure gate; `regen-subpath-exports.ts` is the same logic
|
|
73
|
+
applied post-build against the actual dist tree.
|
|
74
|
+
|
|
75
|
+
### Bundle deltas
|
|
76
|
+
|
|
77
|
+
| File | Before (0.9.0-next.0) | After (0.10.0-next.0) | Δ |
|
|
78
|
+
|---|---|---|---|
|
|
79
|
+
| `dist/index.js` | 417,113 B | 49,018 B | **−88.2%** |
|
|
80
|
+
| `dist/slide/index.js` | 23,825 B | 400 B | −98.3% |
|
|
81
|
+
| `dist/slide-deck/index.js` | 58,413 B | 35,795 B | −38.7% |
|
|
82
|
+
| `dist/components.css` | 89,654 B | 93,069 B | +3.8% (within ±5%) |
|
|
83
|
+
| `dist/styles.css` | 4,720 B | 4,720 B | 0% |
|
|
84
|
+
| **Build time** | 17.72 s | 15.98 s | −10% |
|
|
85
|
+
| **Tarball (`pnpm pack`)** | 1.1 MB | 1.2 MB | +9% |
|
|
86
|
+
| **New per-component dist files** | 0 | 113 | + |
|
|
87
|
+
| **Shared chunks (`dist/chunk-*.js`)** | 0 | 119 | + |
|
|
88
|
+
|
|
89
|
+
The barrel shrank because all component code now lives in shared
|
|
90
|
+
chunks. Consumer-side bundle delta against TheoCloud dashboard:
|
|
91
|
+
**TBD — see Phase 8 evidence file** at
|
|
92
|
+
`.claude/knowledge-base/baselines/2026-05-25-post-subpath/theocloud-bundle-delta.txt`
|
|
93
|
+
once measured.
|
|
94
|
+
|
|
95
|
+
### Migration (consumer-side, opt-in)
|
|
96
|
+
|
|
97
|
+
```diff
|
|
98
|
+
- import { Card, Button, Alert } from "@usetheo/ui";
|
|
99
|
+
+ import { Card } from "@usetheo/ui/card";
|
|
100
|
+
+ import { Button } from "@usetheo/ui/button";
|
|
101
|
+
+ import { Alert } from "@usetheo/ui/alert";
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
The barrel import keeps working — migration is gradual, file by
|
|
105
|
+
file. CSS, themes, and isolated engines stay barrel-imported:
|
|
106
|
+
`import { ThemeProvider, violetForge } from "@usetheo/ui"`,
|
|
107
|
+
`import "@usetheo/ui/styles.css"`.
|
|
108
|
+
|
|
10
109
|
## [0.9.0-next.0] - 2026-05-23
|
|
11
110
|
|
|
12
111
|
Minor — adds the two deferred primitives revealed by the Brief #3
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
3
|
+
import { X } from 'lucide-react';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var Overlay2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
8
|
+
DialogPrimitive.Overlay,
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
className: cn(
|
|
12
|
+
"fixed inset-0 z-50 bg-background/80",
|
|
13
|
+
"data-[state=open]:fade-in-0 data-[state=open]:animate-in",
|
|
14
|
+
"data-[state=closed]:fade-out-0 data-[state=closed]:animate-out",
|
|
15
|
+
className
|
|
16
|
+
),
|
|
17
|
+
...props
|
|
18
|
+
}
|
|
19
|
+
));
|
|
20
|
+
Overlay2.displayName = "Dialog.Overlay";
|
|
21
|
+
var Content2 = forwardRef(
|
|
22
|
+
({ className, children, hideCloseButton, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
|
|
23
|
+
/* @__PURE__ */ jsx(Overlay2, {}),
|
|
24
|
+
/* @__PURE__ */ jsxs(
|
|
25
|
+
DialogPrimitive.Content,
|
|
26
|
+
{
|
|
27
|
+
ref,
|
|
28
|
+
className: cn(
|
|
29
|
+
"-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 w-full max-w-lg",
|
|
30
|
+
"rounded-2xl border bg-card text-card-foreground shadow-lg",
|
|
31
|
+
"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in",
|
|
32
|
+
"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out",
|
|
33
|
+
"duration-base",
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
...props,
|
|
37
|
+
children: [
|
|
38
|
+
children,
|
|
39
|
+
!hideCloseButton ? /* @__PURE__ */ jsxs(
|
|
40
|
+
DialogPrimitive.Close,
|
|
41
|
+
{
|
|
42
|
+
className: cn(
|
|
43
|
+
"absolute top-4 right-4 rounded-md p-1 opacity-70",
|
|
44
|
+
"transition-opacity hover:opacity-100",
|
|
45
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
|
|
46
|
+
"disabled:pointer-events-none"
|
|
47
|
+
),
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ jsx(X, { className: "size-4" }),
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
) : null
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
] })
|
|
58
|
+
);
|
|
59
|
+
Content2.displayName = "Dialog.Content";
|
|
60
|
+
var Header = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pb-3 text-left", className), ...props });
|
|
61
|
+
Header.displayName = "Dialog.Header";
|
|
62
|
+
var Body = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("px-6 pb-6 text-body-md text-muted-foreground", className), ...props });
|
|
63
|
+
Body.displayName = "Dialog.Body";
|
|
64
|
+
var Footer = ({ className, ...props }) => /* @__PURE__ */ jsx(
|
|
65
|
+
"div",
|
|
66
|
+
{
|
|
67
|
+
className: cn("flex flex-col-reverse gap-2 p-6 pt-3 sm:flex-row sm:justify-end", className),
|
|
68
|
+
...props
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
Footer.displayName = "Dialog.Footer";
|
|
72
|
+
var Title2 = forwardRef(
|
|
73
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
74
|
+
DialogPrimitive.Title,
|
|
75
|
+
{
|
|
76
|
+
ref,
|
|
77
|
+
className: cn("font-display text-foreground text-title-lg tracking-tight", className),
|
|
78
|
+
...props
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
Title2.displayName = "Dialog.Title";
|
|
83
|
+
var Description2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
84
|
+
DialogPrimitive.Description,
|
|
85
|
+
{
|
|
86
|
+
ref,
|
|
87
|
+
className: cn("text-body-sm text-muted-foreground", className),
|
|
88
|
+
...props
|
|
89
|
+
}
|
|
90
|
+
));
|
|
91
|
+
Description2.displayName = "Dialog.Description";
|
|
92
|
+
var Dialog = /* @__PURE__ */ Object.assign(DialogPrimitive.Root, {
|
|
93
|
+
Trigger: DialogPrimitive.Trigger,
|
|
94
|
+
Close: DialogPrimitive.Close,
|
|
95
|
+
Content: Content2,
|
|
96
|
+
Overlay: Overlay2,
|
|
97
|
+
Header,
|
|
98
|
+
Body,
|
|
99
|
+
Footer,
|
|
100
|
+
Title: Title2,
|
|
101
|
+
Description: Description2
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
export { Dialog };
|
|
105
|
+
//# sourceMappingURL=chunk-2UJROWAG.js.map
|
|
106
|
+
//# sourceMappingURL=chunk-2UJROWAG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/dialog/dialog.tsx"],"names":["Overlay","Content","Title","Description"],"mappings":"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","file":"chunk-2UJROWAG.js","sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Dialog — modal overlay built on Radix Dialog.\n *\n * Composition:\n * <Dialog>\n * <Dialog.Trigger>Open</Dialog.Trigger>\n * <Dialog.Content>\n * <Dialog.Header>\n * <Dialog.Title>…</Dialog.Title>\n * <Dialog.Description>…</Dialog.Description>\n * </Dialog.Header>\n * <Dialog.Body>…</Dialog.Body>\n * <Dialog.Footer>…</Dialog.Footer>\n * </Dialog.Content>\n * </Dialog>\n *\n * Overlay is a theme-neutral backdrop (`bg-background/80`) with no glass blur\n * (anti-glass guideline). Content uses card surface, rounded-2xl, shadow-lg\n * + slight glow on enter.\n */\n\nconst Overlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80\",\n \"data-[state=open]:fade-in-0 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:animate-out\",\n className,\n )}\n {...props}\n />\n));\nOverlay.displayName = \"Dialog.Overlay\";\n\ninterface ContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n hideCloseButton?: boolean;\n}\n\nconst Content = forwardRef<ElementRef<typeof DialogPrimitive.Content>, ContentProps>(\n ({ className, children, hideCloseButton, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 w-full max-w-lg\",\n \"rounded-2xl border bg-card text-card-foreground shadow-lg\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n \"duration-base\",\n className,\n )}\n {...props}\n >\n {children}\n {!hideCloseButton ? (\n <DialogPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 rounded-md p-1 opacity-70\",\n \"transition-opacity hover:opacity-100\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card\",\n \"disabled:pointer-events-none\",\n )}\n >\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n ),\n);\nContent.displayName = \"Dialog.Content\";\n\nconst Header = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col gap-1.5 p-6 pb-3 text-left\", className)} {...props} />\n);\nHeader.displayName = \"Dialog.Header\";\n\nconst Body = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"px-6 pb-6 text-body-md text-muted-foreground\", className)} {...props} />\n);\nBody.displayName = \"Dialog.Body\";\n\nconst Footer = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col-reverse gap-2 p-6 pt-3 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n);\nFooter.displayName = \"Dialog.Footer\";\n\ntype TitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\nconst Title = forwardRef<ElementRef<typeof DialogPrimitive.Title>, TitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"font-display text-foreground text-title-lg tracking-tight\", className)}\n {...props}\n />\n ),\n);\nTitle.displayName = \"Dialog.Title\";\n\nconst Description = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-body-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDescription.displayName = \"Dialog.Description\";\n\nconst Dialog = /*#__PURE__*/ Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Close: DialogPrimitive.Close,\n Content,\n Overlay,\n Header,\n Body,\n Footer,\n Title,\n Description,\n});\n\nexport { Dialog };\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var INTENT_FILL = {
|
|
6
|
+
default: "bg-primary",
|
|
7
|
+
success: "bg-success",
|
|
8
|
+
warning: "bg-warning",
|
|
9
|
+
destructive: "bg-destructive"
|
|
10
|
+
};
|
|
11
|
+
var Progress = forwardRef(
|
|
12
|
+
({
|
|
13
|
+
className,
|
|
14
|
+
value = 0,
|
|
15
|
+
max = 100,
|
|
16
|
+
intent = "default",
|
|
17
|
+
height = "h-1",
|
|
18
|
+
indeterminate = false,
|
|
19
|
+
...props
|
|
20
|
+
}, ref) => {
|
|
21
|
+
const clampedMax = Math.max(0, max);
|
|
22
|
+
const clampedValue = Math.min(clampedMax, Math.max(0, value));
|
|
23
|
+
const percent = clampedMax > 0 ? clampedValue / clampedMax * 100 : 0;
|
|
24
|
+
const fillClass = INTENT_FILL[intent];
|
|
25
|
+
return (
|
|
26
|
+
// biome-ignore lint/a11y/useFocusableInteractive: WAI-ARIA `progressbar` is a status role (https://www.w3.org/TR/wai-aria-1.2/#progressbar) — NOT supposed to be focusable; screen readers announce updates without keyboard navigation.
|
|
27
|
+
/* @__PURE__ */ jsx(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
ref,
|
|
31
|
+
role: "progressbar",
|
|
32
|
+
"aria-valuemin": 0,
|
|
33
|
+
"aria-valuemax": clampedMax,
|
|
34
|
+
"aria-valuenow": indeterminate ? void 0 : clampedValue,
|
|
35
|
+
"aria-busy": indeterminate ? true : void 0,
|
|
36
|
+
className: cn("relative w-full overflow-hidden rounded-full bg-muted", height, className),
|
|
37
|
+
...props,
|
|
38
|
+
children: indeterminate ? /* @__PURE__ */ jsx(
|
|
39
|
+
"div",
|
|
40
|
+
{
|
|
41
|
+
className: cn(
|
|
42
|
+
"absolute inset-y-0 left-0 w-1/3 rounded-full",
|
|
43
|
+
"animate-[progress-indeterminate_1.4s_ease-in-out_infinite] motion-reduce:animate-none",
|
|
44
|
+
"motion-reduce:w-full motion-reduce:opacity-50",
|
|
45
|
+
fillClass
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
) : /* @__PURE__ */ jsx(
|
|
49
|
+
"div",
|
|
50
|
+
{
|
|
51
|
+
className: cn(
|
|
52
|
+
"h-full rounded-full transition-[width] duration-base ease-out-soft",
|
|
53
|
+
"motion-reduce:transition-none",
|
|
54
|
+
fillClass
|
|
55
|
+
),
|
|
56
|
+
style: { width: `${percent}%` }
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
Progress.displayName = "Progress";
|
|
65
|
+
|
|
66
|
+
export { Progress };
|
|
67
|
+
//# sourceMappingURL=chunk-2XPWOUEH.js.map
|
|
68
|
+
//# sourceMappingURL=chunk-2XPWOUEH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/progress/progress.tsx"],"names":[],"mappings":";;;;AA+CA,IAAM,WAAA,GAAoE;AAAA,EACxE,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAa;AACf,CAAA;AAEA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA,GAAQ,CAAA;AAAA,IACR,GAAA,GAAM,GAAA;AAAA,IACN,MAAA,GAAS,SAAA;AAAA,IACT,MAAA,GAAS,KAAA;AAAA,IACT,aAAA,GAAgB,KAAA;AAAA,IAChB,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,UAAA,EAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,UAAA,GAAa,CAAA,GAAK,YAAA,GAAe,aAAc,GAAA,GAAM,CAAA;AACrE,IAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,IAAA;AAAA;AAAA,sBAEE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,aAAA;AAAA,UACL,eAAA,EAAe,CAAA;AAAA,UACf,eAAA,EAAe,UAAA;AAAA,UACf,eAAA,EAAe,gBAAgB,MAAA,GAAY,YAAA;AAAA,UAC3C,WAAA,EAAW,gBAAgB,IAAA,GAAO,MAAA;AAAA,UAClC,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,MAAA,EAAQ,SAAS,CAAA;AAAA,UACvF,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA,aAAA,mBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,uFAAA;AAAA,gBACA,+CAAA;AAAA,gBACA;AAAA;AACF;AAAA,WACF,mBAEA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oEAAA;AAAA,gBACA,+BAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAAI;AAAA;AAChC;AAAA;AAEJ;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-2XPWOUEH.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Progress — accessible progress bar primitive.\n *\n * Built on `<div role=\"progressbar\">` (NOT native `<progress>`) so Tailwind\n * classes can style the track + fill cross-browser (Chrome/Safari/Firefox\n * shadow-DOM hooks for `<progress>` diverge). Matches Radix / shadcn /\n * Mantine convention.\n *\n * Variants:\n * - intent: `default` | `success` | `warning` | `destructive` — controls fill color\n * - height: `h-1` (4px, default) | `h-1.5` | `h-2` | `h-3`\n * - indeterminate: animated bar, no value (e.g. \"uploading…\", \"building…\")\n *\n * Composition:\n * <Progress value={42} max={100} intent=\"success\" aria-label=\"Upload\" />\n * <Progress indeterminate aria-label=\"Building\" />\n *\n * A11y:\n * - role=\"progressbar\"\n * - aria-valuenow / aria-valuemin / aria-valuemax (determinate)\n * - aria-busy=\"true\" when indeterminate\n * - Respects `prefers-reduced-motion` (no animation when set)\n *\n * Used by `<UsageMeter>` to render each metric's fill bar, but ships as a\n * standalone primitive for direct consumer use (deploy phase, file upload,\n * build progress, quota fill).\n */\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, \"role\"> {\n /** Current value (0..max). Values outside the range are clamped. */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Visual intent — controls fill color. */\n intent?: \"default\" | \"success\" | \"warning\" | \"destructive\";\n /** Bar height in tailwind units. Defaults to `\"h-1\"` (4px). */\n height?: \"h-1\" | \"h-1.5\" | \"h-2\" | \"h-3\";\n /** When true, animated bar with no value. Omits `aria-valuenow`, adds `aria-busy`. */\n indeterminate?: boolean;\n /** Accessible label. Required if not preceded by an `aria-labelledby` element. */\n \"aria-label\"?: string;\n}\n\nconst INTENT_FILL: Record<NonNullable<ProgressProps[\"intent\"]>, string> = {\n default: \"bg-primary\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n destructive: \"bg-destructive\",\n};\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n value = 0,\n max = 100,\n intent = \"default\",\n height = \"h-1\",\n indeterminate = false,\n ...props\n },\n ref,\n ) => {\n const clampedMax = Math.max(0, max);\n const clampedValue = Math.min(clampedMax, Math.max(0, value));\n const percent = clampedMax > 0 ? (clampedValue / clampedMax) * 100 : 0;\n const fillClass = INTENT_FILL[intent];\n\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: WAI-ARIA `progressbar` is a status role (https://www.w3.org/TR/wai-aria-1.2/#progressbar) — NOT supposed to be focusable; screen readers announce updates without keyboard navigation.\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={clampedMax}\n aria-valuenow={indeterminate ? undefined : clampedValue}\n aria-busy={indeterminate ? true : undefined}\n className={cn(\"relative w-full overflow-hidden rounded-full bg-muted\", height, className)}\n {...props}\n >\n {indeterminate ? (\n <div\n className={cn(\n \"absolute inset-y-0 left-0 w-1/3 rounded-full\",\n \"animate-[progress-indeterminate_1.4s_ease-in-out_infinite] motion-reduce:animate-none\",\n \"motion-reduce:w-full motion-reduce:opacity-50\",\n fillClass,\n )}\n />\n ) : (\n <div\n className={cn(\n \"h-full rounded-full transition-[width] duration-base ease-out-soft\",\n \"motion-reduce:transition-none\",\n fillClass,\n )}\n style={{ width: `${percent}%` }}\n />\n )}\n </div>\n );\n },\n);\nProgress.displayName = \"Progress\";\n\nexport { Progress };\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import { Clock, Coins, FileEdit } from 'lucide-react';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var RunStats = forwardRef(
|
|
7
|
+
({ className, duration, tokens, filesChanged, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
className: cn(
|
|
12
|
+
"flex flex-wrap items-center gap-3 font-mono text-code-sm text-muted-foreground",
|
|
13
|
+
className
|
|
14
|
+
),
|
|
15
|
+
...props,
|
|
16
|
+
children: [
|
|
17
|
+
duration ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
18
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-3", "aria-hidden": "true" }),
|
|
19
|
+
" ",
|
|
20
|
+
duration
|
|
21
|
+
] }) : null,
|
|
22
|
+
tokens ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
23
|
+
/* @__PURE__ */ jsx(Coins, { className: "size-3", "aria-hidden": "true" }),
|
|
24
|
+
" ",
|
|
25
|
+
tokens,
|
|
26
|
+
" tokens"
|
|
27
|
+
] }) : null,
|
|
28
|
+
filesChanged !== void 0 ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
29
|
+
/* @__PURE__ */ jsx(FileEdit, { className: "size-3", "aria-hidden": "true" }),
|
|
30
|
+
" ",
|
|
31
|
+
filesChanged,
|
|
32
|
+
" files"
|
|
33
|
+
] }) : null
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
);
|
|
38
|
+
RunStats.displayName = "RunStats";
|
|
39
|
+
|
|
40
|
+
export { RunStats };
|
|
41
|
+
//# sourceMappingURL=chunk-3GHLNCM3.js.map
|
|
42
|
+
//# sourceMappingURL=chunk-3GHLNCM3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/run-stats/run-stats.tsx"],"names":[],"mappings":";;;;;AAmBA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,QAAQ,YAAA,EAAc,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxD,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE;AAAA,SAAA,EACnD,CAAA,GACE,IAAA;AAAA,QACH,MAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,MAAA;AAAA,UAAO;AAAA,SAAA,EAC1D,CAAA,GACE,IAAA;AAAA,QACH,YAAA,KAAiB,MAAA,mBAChB,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,YAAA;AAAA,UAAa;AAAA,SAAA,EACnE,CAAA,GACE;AAAA;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-3GHLNCM3.js","sourcesContent":["import { Clock, Coins, FileEdit } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface RunStatsProps extends HTMLAttributes<HTMLDivElement> {\n duration?: string;\n /** Formatted token count, e.g. \"35.7k\". */\n tokens?: string;\n /** Number of files changed in the run. */\n filesChanged?: number;\n}\n\n/**\n * RunStats — inline metric row shown after an agent run.\n *\n * Visual: muted bullet-separated row with clock + tokens + files-changed icons.\n * All optional — the component skips entries that aren't provided.\n */\nconst RunStats = forwardRef<HTMLDivElement, RunStatsProps>(\n ({ className, duration, tokens, filesChanged, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-3 font-mono text-code-sm text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {duration ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <Clock className=\"size-3\" aria-hidden=\"true\" /> {duration}\n </span>\n ) : null}\n {tokens ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <Coins className=\"size-3\" aria-hidden=\"true\" /> {tokens} tokens\n </span>\n ) : null}\n {filesChanged !== undefined ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <FileEdit className=\"size-3\" aria-hidden=\"true\" /> {filesChanged} files\n </span>\n ) : null}\n </div>\n ),\n);\nRunStats.displayName = \"RunStats\";\n\nexport { RunStats };\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.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(SwitchPrimitive.Root, { ref, className: cn(switchVariants({ size }), className), ...props, children: /* @__PURE__ */ jsx(
|
|
34
|
+
SwitchPrimitive.Thumb,
|
|
35
|
+
{
|
|
36
|
+
className: cn(
|
|
37
|
+
"pointer-events-none block rounded-full bg-card shadow-sm",
|
|
38
|
+
"transition-transform duration-base ease-out-soft",
|
|
39
|
+
thumbClassBySize[size ?? "md"]
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
) })
|
|
43
|
+
);
|
|
44
|
+
Switch.displayName = "Switch";
|
|
45
|
+
|
|
46
|
+
export { Switch };
|
|
47
|
+
//# sourceMappingURL=chunk-3HOXC25T.js.map
|
|
48
|
+
//# sourceMappingURL=chunk-3HOXC25T.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,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC9B,GAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,KAAU,SAAA,EAAW,EAAA,CAAG,eAAe,EAAE,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACtF,QAAA,kBAAA,GAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA,kDAAA;AAAA,QACA,gBAAA,CAAiB,QAAQ,IAAI;AAAA;AAC/B;AAAA,GACF,EACF;AAEJ;AACA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-3HOXC25T.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 ref={ref} className={cn(switchVariants({ size }), className)} {...props}>\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,46 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var SocialAuthRow = forwardRef(
|
|
6
|
+
({ className, providers, onSelect, vertical, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
7
|
+
"div",
|
|
8
|
+
{
|
|
9
|
+
ref,
|
|
10
|
+
className: cn(
|
|
11
|
+
"grid gap-2",
|
|
12
|
+
vertical ? "grid-cols-1" : `grid-cols-${Math.min(providers.length, 4)}`,
|
|
13
|
+
className
|
|
14
|
+
),
|
|
15
|
+
style: !vertical ? { gridTemplateColumns: `repeat(${providers.length}, minmax(0, 1fr))` } : void 0,
|
|
16
|
+
...props,
|
|
17
|
+
children: providers.map((p) => {
|
|
18
|
+
const Icon = p.icon;
|
|
19
|
+
return /* @__PURE__ */ jsxs(
|
|
20
|
+
"button",
|
|
21
|
+
{
|
|
22
|
+
type: "button",
|
|
23
|
+
onClick: () => onSelect?.(p.id),
|
|
24
|
+
className: cn(
|
|
25
|
+
"inline-flex h-10 items-center justify-center gap-2 rounded-lg border border-border bg-card",
|
|
26
|
+
"px-4 font-medium font-sans text-body-sm text-foreground",
|
|
27
|
+
"transition-colors duration-base ease-out-soft",
|
|
28
|
+
"hover:bg-muted",
|
|
29
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
|
|
30
|
+
),
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsx(Icon, { className: "size-4", "aria-hidden": "true" }),
|
|
33
|
+
p.label
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
p.id
|
|
37
|
+
);
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
);
|
|
42
|
+
SocialAuthRow.displayName = "SocialAuthRow";
|
|
43
|
+
|
|
44
|
+
export { SocialAuthRow };
|
|
45
|
+
//# sourceMappingURL=chunk-3QGO5SB3.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-3QGO5SB3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/social-auth-row/social-auth-row.tsx"],"names":[],"mappings":";;;;AA2BA,IAAM,aAAA,GAAgB,UAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,SAAA,EAAW,UAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACvD,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,YAAA;AAAA,QACA,QAAA,GAAW,gBAAgB,CAAA,UAAA,EAAa,IAAA,CAAK,IAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,QACrE;AAAA,OACF;AAAA,MACA,KAAA,EACE,CAAC,QAAA,GACG,EAAE,qBAAqB,CAAA,OAAA,EAAU,SAAA,CAAU,MAAM,CAAA,iBAAA,CAAA,EAAoB,GACrE,MAAA;AAAA,MAEL,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,QAAA,MAAM,OAAO,CAAA,CAAE,IAAA;AACf,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,QAAA,GAAW,CAAA,CAAE,EAAE,CAAA;AAAA,YAC9B,SAAA,EAAW,EAAA;AAAA,cACT,4FAAA;AAAA,cACA,yDAAA;AAAA,cACA,+CAAA;AAAA,cACA,gBAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,cAC3C,CAAA,CAAE;AAAA;AAAA,WAAA;AAAA,UAZE,CAAA,CAAE;AAAA,SAaT;AAAA,MAEJ,CAAC;AAAA;AAAA;AAGP;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"chunk-3QGO5SB3.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\n\nexport interface SocialProvider {\n id: string;\n label: ReactNode;\n /** Icon component (e.g. brand-specific SVG). */\n icon: IconComponent;\n}\n\ninterface SocialAuthRowProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n providers: SocialProvider[];\n onSelect?: (id: string) => void;\n /**\n * Stack vertically instead of horizontally (single-column flow).\n */\n vertical?: boolean;\n}\n\n/**\n * SocialAuthRow — row of OAuth provider buttons.\n *\n * Stateless; caller wires the redirect on `onSelect`. Buttons share Theo button\n * styling but with provider icon prominently on the left.\n */\nconst SocialAuthRow = forwardRef<HTMLDivElement, SocialAuthRowProps>(\n ({ className, providers, onSelect, vertical, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"grid gap-2\",\n vertical ? \"grid-cols-1\" : `grid-cols-${Math.min(providers.length, 4)}`,\n className,\n )}\n style={\n !vertical\n ? { gridTemplateColumns: `repeat(${providers.length}, minmax(0, 1fr))` }\n : undefined\n }\n {...props}\n >\n {providers.map((p) => {\n const Icon = p.icon;\n return (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => onSelect?.(p.id)}\n className={cn(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-lg border border-border bg-card\",\n \"px-4 font-medium font-sans text-body-sm text-foreground\",\n \"transition-colors duration-base ease-out-soft\",\n \"hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n {p.label}\n </button>\n );\n })}\n </div>\n ),\n);\nSocialAuthRow.displayName = \"SocialAuthRow\";\n\nexport { SocialAuthRow };\n"]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import { Users, User, BookOpen, Sparkles } from 'lucide-react';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var SOURCE_CONFIG = {
|
|
7
|
+
builtin: { label: "Built-in", icon: Sparkles, tone: "text-primary" },
|
|
8
|
+
project: { label: "Project", icon: BookOpen, tone: "text-accent" },
|
|
9
|
+
user: { label: "User", icon: User, tone: "text-info" },
|
|
10
|
+
plugin: { label: "Plugin", icon: Users, tone: "text-muted-foreground" }
|
|
11
|
+
};
|
|
12
|
+
var SkillCard = forwardRef(
|
|
13
|
+
({ className, skill, onToggle, ...props }, ref) => {
|
|
14
|
+
const config = SOURCE_CONFIG[skill.source];
|
|
15
|
+
const Icon = config.icon;
|
|
16
|
+
const state = skill.state ?? "enabled";
|
|
17
|
+
const enabled = state === "enabled";
|
|
18
|
+
return /* @__PURE__ */ jsxs(
|
|
19
|
+
"article",
|
|
20
|
+
{
|
|
21
|
+
ref,
|
|
22
|
+
className: cn(
|
|
23
|
+
"grid gap-3 rounded-xl border bg-card p-4",
|
|
24
|
+
!enabled && "opacity-60",
|
|
25
|
+
className
|
|
26
|
+
),
|
|
27
|
+
...props,
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-start justify-between gap-3", children: [
|
|
30
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
31
|
+
/* @__PURE__ */ jsx("span", { className: cn("grid size-8 place-items-center rounded-md bg-muted", config.tone), children: /* @__PURE__ */ jsx(Icon, { className: "size-4", "aria-hidden": "true" }) }),
|
|
32
|
+
/* @__PURE__ */ jsxs("div", { className: "grid", children: [
|
|
33
|
+
/* @__PURE__ */ jsx("h4", { className: "font-medium font-mono text-body-sm text-foreground", children: skill.name }),
|
|
34
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: config.label })
|
|
35
|
+
] })
|
|
36
|
+
] }),
|
|
37
|
+
onToggle ? /* @__PURE__ */ jsx(
|
|
38
|
+
"button",
|
|
39
|
+
{
|
|
40
|
+
type: "button",
|
|
41
|
+
onClick: () => onToggle(skill.id, enabled ? "disabled" : "enabled"),
|
|
42
|
+
"aria-pressed": enabled,
|
|
43
|
+
className: cn(
|
|
44
|
+
"inline-flex items-center rounded-full border px-2.5 py-0.5",
|
|
45
|
+
"font-mono text-label uppercase tracking-wider transition-colors",
|
|
46
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
47
|
+
enabled ? "border-success/40 bg-success/15 text-success" : "border-border/40 bg-muted text-muted-foreground"
|
|
48
|
+
),
|
|
49
|
+
children: enabled ? "Enabled" : "Disabled"
|
|
50
|
+
}
|
|
51
|
+
) : null
|
|
52
|
+
] }),
|
|
53
|
+
skill.description ? /* @__PURE__ */ jsx("p", { className: "text-body-sm text-muted-foreground", children: skill.description }) : null,
|
|
54
|
+
skill.allowedTools && skill.allowedTools.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
|
|
55
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground uppercase tracking-wider", children: "tools:" }),
|
|
56
|
+
skill.allowedTools.map((tool) => /* @__PURE__ */ jsx(
|
|
57
|
+
"span",
|
|
58
|
+
{
|
|
59
|
+
className: "inline-flex items-center rounded-md bg-muted px-2 py-0.5 font-mono text-foreground text-label",
|
|
60
|
+
children: tool
|
|
61
|
+
},
|
|
62
|
+
tool
|
|
63
|
+
))
|
|
64
|
+
] }) : null,
|
|
65
|
+
skill.triggers && skill.triggers.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
|
|
66
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground uppercase tracking-wider", children: "triggers:" }),
|
|
67
|
+
skill.triggers.map((trigger) => /* @__PURE__ */ jsx(
|
|
68
|
+
"span",
|
|
69
|
+
{
|
|
70
|
+
className: "inline-flex items-center rounded-md bg-primary/10 px-2 py-0.5 font-mono text-label text-primary",
|
|
71
|
+
children: trigger
|
|
72
|
+
},
|
|
73
|
+
trigger
|
|
74
|
+
))
|
|
75
|
+
] }) : null
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
SkillCard.displayName = "SkillCard";
|
|
82
|
+
|
|
83
|
+
export { SkillCard };
|
|
84
|
+
//# sourceMappingURL=chunk-47QJVWW2.js.map
|
|
85
|
+
//# sourceMappingURL=chunk-47QJVWW2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/skill-card/skill-card.tsx"],"names":[],"mappings":"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","file":"chunk-47QJVWW2.js","sourcesContent":["import { BookOpen, Sparkles, User, Users } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\nimport type { Mode } from \"../../../types/mode.js\";\n\nexport type SkillSource = \"builtin\" | \"project\" | \"user\" | \"plugin\";\nexport type SkillState = \"enabled\" | \"disabled\";\n\nconst SOURCE_CONFIG: Record<SkillSource, { label: string; icon: IconComponent; tone: string }> = {\n builtin: { label: \"Built-in\", icon: Sparkles, tone: \"text-primary\" },\n project: { label: \"Project\", icon: BookOpen, tone: \"text-accent\" },\n user: { label: \"User\", icon: User, tone: \"text-info\" },\n plugin: { label: \"Plugin\", icon: Users, tone: \"text-muted-foreground\" },\n};\n\nexport interface Skill {\n id: string;\n name: string;\n description?: ReactNode;\n /** Where the skill comes from. */\n source: SkillSource;\n /** Optional tools the skill is allowed to use (informational). */\n allowedTools?: string[];\n /** Optional trigger keywords / patterns for discovery. */\n triggers?: string[];\n state?: SkillState;\n /** Modes this skill is visible in. Omit / empty = global (all modes). */\n modes?: Mode[];\n}\n\ninterface SkillCardProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onToggle\"> {\n skill: Skill;\n onToggle?: (id: string, next: SkillState) => void;\n}\n\n/**\n * SkillCard — single skill entry showing what it does, where it came from,\n * and which tools it needs. Toggle to enable/disable for the current session.\n */\nconst SkillCard = forwardRef<HTMLDivElement, SkillCardProps>(\n ({ className, skill, onToggle, ...props }, ref) => {\n const config = SOURCE_CONFIG[skill.source];\n const Icon = config.icon;\n const state = skill.state ?? \"enabled\";\n const enabled = state === \"enabled\";\n return (\n <article\n ref={ref}\n className={cn(\n \"grid gap-3 rounded-xl border bg-card p-4\",\n !enabled && \"opacity-60\",\n className,\n )}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"grid size-8 place-items-center rounded-md bg-muted\", config.tone)}>\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n </span>\n <div className=\"grid\">\n <h4 className=\"font-medium font-mono text-body-sm text-foreground\">{skill.name}</h4>\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {config.label}\n </span>\n </div>\n </div>\n {onToggle ? (\n <button\n type=\"button\"\n onClick={() => onToggle(skill.id, enabled ? \"disabled\" : \"enabled\")}\n aria-pressed={enabled}\n className={cn(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5\",\n \"font-mono text-label uppercase tracking-wider transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n enabled\n ? \"border-success/40 bg-success/15 text-success\"\n : \"border-border/40 bg-muted text-muted-foreground\",\n )}\n >\n {enabled ? \"Enabled\" : \"Disabled\"}\n </button>\n ) : null}\n </header>\n {skill.description ? (\n <p className=\"text-body-sm text-muted-foreground\">{skill.description}</p>\n ) : null}\n {skill.allowedTools && skill.allowedTools.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5\">\n <span className=\"font-mono text-label text-muted-foreground uppercase tracking-wider\">\n tools:\n </span>\n {skill.allowedTools.map((tool) => (\n <span\n key={tool}\n className=\"inline-flex items-center rounded-md bg-muted px-2 py-0.5 font-mono text-foreground text-label\"\n >\n {tool}\n </span>\n ))}\n </div>\n ) : null}\n {skill.triggers && skill.triggers.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5\">\n <span className=\"font-mono text-label text-muted-foreground uppercase tracking-wider\">\n triggers:\n </span>\n {skill.triggers.map((trigger) => (\n <span\n key={trigger}\n className=\"inline-flex items-center rounded-md bg-primary/10 px-2 py-0.5 font-mono text-label text-primary\"\n >\n {trigger}\n </span>\n ))}\n </div>\n ) : null}\n </article>\n );\n },\n);\nSkillCard.displayName = \"SkillCard\";\n\nexport { SkillCard };\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useInLiveRegion } from './chunk-UGKI466V.js';
|
|
2
|
+
import { cn } from './chunk-ZSRJCIWF.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
|
+
ref,
|
|
14
|
+
"aria-live": inLiveRegion ? void 0 : "polite",
|
|
15
|
+
className: cn(
|
|
16
|
+
"flex items-center gap-3 rounded-xl border border-primary/30 border-dashed bg-primary/5 px-4 py-3",
|
|
17
|
+
className
|
|
18
|
+
),
|
|
19
|
+
...props,
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin text-primary", "aria-hidden": "true" }),
|
|
22
|
+
/* @__PURE__ */ jsxs("div", { className: "grid", children: [
|
|
23
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-body-sm text-foreground", children: label }),
|
|
24
|
+
hint ? /* @__PURE__ */ jsx("span", { className: "text-body-sm text-muted-foreground", children: hint }) : null
|
|
25
|
+
] })
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
AgentStartingState.displayName = "AgentStartingState";
|
|
32
|
+
|
|
33
|
+
export { AgentStartingState };
|
|
34
|
+
//# sourceMappingURL=chunk-4L63UW3I.js.map
|
|
35
|
+
//# sourceMappingURL=chunk-4L63UW3I.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,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-4L63UW3I.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 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"]}
|