@theokit/ui 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1325 -0
- package/DESIGN.md +456 -0
- package/LICENSE +201 -0
- package/NOTICE +38 -0
- package/README.md +467 -0
- package/dist/chunk-27ENTTY7.js +146 -0
- package/dist/chunk-27ENTTY7.js.map +1 -0
- package/dist/chunk-2H6TQELG.js +33 -0
- package/dist/chunk-2H6TQELG.js.map +1 -0
- package/dist/chunk-2L6MRJD4.js +120 -0
- package/dist/chunk-2L6MRJD4.js.map +1 -0
- package/dist/chunk-2Y5V2PAL.js +80 -0
- package/dist/chunk-2Y5V2PAL.js.map +1 -0
- package/dist/chunk-34NAFDVL.js +46 -0
- package/dist/chunk-34NAFDVL.js.map +1 -0
- package/dist/chunk-36KJGXEK.js +112 -0
- package/dist/chunk-36KJGXEK.js.map +1 -0
- package/dist/chunk-3BMYYNN6.js +124 -0
- package/dist/chunk-3BMYYNN6.js.map +1 -0
- package/dist/chunk-3OHV7EEI.js +34 -0
- package/dist/chunk-3OHV7EEI.js.map +1 -0
- package/dist/chunk-3QKTS6F5.js +88 -0
- package/dist/chunk-3QKTS6F5.js.map +1 -0
- package/dist/chunk-3TBXLYNM.js +42 -0
- package/dist/chunk-3TBXLYNM.js.map +1 -0
- package/dist/chunk-4AM2HSXU.js +67 -0
- package/dist/chunk-4AM2HSXU.js.map +1 -0
- package/dist/chunk-4BCGKM65.js +44 -0
- package/dist/chunk-4BCGKM65.js.map +1 -0
- package/dist/chunk-4D3JILQX.js +145 -0
- package/dist/chunk-4D3JILQX.js.map +1 -0
- package/dist/chunk-4EJU2GBG.js +48 -0
- package/dist/chunk-4EJU2GBG.js.map +1 -0
- package/dist/chunk-4WKO3G5C.js +110 -0
- package/dist/chunk-4WKO3G5C.js.map +1 -0
- package/dist/chunk-53XPKI7Q.js +97 -0
- package/dist/chunk-53XPKI7Q.js.map +1 -0
- package/dist/chunk-55TDVDPG.js +58 -0
- package/dist/chunk-55TDVDPG.js.map +1 -0
- package/dist/chunk-56BJLFW7.js +26 -0
- package/dist/chunk-56BJLFW7.js.map +1 -0
- package/dist/chunk-5HOQLE6Y.js +35 -0
- package/dist/chunk-5HOQLE6Y.js.map +1 -0
- package/dist/chunk-5TY3NYF5.js +144 -0
- package/dist/chunk-5TY3NYF5.js.map +1 -0
- package/dist/chunk-5VOSCJKQ.js +92 -0
- package/dist/chunk-5VOSCJKQ.js.map +1 -0
- package/dist/chunk-65NVO6TK.js +171 -0
- package/dist/chunk-65NVO6TK.js.map +1 -0
- package/dist/chunk-6A5TPCKP.js +64 -0
- package/dist/chunk-6A5TPCKP.js.map +1 -0
- package/dist/chunk-6CO4LEXZ.js +41 -0
- package/dist/chunk-6CO4LEXZ.js.map +1 -0
- package/dist/chunk-6FVUPNPG.js +56 -0
- package/dist/chunk-6FVUPNPG.js.map +1 -0
- package/dist/chunk-76YWTIWK.js +106 -0
- package/dist/chunk-76YWTIWK.js.map +1 -0
- package/dist/chunk-7EI7424P.js +78 -0
- package/dist/chunk-7EI7424P.js.map +1 -0
- package/dist/chunk-AHTVYOPQ.js +26 -0
- package/dist/chunk-AHTVYOPQ.js.map +1 -0
- package/dist/chunk-AJTJNHKK.js +85 -0
- package/dist/chunk-AJTJNHKK.js.map +1 -0
- package/dist/chunk-AMT3CPMC.js +155 -0
- package/dist/chunk-AMT3CPMC.js.map +1 -0
- package/dist/chunk-AX5EH73R.js +59 -0
- package/dist/chunk-AX5EH73R.js.map +1 -0
- package/dist/chunk-B3VAJSZ2.js +35 -0
- package/dist/chunk-B3VAJSZ2.js.map +1 -0
- package/dist/chunk-B4CQMQ64.js +25 -0
- package/dist/chunk-B4CQMQ64.js.map +1 -0
- package/dist/chunk-BMRZXT5T.js +115 -0
- package/dist/chunk-BMRZXT5T.js.map +1 -0
- package/dist/chunk-BYZ6OFH4.js +73 -0
- package/dist/chunk-BYZ6OFH4.js.map +1 -0
- package/dist/chunk-C55VUQ7N.js +156 -0
- package/dist/chunk-C55VUQ7N.js.map +1 -0
- package/dist/chunk-D4GEAV4C.js +91 -0
- package/dist/chunk-D4GEAV4C.js.map +1 -0
- package/dist/chunk-DC43CHAM.js +152 -0
- package/dist/chunk-DC43CHAM.js.map +1 -0
- package/dist/chunk-DKCRLN35.js +92 -0
- package/dist/chunk-DKCRLN35.js.map +1 -0
- package/dist/chunk-DN5BUDBI.js +86 -0
- package/dist/chunk-DN5BUDBI.js.map +1 -0
- package/dist/chunk-DOLKDYMS.js +88 -0
- package/dist/chunk-DOLKDYMS.js.map +1 -0
- package/dist/chunk-DW34WXCG.js +28 -0
- package/dist/chunk-DW34WXCG.js.map +1 -0
- package/dist/chunk-DZAAKHGZ.js +135 -0
- package/dist/chunk-DZAAKHGZ.js.map +1 -0
- package/dist/chunk-E4IRSSHO.js +116 -0
- package/dist/chunk-E4IRSSHO.js.map +1 -0
- package/dist/chunk-E67WQXBV.js +104 -0
- package/dist/chunk-E67WQXBV.js.map +1 -0
- package/dist/chunk-EG6IHP3H.js +128 -0
- package/dist/chunk-EG6IHP3H.js.map +1 -0
- package/dist/chunk-EO7LOXG2.js +82 -0
- package/dist/chunk-EO7LOXG2.js.map +1 -0
- package/dist/chunk-EWDN56AS.js +24 -0
- package/dist/chunk-EWDN56AS.js.map +1 -0
- package/dist/chunk-F5P5P2SC.js +141 -0
- package/dist/chunk-F5P5P2SC.js.map +1 -0
- package/dist/chunk-FAWPRZTM.js +79 -0
- package/dist/chunk-FAWPRZTM.js.map +1 -0
- package/dist/chunk-FGYJ2WPX.js +36 -0
- package/dist/chunk-FGYJ2WPX.js.map +1 -0
- package/dist/chunk-GBG3I5I5.js +46 -0
- package/dist/chunk-GBG3I5I5.js.map +1 -0
- package/dist/chunk-GDMCDW66.js +19 -0
- package/dist/chunk-GDMCDW66.js.map +1 -0
- package/dist/chunk-H6HSQCOW.js +80 -0
- package/dist/chunk-H6HSQCOW.js.map +1 -0
- package/dist/chunk-HDM4RCIF.js +111 -0
- package/dist/chunk-HDM4RCIF.js.map +1 -0
- package/dist/chunk-HNTOGGVD.js +77 -0
- package/dist/chunk-HNTOGGVD.js.map +1 -0
- package/dist/chunk-HQW2ABO4.js +28 -0
- package/dist/chunk-HQW2ABO4.js.map +1 -0
- package/dist/chunk-HRDRGZ2Y.js +76 -0
- package/dist/chunk-HRDRGZ2Y.js.map +1 -0
- package/dist/chunk-HUOVA7SF.js +83 -0
- package/dist/chunk-HUOVA7SF.js.map +1 -0
- package/dist/chunk-ITA3SNOR.js +133 -0
- package/dist/chunk-ITA3SNOR.js.map +1 -0
- package/dist/chunk-IYNUPG2G.js +61 -0
- package/dist/chunk-IYNUPG2G.js.map +1 -0
- package/dist/chunk-JJ65ZI4P.js +199 -0
- package/dist/chunk-JJ65ZI4P.js.map +1 -0
- package/dist/chunk-JRBGZ6NI.js +106 -0
- package/dist/chunk-JRBGZ6NI.js.map +1 -0
- package/dist/chunk-K45OO62F.js +108 -0
- package/dist/chunk-K45OO62F.js.map +1 -0
- package/dist/chunk-KDTKA667.js +67 -0
- package/dist/chunk-KDTKA667.js.map +1 -0
- package/dist/chunk-KI7KZBSN.js +142 -0
- package/dist/chunk-KI7KZBSN.js.map +1 -0
- package/dist/chunk-KOJ7XOPZ.js +87 -0
- package/dist/chunk-KOJ7XOPZ.js.map +1 -0
- package/dist/chunk-KQTHJ22B.js +82 -0
- package/dist/chunk-KQTHJ22B.js.map +1 -0
- package/dist/chunk-KRC43RZR.js +77 -0
- package/dist/chunk-KRC43RZR.js.map +1 -0
- package/dist/chunk-LJQOEGQ2.js +116 -0
- package/dist/chunk-LJQOEGQ2.js.map +1 -0
- package/dist/chunk-LKRNUSKZ.js +149 -0
- package/dist/chunk-LKRNUSKZ.js.map +1 -0
- package/dist/chunk-LLL7QQ52.js +76 -0
- package/dist/chunk-LLL7QQ52.js.map +1 -0
- package/dist/chunk-LQ4B5X4Y.js +56 -0
- package/dist/chunk-LQ4B5X4Y.js.map +1 -0
- package/dist/chunk-M3FSLEHQ.js +76 -0
- package/dist/chunk-M3FSLEHQ.js.map +1 -0
- package/dist/chunk-M5G3O6H6.js +57 -0
- package/dist/chunk-M5G3O6H6.js.map +1 -0
- package/dist/chunk-M6JIC5PU.js +81 -0
- package/dist/chunk-M6JIC5PU.js.map +1 -0
- package/dist/chunk-N2HJ3SLS.js +186 -0
- package/dist/chunk-N2HJ3SLS.js.map +1 -0
- package/dist/chunk-NGZWBFTP.js +45 -0
- package/dist/chunk-NGZWBFTP.js.map +1 -0
- package/dist/chunk-OAKCXT35.js +34 -0
- package/dist/chunk-OAKCXT35.js.map +1 -0
- package/dist/chunk-OSD3U3HT.js +54 -0
- package/dist/chunk-OSD3U3HT.js.map +1 -0
- package/dist/chunk-OUXESQ2R.js +42 -0
- package/dist/chunk-OUXESQ2R.js.map +1 -0
- package/dist/chunk-OY2LJHMJ.js +43 -0
- package/dist/chunk-OY2LJHMJ.js.map +1 -0
- package/dist/chunk-OYEZR4CN.js +221 -0
- package/dist/chunk-OYEZR4CN.js.map +1 -0
- package/dist/chunk-P57HUMAE.js +66 -0
- package/dist/chunk-P57HUMAE.js.map +1 -0
- package/dist/chunk-P6Y2PI6L.js +82 -0
- package/dist/chunk-P6Y2PI6L.js.map +1 -0
- package/dist/chunk-PA7TDXUQ.js +51 -0
- package/dist/chunk-PA7TDXUQ.js.map +1 -0
- package/dist/chunk-PPBGGNPV.js +112 -0
- package/dist/chunk-PPBGGNPV.js.map +1 -0
- package/dist/chunk-PRH4HKND.js +48 -0
- package/dist/chunk-PRH4HKND.js.map +1 -0
- package/dist/chunk-PSPAZJUQ.js +32 -0
- package/dist/chunk-PSPAZJUQ.js.map +1 -0
- package/dist/chunk-Q5G5CGZ2.js +170 -0
- package/dist/chunk-Q5G5CGZ2.js.map +1 -0
- package/dist/chunk-QDAF3LP7.js +89 -0
- package/dist/chunk-QDAF3LP7.js.map +1 -0
- package/dist/chunk-QGVIGNJ3.js +37 -0
- package/dist/chunk-QGVIGNJ3.js.map +1 -0
- package/dist/chunk-QNUITYSY.js +68 -0
- package/dist/chunk-QNUITYSY.js.map +1 -0
- package/dist/chunk-QSWVN3RT.js +116 -0
- package/dist/chunk-QSWVN3RT.js.map +1 -0
- package/dist/chunk-QTLQZ7OJ.js +110 -0
- package/dist/chunk-QTLQZ7OJ.js.map +1 -0
- package/dist/chunk-QYAMLIG2.js +84 -0
- package/dist/chunk-QYAMLIG2.js.map +1 -0
- package/dist/chunk-REILH4XF.js +128 -0
- package/dist/chunk-REILH4XF.js.map +1 -0
- package/dist/chunk-S6SSK6QX.js +80 -0
- package/dist/chunk-S6SSK6QX.js.map +1 -0
- package/dist/chunk-SA7ED3PN.js +68 -0
- package/dist/chunk-SA7ED3PN.js.map +1 -0
- package/dist/chunk-SIJOEM4N.js +55 -0
- package/dist/chunk-SIJOEM4N.js.map +1 -0
- package/dist/chunk-SLOKAAH2.js +70 -0
- package/dist/chunk-SLOKAAH2.js.map +1 -0
- package/dist/chunk-TR6NPSMX.js +85 -0
- package/dist/chunk-TR6NPSMX.js.map +1 -0
- package/dist/chunk-TSZ5DEAT.js +106 -0
- package/dist/chunk-TSZ5DEAT.js.map +1 -0
- package/dist/chunk-TUNVF45W.js +127 -0
- package/dist/chunk-TUNVF45W.js.map +1 -0
- package/dist/chunk-TXOBNSQ5.js +63 -0
- package/dist/chunk-TXOBNSQ5.js.map +1 -0
- package/dist/chunk-U44DRLMM.js +88 -0
- package/dist/chunk-U44DRLMM.js.map +1 -0
- package/dist/chunk-U4THNRV5.js +114 -0
- package/dist/chunk-U4THNRV5.js.map +1 -0
- package/dist/chunk-UAZOFC4W.js +72 -0
- package/dist/chunk-UAZOFC4W.js.map +1 -0
- package/dist/chunk-UGKI466V.js +12 -0
- package/dist/chunk-UGKI466V.js.map +1 -0
- package/dist/chunk-VM4RMQQN.js +11 -0
- package/dist/chunk-VM4RMQQN.js.map +1 -0
- package/dist/chunk-VQ37VLAS.js +54 -0
- package/dist/chunk-VQ37VLAS.js.map +1 -0
- package/dist/chunk-VT7VSYH5.js +73 -0
- package/dist/chunk-VT7VSYH5.js.map +1 -0
- package/dist/chunk-VTIRUCLZ.js +57 -0
- package/dist/chunk-VTIRUCLZ.js.map +1 -0
- package/dist/chunk-VVBAEYKI.js +202 -0
- package/dist/chunk-VVBAEYKI.js.map +1 -0
- package/dist/chunk-WHFIQUCC.js +120 -0
- package/dist/chunk-WHFIQUCC.js.map +1 -0
- package/dist/chunk-WPSESV5Z.js +74 -0
- package/dist/chunk-WPSESV5Z.js.map +1 -0
- package/dist/chunk-WXEXCHEN.js +51 -0
- package/dist/chunk-WXEXCHEN.js.map +1 -0
- package/dist/chunk-X2DDPD3D.js +113 -0
- package/dist/chunk-X2DDPD3D.js.map +1 -0
- package/dist/chunk-X7VIMKLD.js +127 -0
- package/dist/chunk-X7VIMKLD.js.map +1 -0
- package/dist/chunk-XJ3EG6XY.js +30 -0
- package/dist/chunk-XJ3EG6XY.js.map +1 -0
- package/dist/chunk-XOT5HWSF.js +23 -0
- package/dist/chunk-XOT5HWSF.js.map +1 -0
- package/dist/chunk-Y72IP43U.js +117 -0
- package/dist/chunk-Y72IP43U.js.map +1 -0
- package/dist/chunk-YD6FLXBV.js +61 -0
- package/dist/chunk-YD6FLXBV.js.map +1 -0
- package/dist/chunk-YEQQGYYO.js +1022 -0
- package/dist/chunk-YEQQGYYO.js.map +1 -0
- package/dist/chunk-YYW6AEIT.js +46 -0
- package/dist/chunk-YYW6AEIT.js.map +1 -0
- package/dist/chunk-ZEVGXKRU.js +104 -0
- package/dist/chunk-ZEVGXKRU.js.map +1 -0
- package/dist/chunk-ZKSMMLDP.js +74 -0
- package/dist/chunk-ZKSMMLDP.js.map +1 -0
- package/dist/chunk-ZU6IM6PK.js +101 -0
- package/dist/chunk-ZU6IM6PK.js.map +1 -0
- package/dist/chunk-ZUS5KZGO.js +714 -0
- package/dist/chunk-ZUS5KZGO.js.map +1 -0
- package/dist/chunk-ZVS2GOT2.js +58 -0
- package/dist/chunk-ZVS2GOT2.js.map +1 -0
- package/dist/chunk-ZXPDS6DH.js +3 -0
- package/dist/chunk-ZXPDS6DH.js.map +1 -0
- package/dist/chunk-ZZQQJX5Z.js +173 -0
- package/dist/chunk-ZZQQJX5Z.js.map +1 -0
- package/dist/components.css +2 -0
- package/dist/composites/account-menu/index.js +6 -0
- package/dist/composites/account-menu/index.js.map +1 -0
- package/dist/composites/agent-composer/index.js +7 -0
- package/dist/composites/agent-composer/index.js.map +1 -0
- package/dist/composites/agent-editor/index.js +10 -0
- package/dist/composites/agent-editor/index.js.map +1 -0
- package/dist/composites/agent-stream/index.js +12 -0
- package/dist/composites/agent-stream/index.js.map +1 -0
- package/dist/composites/agent-timeline/index.js +5 -0
- package/dist/composites/agent-timeline/index.js.map +1 -0
- package/dist/composites/approval-card/index.js +5 -0
- package/dist/composites/approval-card/index.js.map +1 -0
- package/dist/composites/chat-composer/index.js +6 -0
- package/dist/composites/chat-composer/index.js.map +1 -0
- package/dist/composites/chat-message/index.js +6 -0
- package/dist/composites/chat-message/index.js.map +1 -0
- package/dist/composites/code-block/index.js +5 -0
- package/dist/composites/code-block/index.js.map +1 -0
- package/dist/composites/command-palette/index.js +5 -0
- package/dist/composites/command-palette/index.js.map +1 -0
- package/dist/composites/confirm-dialog/index.js +7 -0
- package/dist/composites/confirm-dialog/index.js.map +1 -0
- package/dist/composites/cron-jobs-list/index.js +5 -0
- package/dist/composites/cron-jobs-list/index.js.map +1 -0
- package/dist/composites/data-table/index.js +10 -0
- package/dist/composites/data-table/index.js.map +1 -0
- package/dist/composites/deployment-row/index.js +5 -0
- package/dist/composites/deployment-row/index.js.map +1 -0
- package/dist/composites/domain-config/index.js +7 -0
- package/dist/composites/domain-config/index.js.map +1 -0
- package/dist/composites/env-var-editor/index.js +7 -0
- package/dist/composites/env-var-editor/index.js.map +1 -0
- package/dist/composites/mcp-server-list/index.js +5 -0
- package/dist/composites/mcp-server-list/index.js.map +1 -0
- package/dist/composites/page-shell/index.js +7 -0
- package/dist/composites/page-shell/index.js.map +1 -0
- package/dist/composites/permission-modal/index.js +6 -0
- package/dist/composites/permission-modal/index.js.map +1 -0
- package/dist/composites/preview-env-card/index.js +6 -0
- package/dist/composites/preview-env-card/index.js.map +1 -0
- package/dist/composites/preview-panel/index.js +5 -0
- package/dist/composites/preview-panel/index.js.map +1 -0
- package/dist/composites/project-card/index.js +6 -0
- package/dist/composites/project-card/index.js.map +1 -0
- package/dist/composites/rollback-ui/index.js +6 -0
- package/dist/composites/rollback-ui/index.js.map +1 -0
- package/dist/composites/rule-editor/index.js +11 -0
- package/dist/composites/rule-editor/index.js.map +1 -0
- package/dist/composites/skill-editor/index.js +11 -0
- package/dist/composites/skill-editor/index.js.map +1 -0
- package/dist/composites/skills-list/index.js +5 -0
- package/dist/composites/skills-list/index.js.map +1 -0
- package/dist/composites/stability-bundle-viewer/index.js +4 -0
- package/dist/composites/stability-bundle-viewer/index.js.map +1 -0
- package/dist/composites/task-header/index.js +5 -0
- package/dist/composites/task-header/index.js.map +1 -0
- package/dist/composites/usage-meter/index.js +5 -0
- package/dist/composites/usage-meter/index.js.map +1 -0
- package/dist/fonts/LICENSE-GEIST.txt +92 -0
- package/dist/fonts/geist-400.woff2 +0 -0
- package/dist/fonts/geist-500.woff2 +0 -0
- package/dist/fonts/geist-600.woff2 +0 -0
- package/dist/fonts/geist-mono-400.woff2 +0 -0
- package/dist/fonts/geist-mono-500.woff2 +0 -0
- package/dist/fonts/geist-mono-600.woff2 +0 -0
- package/dist/fonts-cdn.css +28 -0
- package/dist/fonts.css +75 -0
- package/dist/index.d.ts +4621 -0
- package/dist/index.js +1338 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-D5xmXqYb.d.ts +172 -0
- package/dist/preset-v3-legacy.d.ts +35 -0
- package/dist/preset-v3-legacy.js +159 -0
- package/dist/preset-v3-legacy.js.map +1 -0
- package/dist/preset.css +27 -0
- package/dist/primitives/action-bar/index.js +4 -0
- package/dist/primitives/action-bar/index.js.map +1 -0
- package/dist/primitives/agent-error-card/index.js +5 -0
- package/dist/primitives/agent-error-card/index.js.map +1 -0
- package/dist/primitives/agent-event/index.js +4 -0
- package/dist/primitives/agent-event/index.js.map +1 -0
- package/dist/primitives/agent-handoff/index.js +4 -0
- package/dist/primitives/agent-handoff/index.js.map +1 -0
- package/dist/primitives/agent-profile/index.js +4 -0
- package/dist/primitives/agent-profile/index.js.map +1 -0
- package/dist/primitives/agent-starting-state/index.js +5 -0
- package/dist/primitives/agent-starting-state/index.js.map +1 -0
- package/dist/primitives/agent-streaming/index.js +5 -0
- package/dist/primitives/agent-streaming/index.js.map +1 -0
- package/dist/primitives/alert/index.js +4 -0
- package/dist/primitives/alert/index.js.map +1 -0
- package/dist/primitives/artifact-preview/index.js +4 -0
- package/dist/primitives/artifact-preview/index.js.map +1 -0
- package/dist/primitives/attachment-chip/index.js +4 -0
- package/dist/primitives/attachment-chip/index.js.map +1 -0
- package/dist/primitives/audit-log-entry/index.js +4 -0
- package/dist/primitives/audit-log-entry/index.js.map +1 -0
- package/dist/primitives/auto-compact-notice/index.js +5 -0
- package/dist/primitives/auto-compact-notice/index.js.map +1 -0
- package/dist/primitives/avatar/index.js +4 -0
- package/dist/primitives/avatar/index.js.map +1 -0
- package/dist/primitives/badge/index.js +4 -0
- package/dist/primitives/badge/index.js.map +1 -0
- package/dist/primitives/branch-indicator/index.js +4 -0
- package/dist/primitives/branch-indicator/index.js.map +1 -0
- package/dist/primitives/browser-controls/index.js +4 -0
- package/dist/primitives/browser-controls/index.js.map +1 -0
- package/dist/primitives/build-log-stream/index.js +5 -0
- package/dist/primitives/build-log-stream/index.js.map +1 -0
- package/dist/primitives/button/index.js +4 -0
- package/dist/primitives/button/index.js.map +1 -0
- package/dist/primitives/capability-indicator/index.js +4 -0
- package/dist/primitives/capability-indicator/index.js.map +1 -0
- package/dist/primitives/card/index.js +4 -0
- package/dist/primitives/card/index.js.map +1 -0
- package/dist/primitives/channel-card/index.js +4 -0
- package/dist/primitives/channel-card/index.js.map +1 -0
- package/dist/primitives/chat-thread/index.js +5 -0
- package/dist/primitives/chat-thread/index.js.map +1 -0
- package/dist/primitives/checkbox/index.js +4 -0
- package/dist/primitives/checkbox/index.js.map +1 -0
- package/dist/primitives/context-card/index.js +4 -0
- package/dist/primitives/context-card/index.js.map +1 -0
- package/dist/primitives/context-window-bar/index.js +4 -0
- package/dist/primitives/context-window-bar/index.js.map +1 -0
- package/dist/primitives/copy-button/index.js +4 -0
- package/dist/primitives/copy-button/index.js.map +1 -0
- package/dist/primitives/cost-meter/index.js +4 -0
- package/dist/primitives/cost-meter/index.js.map +1 -0
- package/dist/primitives/created-files-card/index.js +4 -0
- package/dist/primitives/created-files-card/index.js.map +1 -0
- package/dist/primitives/cron-job-card/index.js +4 -0
- package/dist/primitives/cron-job-card/index.js.map +1 -0
- package/dist/primitives/danger-zone/index.js +4 -0
- package/dist/primitives/danger-zone/index.js.map +1 -0
- package/dist/primitives/dialog/index.js +4 -0
- package/dist/primitives/dialog/index.js.map +1 -0
- package/dist/primitives/diff-viewer/index.js +4 -0
- package/dist/primitives/diff-viewer/index.js.map +1 -0
- package/dist/primitives/dropdown-menu/index.js +4 -0
- package/dist/primitives/dropdown-menu/index.js.map +1 -0
- package/dist/primitives/empty-state/index.js +4 -0
- package/dist/primitives/empty-state/index.js.map +1 -0
- package/dist/primitives/export-chat-dialog/index.js +4 -0
- package/dist/primitives/export-chat-dialog/index.js.map +1 -0
- package/dist/primitives/folder-context-card/index.js +4 -0
- package/dist/primitives/folder-context-card/index.js.map +1 -0
- package/dist/primitives/folder-selector/index.js +4 -0
- package/dist/primitives/folder-selector/index.js.map +1 -0
- package/dist/primitives/form-field/index.js +4 -0
- package/dist/primitives/form-field/index.js.map +1 -0
- package/dist/primitives/gateway-status-indicator/index.js +4 -0
- package/dist/primitives/gateway-status-indicator/index.js.map +1 -0
- package/dist/primitives/hook-config/index.js +4 -0
- package/dist/primitives/hook-config/index.js.map +1 -0
- package/dist/primitives/hook-event-log/index.js +4 -0
- package/dist/primitives/hook-event-log/index.js.map +1 -0
- package/dist/primitives/input/index.js +4 -0
- package/dist/primitives/input/index.js.map +1 -0
- package/dist/primitives/intent-selector/index.js +4 -0
- package/dist/primitives/intent-selector/index.js.map +1 -0
- package/dist/primitives/label/index.js +4 -0
- package/dist/primitives/label/index.js.map +1 -0
- package/dist/primitives/lane-board/index.js +4 -0
- package/dist/primitives/lane-board/index.js.map +1 -0
- package/dist/primitives/login-split/index.js +4 -0
- package/dist/primitives/login-split/index.js.map +1 -0
- package/dist/primitives/mcp-server-card/index.js +4 -0
- package/dist/primitives/mcp-server-card/index.js.map +1 -0
- package/dist/primitives/memory-editor/index.js +4 -0
- package/dist/primitives/memory-editor/index.js.map +1 -0
- package/dist/primitives/mention-menu/index.js +4 -0
- package/dist/primitives/mention-menu/index.js.map +1 -0
- package/dist/primitives/metrics-panel/index.js +4 -0
- package/dist/primitives/metrics-panel/index.js.map +1 -0
- package/dist/primitives/model-card/index.js +4 -0
- package/dist/primitives/model-card/index.js.map +1 -0
- package/dist/primitives/model-selector/index.js +4 -0
- package/dist/primitives/model-selector/index.js.map +1 -0
- package/dist/primitives/pagination/index.js +4 -0
- package/dist/primitives/pagination/index.js.map +1 -0
- package/dist/primitives/permission-matrix/index.js +4 -0
- package/dist/primitives/permission-matrix/index.js.map +1 -0
- package/dist/primitives/pin-input/index.js +4 -0
- package/dist/primitives/pin-input/index.js.map +1 -0
- package/dist/primitives/plan-badge/index.js +4 -0
- package/dist/primitives/plan-badge/index.js.map +1 -0
- package/dist/primitives/progress/index.js +4 -0
- package/dist/primitives/progress/index.js.map +1 -0
- package/dist/primitives/progress-checklist/index.js +4 -0
- package/dist/primitives/progress-checklist/index.js.map +1 -0
- package/dist/primitives/project-switcher/index.js +4 -0
- package/dist/primitives/project-switcher/index.js.map +1 -0
- package/dist/primitives/quick-action-chips/index.js +4 -0
- package/dist/primitives/quick-action-chips/index.js.map +1 -0
- package/dist/primitives/radio-group/index.js +4 -0
- package/dist/primitives/radio-group/index.js.map +1 -0
- package/dist/primitives/recent-folders-list/index.js +4 -0
- package/dist/primitives/recent-folders-list/index.js.map +1 -0
- package/dist/primitives/rule-card/index.js +4 -0
- package/dist/primitives/rule-card/index.js.map +1 -0
- package/dist/primitives/run-stats/index.js +4 -0
- package/dist/primitives/run-stats/index.js.map +1 -0
- package/dist/primitives/run-status-pill/index.js +4 -0
- package/dist/primitives/run-status-pill/index.js.map +1 -0
- package/dist/primitives/running-tasks-panel/index.js +4 -0
- package/dist/primitives/running-tasks-panel/index.js.map +1 -0
- package/dist/primitives/scroll-area/index.js +4 -0
- package/dist/primitives/scroll-area/index.js.map +1 -0
- package/dist/primitives/select/index.js +4 -0
- package/dist/primitives/select/index.js.map +1 -0
- package/dist/primitives/session-list-item/index.js +4 -0
- package/dist/primitives/session-list-item/index.js.map +1 -0
- package/dist/primitives/session-timeline/index.js +4 -0
- package/dist/primitives/session-timeline/index.js.map +1 -0
- package/dist/primitives/sheet/index.js +4 -0
- package/dist/primitives/sheet/index.js.map +1 -0
- package/dist/primitives/sidebar/index.js +4 -0
- package/dist/primitives/sidebar/index.js.map +1 -0
- package/dist/primitives/skeleton/index.js +5 -0
- package/dist/primitives/skeleton/index.js.map +1 -0
- package/dist/primitives/skill-card/index.js +4 -0
- package/dist/primitives/skill-card/index.js.map +1 -0
- package/dist/primitives/social-auth-row/index.js +4 -0
- package/dist/primitives/social-auth-row/index.js.map +1 -0
- package/dist/primitives/stat-tile/index.js +4 -0
- package/dist/primitives/stat-tile/index.js.map +1 -0
- package/dist/primitives/status-dot/index.js +4 -0
- package/dist/primitives/status-dot/index.js.map +1 -0
- package/dist/primitives/steps-rail/index.js +4 -0
- package/dist/primitives/steps-rail/index.js.map +1 -0
- package/dist/primitives/sub-agent-dispatch/index.js +4 -0
- package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
- package/dist/primitives/switch/index.js +4 -0
- package/dist/primitives/switch/index.js.map +1 -0
- package/dist/primitives/system-prompt-editor/index.js +4 -0
- package/dist/primitives/system-prompt-editor/index.js.map +1 -0
- package/dist/primitives/table/index.js +4 -0
- package/dist/primitives/table/index.js.map +1 -0
- package/dist/primitives/tabs/index.js +4 -0
- package/dist/primitives/tabs/index.js.map +1 -0
- package/dist/primitives/task-plan/index.js +4 -0
- package/dist/primitives/task-plan/index.js.map +1 -0
- package/dist/primitives/terminal-panel/index.js +5 -0
- package/dist/primitives/terminal-panel/index.js.map +1 -0
- package/dist/primitives/textarea/index.js +4 -0
- package/dist/primitives/textarea/index.js.map +1 -0
- package/dist/primitives/thinking-level-selector/index.js +4 -0
- package/dist/primitives/thinking-level-selector/index.js.map +1 -0
- package/dist/primitives/timestamp/index.js +4 -0
- package/dist/primitives/timestamp/index.js.map +1 -0
- package/dist/primitives/toast/index.js +4 -0
- package/dist/primitives/toast/index.js.map +1 -0
- package/dist/primitives/token-usage-chart/index.js +4 -0
- package/dist/primitives/token-usage-chart/index.js.map +1 -0
- package/dist/primitives/tool-call/index.js +4 -0
- package/dist/primitives/tool-call/index.js.map +1 -0
- package/dist/primitives/tool-call-card/index.js +4 -0
- package/dist/primitives/tool-call-card/index.js.map +1 -0
- package/dist/primitives/tool-result/index.js +4 -0
- package/dist/primitives/tool-result/index.js.map +1 -0
- package/dist/primitives/tools-list/index.js +4 -0
- package/dist/primitives/tools-list/index.js.map +1 -0
- package/dist/primitives/tooltip/index.js +4 -0
- package/dist/primitives/tooltip/index.js.map +1 -0
- package/dist/primitives/topnav/index.js +4 -0
- package/dist/primitives/topnav/index.js.map +1 -0
- package/dist/primitives/update-banner/index.js +4 -0
- package/dist/primitives/update-banner/index.js.map +1 -0
- package/dist/slide/index.d.ts +212 -0
- package/dist/slide/index.js +3 -0
- package/dist/slide/index.js.map +1 -0
- package/dist/slide/plugins/emoji/index.d.ts +29 -0
- package/dist/slide/plugins/emoji/index.js +157 -0
- package/dist/slide/plugins/emoji/index.js.map +1 -0
- package/dist/slide/plugins/math/index.d.ts +13 -0
- package/dist/slide/plugins/math/index.js +145 -0
- package/dist/slide/plugins/math/index.js.map +1 -0
- package/dist/slide/plugins/mermaid/index.d.ts +55 -0
- package/dist/slide/plugins/mermaid/index.js +218 -0
- package/dist/slide/plugins/mermaid/index.js.map +1 -0
- package/dist/slide/plugins/shiki/index.d.ts +18 -0
- package/dist/slide/plugins/shiki/index.js +87 -0
- package/dist/slide/plugins/shiki/index.js.map +1 -0
- package/dist/slide/themes/default.css +256 -0
- package/dist/slide/themes/layouts.css +143 -0
- package/dist/slide/themes/violet-forge.css +256 -0
- package/dist/slide-deck/index.css +52 -0
- package/dist/slide-deck/index.css.map +1 -0
- package/dist/slide-deck/index.d.ts +377 -0
- package/dist/slide-deck/index.js +1111 -0
- package/dist/slide-deck/index.js.map +1 -0
- package/dist/styles-v3-legacy.css +88 -0
- package/dist/styles.css +137 -0
- package/dist/tokens-v4.css +187 -0
- package/dist/tokens.css +230 -0
- package/dist/vite-plugin.d.ts +29 -0
- package/dist/vite-plugin.js +76 -0
- package/dist/vite-plugin.js.map +1 -0
- package/dist/whiteboard/index.d.ts +258 -0
- package/dist/whiteboard/index.js +738 -0
- package/dist/whiteboard/index.js.map +1 -0
- package/llms.txt +273 -0
- package/package.json +800 -0
- package/registry/index.json +856 -0
- package/registry/r/account-menu.json +24 -0
- package/registry/r/action-bar.json +22 -0
- package/registry/r/agent-composer.json +22 -0
- package/registry/r/agent-editor.json +27 -0
- package/registry/r/agent-error-card.json +22 -0
- package/registry/r/agent-event.json +24 -0
- package/registry/r/agent-handoff.json +22 -0
- package/registry/r/agent-profile.json +23 -0
- package/registry/r/agent-starting-state.json +22 -0
- package/registry/r/agent-stream.json +27 -0
- package/registry/r/agent-streaming.json +22 -0
- package/registry/r/agent-timeline.json +22 -0
- package/registry/r/agent-types.json +15 -0
- package/registry/r/alert.json +22 -0
- package/registry/r/approval-card.json +25 -0
- package/registry/r/artifact-preview.json +22 -0
- package/registry/r/attachment-chip.json +24 -0
- package/registry/r/audit-log-entry.json +23 -0
- package/registry/r/auto-compact-notice.json +22 -0
- package/registry/r/avatar.json +23 -0
- package/registry/r/badge.json +22 -0
- package/registry/r/browser-controls.json +22 -0
- package/registry/r/build-log-stream.json +19 -0
- package/registry/r/button.json +23 -0
- package/registry/r/capability-indicator.json +23 -0
- package/registry/r/card.json +22 -0
- package/registry/r/chat-composer.json +23 -0
- package/registry/r/chat-message.json +129 -0
- package/registry/r/chat-thread.json +20 -0
- package/registry/r/chat-types.json +15 -0
- package/registry/r/checkbox.json +24 -0
- package/registry/r/cn.json +19 -0
- package/registry/r/code-block.json +21 -0
- package/registry/r/command-palette.json +25 -0
- package/registry/r/confirm-dialog.json +25 -0
- package/registry/r/context-card.json +23 -0
- package/registry/r/context-window-bar.json +20 -0
- package/registry/r/copy-button.json +22 -0
- package/registry/r/cost-meter.json +22 -0
- package/registry/r/created-files-card.json +23 -0
- package/registry/r/cron-job-card.json +22 -0
- package/registry/r/cron-jobs-list.json +23 -0
- package/registry/r/danger-zone.json +20 -0
- package/registry/r/data-table.json +27 -0
- package/registry/r/deployment-row.json +23 -0
- package/registry/r/dialog.json +23 -0
- package/registry/r/diff-viewer.json +20 -0
- package/registry/r/domain-config.json +25 -0
- package/registry/r/dropdown-menu.json +23 -0
- package/registry/r/empty-state.json +20 -0
- package/registry/r/env-var-editor.json +25 -0
- package/registry/r/folder-context-card.json +23 -0
- package/registry/r/folder-selector.json +22 -0
- package/registry/r/form-field.json +23 -0
- package/registry/r/hook-config.json +22 -0
- package/registry/r/hook-event-log.json +22 -0
- package/registry/r/input.json +22 -0
- package/registry/r/intent-selector.json +24 -0
- package/registry/r/label.json +22 -0
- package/registry/r/lane-board.json +20 -0
- package/registry/r/live-region-context.json +16 -0
- package/registry/r/login-split.json +20 -0
- package/registry/r/mcp-server-card.json +22 -0
- package/registry/r/mcp-server-list.json +23 -0
- package/registry/r/memory-editor.json +23 -0
- package/registry/r/mention-menu.json +23 -0
- package/registry/r/metrics-panel.json +22 -0
- package/registry/r/mode-types.json +15 -0
- package/registry/r/model-card.json +23 -0
- package/registry/r/model-selector.json +23 -0
- package/registry/r/page-shell.json +25 -0
- package/registry/r/pagination.json +22 -0
- package/registry/r/permission-matrix.json +22 -0
- package/registry/r/permission-modal.json +24 -0
- package/registry/r/permission-types.json +15 -0
- package/registry/r/pin-input.json +20 -0
- package/registry/r/plan-badge.json +20 -0
- package/registry/r/preview-env-card.json +25 -0
- package/registry/r/preview-panel.json +21 -0
- package/registry/r/progress-checklist.json +23 -0
- package/registry/r/progress.json +20 -0
- package/registry/r/project-card.json +25 -0
- package/registry/r/project-switcher.json +22 -0
- package/registry/r/quick-action-chips.json +21 -0
- package/registry/r/radio-group.json +23 -0
- package/registry/r/recent-folders-list.json +22 -0
- package/registry/r/rollback-ui.json +24 -0
- package/registry/r/rule-card.json +23 -0
- package/registry/r/rule-editor.json +28 -0
- package/registry/r/rule-types.json +18 -0
- package/registry/r/run-stats.json +22 -0
- package/registry/r/running-tasks-panel.json +22 -0
- package/registry/r/safe-href.json +16 -0
- package/registry/r/scroll-area.json +22 -0
- package/registry/r/select.json +24 -0
- package/registry/r/session-list-item.json +20 -0
- package/registry/r/session-timeline.json +22 -0
- package/registry/r/sheet.json +24 -0
- package/registry/r/sidebar.json +19 -0
- package/registry/r/skeleton.json +19 -0
- package/registry/r/skill-card.json +24 -0
- package/registry/r/skill-editor.json +28 -0
- package/registry/r/skills-list.json +23 -0
- package/registry/r/slide-deck.json +130 -0
- package/registry/r/slide-plugin-emoji.json +28 -0
- package/registry/r/slide-plugin-math.json +24 -0
- package/registry/r/slide-plugin-mermaid.json +23 -0
- package/registry/r/slide-plugin-shiki.json +23 -0
- package/registry/r/slide.json +123 -0
- package/registry/r/social-auth-row.json +21 -0
- package/registry/r/stat-tile.json +22 -0
- package/registry/r/status-dot.json +20 -0
- package/registry/r/steps-rail.json +20 -0
- package/registry/r/sub-agent-dispatch.json +22 -0
- package/registry/r/switch.json +23 -0
- package/registry/r/system-prompt-editor.json +22 -0
- package/registry/r/table.json +22 -0
- package/registry/r/tabs.json +22 -0
- package/registry/r/tailwind-preset.json +19 -0
- package/registry/r/task-header.json +24 -0
- package/registry/r/task-plan.json +22 -0
- package/registry/r/task-types.json +15 -0
- package/registry/r/terminal-panel.json +22 -0
- package/registry/r/textarea.json +22 -0
- package/registry/r/theme-provider.json +59 -0
- package/registry/r/theme-script.json +18 -0
- package/registry/r/theo-ui-provider.json +20 -0
- package/registry/r/timestamp.json +20 -0
- package/registry/r/toast.json +30 -0
- package/registry/r/token-usage-chart.json +20 -0
- package/registry/r/tokens.json +21 -0
- package/registry/r/tool-call-card.json +23 -0
- package/registry/r/tool-call.json +22 -0
- package/registry/r/tool-result.json +20 -0
- package/registry/r/tools-list.json +23 -0
- package/registry/r/tooltip.json +22 -0
- package/registry/r/topnav.json +22 -0
- package/registry/r/types.json +15 -0
- package/registry/r/usage-meter.json +21 -0
- package/registry/r/whiteboard.json +101 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/themes/density.ts","../src/themes/theme-provider.tsx","../src/themes/theme-script.tsx","../src/themes/theme-switcher.tsx","../src/themes/violet-forge.ts","../src/themes/classic-paper.ts","../src/themes/aurora-terminal.ts","../src/themes/define.ts","../src/themes/color.ts","../src/themes/vercel-mono.ts","../src/themes/github-dark.ts","../src/themes/dracula.ts","../src/themes/one-dark.ts","../src/themes/anthropic-style.ts","../src/themes/openai-style.ts","../src/themes/linear-glass.ts","../src/themes/index.ts","../src/theo-ui-provider.tsx"],"names":["createContext","STYLE_ELEMENT_ID","safe","value","active","useContext","jsx"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\n/**\n * `useDensity()` — runtime control of the global UI density.\n *\n * FAANG-modern dashboards (Vercel / Linear / Stripe) ship at \"comfortable\"\n * density: form controls at 36px, body text 14px, card padding 20px. For\n * dense surfaces (data tables, agent tool lists, admin grids) `compact` mode\n * tightens form controls to 32px without touching `sm`/`lg` props the\n * consumer already passed. Spacious mode bumps the default up to 44px for\n * accessibility-first surfaces.\n *\n * Mechanism (EC-1 fix from edge-case review 2026-05-22):\n * - ThemeProvider sets `data-density=\"{value}\"` on `<html>`.\n * - A `<style id=\"theo-ui-density-vars\">` block defines CSS custom\n * properties under each `[data-density=...]` selector:\n * --theo-control-h, --theo-control-px\n * - Form-control `cva` variants for the `md` tier read from these vars:\n * `md: \"h-[var(--theo-control-h,2.25rem)] px-[var(--theo-control-px,0.875rem)] text-body-sm\"`\n * - `sm` and `lg` variants stay hardcoded → explicit `size` prop always\n * wins over density.\n *\n * Plan: `.claude/knowledge-base/plans/faang-density-tightening-plan.md` T4.1.\n */\nimport { createContext, useContext } from \"react\";\n\nexport type Density = \"compact\" | \"comfortable\" | \"spacious\";\n\nexport interface DensityContextValue {\n density: Density;\n setDensity: (next: Density) => void;\n}\n\nexport const DensityContext = createContext<DensityContextValue | undefined>(undefined);\n\nconst STYLE_ELEMENT_ID = \"theo-ui-density-vars\";\n\nconst DENSITY_CSS = `[data-density=\"compact\"] { --theo-control-h: 2rem; --theo-control-px: 0.75rem; }\n[data-density=\"comfortable\"] { --theo-control-h: 2.25rem; --theo-control-px: 0.875rem; }\n[data-density=\"spacious\"] { --theo-control-h: 2.75rem; --theo-control-px: 1rem; }\n`;\n\n/**\n * Inject (idempotent) the density CSS variable definitions into the document\n * head. Returns true if the style tag was newly created. Safe to call on\n * every ThemeProvider mount — duplicates are skipped.\n */\nexport function injectDensityCss(): boolean {\n if (typeof document === \"undefined\") return false;\n if (document.getElementById(STYLE_ELEMENT_ID)) return false;\n const style = document.createElement(\"style\");\n style.id = STYLE_ELEMENT_ID;\n style.textContent = DENSITY_CSS;\n document.head.appendChild(style);\n return true;\n}\n\n/**\n * Read the current density from the active ThemeProvider context. Throws\n * outside the provider so misuse fails loud — analogous to `useTheme`.\n */\nexport function useDensity(): DensityContextValue {\n const ctx = useContext(DensityContext);\n if (!ctx) {\n throw new Error(\"useDensity must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { JSX, ReactNode } from \"react\";\nimport { safeHref } from \"../lib/safe-href.js\";\nimport { type Density, DensityContext, injectDensityCss } from \"./density.js\";\nimport type { ColorScale, Theme, ThemeMode } from \"./types.js\";\n\ninterface ThemeContextValue {\n /** Active theme (full descriptor). */\n theme: Theme;\n /** Active mode: light or dark. */\n mode: ThemeMode;\n /** All available themes. */\n themes: Theme[];\n /** Swap the active theme by name. */\n setTheme: (name: string) => void;\n /** Set light/dark explicitly. */\n setMode: (mode: ThemeMode) => void;\n /** Toggle light <> dark. */\n toggleMode: () => void;\n /** Register an additional theme at runtime. */\n registerTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nconst STYLE_ELEMENT_ID = \"theo-ui-theme-vars\";\n\n// T3.2 (SEC-001): allowlist validators for theme values. injectThemeCss\n// interpolates theme name + color values + font families into a <style>\n// textContent. Without validation, a theme object from an untrusted source\n// (e.g., a feature-flag service, a CMS) could inject arbitrary CSS via\n// closing the declaration with `}` or smuggling `url(...)` for exfiltration.\n// We reject rather than escape: themes are code, not user input. Invalid\n// values cause a dev-time throw (caller sees the problem); production\n// silently substitutes a safe fallback so a misconfigured theme can't\n// crash the app.\n\n// Color values. Multiple accepted shapes:\n// 1. Hex: `#fff`, `#0a0a0a`, `#0a0a0aff`.\n// 2. Fully-parenthesized CSS color functions: `oklch(...)`, `rgb(...)`,\n// `hsl(...)`, etc. Inner content restricted to digits/dots/spaces/\n// percent/slash/comma/dash/plus — no semicolons, no braces, no `url(`.\n// 3. HSL-component split (shadcn-ui convention used by the built-in\n// themes): `\"0 0% 100%\"`, `\"262 83% 58%\"` — space-separated numeric\n// components consumed via `hsl(var(--token))` in stylesheets.\n// 4. `var(--token)` references, optionally with a fallback value that\n// contains no parens/braces/semicolons.\n// 5. CSS keywords: `transparent`, `currentColor`, `inherit`, `initial`,\n// `unset`.\nconst COLOR_VALUE_PATTERN =\n /^(#[0-9a-fA-F]{3,8}|(?:oklch|oklab|rgb|rgba|hsl|hsla|lab|lch|color)\\(\\s*[\\d.\\s%,/+\\-]+\\s*\\)|-?\\d+(?:\\.\\d+)?%?(?:\\s+-?\\d+(?:\\.\\d+)?%?){1,3}|var\\(--[a-zA-Z0-9-]+(?:\\s*,\\s*[^();{}]+)?\\)|transparent|currentColor|inherit|initial|unset)$/;\n\n// Font family: word chars, spaces, commas, hyphens, dots, quotes. Excludes\n// parens (blocks `url(...)`) and semicolons (blocks declaration breakouts).\nconst FONT_FAMILY_PATTERN = /^[\\w\\s,\"'\\-.]+$/;\n\n// Theme name: kebab-case identifier. Excludes anything that could break out\n// of an attribute selector or inject additional rules.\nconst THEME_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;\n\nconst IS_DEV = typeof process === \"undefined\" || process.env.NODE_ENV !== \"production\";\n\nfunction rejectOrFallback(scope: string, value: string, fallback: string): string {\n if (IS_DEV) {\n throw new Error(\n `[@theokit/ui] invalid ${scope} value: ${JSON.stringify(value)}. Theme values must match the allowlist (see src/themes/theme-provider.tsx). Refusing to inject potentially unsafe CSS.`,\n );\n }\n return fallback;\n}\n\nfunction validatedColor(token: string, value: string): string {\n if (COLOR_VALUE_PATTERN.test(value)) return value;\n return rejectOrFallback(`color \"${token}\"`, value, \"transparent\");\n}\n\nfunction validatedFontFamily(slot: string, value: string): string {\n if (FONT_FAMILY_PATTERN.test(value)) return value;\n return rejectOrFallback(`fontFamily \"${slot}\"`, value, \"inherit\");\n}\n\nfunction validatedThemeName(value: string): string {\n if (THEME_NAME_PATTERN.test(value)) return value;\n return rejectOrFallback(\"theme.name\", value, \"invalid-theme\");\n}\n\nfunction colorScaleToCss(name: string, mode: ThemeMode, colors: ColorScale): string {\n const safeName = validatedThemeName(name);\n const selector =\n mode === \"light\"\n ? `[data-theme=\"${safeName}\"]`\n : `[data-theme=\"${safeName}\"].dark, [data-theme=\"${safeName}\"][data-mode=\"dark\"]`;\n const decls = Object.entries(colors)\n .map(([token, value]) => ` --${token}: ${validatedColor(token, value)};`)\n .join(\"\\n\");\n return `${selector} {\\n${decls}\\n}`;\n}\n\nfunction fontsToCss(name: string, fonts: Theme[\"fonts\"]): string {\n const safeName = validatedThemeName(name);\n const display = validatedFontFamily(\"display\", fonts.display);\n const body = validatedFontFamily(\"body\", fonts.body);\n const mono = validatedFontFamily(\"mono\", fonts.mono);\n return `[data-theme=\"${safeName}\"] {\\n --font-display: ${display};\\n --font-body: ${body};\\n --font-mono: ${mono};\\n}`;\n}\n\nfunction injectThemeCss(themes: Theme[]): void {\n if (typeof document === \"undefined\") return;\n let style = document.getElementById(STYLE_ELEMENT_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement(\"style\");\n style.id = STYLE_ELEMENT_ID;\n document.head.appendChild(style);\n }\n const blocks: string[] = [];\n for (const theme of themes) {\n blocks.push(fontsToCss(theme.name, theme.fonts));\n blocks.push(colorScaleToCss(theme.name, \"light\", theme.light));\n blocks.push(colorScaleToCss(theme.name, \"dark\", theme.dark));\n }\n style.textContent = blocks.join(\"\\n\\n\");\n}\n\n/**\n * loadThemeFonts — idempotently inject `<link rel=\"stylesheet\">` for each\n * font URL declared by the theme.\n *\n * T4.2: the previous implementation kept a module-level `Set` to track\n * already-injected URLs. That singleton broke test isolation (state\n * leaked across renders) and silently skipped injection in micro-frontend\n * setups with multiple `<ThemeProvider>` mounts. Replaced with a DOM\n * check: we query `document.head` for an existing link with the same\n * `href` before appending a new one. The DOM is the single source of\n * truth; no shared state across instances.\n */\nfunction loadThemeFonts(theme: Theme): void {\n if (typeof document === \"undefined\") return;\n if (!theme.fontUrls) return;\n for (const url of theme.fontUrls) {\n // Re-audit NEW-001 (SSRF, LOW): defang dangerous protocols on\n // consumer-provided font URLs. Built-in themes use\n // fonts.googleapis.com/gstatic.com — safe. registerTheme accepts\n // arbitrary objects at runtime; a malicious theme could try to inject\n // javascript:/data:text/html via fontUrls. safeHref returns undefined\n // for dangerous protocols, which we skip silently.\n const safe = safeHref(url);\n if (!safe) continue;\n if (document.head.querySelector(`link[rel=\"stylesheet\"][href=\"${CSS.escape(safe)}\"]`)) {\n continue;\n }\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = safe;\n document.head.appendChild(link);\n }\n}\n\ninterface ThemeProviderProps {\n children: ReactNode;\n /**\n * Theme to start with. Must match the `name` of an entry in `themes`.\n * Defaults to `\"violet-forge\"` for backward compat — if you don't pass\n * `violet-forge` in `themes`, set this prop explicitly.\n */\n defaultTheme?: string;\n /** Mode to start with. Defaults to `\"dark\"` (library is dark-first). */\n defaultMode?: ThemeMode;\n /**\n * Available themes. **Required**: ThemeProvider does not auto-include any\n * built-in theme since v0.1.0-next.0 — pass `builtinThemes` for all three\n * Violet Forge defaults, or your own array for a slimmer bundle.\n *\n * Migration: consumers previously calling `<ThemeProvider>` without this\n * prop now must pass `themes={builtinThemes}` (or use `<TheoUIProvider>`\n * which defaults to `builtinThemes` for you).\n */\n themes: Theme[];\n /**\n * Persist selection in localStorage under this key. Pass `null` to disable.\n * Default: \"theo-ui:theme\".\n */\n storageKey?: string | null;\n /**\n * Initial density. Drives `data-density` on `<html>` and the `--theo-control-h`\n * / `--theo-control-px` CSS vars consumed by form-control `md` variants.\n * Defaults to `\"comfortable\"` (36px controls — FAANG-tier modern density).\n * Plan: faang-density-tightening (D3).\n */\n defaultDensity?: Density;\n}\n\n/**\n * Storage failure diagnostic — dev-only one-line warn so engineers see\n * something when localStorage throws (Safari private mode, blocked\n * third-party cookies, sandboxed iframes). In production we stay silent;\n * runtime behavior is fail-safe (state still lives in memory).\n *\n * Per HIGH-006: silent catches diverge from the \"fail loud\" principle\n * declared in the global CLAUDE.md. We accept silence in prod because the\n * fallback is correct, but we surface a single warn per call site in dev.\n */\nfunction warnStorageFailure(scope: string, err: unknown): void {\n if (typeof process === \"undefined\" || process.env.NODE_ENV === \"production\") return;\n // biome-ignore lint/suspicious/noConsole: dev-only diagnostic for storage failures (HIGH-006)\n console.warn(`[@theokit/ui] theme storage failure (${scope}):`, err);\n}\n\n/**\n * ThemeProvider — central registry + runtime switcher for Theo themes.\n *\n * Behavior:\n * 1. On mount, injects a `<style id=\"theo-ui-theme-vars\">` element with\n * one CSS block per theme (`[data-theme=\"<name>\"] { --token: ... }`).\n * 2. Sets `data-theme` and `data-mode` on `<html>` so any element nested\n * below inherits the right tokens (the Tailwind config consumes them).\n * 3. Lazy-loads theme font URLs by injecting `<link rel=\"stylesheet\">`.\n * 4. Optionally persists choice in localStorage.\n */\nfunction ThemeProvider({\n children,\n defaultTheme = \"violet-forge\",\n defaultMode = \"dark\",\n themes: themesProp,\n storageKey = \"theo-ui:theme\",\n defaultDensity = \"comfortable\",\n}: ThemeProviderProps): JSX.Element {\n // Themes prop is required since v0.1.0-next.0 — see migration note in\n // the JSDoc on ThemeProviderProps. Pass `builtinThemes` for the legacy\n // default behavior (violet-forge + classic-paper + aurora-terminal), or\n // an array of your own. Empty array is rejected: ThemeProvider has no\n // valid state without at least one registered theme.\n if (!themesProp || themesProp.length === 0) {\n throw new Error(\n \"<ThemeProvider> requires the `themes` prop with at least one Theme. \" +\n \"Pass `themes={builtinThemes}` for the Violet Forge defaults (importable \" +\n \"via the package barrel), or use <TheoUIProvider> which sets this for you.\",\n );\n }\n\n // T3.2 (SEC-001): eager validation. Calling validatedColor/FontFamily/\n // ThemeName here ensures CSS-injection attempts throw at construction\n // time rather than inside the deferred useEffect that injects the\n // <style>. Production-mode fallbacks keep the app rendering even if a\n // theme has bad values.\n //\n // Re-audit NEW-3: wrapped in useMemo so the validation cost (O(themes *\n // tokens), ~60 ops per built-in theme) only runs when themesProp's\n // reference changes — not on every parent re-render. Consumers passing\n // inline array literals (`themes={[violetForge, classicPaper]}`) would\n // otherwise pay this on every parent update.\n const mergedThemes = useMemo<Theme[]>(() => {\n for (const t of themesProp) {\n validatedThemeName(t.name);\n validatedFontFamily(\"display\", t.fonts.display);\n validatedFontFamily(\"body\", t.fonts.body);\n validatedFontFamily(\"mono\", t.fonts.mono);\n for (const [token, value] of Object.entries(t.light)) {\n validatedColor(token, value);\n }\n for (const [token, value] of Object.entries(t.dark)) {\n validatedColor(token, value);\n }\n }\n // Dedup by theme name; last writer wins (allows registerTheme override).\n const map = new Map<string, Theme>();\n for (const t of themesProp) map.set(t.name, t);\n return Array.from(map.values());\n }, [themesProp]);\n\n const [themes, setThemes] = useState<Theme[]>(mergedThemes);\n\n // Re-sync state when the `themes` prop changes between renders. Avoids the\n // common pitfall where the user passes a different array later and the\n // initial-state-only seed silently ignores the change.\n useEffect(() => {\n setThemes(mergedThemes);\n }, [mergedThemes]);\n\n // SSR-safe initialization (0.6.3-next.0 hydration-mismatch fix).\n //\n // Previously: `useState(() => localStorage.getItem(…))`. The initializer\n // ran on BOTH server (no `window`, returned default) AND client at\n // hydration time (with `window`, returned the stored value). The two\n // results disagreed → React threw a hydration error on every page load\n // for any user who had previously changed themes, and re-rendered the\n // entire tree from scratch — defeating SSR.\n //\n // Fix: initialize with the SSR default ALWAYS. Promote to the stored\n // value in a post-mount `useEffect` below. The 1-frame visual flicker\n // is mitigated by the optional `<ThemeScript>` component, which sets\n // `data-theme` / `data-mode` / `data-density` on `<html>` before React\n // hydrates — see `theme-script.tsx`.\n //\n // The `hydratedRef` flag below guards the persist effect so that\n // first-mount writes (with the SSR default values) don't clobber the\n // user's stored preference in the brief window between mount and the\n // post-mount hydration effect.\n const [themeName, setThemeName] = useState<string>(defaultTheme);\n const [mode, setModeState] = useState<ThemeMode>(defaultMode);\n const [density, setDensityState] = useState<Density>(defaultDensity);\n\n // First-run guard for the persist effect below. On initial mount the\n // state is the SSR-safe default; we MUST NOT clobber the user's stored\n // preference with that default before the post-mount hydration effect\n // can promote it. After the first persist-effect call returns early,\n // every subsequent change (post-hydration setState OR user-driven)\n // persists normally.\n const skipFirstPersistRef = useRef(true);\n\n // Post-mount hydration: read localStorage and promote stored values to\n // state. Runs ONCE on mount. If `storageKey` is null or no value is\n // stored, this is a no-op — state stays at the SSR defaults.\n useEffect(() => {\n if (typeof window === \"undefined\" || !storageKey) return;\n try {\n const storedName = window.localStorage.getItem(`${storageKey}:name`);\n const storedMode = window.localStorage.getItem(`${storageKey}:mode`);\n const storedDensity = window.localStorage.getItem(`${storageKey}:density`);\n if (storedName) setThemeName(storedName);\n if (storedMode === \"dark\" || storedMode === \"light\") setModeState(storedMode);\n if (\n storedDensity === \"compact\" ||\n storedDensity === \"comfortable\" ||\n storedDensity === \"spacious\"\n ) {\n setDensityState(storedDensity);\n }\n } catch (err) {\n warnStorageFailure(\"read theme + mode + density\", err);\n }\n }, [storageKey]);\n\n // Inject CSS vars whenever the themes list changes.\n useEffect(() => {\n injectThemeCss(themes);\n }, [themes]);\n\n // Apply data-theme + data-mode + data-density to <html>, load fonts,\n // inject density CSS vars.\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const active = themes.find((t) => t.name === themeName) ?? themes[0];\n if (!active) return;\n document.documentElement.setAttribute(\"data-theme\", active.name);\n document.documentElement.setAttribute(\"data-mode\", mode);\n document.documentElement.setAttribute(\"data-density\", density);\n document.documentElement.classList.toggle(\"dark\", mode === \"dark\");\n loadThemeFonts(active);\n injectDensityCss();\n }, [themeName, mode, density, themes]);\n\n // Persist on change.\n //\n // The first run is SKIPPED via `skipFirstPersistRef`: state at mount\n // is the SSR-safe default. If we wrote it to storage immediately,\n // we'd clobber the user's stored preference between mount and the\n // post-mount hydration effect that promotes the stored value. After\n // the first call, every subsequent run persists — whether the change\n // came from the hydration effect (no-op write back of the stored\n // value) or a user-driven `setTheme` / `toggleMode` / `setDensity`.\n useEffect(() => {\n if (skipFirstPersistRef.current) {\n skipFirstPersistRef.current = false;\n return;\n }\n if (typeof window === \"undefined\" || !storageKey) return;\n try {\n window.localStorage.setItem(`${storageKey}:name`, themeName);\n window.localStorage.setItem(`${storageKey}:mode`, mode);\n window.localStorage.setItem(`${storageKey}:density`, density);\n } catch (err) {\n // Storage may fail in private mode; behavior remains correct (state\n // lives in memory). Per HIGH-006 we surface a one-time dev warning so\n // the engineer sees something instead of complete silence.\n warnStorageFailure(\"persist theme + mode + density\", err);\n }\n }, [themeName, mode, density, storageKey]);\n\n const setTheme = useCallback((name: string) => setThemeName(name), []);\n const setMode = useCallback((next: ThemeMode) => setModeState(next), []);\n const toggleMode = useCallback(\n () => setModeState((cur) => (cur === \"light\" ? \"dark\" : \"light\")),\n [],\n );\n const setDensity = useCallback((next: Density) => setDensityState(next), []);\n const registerTheme = useCallback((theme: Theme) => {\n setThemes((cur) => {\n const idx = cur.findIndex((t) => t.name === theme.name);\n if (idx >= 0) {\n const next = cur.slice();\n next[idx] = theme;\n return next;\n }\n return [...cur, theme];\n });\n }, []);\n\n // themes[0] is guaranteed non-undefined by the constructor-time check\n // above (themesProp is non-empty); the non-null assert encodes that\n // invariant for TypeScript, which can't trace it through useState.\n // biome-ignore lint/style/noNonNullAssertion: T2.5 runtime invariant — themesProp non-empty validated at top of function\n const active = themes.find((t) => t.name === themeName) ?? themes[0]!;\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: active,\n mode,\n themes,\n setTheme,\n setMode,\n toggleMode,\n registerTheme,\n }),\n [active, mode, themes, setTheme, setMode, toggleMode, registerTheme],\n );\n\n const densityValue = useMemo(() => ({ density, setDensity }), [density, setDensity]);\n\n return (\n <ThemeContext.Provider value={value}>\n <DensityContext.Provider value={densityValue}>{children}</DensityContext.Provider>\n </ThemeContext.Provider>\n );\n}\n\n/**\n * useTheme — access theme state from any component inside <ThemeProvider>.\n * Throws if used outside the provider — fail-fast.\n */\nfunction useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n\nexport { ThemeProvider, useTheme };\n","/**\n * ThemeScript — inline `<script>` for SSR-safe theme initialization.\n *\n * Renders a synchronous script that runs BEFORE React hydration. It reads the\n * persisted theme + mode from localStorage (or falls back to the defaults) and\n * sets `data-theme` / `data-mode` on `<html>`, plus the `.dark` class when\n * mode is dark. This eliminates FOUC and avoids hydration mismatch warnings\n * when the user's persisted choice differs from the SSR defaults.\n *\n * Place this in `<head>` ABOVE `<body>`. The component does not need to live\n * inside `<ThemeProvider>`.\n *\n * Security: every interpolated value is passed through `safe()`, which both\n * `JSON.stringify`s the value AND escapes `<` to `<`. The `<` escape is\n * REQUIRED because `JSON.stringify` alone does NOT escape `/`, so a payload\n * like `\"</script><script>alert(1)</script>\"` would otherwise break out of\n * the inline `<script>` tag even though it stays inside a JS string literal.\n * (The browser tokenizes `</script>` at the HTML layer before JS parses.)\n *\n * Example (Next.js App Router): see docs/design-system.md → SSR section.\n * Pass `defaultTheme` and `defaultMode` to align with the consumer's\n * preferred initial state. Always wrap the root in `<html\n * suppressHydrationWarning>` to silence the expected one-render diff.\n */\nimport type { JSX } from \"react\";\nimport type { ThemeMode } from \"./types.js\";\n\ninterface ThemeScriptProps {\n /** Theme name to apply when no persisted value exists. Default `\"violet-forge\"`. */\n defaultTheme?: string;\n /** Mode to apply when no persisted value exists. Default `\"dark\"`. */\n defaultMode?: ThemeMode;\n /**\n * Density to apply when no persisted value exists. Default `\"comfortable\"`.\n * Mirrors `ThemeProvider`'s `defaultDensity` so the inline-script and\n * the React provider agree on the SSR-default density (and the\n * `data-density` attribute set by this script matches what\n * `ThemeProvider` promotes via its post-mount hydration effect).\n */\n defaultDensity?: \"compact\" | \"comfortable\" | \"spacious\";\n /**\n * localStorage namespace. Must match the `storageKey` passed to\n * `<ThemeProvider>`. Default `\"theo-ui:theme\"`. Pass `null` to disable\n * persistence reads (the script will always apply defaults).\n */\n storageKey?: string | null;\n}\n\n/**\n * Encode a value for safe embedding inside an inline `<script>` block.\n *\n * `JSON.stringify` does NOT escape `/` by default, so `\"</script>\"` survives\n * as the literal three-character sequence inside the resulting string. When\n * that string is then rendered inside `<script>...</script>`, the browser's\n * HTML tokenizer sees `</script>` and ends the script tag — regardless of\n * whether the JS parser would have kept it inside a string. Escaping `<` to\n * its Unicode escape `<` preserves JS semantics (the JS parser still\n * resolves the escape to `<`) while making the HTML tokenizer happy.\n *\n * Reference: OWASP \"JSON-in-script\" guidance; React's own server-renderer\n * applies the same escape for inline JSON.\n */\nfunction safe(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nfunction buildScript(\n defaultTheme: string,\n defaultMode: ThemeMode,\n defaultDensity: \"compact\" | \"comfortable\" | \"spacious\",\n storageKey: string | null,\n): string {\n const k = safe(storageKey);\n const t = safe(defaultTheme);\n const m = safe(defaultMode);\n const dn = safe(defaultDensity);\n return `(function(){try{var k=${k};var d=document.documentElement;var t=null;var m=null;var dn=null;if(k){t=localStorage.getItem(k+\":name\");m=localStorage.getItem(k+\":mode\");dn=localStorage.getItem(k+\":density\");}d.setAttribute(\"data-theme\",t||${t});d.setAttribute(\"data-mode\",m||${m});d.setAttribute(\"data-density\",dn||${dn});if((m||${m})===\"dark\"){d.classList.add(\"dark\");}}catch(e){}})();`;\n}\n\nfunction ThemeScript({\n defaultTheme = \"violet-forge\",\n defaultMode = \"dark\",\n defaultDensity = \"comfortable\",\n storageKey = \"theo-ui:theme\",\n}: ThemeScriptProps): JSX.Element {\n const code = buildScript(defaultTheme, defaultMode, defaultDensity, storageKey);\n // biome-ignore lint/security/noDangerouslySetInnerHtml: payload is JSON.stringify-encoded literals (no user input); intentional for SSR theme bootstrap before React hydrates\n return <script suppressHydrationWarning dangerouslySetInnerHTML={{ __html: code }} />;\n}\n\nexport { ThemeScript };\n","import * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Check, Moon, Palette, Sun } from \"lucide-react\";\nimport type { JSX } from \"react\";\nimport { cn } from \"../lib/cn.js\";\nimport { useTheme } from \"./theme-provider.js\";\n\ninterface ThemeSwitcherProps {\n className?: string;\n /** If true, renders mode toggle inline next to the theme menu. */\n showModeToggle?: boolean;\n}\n\n/**\n * ThemeSwitcher — drop-in theme + mode picker.\n *\n * Two affordances:\n * - Palette dropdown lists all registered themes with the active marked.\n * - Optional sun/moon button toggles light/dark.\n *\n * Stateless wrt itself — pulls state from `useTheme()`.\n */\nfunction ThemeSwitcher({ className, showModeToggle = true }: ThemeSwitcherProps): JSX.Element {\n const { theme, themes, setTheme, mode, toggleMode } = useTheme();\n\n return (\n <div className={cn(\"inline-flex items-center gap-1\", className)}>\n {/* LOW-006: announce theme + mode changes to assistive tech. The\n * Provider applies tokens via `data-theme`/`data-mode` (visual cue),\n * but screen-reader users get no feedback without this aria-live\n * region. Polite so it doesn't interrupt the user's flow. */}\n <span aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n Theme: {theme.label}, mode: {mode}\n </span>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label={`Theme: ${theme.label}`}\n className={cn(\n \"inline-flex h-9 items-center gap-2 rounded-lg border border-border/60 bg-card px-3\",\n \"font-medium font-sans text-body-sm text-foreground\",\n \"transition-colors 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 <Palette className=\"size-4 text-primary\" aria-hidden=\"true\" />\n <span>{theme.label}</span>\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={6}\n className={cn(\n \"z-50 min-w-[16rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md\",\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 )}\n >\n {themes.map((t) => (\n <DropdownMenu.Item\n key={t.name}\n onSelect={() => setTheme(t.name)}\n className={cn(\n \"flex cursor-pointer items-start justify-between gap-3 rounded-md px-2 py-2\",\n \"focus:bg-muted focus:outline-none data-[highlighted]:bg-muted\",\n )}\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"font-medium text-body-sm\">{t.label}</span>\n {t.description ? (\n <span className=\"text-body-sm text-muted-foreground\">{t.description}</span>\n ) : null}\n </span>\n {t.name === theme.name ? (\n <Check className=\"mt-1 size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n ) : null}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n\n {showModeToggle ? (\n <button\n type=\"button\"\n onClick={toggleMode}\n aria-label={`Switch to ${mode === \"light\" ? \"dark\" : \"light\"} mode`}\n className={cn(\n \"inline-flex size-9 items-center justify-center rounded-lg border border-border/60 bg-card\",\n \"text-foreground transition-colors 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 {mode === \"light\" ? <Moon className=\"size-4\" /> : <Sun className=\"size-4\" />}\n </button>\n ) : null}\n </div>\n );\n}\n\nexport { ThemeSwitcher };\n","import type { Theme } from \"./types.js\";\n\n/**\n * Violet Forge — the default Theo theme.\n *\n * Identity: Theo violet primary (#7C3AED), burnt sienna accent (#C96442),\n * Vercel-style neutral surfaces (pure white light / charcoal dark),\n * Geist Sans + Geist Mono throughout.\n *\n * Source of truth for `data-theme` overrides. Values mirror\n * src/styles/tokens.css for the default `:root`.\n */\nexport const violetForge: Theme = {\n name: \"violet-forge\",\n label: \"Violet Forge\",\n description: \"Theo default — violet primary, burnt sienna accent, Geist Sans + Geist Mono.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"0 0% 4%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"0 0% 4%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 4%\",\n primary: \"262 83% 58%\",\n \"primary-deep\": \"263 70% 42%\",\n \"primary-glow\": \"263 90% 76%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 96%\",\n \"secondary-foreground\": \"0 0% 4%\",\n accent: \"15 54% 53%\",\n \"accent-deep\": \"15 55% 40%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 96%\",\n \"muted-foreground\": \"0 0% 45%\",\n border: \"0 0% 91%\",\n input: \"0 0% 91%\",\n ring: \"262 83% 58%\",\n success: \"142 71% 36%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"33 92% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 72% 51%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"217 91% 60%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 4%\",\n foreground: \"0 0% 96%\",\n card: \"0 0% 7%\",\n \"card-foreground\": \"0 0% 96%\",\n popover: \"0 0% 9%\",\n \"popover-foreground\": \"0 0% 96%\",\n primary: \"262 83% 58%\",\n \"primary-deep\": \"263 70% 42%\",\n \"primary-glow\": \"263 90% 76%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 11%\",\n \"secondary-foreground\": \"0 0% 96%\",\n accent: \"15 54% 53%\",\n \"accent-deep\": \"15 55% 40%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 11%\",\n \"muted-foreground\": \"0 0% 60%\",\n border: \"0 0% 16%\",\n input: \"0 0% 11%\",\n ring: \"262 83% 58%\",\n success: \"152 79% 52%\",\n \"success-foreground\": \"0 0% 4%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"0 0% 4%\",\n destructive: \"350 100% 65%\",\n \"destructive-foreground\": \"0 0% 4%\",\n info: \"213 100% 70%\",\n \"info-foreground\": \"0 0% 4%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Classic Paper — light-primary with deep-navy dark mirror; Inter + JetBrains Mono.\n *\n * Identity: warm paper background, deep navy foreground, indigo primary\n * (closer to traditional dashboard SaaS), Inter throughout. Maximizes\n * legibility and familiarity — use when reading endurance > differentiation.\n *\n * Provides a full `dark` palette mirror so consumers toggling `.dark` still\n * get a coherent surface (it is not \"light-only\" by accident).\n */\nexport const classicPaper: Theme = {\n name: \"classic-paper\",\n label: \"Classic Paper\",\n description: \"Inter + paper background. Maximum legibility, conservative.\",\n fonts: {\n display: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap\",\n ],\n light: {\n background: \"36 30% 98%\",\n foreground: \"222 47% 11%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"222 47% 11%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"222 47% 11%\",\n primary: \"221 83% 53%\",\n \"primary-deep\": \"224 76% 38%\",\n \"primary-glow\": \"217 91% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"210 40% 96%\",\n \"secondary-foreground\": \"222 47% 11%\",\n accent: \"37 92% 40%\",\n \"accent-deep\": \"32 81% 30%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"210 40% 96%\",\n \"muted-foreground\": \"215 16% 47%\",\n border: \"214 32% 91%\",\n input: \"214 32% 91%\",\n ring: \"221 83% 53%\",\n success: \"142 71% 36%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"33 92% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 72% 51%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"217 91% 60%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n // Dark mirror — mainly the same hues with inverted lightness so the theme\n // still feels coherent if a consumer toggles `.dark`.\n dark: {\n background: \"222 47% 8%\",\n foreground: \"210 40% 98%\",\n card: \"222 47% 11%\",\n \"card-foreground\": \"210 40% 98%\",\n popover: \"222 47% 11%\",\n \"popover-foreground\": \"210 40% 98%\",\n primary: \"217 91% 60%\",\n \"primary-deep\": \"221 83% 45%\",\n \"primary-glow\": \"213 100% 80%\",\n \"primary-foreground\": \"222 47% 11%\",\n secondary: \"217 19% 18%\",\n \"secondary-foreground\": \"210 40% 98%\",\n accent: \"37 92% 60%\",\n \"accent-deep\": \"32 81% 45%\",\n \"accent-foreground\": \"222 47% 11%\",\n muted: \"217 19% 18%\",\n \"muted-foreground\": \"215 20% 65%\",\n border: \"217 19% 22%\",\n input: \"217 19% 18%\",\n ring: \"217 91% 60%\",\n success: \"152 79% 52%\",\n \"success-foreground\": \"222 47% 11%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"222 47% 11%\",\n destructive: \"350 100% 65%\",\n \"destructive-foreground\": \"222 47% 11%\",\n info: \"213 100% 70%\",\n \"info-foreground\": \"222 47% 11%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Aurora Terminal — dark-first, cyan-aurora primary, Geist Mono everywhere.\n *\n * Identity: deep oceanic background, cyan-aurora primary, aurora-pink accent.\n * Headers use Geist with heavier tracking; body uses Geist Mono for full\n * \"developer console\" feel. Suits CLI/devtools showcase.\n */\nexport const auroraTerminal: Theme = {\n name: \"aurora-terminal\",\n label: \"Aurora Terminal\",\n description: \"Dark sci-fi developer console — cyan-aurora + Geist Mono body.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"220 30% 96%\",\n foreground: \"222 47% 11%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"222 47% 11%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"222 47% 11%\",\n primary: \"178 78% 41%\",\n \"primary-deep\": \"180 100% 25%\",\n \"primary-glow\": \"180 89% 70%\",\n \"primary-foreground\": \"222 47% 11%\",\n secondary: \"210 40% 96%\",\n \"secondary-foreground\": \"222 47% 11%\",\n accent: \"340 82% 60%\",\n \"accent-deep\": \"340 80% 50%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"214 32% 91%\",\n \"muted-foreground\": \"215 16% 47%\",\n border: \"214 32% 91%\",\n input: \"214 32% 91%\",\n ring: \"178 78% 41%\",\n success: \"152 79% 42%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"33 92% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 72% 51%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"217 91% 60%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"224 36% 7%\",\n foreground: \"220 30% 96%\",\n card: \"224 35% 10%\",\n \"card-foreground\": \"220 30% 96%\",\n popover: \"224 35% 10%\",\n \"popover-foreground\": \"220 30% 96%\",\n primary: \"178 71% 60%\",\n \"primary-deep\": \"180 100% 35%\",\n \"primary-glow\": \"180 89% 80%\",\n \"primary-foreground\": \"224 36% 7%\",\n secondary: \"222 30% 14%\",\n \"secondary-foreground\": \"220 30% 96%\",\n accent: \"340 90% 65%\",\n \"accent-deep\": \"340 80% 50%\",\n \"accent-foreground\": \"224 36% 7%\",\n muted: \"222 30% 14%\",\n \"muted-foreground\": \"215 20% 65%\",\n border: \"222 28% 18%\",\n input: \"222 30% 14%\",\n ring: \"178 71% 60%\",\n success: \"152 79% 52%\",\n \"success-foreground\": \"224 36% 7%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"224 36% 7%\",\n destructive: \"350 100% 65%\",\n \"destructive-foreground\": \"224 36% 7%\",\n info: \"213 100% 70%\",\n \"info-foreground\": \"224 36% 7%\",\n },\n};\n","/**\n * `defineTheme(input)` — build a `Theme` from a partial override.\n *\n * Reduces the boilerplate of authoring a custom theme from 58 colour\n * keys (`light` × 29 + `dark` × 29) to \"just what you want to change\".\n * The merge always uses `violetForge` as the base — this is a pure,\n * deterministic helper that does not depend on whatever theme is active\n * at the call site.\n *\n * The `Theme` object it returns is drop-in compatible with\n * `<ThemeProvider themes={[...]}>` — same shape as `violetForge`,\n * `classicPaper`, and `auroraTerminal`.\n *\n * Honest caveat: if you override `light.primary` but NOT `dark.primary`,\n * the two modes will use different colours — your override in light,\n * Violet Forge's default in dark. That's intentional. Pass both sides\n * to keep them in sync.\n *\n * @example\n * import { defineTheme, hex } from \"@theokit/ui\";\n * export const corp = defineTheme({\n * name: \"corp\",\n * light: { primary: hex(\"#0EA5E9\") },\n * dark: { primary: hex(\"#38BDF8\") },\n * });\n *\n * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.1.\n */\nimport type { ColorScale, Theme, ThemeFonts } from \"./types.js\";\nimport { violetForge } from \"./violet-forge.js\";\n\nconst NAME_PATTERN = /^[a-z][a-z0-9-]*$/i;\n\nexport interface DefineThemeInput {\n /**\n * Stable id used in `data-theme=\"<name>\"` on the root element. Must\n * match `/^[a-z][a-z0-9-]*$/i` (CSS-identifier-safe). Required.\n */\n name: string;\n /**\n * Human-readable label for theme switchers. Defaults to the\n * capitalized version of `name` (e.g. \"corp\" → \"Corp\").\n */\n label?: string;\n /** Optional one-line description shown in switchers. */\n description?: string;\n /**\n * Override light-mode colours. Any key omitted is inherited from\n * `violetForge.light`. See `ColorScale` for the full list.\n */\n light?: Partial<ColorScale>;\n /**\n * Override dark-mode colours. Any key omitted is inherited from\n * `violetForge.dark`.\n */\n dark?: Partial<ColorScale>;\n /**\n * Override fonts (`display`, `body`, `mono`). Any key omitted is\n * inherited from `violetForge.fonts`.\n */\n fonts?: Partial<ThemeFonts>;\n /**\n * Replace the default remote font URLs. Pass an empty array to skip\n * font fetching entirely. Defaults to `violetForge.fontUrls` when\n * omitted (so consumers that don't care still get Geist preloaded).\n */\n fontUrls?: string[];\n}\n\nfunction defaultLabel(name: string): string {\n if (name.length === 0) return name;\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function defineTheme(input: DefineThemeInput): Theme {\n if (typeof input?.name !== \"string\" || input.name.length === 0) {\n throw new Error(\"defineTheme: `name` is required and cannot be empty.\");\n }\n if (!NAME_PATTERN.test(input.name)) {\n throw new Error(\n `defineTheme: invalid name \"${input.name}\". Must match /^[a-z][a-z0-9-]*$/i — letters, digits, and hyphens only, starting with a letter.`,\n );\n }\n\n const lightOverride = input.light ?? {};\n const darkOverride = input.dark ?? {};\n const fontsOverride = input.fonts ?? {};\n\n const theme: Theme = {\n name: input.name,\n label: input.label ?? defaultLabel(input.name),\n description: input.description,\n fonts: { ...violetForge.fonts, ...fontsOverride },\n light: { ...violetForge.light, ...lightOverride },\n dark: { ...violetForge.dark, ...darkOverride },\n fontUrls: input.fontUrls ?? violetForge.fontUrls,\n };\n\n return theme;\n}\n","/**\n * Color helpers that return values in the HSL string-tuple format the\n * `ColorScale` shape expects (e.g. `\"262 83% 58%\"`).\n *\n * Why this format: matches the shadcn / Violet Forge convention where\n * CSS variables hold the H S% L% components and consumers write\n * `hsl(var(--primary))` (allowing alpha overlays via\n * `hsl(var(--primary) / 0.5)`). Returning an object would force callers\n * to write `${theme.light.primary.h} ${theme.light.primary.s}% …` —\n * exactly the friction `hex()` is meant to remove.\n *\n * No external dependency: vanilla algorithm from CSS Color spec.\n * Alpha channels are intentionally discarded — `ColorScale` is opaque;\n * use `hsl(var(--primary) / 0.5)` in CSS for transparency.\n *\n * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.2.\n */\n\nfunction hexCharToNibble(ch: string): number {\n if (ch >= \"0\" && ch <= \"9\") return ch.charCodeAt(0) - 48;\n if (ch >= \"a\" && ch <= \"f\") return ch.charCodeAt(0) - 87;\n if (ch >= \"A\" && ch <= \"F\") return ch.charCodeAt(0) - 55;\n throw new Error(`hex(): invalid hex character \"${ch}\"`);\n}\n\nfunction parseHex(input: string): { r: number; g: number; b: number } {\n if (!input.startsWith(\"#\")) {\n throw new Error(`hex(): expected '#'-prefixed input, got \"${input}\"`);\n }\n const body = input.slice(1);\n let r: number;\n let g: number;\n let b: number;\n if (body.length === 3 || body.length === 4) {\n // Short form #rgb or #rgba — expand each nibble. charAt always returns\n // a string (empty for OOB), so hexCharToNibble throws on the empty\n // string the same way it does on any invalid char — no NonNull needed.\n const nr = hexCharToNibble(body.charAt(0));\n const ng = hexCharToNibble(body.charAt(1));\n const nb = hexCharToNibble(body.charAt(2));\n r = (nr << 4) | nr;\n g = (ng << 4) | ng;\n b = (nb << 4) | nb;\n // Alpha char (body[3]) is silently dropped per spec — ColorScale is opaque.\n } else if (body.length === 6 || body.length === 8) {\n r = (hexCharToNibble(body.charAt(0)) << 4) | hexCharToNibble(body.charAt(1));\n g = (hexCharToNibble(body.charAt(2)) << 4) | hexCharToNibble(body.charAt(3));\n b = (hexCharToNibble(body.charAt(4)) << 4) | hexCharToNibble(body.charAt(5));\n // Bytes 6-7 (alpha) silently dropped.\n } else {\n throw new Error(\n `hex(): invalid length ${body.length} for hex input \"${input}\" — expected 3, 4, 6, or 8 hex chars after the '#'.`,\n );\n }\n return { r, g, b };\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): string {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = (gn - bn) / d + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / d + 2;\n break;\n default:\n h = (rn - gn) / d + 4;\n break;\n }\n h *= 60;\n }\n const hh = Math.round(h);\n const ss = Math.round(s * 100);\n const ll = Math.round(l * 100);\n return `${hh} ${ss}% ${ll}%`;\n}\n\n/**\n * Convert a hex color string to the HSL string-tuple format used by\n * `ColorScale` (\"`H S% L%`\", e.g. `\"262 83% 58%\"`).\n *\n * Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`. Case-insensitive.\n * Alpha bytes are silently dropped — use `hsl(var(--primary) / 0.5)`\n * in CSS for transparency.\n *\n * @throws if the input is malformed.\n *\n * @example\n * hex(\"#7C3AED\") // \"262 83% 58%\"\n * hex(\"#7c3aed\") // \"262 83% 58%\" (same)\n * hex(\"#abc\") // expanded to \"#aabbcc\"\n */\nexport function hex(input: string): string {\n const { r, g, b } = parseHex(input);\n return rgbToHsl(r, g, b);\n}\n\n/**\n * Convert an RGB triplet (each in `[0, 255]`) to the HSL string-tuple\n * format used by `ColorScale`.\n *\n * @throws if any channel is out of `[0, 255]`.\n *\n * @example\n * rgb(124, 58, 237) // \"262 83% 58%\"\n */\nexport function rgb(r: number, g: number, b: number): string {\n for (const value of [r, g, b]) {\n if (!Number.isFinite(value) || value < 0 || value > 255) {\n throw new Error(\n `rgb(): channel out of range — expected 0..255, got ${value}. Did you mix percentage values?`,\n );\n }\n }\n return rgbToHsl(Math.round(r), Math.round(g), Math.round(b));\n}\n","import type { Theme } from \"./types.js\";\n\n/**\n * Vercel Mono — razor-sharp monochrome + signature blue.\n *\n * Inspired by, not affiliated with Vercel. Based on Geist Design tokens\n * (https://github.com/vercel/geist). Light = pure white + black ink + blue\n * accent (#0070F3); dark = near-black canvas + white text + same blue.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T2.1\n */\nexport const vercelMono: Theme = {\n name: \"vercel-mono\",\n label: \"Vercel Mono\",\n description: \"Inspired by, not affiliated with Vercel. Monochrome canvas + signature blue.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"0 0% 0%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"0 0% 0%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 0%\",\n primary: \"212 100% 47%\",\n \"primary-deep\": \"212 100% 36%\",\n \"primary-glow\": \"212 100% 72%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 96%\",\n \"secondary-foreground\": \"0 0% 0%\",\n accent: \"212 100% 47%\",\n \"accent-deep\": \"212 100% 36%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 96%\",\n \"muted-foreground\": \"0 0% 40%\",\n border: \"0 0% 92%\",\n input: \"0 0% 92%\",\n ring: \"212 100% 47%\",\n success: \"168 76% 40%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"34 92% 45%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 100% 40%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 47%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 4%\",\n foreground: \"0 0% 93%\",\n card: \"0 0% 7%\",\n \"card-foreground\": \"0 0% 93%\",\n popover: \"0 0% 7%\",\n \"popover-foreground\": \"0 0% 93%\",\n primary: \"212 100% 55%\",\n \"primary-deep\": \"212 100% 42%\",\n \"primary-glow\": \"212 100% 75%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 13%\",\n \"secondary-foreground\": \"0 0% 93%\",\n accent: \"212 100% 60%\",\n \"accent-deep\": \"212 100% 47%\",\n \"accent-foreground\": \"0 0% 0%\",\n muted: \"0 0% 13%\",\n \"muted-foreground\": \"0 0% 60%\",\n border: \"0 0% 20%\",\n input: \"0 0% 20%\",\n ring: \"212 100% 55%\",\n success: \"144 89% 50%\",\n \"success-foreground\": \"0 0% 0%\",\n warning: \"34 92% 65%\",\n \"warning-foreground\": \"0 0% 0%\",\n destructive: \"0 100% 55%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 55%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * GitHub Dark — GitHub's default dark theme.\n *\n * Based on the canonical Primer Primitives tokens\n * (https://github.com/primer/primitives, MIT). Light fallback uses GitHub's\n * \"light-default\" Primer scale.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T3.1\n */\nexport const githubDark: Theme = {\n name: \"github-dark\",\n label: \"GitHub Dark\",\n description: \"GitHub's default dark theme. Primer Primitives tokens.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"213 13% 16%\",\n card: \"210 29% 97%\",\n \"card-foreground\": \"213 13% 16%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"213 13% 16%\",\n primary: \"212 92% 44%\",\n \"primary-deep\": \"212 92% 36%\",\n \"primary-glow\": \"212 92% 58%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"210 29% 97%\",\n \"secondary-foreground\": \"213 13% 16%\",\n accent: \"213 84% 52%\",\n \"accent-deep\": \"213 84% 42%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"210 29% 97%\",\n \"muted-foreground\": \"213 8% 43%\",\n border: \"210 14% 84%\",\n input: \"210 14% 84%\",\n ring: \"212 92% 44%\",\n success: \"137 66% 30%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"41 100% 30%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"355 71% 47%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 92% 44%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"215 28% 7%\",\n foreground: \"210 67% 96%\",\n card: \"215 21% 11%\",\n \"card-foreground\": \"210 67% 96%\",\n popover: \"215 21% 11%\",\n \"popover-foreground\": \"210 67% 96%\",\n primary: \"212 92% 57%\",\n \"primary-deep\": \"212 92% 47%\",\n \"primary-glow\": \"213 92% 67%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"215 21% 14%\",\n \"secondary-foreground\": \"210 67% 96%\",\n accent: \"213 92% 61%\",\n \"accent-deep\": \"213 92% 50%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"215 21% 14%\",\n \"muted-foreground\": \"213 9% 59%\",\n border: \"213 13% 21%\",\n input: \"213 13% 21%\",\n ring: \"212 92% 57%\",\n success: \"135 53% 49%\",\n \"success-foreground\": \"0 0% 0%\",\n warning: \"41 73% 48%\",\n \"warning-foreground\": \"0 0% 0%\",\n destructive: \"1 90% 62%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 92% 57%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Dracula — the cult OSS dark theme (https://draculatheme.com, MIT).\n *\n * Dark mode = canonical Dracula spec (background #282A36, signature pink\n * #FF79C6, purple #BD93F9, etc.).\n *\n * Note: \"light\" mode is a Theo-original adaptation — Dracula upstream\n * spec is dark-only. We darken the signature pink/purple to pass WCAG AA\n * against light backgrounds, sacrificing palette purity for accessibility.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T4.1\n */\nexport const dracula: Theme = {\n name: \"dracula\",\n label: \"Dracula\",\n description: \"Cult OSS theme (draculatheme.com, MIT). Light mode is Theo-adapted for WCAG AA.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"60 30% 96%\",\n foreground: \"231 15% 18%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"231 15% 18%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"231 15% 18%\",\n primary: \"275 70% 45%\",\n \"primary-deep\": \"271 63% 35%\",\n \"primary-glow\": \"265 89% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"60 20% 92%\",\n \"secondary-foreground\": \"231 15% 18%\",\n accent: \"271 63% 40%\",\n \"accent-deep\": \"271 63% 30%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"60 20% 92%\",\n \"muted-foreground\": \"225 20% 40%\",\n border: \"60 15% 88%\",\n input: \"60 15% 88%\",\n ring: \"275 70% 45%\",\n success: \"129 33% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"43 89% 30%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 71% 42%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"190 88% 30%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"231 15% 18%\",\n foreground: \"60 30% 96%\",\n card: \"232 14% 22%\",\n \"card-foreground\": \"60 30% 96%\",\n popover: \"232 14% 22%\",\n \"popover-foreground\": \"60 30% 96%\",\n primary: \"326 100% 74%\",\n \"primary-deep\": \"326 100% 60%\",\n \"primary-glow\": \"326 100% 85%\",\n \"primary-foreground\": \"231 15% 18%\",\n secondary: \"232 14% 28%\",\n \"secondary-foreground\": \"60 30% 96%\",\n accent: \"265 89% 78%\",\n \"accent-deep\": \"265 89% 65%\",\n \"accent-foreground\": \"231 15% 18%\",\n muted: \"232 14% 28%\",\n \"muted-foreground\": \"225 27% 65%\",\n border: \"232 14% 31%\",\n input: \"232 14% 31%\",\n ring: \"326 100% 74%\",\n success: \"135 94% 65%\",\n \"success-foreground\": \"231 15% 18%\",\n warning: \"65 92% 76%\",\n \"warning-foreground\": \"231 15% 18%\",\n destructive: \"0 100% 67%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"191 97% 77%\",\n \"info-foreground\": \"231 15% 18%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * One Dark / One Light — Atom's iconic syntax theme.\n *\n * Sources:\n * - atom/one-dark-syntax (MIT) — dark mode canonical\n * - atom/one-light-syntax (MIT) — light mode canonical\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T5.1\n */\nexport const oneDark: Theme = {\n name: \"one-dark\",\n label: \"One Dark\",\n description: \"Atom's One Dark + One Light syntax theme (MIT). Iconic IDE look.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 98%\",\n foreground: \"230 8% 24%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"230 8% 24%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"230 8% 24%\",\n primary: \"220 88% 50%\",\n \"primary-deep\": \"220 88% 40%\",\n \"primary-glow\": \"220 88% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 95%\",\n \"secondary-foreground\": \"230 8% 24%\",\n accent: \"301 62% 40%\",\n \"accent-deep\": \"301 62% 30%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 95%\",\n \"muted-foreground\": \"230 4% 50%\",\n border: \"0 0% 90%\",\n input: \"0 0% 90%\",\n ring: \"220 88% 50%\",\n success: \"119 34% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"41 99% 30%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"5 74% 45%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"198 99% 30%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"220 13% 18%\",\n foreground: \"220 14% 71%\",\n card: \"220 13% 15%\",\n \"card-foreground\": \"220 14% 71%\",\n popover: \"220 13% 15%\",\n \"popover-foreground\": \"220 14% 71%\",\n primary: \"207 82% 66%\",\n \"primary-deep\": \"207 82% 52%\",\n \"primary-glow\": \"207 82% 78%\",\n \"primary-foreground\": \"220 13% 18%\",\n secondary: \"220 13% 23%\",\n \"secondary-foreground\": \"220 14% 71%\",\n accent: \"286 60% 67%\",\n \"accent-deep\": \"286 60% 52%\",\n \"accent-foreground\": \"220 13% 18%\",\n muted: \"220 13% 23%\",\n \"muted-foreground\": \"220 8% 55%\",\n border: \"220 13% 28%\",\n input: \"220 13% 28%\",\n ring: \"207 82% 66%\",\n success: \"95 38% 62%\",\n \"success-foreground\": \"220 13% 18%\",\n warning: \"29 54% 61%\",\n \"warning-foreground\": \"220 13% 18%\",\n destructive: \"355 65% 65%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"187 47% 55%\",\n \"info-foreground\": \"220 13% 18%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Anthropic-style — claude.ai-inspired editorial calm.\n *\n * Inspired by, not affiliated with Anthropic. Visually informed by claude.ai's\n * warm cream canvas + burnt sienna primary + ink-on-paper feel. No proprietary\n * assets reproduced (font is Geist, colors are independent measurements).\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T6.1\n */\nexport const anthropicStyle: Theme = {\n name: \"anthropic-style\",\n label: \"Anthropic-style\",\n description:\n \"Inspired by, not affiliated with Anthropic. Warm cream + burnt sienna editorial feel.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"60 27% 97%\",\n foreground: \"0 0% 10%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"0 0% 10%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 10%\",\n primary: \"15 54% 45%\",\n \"primary-deep\": \"15 54% 35%\",\n \"primary-glow\": \"15 54% 65%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"45 22% 92%\",\n \"secondary-foreground\": \"0 0% 10%\",\n accent: \"26 39% 39%\",\n \"accent-deep\": \"26 39% 29%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"45 22% 92%\",\n \"muted-foreground\": \"0 0% 39%\",\n border: \"45 22% 87%\",\n input: \"45 22% 87%\",\n ring: \"15 54% 45%\",\n success: \"127 35% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"35 65% 35%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"5 60% 40%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"200 50% 35%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 10%\",\n foreground: \"36 28% 93%\",\n card: \"0 0% 15%\",\n \"card-foreground\": \"36 28% 93%\",\n popover: \"0 0% 15%\",\n \"popover-foreground\": \"36 28% 93%\",\n primary: \"16 62% 60%\",\n \"primary-deep\": \"16 62% 48%\",\n \"primary-glow\": \"16 62% 72%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 18%\",\n \"secondary-foreground\": \"36 28% 93%\",\n accent: \"21 33% 55%\",\n \"accent-deep\": \"21 33% 42%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 18%\",\n \"muted-foreground\": \"30 6% 64%\",\n border: \"0 0% 25%\",\n input: \"0 0% 25%\",\n ring: \"16 62% 60%\",\n success: \"142 71% 58%\",\n \"success-foreground\": \"0 0% 10%\",\n warning: \"45 96% 65%\",\n \"warning-foreground\": \"0 0% 10%\",\n destructive: \"0 84% 60%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"200 70% 60%\",\n \"info-foreground\": \"0 0% 10%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * OpenAI-style — chatgpt.com-inspired minimal tech-utility.\n *\n * Inspired by, not affiliated with OpenAI. Pure white / charcoal canvas +\n * signature ChatGPT green (#10A37F). Minimal saturation, high contrast.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T7.1\n */\nexport const openaiStyle: Theme = {\n name: \"openai-style\",\n label: \"OpenAI-style\",\n description: \"Inspired by, not affiliated with OpenAI. Minimal canvas + ChatGPT green.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"0 0% 13%\",\n card: \"240 5% 97%\",\n \"card-foreground\": \"0 0% 13%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 13%\",\n primary: \"165 82% 35%\",\n \"primary-deep\": \"165 82% 28%\",\n \"primary-glow\": \"165 82% 50%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"240 5% 96%\",\n \"secondary-foreground\": \"0 0% 13%\",\n accent: \"165 82% 35%\",\n \"accent-deep\": \"165 82% 28%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"240 5% 96%\",\n \"muted-foreground\": \"240 7% 47%\",\n border: \"0 0% 90%\",\n input: \"0 0% 90%\",\n ring: \"165 82% 35%\",\n success: \"165 82% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"30 91% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 73% 50%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 47%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 13%\",\n foreground: \"0 0% 93%\",\n card: \"0 0% 18%\",\n \"card-foreground\": \"0 0% 93%\",\n popover: \"0 0% 18%\",\n \"popover-foreground\": \"0 0% 93%\",\n primary: \"155 78% 30%\",\n \"primary-deep\": \"155 78% 22%\",\n \"primary-glow\": \"155 78% 50%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 20%\",\n \"secondary-foreground\": \"0 0% 93%\",\n accent: \"155 78% 50%\",\n \"accent-deep\": \"155 78% 40%\",\n \"accent-foreground\": \"0 0% 13%\",\n muted: \"0 0% 20%\",\n \"muted-foreground\": \"0 0% 61%\",\n border: \"0 0% 26%\",\n input: \"0 0% 26%\",\n ring: \"155 78% 43%\",\n success: \"155 78% 43%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"0 0% 13%\",\n destructive: \"0 84% 60%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 55%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Linear Glass — linear.app-inspired glassy indigo.\n *\n * Inspired by, not affiliated with Linear. Refined indigo-violet primary\n * (#5E6AD2) on near-black canvas in dark, pure white in light. Subtle\n * glassmorphic surface temperature.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T8.1\n */\nexport const linearGlass: Theme = {\n name: \"linear-glass\",\n label: \"Linear Glass\",\n description: \"Inspired by, not affiliated with Linear. Refined indigo on glassy surfaces.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"240 5% 12%\",\n card: \"220 25% 98%\",\n \"card-foreground\": \"240 5% 12%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"240 5% 12%\",\n primary: \"233 56% 55%\",\n \"primary-deep\": \"233 56% 45%\",\n \"primary-glow\": \"233 56% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"240 9% 96%\",\n \"secondary-foreground\": \"240 5% 12%\",\n accent: \"245 60% 60%\",\n \"accent-deep\": \"245 60% 50%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"240 9% 96%\",\n \"muted-foreground\": \"240 4% 44%\",\n border: \"240 9% 93%\",\n input: \"240 9% 93%\",\n ring: \"233 56% 55%\",\n success: \"155 62% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"35 76% 45%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"358 75% 50%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"233 56% 55%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"240 9% 6%\",\n foreground: \"0 0% 90%\",\n card: \"240 8% 11%\",\n \"card-foreground\": \"0 0% 90%\",\n popover: \"240 8% 11%\",\n \"popover-foreground\": \"0 0% 90%\",\n primary: \"245 60% 67%\",\n \"primary-deep\": \"245 60% 55%\",\n \"primary-glow\": \"245 60% 78%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"240 8% 14%\",\n \"secondary-foreground\": \"0 0% 90%\",\n accent: \"253 100% 78%\",\n \"accent-deep\": \"253 100% 65%\",\n \"accent-foreground\": \"240 9% 6%\",\n muted: \"240 8% 14%\",\n \"muted-foreground\": \"240 5% 67%\",\n border: \"240 6% 17%\",\n input: \"240 6% 17%\",\n ring: \"245 60% 67%\",\n success: \"147 49% 53%\",\n \"success-foreground\": \"240 9% 6%\",\n warning: \"32 100% 66%\",\n \"warning-foreground\": \"240 9% 6%\",\n destructive: \"357 100% 70%\",\n \"destructive-foreground\": \"240 9% 6%\",\n info: \"245 60% 67%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","export type { ColorScale, Theme, ThemeFonts, ThemeMode } from \"./types.js\";\nexport { ThemeProvider, useTheme } from \"./theme-provider.js\";\nexport { ThemeScript } from \"./theme-script.js\";\nexport { ThemeSwitcher } from \"./theme-switcher.js\";\nexport { violetForge } from \"./violet-forge.js\";\nexport { classicPaper } from \"./classic-paper.js\";\nexport { auroraTerminal } from \"./aurora-terminal.js\";\nexport { defineTheme, type DefineThemeInput } from \"./define.js\";\nexport { hex, rgb } from \"./color.js\";\nexport { useDensity, type Density, type DensityContextValue } from \"./density.js\";\n// Seven new themes — RFC 0007, plan: seven-themes (2026-05-22).\n// Trademark-safe slugs (D1.1) — `*-style` / `*-mono` / `*-glass` suffixes,\n// description includes \"Inspired by, not affiliated with [X]\".\nexport { vercelMono } from \"./vercel-mono.js\";\nexport { githubDark } from \"./github-dark.js\";\nexport { dracula } from \"./dracula.js\";\nexport { oneDark } from \"./one-dark.js\";\nexport { anthropicStyle } from \"./anthropic-style.js\";\nexport { openaiStyle } from \"./openai-style.js\";\nexport { linearGlass } from \"./linear-glass.js\";\n\nimport { anthropicStyle } from \"./anthropic-style.js\";\nimport { auroraTerminal } from \"./aurora-terminal.js\";\nimport { classicPaper } from \"./classic-paper.js\";\nimport { dracula } from \"./dracula.js\";\nimport { githubDark } from \"./github-dark.js\";\nimport { linearGlass } from \"./linear-glass.js\";\nimport { oneDark } from \"./one-dark.js\";\nimport { openaiStyle } from \"./openai-style.js\";\nimport { vercelMono } from \"./vercel-mono.js\";\nimport { violetForge } from \"./violet-forge.js\";\n\n/**\n * All themes bundled with Theo UI. Pass to `<ThemeProvider themes={builtinThemes}>`\n * if you want all 10 available out of the box.\n *\n * EC-4 note: passing the full 10-entry list triggers ~60 KB CSS injection in\n * `<style id=\"theo-ui-theme-vars\">`. For apps focused on 1-2 themes, prefer\n * `themes={[violetForge, dracula]}` to keep the payload at ~12 KB.\n */\nexport const builtinThemes = [\n violetForge,\n classicPaper,\n auroraTerminal,\n vercelMono,\n githubDark,\n dracula,\n oneDark,\n anthropicStyle,\n openaiStyle,\n linearGlass,\n];\n","\"use client\";\n\nimport type { ComponentProps, JSX, ReactNode } from \"react\";\nimport { Toaster } from \"./components/primitives/toast/toaster.js\";\nimport { builtinThemes } from \"./themes/index.js\";\nimport { ThemeProvider } from \"./themes/theme-provider.js\";\n\n/**\n * TheoUIProvider — primary entry point composing `<ThemeProvider>` and\n * `<Toaster>` in the correct order with sensible defaults.\n *\n * Recommended for consumer apps to avoid hand-wiring the provider stack.\n * Equivalent to:\n *\n * <ThemeProvider themes={builtinThemes} {...theme}>\n * <Toaster {...toaster}>{children}</Toaster>\n * </ThemeProvider>\n *\n * Notes:\n * - Since v0.1.0-next.0, `<ThemeProvider>` requires the `themes` prop\n * (T2.5 decoupling). `<TheoUIProvider>` defaults it to `builtinThemes`\n * to preserve \"works out of the box\" DX. Pass `theme.themes` to override.\n * - The `\"use client\"` directive is required for Next.js App Router (RSC)\n * because `<ThemeProvider>` uses React state and effects internally.\n * - `<Tooltip>` provider stays per-instance (Radix recommendation) — this\n * wrapper does NOT introduce a global tooltip context.\n * - `<ThemeProvider>` and `<Toaster>` remain independently exported for\n * consumers who want bespoke control.\n *\n * SSR:\n * - Place `<ThemeScript>` in `<head>` to avoid FOUC + hydration mismatch.\n * - Wrap `<html lang=\"en\" suppressHydrationWarning>`.\n *\n * @example\n * import { TheoUIProvider } from \"@theokit/ui\";\n *\n * export default function App({ children }) {\n * return <TheoUIProvider>{children}</TheoUIProvider>;\n * }\n */\nexport interface TheoUIProviderProps {\n children: ReactNode;\n /** Pass-through props for the inner `<ThemeProvider>`. Optional. */\n theme?: Omit<ComponentProps<typeof ThemeProvider>, \"children\" | \"themes\"> & {\n /** Override the default theme set (defaults to `builtinThemes`). */\n themes?: ComponentProps<typeof ThemeProvider>[\"themes\"];\n };\n /** Pass-through props for the inner `<Toaster>`. */\n toaster?: Omit<ComponentProps<typeof Toaster>, \"children\">;\n}\n\nexport function TheoUIProvider({ children, theme, toaster }: TheoUIProviderProps): JSX.Element {\n const { themes, ...restTheme } = theme ?? {};\n return (\n <ThemeProvider themes={themes ?? builtinThemes} {...restTheme}>\n <Toaster {...toaster}>{children}</Toaster>\n </ThemeProvider>\n );\n}\n\nTheoUIProvider.displayName = \"TheoUIProvider\";\n"]}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Root as Root$1 } from 'hast';
|
|
2
|
+
import { Root } from 'mdast';
|
|
3
|
+
import { FC } from 'react';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Zod schema for the Slide YAML frontmatter (`SlideFrontmatter`) and the
|
|
8
|
+
* composed `SlideInput` (frontmatter + body).
|
|
9
|
+
*
|
|
10
|
+
* Design (see RFC 0002 and the plan in
|
|
11
|
+
* `.claude/knowledge-base/plans/slide-view-primitive-plan.md` §16.3 and ADRs D4 / D14):
|
|
12
|
+
*
|
|
13
|
+
* - **`.strict()`** on frontmatter — unknown keys produce `INVALID_FRONTMATTER`
|
|
14
|
+
* with a precise path, so an LLM can self-correct.
|
|
15
|
+
* - Numeric values are `.finite()` to reject `NaN` / `Infinity`. (Currently no
|
|
16
|
+
* numeric directives ship; keep the helper for future fields.)
|
|
17
|
+
* - String values capped to defensible sizes to reject DoS-shaped inputs.
|
|
18
|
+
* - `body` capped to 50 KB (≈30 slides' worth of text) per the sanity rule.
|
|
19
|
+
* - `theme` is the canonical enum of built-in themes. Custom themes are not
|
|
20
|
+
* registered via frontmatter in v0.1 — caller wraps `<Slide>` with their
|
|
21
|
+
* own CSS overrides.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** Built-in slide themes. Adding a theme means landing a CSS file in `themes/`. */
|
|
25
|
+
declare const slideTheme: z.ZodEnum<{
|
|
26
|
+
default: "default";
|
|
27
|
+
"violet-forge": "violet-forge";
|
|
28
|
+
}>;
|
|
29
|
+
/** YAML frontmatter accepted by `<Slide>`. */
|
|
30
|
+
declare const slideFrontmatter: z.ZodObject<{
|
|
31
|
+
theme: z.ZodOptional<z.ZodEnum<{
|
|
32
|
+
default: "default";
|
|
33
|
+
"violet-forge": "violet-forge";
|
|
34
|
+
}>>;
|
|
35
|
+
layout: z.ZodOptional<z.ZodEnum<{
|
|
36
|
+
default: "default";
|
|
37
|
+
title: "title";
|
|
38
|
+
"two-column": "two-column";
|
|
39
|
+
"image-right": "image-right";
|
|
40
|
+
"image-left": "image-left";
|
|
41
|
+
"code-output": "code-output";
|
|
42
|
+
section: "section";
|
|
43
|
+
}>>;
|
|
44
|
+
backgroundImage: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string | undefined, string>>>;
|
|
45
|
+
backgroundGradient: z.ZodOptional<z.ZodString>;
|
|
46
|
+
header: z.ZodOptional<z.ZodString>;
|
|
47
|
+
footer: z.ZodOptional<z.ZodString>;
|
|
48
|
+
paginate: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"skip">, z.ZodLiteral<"hold">]>>;
|
|
49
|
+
lang: z.ZodOptional<z.ZodString>;
|
|
50
|
+
color: z.ZodOptional<z.ZodString>;
|
|
51
|
+
backgroundColor: z.ZodOptional<z.ZodString>;
|
|
52
|
+
}, z.core.$strict>;
|
|
53
|
+
type SlideFrontmatter = z.infer<typeof slideFrontmatter>;
|
|
54
|
+
/** Composed input: validated frontmatter object + raw markdown body string. */
|
|
55
|
+
declare const slideInput: z.ZodObject<{
|
|
56
|
+
frontmatter: z.ZodObject<{
|
|
57
|
+
theme: z.ZodOptional<z.ZodEnum<{
|
|
58
|
+
default: "default";
|
|
59
|
+
"violet-forge": "violet-forge";
|
|
60
|
+
}>>;
|
|
61
|
+
layout: z.ZodOptional<z.ZodEnum<{
|
|
62
|
+
default: "default";
|
|
63
|
+
title: "title";
|
|
64
|
+
"two-column": "two-column";
|
|
65
|
+
"image-right": "image-right";
|
|
66
|
+
"image-left": "image-left";
|
|
67
|
+
"code-output": "code-output";
|
|
68
|
+
section: "section";
|
|
69
|
+
}>>;
|
|
70
|
+
backgroundImage: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string | undefined, string>>>;
|
|
71
|
+
backgroundGradient: z.ZodOptional<z.ZodString>;
|
|
72
|
+
header: z.ZodOptional<z.ZodString>;
|
|
73
|
+
footer: z.ZodOptional<z.ZodString>;
|
|
74
|
+
paginate: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"skip">, z.ZodLiteral<"hold">]>>;
|
|
75
|
+
lang: z.ZodOptional<z.ZodString>;
|
|
76
|
+
color: z.ZodOptional<z.ZodString>;
|
|
77
|
+
backgroundColor: z.ZodOptional<z.ZodString>;
|
|
78
|
+
}, z.core.$strict>;
|
|
79
|
+
body: z.ZodString;
|
|
80
|
+
}, z.core.$strip>;
|
|
81
|
+
type SlideInput = z.infer<typeof slideInput>;
|
|
82
|
+
/** Discrete validation-error codes — kept centralized so consumers can pattern-match safely. */
|
|
83
|
+
type SlideValidationErrorCode = "INVALID_FRONTMATTER" | "FRONTMATTER_TOO_LARGE" | "MULTIPLE_SLIDES" | "CONTENT_TOO_LARGE" | "BANNED_TAG" | "BANNED_ATTRIBUTE" | "INVALID_ASPECT_RATIO" | "PLUGIN_ERROR" | "PLUGIN_PEER_DEP_MISSING" | "MARPIT_BG_UNSAFE_URL";
|
|
84
|
+
interface SlideValidationError {
|
|
85
|
+
/** Path inside the input (frontmatter key, ['body'], or []). */
|
|
86
|
+
path: (string | number)[];
|
|
87
|
+
/** Human-readable explanation. */
|
|
88
|
+
message: string;
|
|
89
|
+
/** Discriminator for consumers. */
|
|
90
|
+
code: SlideValidationErrorCode;
|
|
91
|
+
/** Offending value when extractable from Zod's `received` or by walking the input. */
|
|
92
|
+
got?: unknown;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Slide plugin contract — extension points for rich-content engines.
|
|
97
|
+
*
|
|
98
|
+
* Plugins are composable transformers applied during `parseSlide`. Each plugin
|
|
99
|
+
* may inspect/mutate the mdast tree (before HTML conversion), the hast tree
|
|
100
|
+
* (after HTML conversion, before sanitize), and override React component
|
|
101
|
+
* renderers (after sanitize). They may also declare sanitize-schema extensions
|
|
102
|
+
* so custom tags (e.g. Shiki spans, KaTeX MathML, Mermaid SVG) survive the
|
|
103
|
+
* security barrier.
|
|
104
|
+
*
|
|
105
|
+
* Design rules (ADRs in `.claude/knowledge-base/plans/slide-rich-content-plan.md`):
|
|
106
|
+
* D1 — explicit `plugins` prop (no auto-detect).
|
|
107
|
+
* D2 — plugin shape: { name, mdastTransform?, hastTransform?, components? }.
|
|
108
|
+
* D13 — execution order: mdast → hast → sanitize (with merged extensions) → components.
|
|
109
|
+
* D16 — plugin error isolation: each plugin call is try/catch wrapped; errors
|
|
110
|
+
* are collected, not thrown.
|
|
111
|
+
* D17 — sanitize-schema merge is OBLIGATORY for plugins emitting non-default
|
|
112
|
+
* tags; without it, the sanitize step silently strips the content.
|
|
113
|
+
*
|
|
114
|
+
* Sanitize is the security barrier. Plugins NEVER bypass `hast-util-sanitize`.
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
/** Sanitize schema extension declared by a plugin. Merged with `defaultSchema` in `parseSlide`. */
|
|
118
|
+
interface SlideSanitizeExtension {
|
|
119
|
+
/** Additional element tag names allowed past the sanitizer. */
|
|
120
|
+
tagNames?: string[];
|
|
121
|
+
/** Additional attribute allow-list keyed by tag name (or `"*"` for all tags). */
|
|
122
|
+
attributes?: Record<string, string[]>;
|
|
123
|
+
}
|
|
124
|
+
/** A composable transformer + component-override unit. */
|
|
125
|
+
interface SlidePlugin {
|
|
126
|
+
/** Stable identifier used in PLUGIN_ERROR messages and dev logs. */
|
|
127
|
+
name: string;
|
|
128
|
+
/** Mutate the mdast tree before HTML conversion. Return value is forwarded. */
|
|
129
|
+
mdastTransform?: (tree: Root) => Promise<Root> | Root;
|
|
130
|
+
/** Mutate the hast tree after HTML conversion, before sanitize. */
|
|
131
|
+
hastTransform?: (tree: Root$1) => Promise<Root$1> | Root$1;
|
|
132
|
+
/** React component overrides merged into the consumer's `components` map. */
|
|
133
|
+
components?: Record<string, FC<any>>;
|
|
134
|
+
/** Sanitize-schema extension. Required for plugins emitting non-default tags. */
|
|
135
|
+
sanitizeSchemaExtension?: SlideSanitizeExtension;
|
|
136
|
+
}
|
|
137
|
+
/** Merged sanitize-schema extensions from all plugins. */
|
|
138
|
+
interface MergedSanitizeExtensions {
|
|
139
|
+
tagNames: string[];
|
|
140
|
+
attributes: Record<string, string[]>;
|
|
141
|
+
}
|
|
142
|
+
/** Composer over a plugin array. Hooks orchestrate transformation + error isolation. */
|
|
143
|
+
interface PluginComposer {
|
|
144
|
+
/** Run all `mdastTransform` hooks in array order. Collects errors. */
|
|
145
|
+
runMdast(tree: Root, errors: SlideValidationError[]): Promise<Root>;
|
|
146
|
+
/** Run all `hastTransform` hooks in array order. Collects errors. */
|
|
147
|
+
runHast(tree: Root$1, errors: SlideValidationError[]): Promise<Root$1>;
|
|
148
|
+
/** Merge all plugin component overrides; later-plugin-wins on conflict. */
|
|
149
|
+
mergedComponents(): Record<string, FC<any>>;
|
|
150
|
+
/** Merge sanitize-schema extensions across all plugins (dedupes tag names). */
|
|
151
|
+
mergedSanitizeExtensions(): MergedSanitizeExtensions;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Build a composer over an array of plugins.
|
|
155
|
+
*
|
|
156
|
+
* Order semantics:
|
|
157
|
+
* - mdast transforms run sequentially in array order.
|
|
158
|
+
* - hast transforms run sequentially in array order.
|
|
159
|
+
* - components merge: later plugin wins on conflict (Object.assign semantics).
|
|
160
|
+
* - sanitize-schema extensions: union of tag names; union of attributes by tag.
|
|
161
|
+
*
|
|
162
|
+
* Error semantics (D16):
|
|
163
|
+
* - Each plugin call is wrapped in try/catch.
|
|
164
|
+
* - On throw, an error of code `PLUGIN_ERROR` is pushed to `errors[]` and the
|
|
165
|
+
* pipeline continues with the **non-transformed** input from that plugin
|
|
166
|
+
* (i.e. subsequent plugins see the tree that failed plugin received).
|
|
167
|
+
* - The composer NEVER throws; `parseSlide` keeps its "never throws on input"
|
|
168
|
+
* contract (RFC 0002 D9).
|
|
169
|
+
*/
|
|
170
|
+
declare function composePlugins(plugins: SlidePlugin[]): PluginComposer;
|
|
171
|
+
|
|
172
|
+
export { type MergedSanitizeExtensions as M, type PluginComposer as P, type SlideFrontmatter as S, type SlideInput as a, type SlidePlugin as b, type SlideSanitizeExtension as c, type SlideValidationError as d, type SlideValidationErrorCode as e, composePlugins as f, slideInput as g, slideTheme as h, slideFrontmatter as s };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Config } from 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `@theokit/ui/preset-v3-legacy` — Tailwind v3 JS preset (legacy path).
|
|
5
|
+
*
|
|
6
|
+
* Default-export a `Partial<Config>` mirroring the design tokens shipped
|
|
7
|
+
* in `@theokit/ui/tokens.css`. Adds a `content` field covering the
|
|
8
|
+
* library's published artifact tree so v3-based Tailwind builds emit
|
|
9
|
+
* the utilities used by `@theokit/ui` components.
|
|
10
|
+
*
|
|
11
|
+
* **Tailwind v4 consumers MUST use `@theokit/ui/preset.css`**, not this
|
|
12
|
+
* file — Tailwind v4 dropped the JS preset format entirely. This file
|
|
13
|
+
* exists for any remaining `tailwindcss@^3` consumer (notably the
|
|
14
|
+
* shadcn-style copy-paste registry path); new code should not import
|
|
15
|
+
* from this subpath.
|
|
16
|
+
*
|
|
17
|
+
* The token surface is delegated to `./styles/tailwind-preset.ts` (the
|
|
18
|
+
* existing source of truth used by the local Ladle dev surface and the
|
|
19
|
+
* shadcn registry).
|
|
20
|
+
*
|
|
21
|
+
* v3 consumer usage:
|
|
22
|
+
*
|
|
23
|
+
* // tailwind.config.ts (Tailwind v3 only)
|
|
24
|
+
* import preset from "@theokit/ui/preset-v3-legacy";
|
|
25
|
+
* export default {
|
|
26
|
+
* presets: [preset],
|
|
27
|
+
* content: ["./app/**\/*.{ts,tsx}"],
|
|
28
|
+
* };
|
|
29
|
+
*
|
|
30
|
+
* See RFC 0008 follow-up.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
declare const preset: Partial<Config>;
|
|
34
|
+
|
|
35
|
+
export { preset as default };
|