@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
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { ALL_MODES, MODE_LABEL } from './chunk-VM4RMQQN.js';
|
|
2
|
+
import { Switch } from './chunk-3HOXC25T.js';
|
|
3
|
+
import { Textarea } from './chunk-WWNH5ENT.js';
|
|
4
|
+
import { Select } from './chunk-EP25QJ4N.js';
|
|
5
|
+
import { FormField } from './chunk-TK24HQJJ.js';
|
|
6
|
+
import { Input } from './chunk-H3VJMFJQ.js';
|
|
7
|
+
import { Button } from './chunk-57NXT3OX.js';
|
|
8
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
9
|
+
import { useState } from 'react';
|
|
10
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
11
|
+
|
|
12
|
+
var SOURCES = [
|
|
13
|
+
{ id: "user", label: "User \u2014 defined by you" },
|
|
14
|
+
{ id: "project", label: "Project \u2014 lives in this workspace" },
|
|
15
|
+
{ id: "plugin", label: "Plugin \u2014 imported from a package" },
|
|
16
|
+
{ id: "builtin", label: "Built-in \u2014 shipped with Theo" }
|
|
17
|
+
];
|
|
18
|
+
function SkillEditor({
|
|
19
|
+
className,
|
|
20
|
+
initial,
|
|
21
|
+
onSave,
|
|
22
|
+
onCancel,
|
|
23
|
+
onDelete,
|
|
24
|
+
...formProps
|
|
25
|
+
}) {
|
|
26
|
+
const [name, setName] = useState(initial?.name ?? "");
|
|
27
|
+
const [description, setDescription] = useState(
|
|
28
|
+
typeof initial?.description === "string" ? initial.description : ""
|
|
29
|
+
);
|
|
30
|
+
const [instructions, setInstructions] = useState(initial?.instructions ?? "");
|
|
31
|
+
const [source, setSource] = useState(initial?.source ?? "user");
|
|
32
|
+
const [allowedToolsRaw, setAllowedToolsRaw] = useState(initial?.allowedTools?.join(", ") ?? "");
|
|
33
|
+
const [triggersRaw, setTriggersRaw] = useState(initial?.triggers?.join(", ") ?? "");
|
|
34
|
+
const [enabled, setEnabled] = useState(initial?.state ?? "enabled");
|
|
35
|
+
const [modes, setModes] = useState(initial?.modes ?? []);
|
|
36
|
+
const toggleMode = (m) => setModes((prev) => prev.includes(m) ? prev.filter((x) => x !== m) : [...prev, m]);
|
|
37
|
+
const canSave = name.trim().length > 0;
|
|
38
|
+
const handleSubmit = (e) => {
|
|
39
|
+
e.preventDefault();
|
|
40
|
+
if (!canSave) return;
|
|
41
|
+
onSave({
|
|
42
|
+
id: initial?.id,
|
|
43
|
+
name: name.trim(),
|
|
44
|
+
description: description.trim() || void 0,
|
|
45
|
+
instructions: instructions.trim() || void 0,
|
|
46
|
+
source,
|
|
47
|
+
state: enabled,
|
|
48
|
+
allowedTools: allowedToolsRaw.split(",").map((t) => t.trim()).filter(Boolean),
|
|
49
|
+
triggers: triggersRaw.split(",").map((t) => t.trim()).filter(Boolean),
|
|
50
|
+
modes: modes.length > 0 ? modes : void 0
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsxs(
|
|
54
|
+
"form",
|
|
55
|
+
{
|
|
56
|
+
onSubmit: handleSubmit,
|
|
57
|
+
className: cn("flex h-full flex-col gap-4", className),
|
|
58
|
+
...formProps,
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
61
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Name" }),
|
|
62
|
+
/* @__PURE__ */ jsx(FormField.Control, { children: /* @__PURE__ */ jsx(
|
|
63
|
+
Input,
|
|
64
|
+
{
|
|
65
|
+
value: name,
|
|
66
|
+
onChange: (e) => setName(e.target.value),
|
|
67
|
+
placeholder: "diff-explainer",
|
|
68
|
+
required: true
|
|
69
|
+
}
|
|
70
|
+
) }),
|
|
71
|
+
/* @__PURE__ */ jsx(FormField.Hint, { children: "Kebab-case identifier the agent uses to invoke this skill." })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
74
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Description" }),
|
|
75
|
+
/* @__PURE__ */ jsx(FormField.Control, { children: /* @__PURE__ */ jsx(
|
|
76
|
+
Input,
|
|
77
|
+
{
|
|
78
|
+
value: description,
|
|
79
|
+
onChange: (e) => setDescription(e.target.value),
|
|
80
|
+
placeholder: "Explain a diff in plain English."
|
|
81
|
+
}
|
|
82
|
+
) })
|
|
83
|
+
] }),
|
|
84
|
+
/* @__PURE__ */ jsxs(FormField, { className: "flex-1", children: [
|
|
85
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Instructions" }),
|
|
86
|
+
/* @__PURE__ */ jsx(FormField.Control, { children: /* @__PURE__ */ jsx(
|
|
87
|
+
Textarea,
|
|
88
|
+
{
|
|
89
|
+
value: instructions,
|
|
90
|
+
onChange: (e) => setInstructions(e.target.value),
|
|
91
|
+
rows: 6,
|
|
92
|
+
placeholder: "When invoked, read the diff via Read or Grep and produce a concise summary of intent + risk.",
|
|
93
|
+
className: "min-h-[10rem] flex-1 font-mono text-code-sm"
|
|
94
|
+
}
|
|
95
|
+
) }),
|
|
96
|
+
/* @__PURE__ */ jsx(FormField.Hint, { children: "Sub-prompt loaded when the skill is invoked." })
|
|
97
|
+
] }),
|
|
98
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
|
|
99
|
+
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
100
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Source" }),
|
|
101
|
+
/* @__PURE__ */ jsx(FormField.Control, { children: /* @__PURE__ */ jsxs(
|
|
102
|
+
Select,
|
|
103
|
+
{
|
|
104
|
+
value: source,
|
|
105
|
+
onValueChange: (v) => {
|
|
106
|
+
const next = SOURCES.find((s) => s.id === v);
|
|
107
|
+
if (next) setSource(next.id);
|
|
108
|
+
},
|
|
109
|
+
children: [
|
|
110
|
+
/* @__PURE__ */ jsx(Select.Trigger, { "aria-label": "Select skill source", children: /* @__PURE__ */ jsx(Select.Value, {}) }),
|
|
111
|
+
/* @__PURE__ */ jsx(Select.Content, { children: SOURCES.map((s) => /* @__PURE__ */ jsx(Select.Item, { value: s.id, children: s.label }, s.id)) })
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
) })
|
|
115
|
+
] }),
|
|
116
|
+
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
117
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Allowed tools" }),
|
|
118
|
+
/* @__PURE__ */ jsx(FormField.Control, { children: /* @__PURE__ */ jsx(
|
|
119
|
+
Input,
|
|
120
|
+
{
|
|
121
|
+
value: allowedToolsRaw,
|
|
122
|
+
onChange: (e) => setAllowedToolsRaw(e.target.value),
|
|
123
|
+
placeholder: "Read, Grep, Bash"
|
|
124
|
+
}
|
|
125
|
+
) })
|
|
126
|
+
] })
|
|
127
|
+
] }),
|
|
128
|
+
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
129
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Triggers" }),
|
|
130
|
+
/* @__PURE__ */ jsx(FormField.Control, { children: /* @__PURE__ */ jsx(
|
|
131
|
+
Input,
|
|
132
|
+
{
|
|
133
|
+
value: triggersRaw,
|
|
134
|
+
onChange: (e) => setTriggersRaw(e.target.value),
|
|
135
|
+
placeholder: "explain diff, summarize change"
|
|
136
|
+
}
|
|
137
|
+
) }),
|
|
138
|
+
/* @__PURE__ */ jsx(FormField.Hint, { children: "Optional keywords / patterns for auto-discovery." })
|
|
139
|
+
] }),
|
|
140
|
+
/* @__PURE__ */ jsxs(FormField, { children: [
|
|
141
|
+
/* @__PURE__ */ jsx(FormField.Label, { children: "Active modes" }),
|
|
142
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: ALL_MODES.map((m) => {
|
|
143
|
+
const on = modes.includes(m);
|
|
144
|
+
return /* @__PURE__ */ jsx(
|
|
145
|
+
"button",
|
|
146
|
+
{
|
|
147
|
+
type: "button",
|
|
148
|
+
onClick: () => toggleMode(m),
|
|
149
|
+
"aria-pressed": on,
|
|
150
|
+
className: cn(
|
|
151
|
+
"inline-flex h-7 items-center rounded-full border px-3 font-mono text-body-sm transition-colors",
|
|
152
|
+
on ? "border-primary bg-primary/15 text-primary" : "border-border/60 bg-card text-muted-foreground hover:text-foreground"
|
|
153
|
+
),
|
|
154
|
+
children: MODE_LABEL[m]
|
|
155
|
+
},
|
|
156
|
+
m
|
|
157
|
+
);
|
|
158
|
+
}) }),
|
|
159
|
+
/* @__PURE__ */ jsx(FormField.Hint, { children: modes.length === 0 ? "Empty = global (available in every mode)." : `Only visible in: ${modes.map((m) => MODE_LABEL[m]).join(", ")}.` })
|
|
160
|
+
] }),
|
|
161
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
162
|
+
/* @__PURE__ */ jsx(
|
|
163
|
+
Switch,
|
|
164
|
+
{
|
|
165
|
+
checked: enabled === "enabled",
|
|
166
|
+
onCheckedChange: (v) => setEnabled(v ? "enabled" : "disabled"),
|
|
167
|
+
"aria-label": "Enabled"
|
|
168
|
+
}
|
|
169
|
+
),
|
|
170
|
+
/* @__PURE__ */ jsx("span", { className: "text-body-sm text-muted-foreground", children: enabled === "enabled" ? "Enabled \u2014 available to the agent." : "Disabled \u2014 kept but hidden from the agent." })
|
|
171
|
+
] }),
|
|
172
|
+
/* @__PURE__ */ jsxs("footer", { className: "flex items-center justify-between gap-2 border-border/40 border-t pt-4", children: [
|
|
173
|
+
/* @__PURE__ */ jsx("div", { children: onDelete ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", onClick: onDelete, children: "Delete" }) : null }),
|
|
174
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
175
|
+
onCancel ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, children: "Cancel" }) : null,
|
|
176
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", disabled: !canSave, children: initial?.id ? "Save changes" : "Create skill" })
|
|
177
|
+
] })
|
|
178
|
+
] })
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export { SkillEditor };
|
|
185
|
+
//# sourceMappingURL=chunk-DAKIL5PC.js.map
|
|
186
|
+
//# sourceMappingURL=chunk-DAKIL5PC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/composites/skill-editor/skill-editor.tsx"],"names":[],"mappings":"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","file":"chunk-DAKIL5PC.js","sourcesContent":["import { useState } from \"react\";\nimport type { FormEvent, HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { ALL_MODES, MODE_LABEL, type Mode } from \"../../../types/mode.js\";\nimport { Button } from \"../../primitives/button/index.js\";\nimport { FormField } from \"../../primitives/form-field/index.js\";\nimport { Input } from \"../../primitives/input/index.js\";\nimport { Select } from \"../../primitives/select/index.js\";\nimport type { Skill, SkillSource, SkillState } from \"../../primitives/skill-card/index.js\";\nimport { Switch } from \"../../primitives/switch/index.js\";\nimport { Textarea } from \"../../primitives/textarea/index.js\";\n\n/**\n * SkillEditor — form for creating or editing a Skill.\n */\n\ntype SkillDraft = Omit<Skill, \"id\"> & {\n id?: string;\n instructions?: string;\n};\n\ninterface SkillEditorProps extends Omit<HTMLAttributes<HTMLFormElement>, \"onSubmit\" | \"onChange\"> {\n initial?: Partial<Skill> & { instructions?: string };\n onSave: (draft: SkillDraft) => void;\n onCancel?: () => void;\n onDelete?: () => void;\n}\n\nconst SOURCES: Array<{ id: SkillSource; label: string }> = [\n { id: \"user\", label: \"User — defined by you\" },\n { id: \"project\", label: \"Project — lives in this workspace\" },\n { id: \"plugin\", label: \"Plugin — imported from a package\" },\n { id: \"builtin\", label: \"Built-in — shipped with Theo\" },\n];\n\nexport function SkillEditor({\n className,\n initial,\n onSave,\n onCancel,\n onDelete,\n ...formProps\n}: SkillEditorProps) {\n const [name, setName] = useState(initial?.name ?? \"\");\n const [description, setDescription] = useState(\n typeof initial?.description === \"string\" ? initial.description : \"\",\n );\n const [instructions, setInstructions] = useState(initial?.instructions ?? \"\");\n const [source, setSource] = useState<SkillSource>(initial?.source ?? \"user\");\n const [allowedToolsRaw, setAllowedToolsRaw] = useState(initial?.allowedTools?.join(\", \") ?? \"\");\n const [triggersRaw, setTriggersRaw] = useState(initial?.triggers?.join(\", \") ?? \"\");\n const [enabled, setEnabled] = useState<SkillState>(initial?.state ?? \"enabled\");\n const [modes, setModes] = useState<Mode[]>(initial?.modes ?? []);\n\n // Note: state is only seeded once on mount. To reset the form when editing\n // a different skill, use the React `key` pattern at the call site:\n // <SkillEditor key={skill.id} initial={skill} ... />\n const toggleMode = (m: Mode) =>\n setModes((prev) => (prev.includes(m) ? prev.filter((x) => x !== m) : [...prev, m]));\n\n const canSave = name.trim().length > 0;\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n if (!canSave) return;\n onSave({\n id: initial?.id,\n name: name.trim(),\n description: description.trim() || undefined,\n instructions: instructions.trim() || undefined,\n source,\n state: enabled,\n allowedTools: allowedToolsRaw\n .split(\",\")\n .map((t) => t.trim())\n .filter(Boolean),\n triggers: triggersRaw\n .split(\",\")\n .map((t) => t.trim())\n .filter(Boolean),\n modes: modes.length > 0 ? modes : undefined,\n });\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className={cn(\"flex h-full flex-col gap-4\", className)}\n {...formProps}\n >\n <FormField>\n <FormField.Label>Name</FormField.Label>\n <FormField.Control>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"diff-explainer\"\n required\n />\n </FormField.Control>\n <FormField.Hint>Kebab-case identifier the agent uses to invoke this skill.</FormField.Hint>\n </FormField>\n\n <FormField>\n <FormField.Label>Description</FormField.Label>\n <FormField.Control>\n <Input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Explain a diff in plain English.\"\n />\n </FormField.Control>\n </FormField>\n\n <FormField className=\"flex-1\">\n <FormField.Label>Instructions</FormField.Label>\n <FormField.Control>\n <Textarea\n value={instructions}\n onChange={(e) => setInstructions(e.target.value)}\n rows={6}\n placeholder=\"When invoked, read the diff via Read or Grep and produce a concise summary of intent + risk.\"\n className=\"min-h-[10rem] flex-1 font-mono text-code-sm\"\n />\n </FormField.Control>\n <FormField.Hint>Sub-prompt loaded when the skill is invoked.</FormField.Hint>\n </FormField>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <FormField>\n <FormField.Label>Source</FormField.Label>\n <FormField.Control>\n <Select\n value={source}\n onValueChange={(v) => {\n // Re-audit Issue 7: narrow Select string value against\n // SOURCES.id before casting. Silent no-op for unknown.\n const next = SOURCES.find((s) => s.id === v);\n if (next) setSource(next.id);\n }}\n >\n <Select.Trigger aria-label=\"Select skill source\">\n <Select.Value />\n </Select.Trigger>\n <Select.Content>\n {SOURCES.map((s) => (\n <Select.Item key={s.id} value={s.id}>\n {s.label}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </FormField.Control>\n </FormField>\n <FormField>\n <FormField.Label>Allowed tools</FormField.Label>\n <FormField.Control>\n <Input\n value={allowedToolsRaw}\n onChange={(e) => setAllowedToolsRaw(e.target.value)}\n placeholder=\"Read, Grep, Bash\"\n />\n </FormField.Control>\n </FormField>\n </div>\n\n <FormField>\n <FormField.Label>Triggers</FormField.Label>\n <FormField.Control>\n <Input\n value={triggersRaw}\n onChange={(e) => setTriggersRaw(e.target.value)}\n placeholder=\"explain diff, summarize change\"\n />\n </FormField.Control>\n <FormField.Hint>Optional keywords / patterns for auto-discovery.</FormField.Hint>\n </FormField>\n\n <FormField>\n <FormField.Label>Active modes</FormField.Label>\n <div className=\"flex flex-wrap gap-1.5\">\n {ALL_MODES.map((m) => {\n const on = modes.includes(m);\n return (\n <button\n key={m}\n type=\"button\"\n onClick={() => toggleMode(m)}\n aria-pressed={on}\n className={cn(\n \"inline-flex h-7 items-center rounded-full border px-3 font-mono text-body-sm transition-colors\",\n on\n ? \"border-primary bg-primary/15 text-primary\"\n : \"border-border/60 bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {MODE_LABEL[m]}\n </button>\n );\n })}\n </div>\n <FormField.Hint>\n {modes.length === 0\n ? \"Empty = global (available in every mode).\"\n : `Only visible in: ${modes.map((m) => MODE_LABEL[m]).join(\", \")}.`}\n </FormField.Hint>\n </FormField>\n\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={enabled === \"enabled\"}\n onCheckedChange={(v) => setEnabled(v ? \"enabled\" : \"disabled\")}\n aria-label=\"Enabled\"\n />\n <span className=\"text-body-sm text-muted-foreground\">\n {enabled === \"enabled\"\n ? \"Enabled — available to the agent.\"\n : \"Disabled — kept but hidden from the agent.\"}\n </span>\n </div>\n\n <footer className=\"flex items-center justify-between gap-2 border-border/40 border-t pt-4\">\n <div>\n {onDelete ? (\n <Button type=\"button\" variant=\"ghost\" onClick={onDelete}>\n Delete\n </Button>\n ) : null}\n </div>\n <div className=\"flex items-center gap-2\">\n {onCancel ? (\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel}>\n Cancel\n </Button>\n ) : null}\n <Button type=\"submit\" disabled={!canSave}>\n {initial?.id ? \"Save changes\" : \"Create skill\"}\n </Button>\n </div>\n </footer>\n </form>\n );\n}\n"]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Input } from './chunk-H3VJMFJQ.js';
|
|
2
|
+
import { Button } from './chunk-57NXT3OX.js';
|
|
3
|
+
import { BadgeWithDot } from './chunk-O23LKHUR.js';
|
|
4
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
5
|
+
import { Plus, Globe, ShieldCheck, ShieldX, Check, Trash2 } from 'lucide-react';
|
|
6
|
+
import { forwardRef, useState } from 'react';
|
|
7
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var statusVariant = {
|
|
10
|
+
verified: "success",
|
|
11
|
+
pending: "warning",
|
|
12
|
+
invalid: "destructive"
|
|
13
|
+
};
|
|
14
|
+
var statusDot = {
|
|
15
|
+
verified: "success",
|
|
16
|
+
pending: "warning",
|
|
17
|
+
invalid: "destructive"
|
|
18
|
+
};
|
|
19
|
+
var statusLabel = {
|
|
20
|
+
verified: "Verified",
|
|
21
|
+
pending: "Pending DNS",
|
|
22
|
+
invalid: "Invalid"
|
|
23
|
+
};
|
|
24
|
+
var DomainConfig = forwardRef(
|
|
25
|
+
({ className, domains, onAdd, onRemove, onSetPrimary, ...props }, ref) => {
|
|
26
|
+
const [hostname, setHostname] = useState("");
|
|
27
|
+
return /* @__PURE__ */ jsxs(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
ref,
|
|
31
|
+
className: cn("rounded-xl border bg-card p-5 shadow-sm", className),
|
|
32
|
+
...props,
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx("header", { className: "mb-4 flex items-baseline justify-between gap-3", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
35
|
+
/* @__PURE__ */ jsx("h3", { className: "font-display text-title-md tracking-tight", children: "Domains" }),
|
|
36
|
+
/* @__PURE__ */ jsxs("p", { className: "text-body-sm text-muted-foreground", children: [
|
|
37
|
+
domains.length,
|
|
38
|
+
" configured"
|
|
39
|
+
] })
|
|
40
|
+
] }) }),
|
|
41
|
+
onAdd ? /* @__PURE__ */ jsxs(
|
|
42
|
+
"form",
|
|
43
|
+
{
|
|
44
|
+
className: "mb-4 grid grid-cols-[1fr_auto] gap-2",
|
|
45
|
+
onSubmit: (e) => {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
const v = hostname.trim();
|
|
48
|
+
if (!v) return;
|
|
49
|
+
onAdd(v);
|
|
50
|
+
setHostname("");
|
|
51
|
+
},
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
Input,
|
|
55
|
+
{
|
|
56
|
+
placeholder: "api.acme.com",
|
|
57
|
+
value: hostname,
|
|
58
|
+
onChange: (e) => setHostname(e.target.value),
|
|
59
|
+
"aria-label": "Hostname",
|
|
60
|
+
className: "font-mono"
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
/* @__PURE__ */ jsxs(Button, { type: "submit", children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Plus, {}),
|
|
65
|
+
" Add domain"
|
|
66
|
+
] })
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
) : null,
|
|
70
|
+
/* @__PURE__ */ jsxs("ul", { className: "grid gap-3", children: [
|
|
71
|
+
domains.map((d) => /* @__PURE__ */ jsxs("li", { className: "grid gap-3 rounded-lg border border-border/40 p-4", children: [
|
|
72
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
73
|
+
/* @__PURE__ */ jsx(Globe, { className: "size-4 text-muted-foreground", "aria-hidden": "true" }),
|
|
74
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-code-md text-foreground", children: d.hostname }),
|
|
75
|
+
/* @__PURE__ */ jsxs(BadgeWithDot, { variant: statusVariant[d.status], children: [
|
|
76
|
+
/* @__PURE__ */ jsx(BadgeWithDot.Dot, { tone: statusDot[d.status], pulse: d.status === "pending" }),
|
|
77
|
+
statusLabel[d.status]
|
|
78
|
+
] }),
|
|
79
|
+
d.tls === true ? /* @__PURE__ */ jsxs(BadgeWithDot, { variant: "primary", children: [
|
|
80
|
+
/* @__PURE__ */ jsx(ShieldCheck, { className: "size-3" }),
|
|
81
|
+
" TLS"
|
|
82
|
+
] }) : d.tls === false ? /* @__PURE__ */ jsxs(BadgeWithDot, { variant: "destructive", children: [
|
|
83
|
+
/* @__PURE__ */ jsx(ShieldX, { className: "size-3" }),
|
|
84
|
+
" No TLS"
|
|
85
|
+
] }) : null,
|
|
86
|
+
d.primary ? /* @__PURE__ */ jsxs(BadgeWithDot, { variant: "accent", children: [
|
|
87
|
+
/* @__PURE__ */ jsx(Check, { className: "size-3" }),
|
|
88
|
+
" Primary"
|
|
89
|
+
] }) : null,
|
|
90
|
+
/* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-1", children: [
|
|
91
|
+
!d.primary && onSetPrimary ? /* @__PURE__ */ jsx(Button, { size: "sm", variant: "ghost", onClick: () => onSetPrimary(d.id), children: "Set primary" }) : null,
|
|
92
|
+
onRemove ? /* @__PURE__ */ jsx(
|
|
93
|
+
Button,
|
|
94
|
+
{
|
|
95
|
+
size: "icon",
|
|
96
|
+
variant: "ghost",
|
|
97
|
+
onClick: () => onRemove(d.id),
|
|
98
|
+
"aria-label": `Remove ${d.hostname}`,
|
|
99
|
+
children: /* @__PURE__ */ jsx(Trash2, {})
|
|
100
|
+
}
|
|
101
|
+
) : null
|
|
102
|
+
] })
|
|
103
|
+
] }),
|
|
104
|
+
d.status === "pending" && d.verificationRecord ? /* @__PURE__ */ jsxs("div", { className: "rounded-md border border-border/60 border-dashed bg-muted/30 p-3 font-mono text-code-sm", children: [
|
|
105
|
+
/* @__PURE__ */ jsx("p", { className: "mb-2 font-sans text-label-caps text-muted-foreground uppercase", children: "Add this DNS record to verify" }),
|
|
106
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[auto_1fr] gap-x-3 gap-y-1", children: [
|
|
107
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "type" }),
|
|
108
|
+
/* @__PURE__ */ jsx("span", { children: d.verificationRecord.type }),
|
|
109
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "name" }),
|
|
110
|
+
/* @__PURE__ */ jsx("span", { children: d.verificationRecord.name }),
|
|
111
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "value" }),
|
|
112
|
+
/* @__PURE__ */ jsx("span", { className: "break-all", children: d.verificationRecord.value })
|
|
113
|
+
] })
|
|
114
|
+
] }) : null
|
|
115
|
+
] }, d.id)),
|
|
116
|
+
domains.length === 0 ? /* @__PURE__ */ jsx("li", { className: "rounded-lg border border-border/40 border-dashed p-8 text-center text-body-sm text-muted-foreground", children: "No domains yet. Add one to route traffic to this project." }) : null
|
|
117
|
+
] })
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
DomainConfig.displayName = "DomainConfig";
|
|
124
|
+
|
|
125
|
+
export { DomainConfig };
|
|
126
|
+
//# sourceMappingURL=chunk-DFADMEJK.js.map
|
|
127
|
+
//# sourceMappingURL=chunk-DFADMEJK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/composites/domain-config/domain-config.tsx"],"names":[],"mappings":"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","file":"chunk-DFADMEJK.js","sourcesContent":["import { Check, Globe, Plus, ShieldCheck, ShieldX, Trash2 } from \"lucide-react\";\nimport { forwardRef, useState } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { Badge } from \"../../primitives/badge/index.js\";\nimport { Button } from \"../../primitives/button/index.js\";\nimport { Input } from \"../../primitives/input/index.js\";\n\nexport type DomainStatus = \"verified\" | \"pending\" | \"invalid\";\n\nexport interface Domain {\n id: string;\n hostname: string;\n status: DomainStatus;\n primary?: boolean;\n /**\n * TLS state. If true, certificate is provisioned & valid.\n */\n tls?: boolean;\n /**\n * DNS record the user must add to verify ownership.\n */\n verificationRecord?: {\n type: \"TXT\" | \"CNAME\" | \"A\";\n name: string;\n value: string;\n };\n}\n\nconst statusVariant: Record<DomainStatus, \"success\" | \"warning\" | \"destructive\"> = {\n verified: \"success\",\n pending: \"warning\",\n invalid: \"destructive\",\n};\nconst statusDot: Record<DomainStatus, \"success\" | \"warning\" | \"destructive\"> = {\n verified: \"success\",\n pending: \"warning\",\n invalid: \"destructive\",\n};\nconst statusLabel: Record<DomainStatus, string> = {\n verified: \"Verified\",\n pending: \"Pending DNS\",\n invalid: \"Invalid\",\n};\n\ninterface DomainConfigProps extends HTMLAttributes<HTMLDivElement> {\n domains: Domain[];\n onAdd?: (hostname: string) => void;\n onRemove?: (id: string) => void;\n onSetPrimary?: (id: string) => void;\n}\n\n/**\n * DomainConfig — manage custom domains for a project.\n *\n * Shows: hostname, status, TLS, primary flag, and verification DNS record when pending.\n * Common in every cloud dashboard (Vercel, Railway, Render).\n */\nconst DomainConfig = forwardRef<HTMLDivElement, DomainConfigProps>(\n ({ className, domains, onAdd, onRemove, onSetPrimary, ...props }, ref) => {\n const [hostname, setHostname] = useState(\"\");\n\n return (\n <div\n ref={ref}\n className={cn(\"rounded-xl border bg-card p-5 shadow-sm\", className)}\n {...props}\n >\n <header className=\"mb-4 flex items-baseline justify-between gap-3\">\n <div>\n <h3 className=\"font-display text-title-md tracking-tight\">Domains</h3>\n <p className=\"text-body-sm text-muted-foreground\">{domains.length} configured</p>\n </div>\n </header>\n\n {onAdd ? (\n <form\n className=\"mb-4 grid grid-cols-[1fr_auto] gap-2\"\n onSubmit={(e) => {\n e.preventDefault();\n const v = hostname.trim();\n if (!v) return;\n onAdd(v);\n setHostname(\"\");\n }}\n >\n <Input\n placeholder=\"api.acme.com\"\n value={hostname}\n onChange={(e) => setHostname(e.target.value)}\n aria-label=\"Hostname\"\n className=\"font-mono\"\n />\n <Button type=\"submit\">\n <Plus /> Add domain\n </Button>\n </form>\n ) : null}\n\n <ul className=\"grid gap-3\">\n {domains.map((d) => (\n <li key={d.id} className=\"grid gap-3 rounded-lg border border-border/40 p-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Globe className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"font-mono text-code-md text-foreground\">{d.hostname}</span>\n <Badge variant={statusVariant[d.status]}>\n <Badge.Dot tone={statusDot[d.status]} pulse={d.status === \"pending\"} />\n {statusLabel[d.status]}\n </Badge>\n {d.tls === true ? (\n <Badge variant=\"primary\">\n <ShieldCheck className=\"size-3\" /> TLS\n </Badge>\n ) : d.tls === false ? (\n <Badge variant=\"destructive\">\n <ShieldX className=\"size-3\" /> No TLS\n </Badge>\n ) : null}\n {d.primary ? (\n <Badge variant=\"accent\">\n <Check className=\"size-3\" /> Primary\n </Badge>\n ) : null}\n <div className=\"ml-auto flex items-center gap-1\">\n {!d.primary && onSetPrimary ? (\n <Button size=\"sm\" variant=\"ghost\" onClick={() => onSetPrimary(d.id)}>\n Set primary\n </Button>\n ) : null}\n {onRemove ? (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onRemove(d.id)}\n aria-label={`Remove ${d.hostname}`}\n >\n <Trash2 />\n </Button>\n ) : null}\n </div>\n </div>\n {d.status === \"pending\" && d.verificationRecord ? (\n <div className=\"rounded-md border border-border/60 border-dashed bg-muted/30 p-3 font-mono text-code-sm\">\n <p className=\"mb-2 font-sans text-label-caps text-muted-foreground uppercase\">\n Add this DNS record to verify\n </p>\n <div className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1\">\n <span className=\"text-muted-foreground\">type</span>\n <span>{d.verificationRecord.type}</span>\n <span className=\"text-muted-foreground\">name</span>\n <span>{d.verificationRecord.name}</span>\n <span className=\"text-muted-foreground\">value</span>\n <span className=\"break-all\">{d.verificationRecord.value}</span>\n </div>\n </div>\n ) : null}\n </li>\n ))}\n {domains.length === 0 ? (\n <li className=\"rounded-lg border border-border/40 border-dashed p-8 text-center text-body-sm text-muted-foreground\">\n No domains yet. Add one to route traffic to this project.\n </li>\n ) : null}\n </ul>\n </div>\n );\n },\n);\nDomainConfig.displayName = \"DomainConfig\";\n\nexport { DomainConfig };\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
3
|
+
import { Circle } from 'lucide-react';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var RadioGroupRoot = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, { ref, className: cn("grid gap-3", className), ...props }));
|
|
8
|
+
RadioGroupRoot.displayName = "RadioGroup";
|
|
9
|
+
var RadioGroupItem = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
10
|
+
RadioGroupPrimitive.Item,
|
|
11
|
+
{
|
|
12
|
+
ref,
|
|
13
|
+
className: cn(
|
|
14
|
+
"aspect-square size-4 rounded-full border border-border bg-card text-primary",
|
|
15
|
+
"transition-[border-color,box-shadow] duration-base ease-out-soft",
|
|
16
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
17
|
+
"data-[state=checked]:border-primary",
|
|
18
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
...props,
|
|
22
|
+
children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(Circle, { className: "size-2 fill-primary text-primary", "aria-hidden": "true" }) })
|
|
23
|
+
}
|
|
24
|
+
));
|
|
25
|
+
RadioGroupItem.displayName = "RadioGroup.Item";
|
|
26
|
+
var RadioGroup = /* @__PURE__ */ Object.assign(RadioGroupRoot, {
|
|
27
|
+
Item: RadioGroupItem
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export { RadioGroup };
|
|
31
|
+
//# sourceMappingURL=chunk-E5A7HN6H.js.map
|
|
32
|
+
//# sourceMappingURL=chunk-E5A7HN6H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/radio-group/radio-group.tsx"],"names":[],"mappings":";;;;;;AAmBA,IAAM,cAAA,GAAiB,WAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA,CAAqB,0BAApB,EAAyB,GAAA,EAAU,WAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,OAAO,CACxF,CAAA;AACD,cAAA,CAAe,WAAA,GAAc,YAAA;AAE7B,IAAM,cAAA,GAAiB,WAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAqB,mBAAA,CAAA,IAAA;AAAA,EAApB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,6EAAA;AAAA,MACA,kEAAA;AAAA,MACA,0IAAA;AAAA,MACA,qCAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAA,GAAA,CAAqB,mBAAA,CAAA,SAAA,EAApB,EAA8B,SAAA,EAAU,kCAAA,EACvC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,kCAAA,EAAmC,aAAA,EAAY,MAAA,EAAO,CAAA,EAC1E;AAAA;AACF,CACD,CAAA;AACD,cAAA,CAAe,WAAA,GAAc,iBAAA;AAE7B,IAAM,UAAA,mBAA2B,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB;AAAA,EAC7D,IAAA,EAAM;AACR,CAAC","file":"chunk-E5A7HN6H.js","sourcesContent":["import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * RadioGroup — built on Radix RadioGroup.\n *\n * Composition:\n * <RadioGroup value={v} onValueChange={setV}>\n * <RadioGroup.Item value=\"a\" id=\"a\" />\n * <Label htmlFor=\"a\">Option A</Label>\n * </RadioGroup>\n *\n * Group spaces items by 0.75rem vertically; switch to grid utilities if you\n * need horizontal/grid layouts.\n */\n\nconst RadioGroupRoot = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root ref={ref} className={cn(\"grid gap-3\", className)} {...props} />\n));\nRadioGroupRoot.displayName = \"RadioGroup\";\n\nconst RadioGroupItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square size-4 rounded-full border border-border bg-card text-primary\",\n \"transition-[border-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]:border-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"size-2 fill-primary text-primary\" aria-hidden=\"true\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = \"RadioGroup.Item\";\n\nconst RadioGroup = /*#__PURE__*/ Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});\n\nexport { RadioGroup };\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import { CircleX, ShieldAlert, CheckCircle2 } from 'lucide-react';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var RESULT_CONFIG = {
|
|
7
|
+
ok: { icon: CheckCircle2, color: "text-success" },
|
|
8
|
+
blocked: { icon: ShieldAlert, color: "text-warning" },
|
|
9
|
+
error: { icon: CircleX, color: "text-destructive" }
|
|
10
|
+
};
|
|
11
|
+
var HookEventLog = forwardRef(
|
|
12
|
+
({ className, events, title = "Hook log", ...props }, ref) => /* @__PURE__ */ jsxs("section", { ref, className: cn("rounded-xl border bg-card", className), ...props, children: [
|
|
13
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-baseline justify-between border-border/40 border-b px-4 py-3", children: [
|
|
14
|
+
/* @__PURE__ */ jsx("h3", { className: "font-display text-title-md tracking-tight", children: title }),
|
|
15
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-label text-muted-foreground", children: [
|
|
16
|
+
events.length,
|
|
17
|
+
" ",
|
|
18
|
+
events.length === 1 ? "event" : "events"
|
|
19
|
+
] })
|
|
20
|
+
] }),
|
|
21
|
+
/* @__PURE__ */ jsxs("ol", { className: "divide-y divide-border/30", children: [
|
|
22
|
+
events.map((evt) => {
|
|
23
|
+
const cfg = RESULT_CONFIG[evt.result];
|
|
24
|
+
const Icon = cfg.icon;
|
|
25
|
+
return /* @__PURE__ */ jsxs(
|
|
26
|
+
"li",
|
|
27
|
+
{
|
|
28
|
+
className: "grid grid-cols-[auto_1fr_auto] items-start gap-3 px-4 py-2.5",
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: cn("mt-0.5 size-3.5 shrink-0", cfg.color) }),
|
|
31
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
32
|
+
/* @__PURE__ */ jsxs("p", { className: "flex flex-wrap items-baseline gap-2", children: [
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-code-sm text-primary", children: evt.event }),
|
|
34
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-code-sm text-muted-foreground", children: [
|
|
35
|
+
"matcher=",
|
|
36
|
+
evt.matcher
|
|
37
|
+
] }),
|
|
38
|
+
evt.duration ? /* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground tabular-nums", children: evt.duration }) : null
|
|
39
|
+
] }),
|
|
40
|
+
/* @__PURE__ */ jsx("p", { className: "truncate font-mono text-code-sm text-foreground", children: evt.command }),
|
|
41
|
+
evt.output ? /* @__PURE__ */ jsx("pre", { className: "mt-1 max-h-24 overflow-auto rounded-md bg-muted/60 px-2 py-1 font-mono text-code-sm text-muted-foreground", children: evt.output }) : null
|
|
42
|
+
] }),
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground tabular-nums", children: evt.timestamp })
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
evt.id
|
|
47
|
+
);
|
|
48
|
+
}),
|
|
49
|
+
events.length === 0 ? /* @__PURE__ */ jsx("li", { className: "px-4 py-8 text-center font-sans text-body-sm text-muted-foreground", children: "No hooks have fired yet." }) : null
|
|
50
|
+
] })
|
|
51
|
+
] })
|
|
52
|
+
);
|
|
53
|
+
HookEventLog.displayName = "HookEventLog";
|
|
54
|
+
|
|
55
|
+
export { HookEventLog };
|
|
56
|
+
//# sourceMappingURL=chunk-EI63GTN7.js.map
|
|
57
|
+
//# sourceMappingURL=chunk-EI63GTN7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/hook-event-log/hook-event-log.tsx"],"names":[],"mappings":"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","file":"chunk-EI63GTN7.js","sourcesContent":["import { CheckCircle2, CircleX, ShieldAlert } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport type HookEventResult = \"ok\" | \"blocked\" | \"error\";\n\nexport interface HookEventEntry {\n id: string;\n /** Hook event (e.g. PreToolUse). */\n event: string;\n /** Hook matcher (e.g. Bash). */\n matcher: string;\n /** What the hook command was. */\n command: string;\n result: HookEventResult;\n timestamp: string;\n /** Optional stderr/stdout snippet. */\n output?: string;\n /** Optional duration label, e.g. \"120ms\". */\n duration?: string;\n}\n\ninterface HookEventLogProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n events: HookEventEntry[];\n title?: ReactNode;\n}\n\nconst RESULT_CONFIG = {\n ok: { icon: CheckCircle2, color: \"text-success\" },\n blocked: { icon: ShieldAlert, color: \"text-warning\" },\n error: { icon: CircleX, color: \"text-destructive\" },\n} as const;\n\n/**\n * HookEventLog — chronological list of hook firings, with result tone, the\n * command that ran, and an optional output preview.\n */\nconst HookEventLog = forwardRef<HTMLDivElement, HookEventLogProps>(\n ({ className, events, title = \"Hook log\", ...props }, ref) => (\n <section ref={ref} className={cn(\"rounded-xl border bg-card\", className)} {...props}>\n <header className=\"flex items-baseline justify-between border-border/40 border-b px-4 py-3\">\n <h3 className=\"font-display text-title-md tracking-tight\">{title}</h3>\n <span className=\"font-mono text-label text-muted-foreground\">\n {events.length} {events.length === 1 ? \"event\" : \"events\"}\n </span>\n </header>\n <ol className=\"divide-y divide-border/30\">\n {events.map((evt) => {\n const cfg = RESULT_CONFIG[evt.result];\n const Icon = cfg.icon;\n return (\n <li\n key={evt.id}\n className=\"grid grid-cols-[auto_1fr_auto] items-start gap-3 px-4 py-2.5\"\n >\n <Icon aria-hidden=\"true\" className={cn(\"mt-0.5 size-3.5 shrink-0\", cfg.color)} />\n <div className=\"min-w-0\">\n <p className=\"flex flex-wrap items-baseline gap-2\">\n <span className=\"font-mono text-code-sm text-primary\">{evt.event}</span>\n <span className=\"font-mono text-code-sm text-muted-foreground\">\n matcher={evt.matcher}\n </span>\n {evt.duration ? (\n <span className=\"font-mono text-label text-muted-foreground tabular-nums\">\n {evt.duration}\n </span>\n ) : null}\n </p>\n <p className=\"truncate font-mono text-code-sm text-foreground\">{evt.command}</p>\n {evt.output ? (\n <pre className=\"mt-1 max-h-24 overflow-auto rounded-md bg-muted/60 px-2 py-1 font-mono text-code-sm text-muted-foreground\">\n {evt.output}\n </pre>\n ) : null}\n </div>\n <span className=\"font-mono text-label text-muted-foreground tabular-nums\">\n {evt.timestamp}\n </span>\n </li>\n );\n })}\n {events.length === 0 ? (\n <li className=\"px-4 py-8 text-center font-sans text-body-sm text-muted-foreground\">\n No hooks have fired yet.\n </li>\n ) : null}\n </ol>\n </section>\n ),\n);\nHookEventLog.displayName = \"HookEventLog\";\n\nexport { HookEventLog };\n"]}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { cn } from './chunk-ZSRJCIWF.js';
|
|
2
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { ChevronDown, ChevronUp, Check } from 'lucide-react';
|
|
5
|
+
import { forwardRef } from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var selectTriggerVariants = cva(
|
|
9
|
+
[
|
|
10
|
+
"flex w-full items-center justify-between gap-2 rounded-md border border-input bg-card",
|
|
11
|
+
"text-foreground placeholder:text-muted-foreground",
|
|
12
|
+
"transition-[border-color,box-shadow] duration-base ease-out-soft",
|
|
13
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
14
|
+
"focus-visible:border-primary",
|
|
15
|
+
"data-[placeholder]:text-muted-foreground",
|
|
16
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
17
|
+
"[&>span]:line-clamp-1"
|
|
18
|
+
],
|
|
19
|
+
{
|
|
20
|
+
variants: {
|
|
21
|
+
size: {
|
|
22
|
+
sm: "h-8 px-2.5 py-1 text-body-sm",
|
|
23
|
+
md: "h-[var(--theo-control-h,2.25rem)] px-[var(--theo-control-px,0.875rem)] py-1.5 text-body-sm",
|
|
24
|
+
lg: "h-11 px-4 py-2.5 text-body-md"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
defaultVariants: { size: "md" }
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
var SelectTrigger = forwardRef(
|
|
31
|
+
({ className, children, size, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
32
|
+
SelectPrimitive.Trigger,
|
|
33
|
+
{
|
|
34
|
+
ref,
|
|
35
|
+
className: cn(selectTriggerVariants({ size }), className),
|
|
36
|
+
...props,
|
|
37
|
+
children: [
|
|
38
|
+
children,
|
|
39
|
+
/* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }) })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
SelectTrigger.displayName = "Select.Trigger";
|
|
45
|
+
var SelectScrollUpButton = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
46
|
+
SelectPrimitive.ScrollUpButton,
|
|
47
|
+
{
|
|
48
|
+
ref,
|
|
49
|
+
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
50
|
+
...props,
|
|
51
|
+
children: /* @__PURE__ */ jsx(ChevronUp, { className: "size-4" })
|
|
52
|
+
}
|
|
53
|
+
));
|
|
54
|
+
SelectScrollUpButton.displayName = "Select.ScrollUpButton";
|
|
55
|
+
var SelectScrollDownButton = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
56
|
+
SelectPrimitive.ScrollDownButton,
|
|
57
|
+
{
|
|
58
|
+
ref,
|
|
59
|
+
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
60
|
+
...props,
|
|
61
|
+
children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" })
|
|
62
|
+
}
|
|
63
|
+
));
|
|
64
|
+
SelectScrollDownButton.displayName = "Select.ScrollDownButton";
|
|
65
|
+
var SelectContent = forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
66
|
+
SelectPrimitive.Content,
|
|
67
|
+
{
|
|
68
|
+
ref,
|
|
69
|
+
position,
|
|
70
|
+
className: cn(
|
|
71
|
+
"relative z-50 min-w-[8rem] overflow-hidden rounded-lg border bg-popover text-popover-foreground shadow-md",
|
|
72
|
+
"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in",
|
|
73
|
+
"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out",
|
|
74
|
+
position === "popper" && "data-[side=top]:-translate-y-1 data-[side=bottom]:translate-y-1",
|
|
75
|
+
className
|
|
76
|
+
),
|
|
77
|
+
...props,
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
80
|
+
/* @__PURE__ */ jsx(
|
|
81
|
+
SelectPrimitive.Viewport,
|
|
82
|
+
{
|
|
83
|
+
className: cn(
|
|
84
|
+
"p-1",
|
|
85
|
+
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
|
|
86
|
+
),
|
|
87
|
+
children
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
) }));
|
|
94
|
+
SelectContent.displayName = "Select.Content";
|
|
95
|
+
var SelectLabel = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
96
|
+
SelectPrimitive.Label,
|
|
97
|
+
{
|
|
98
|
+
ref,
|
|
99
|
+
className: cn(
|
|
100
|
+
"px-2 py-1.5 font-mono text-label-caps text-muted-foreground uppercase tracking-wider",
|
|
101
|
+
className
|
|
102
|
+
),
|
|
103
|
+
...props
|
|
104
|
+
}
|
|
105
|
+
));
|
|
106
|
+
SelectLabel.displayName = "Select.Label";
|
|
107
|
+
var SelectItem = forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
108
|
+
SelectPrimitive.Item,
|
|
109
|
+
{
|
|
110
|
+
ref,
|
|
111
|
+
className: cn(
|
|
112
|
+
"relative flex w-full cursor-default select-none items-center gap-2 rounded-md py-1.5 pr-2 pl-7",
|
|
113
|
+
"text-body-sm outline-none",
|
|
114
|
+
"focus:bg-muted focus:text-foreground",
|
|
115
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
116
|
+
className
|
|
117
|
+
),
|
|
118
|
+
...props,
|
|
119
|
+
children: [
|
|
120
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-1.5 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "size-3.5 text-primary", "aria-hidden": "true" }) }) }),
|
|
121
|
+
/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
));
|
|
125
|
+
SelectItem.displayName = "Select.Item";
|
|
126
|
+
var SelectSeparator = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
127
|
+
SelectPrimitive.Separator,
|
|
128
|
+
{
|
|
129
|
+
ref,
|
|
130
|
+
className: cn("-mx-1 my-1 h-px bg-border/40", className),
|
|
131
|
+
...props
|
|
132
|
+
}
|
|
133
|
+
));
|
|
134
|
+
SelectSeparator.displayName = "Select.Separator";
|
|
135
|
+
var Select = SelectPrimitive.Root;
|
|
136
|
+
Select.Trigger = SelectTrigger;
|
|
137
|
+
Select.Value = SelectPrimitive.Value;
|
|
138
|
+
Select.Content = SelectContent;
|
|
139
|
+
Select.Group = SelectPrimitive.Group;
|
|
140
|
+
Select.Label = SelectLabel;
|
|
141
|
+
Select.Item = SelectItem;
|
|
142
|
+
Select.Separator = SelectSeparator;
|
|
143
|
+
|
|
144
|
+
export { Select };
|
|
145
|
+
//# sourceMappingURL=chunk-EP25QJ4N.js.map
|
|
146
|
+
//# sourceMappingURL=chunk-EP25QJ4N.js.map
|