semajsx 0.6.0 → 0.7.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/dist/{client-CButR91p.mjs → client-BrupjhG0.mjs} +4 -4
- package/dist/{client-CButR91p.mjs.map → client-BrupjhG0.mjs.map} +1 -1
- package/dist/{computed-BidG06Lt.mjs → computed-BpjqvQu1.mjs} +2 -2
- package/dist/{computed-BidG06Lt.mjs.map → computed-BpjqvQu1.mjs.map} +1 -1
- package/dist/document-DsiJO2jG.mjs +5 -0
- package/dist/{document-BOJDaiBc.mjs → document-XKyAs62C.mjs} +2 -2
- package/dist/{document-BOJDaiBc.mjs.map → document-XKyAs62C.mjs.map} +1 -1
- package/dist/dom/index.mjs +3 -3
- package/dist/dom/jsx-dev-runtime.d.mts +1 -1
- package/dist/dom/jsx-dev-runtime.mjs +2 -2
- package/dist/dom/jsx-runtime.d.mts +1 -1
- package/dist/dom/jsx-runtime.mjs +2 -2
- package/dist/{index-D_FIlSk3.d.mts → index-CmxkYOtR.d.mts} +2 -2
- package/dist/{index-D_FIlSk3.d.mts.map → index-CmxkYOtR.d.mts.map} +1 -1
- package/dist/index.mjs +4 -4
- package/dist/{jsx-runtime-D9ZNjMJ2.mjs → jsx-runtime-BFs1c0xz.mjs} +1 -1
- package/dist/jsx-runtime-BFs1c0xz.mjs.map +1 -0
- package/dist/{jsx-runtime-tIuFmhTh.d.mts → jsx-runtime-C-TtSL51.d.mts} +9 -4
- package/dist/jsx-runtime-C-TtSL51.d.mts.map +1 -0
- package/dist/{jsx-runtime-BjCGsceN.mjs → jsx-runtime-kv_6vBiR.mjs} +1 -1
- package/dist/{jsx-runtime-BjCGsceN.mjs.map → jsx-runtime-kv_6vBiR.mjs.map} +1 -1
- package/dist/{lucide-C5BghhSl.mjs → lucide-Ddt_N9dJ.mjs} +3 -3
- package/dist/{lucide-C5BghhSl.mjs.map → lucide-Ddt_N9dJ.mjs.map} +1 -1
- package/dist/{resource-CNwiNxJX.d.mts → resource-CX-sVeS_.d.mts} +5 -2
- package/dist/resource-CX-sVeS_.d.mts.map +1 -0
- package/dist/{resource-DSlXDZZi.mjs → resource-pm7qP-jV.mjs} +2 -2
- package/dist/{resource-DSlXDZZi.mjs.map → resource-pm7qP-jV.mjs.map} +1 -1
- package/dist/signal/index.mjs +3 -3
- package/dist/{signal-BN8vHXDb.mjs → signal-4PgGfydw.mjs} +1 -1
- package/dist/{signal-BN8vHXDb.mjs.map → signal-4PgGfydw.mjs.map} +1 -1
- package/dist/{src-B4VBiHa8.mjs → src-CAyv9Uf9.mjs} +24 -17
- package/dist/src-CAyv9Uf9.mjs.map +1 -0
- package/dist/{src-DUpFNNM_.mjs → src-CXY-7FC3.mjs} +4 -4
- package/dist/{src-DUpFNNM_.mjs.map → src-CXY-7FC3.mjs.map} +1 -1
- package/dist/{src-BqX3sryB.mjs → src-C_aFsFJ3.mjs} +4 -4
- package/dist/{src-BqX3sryB.mjs.map → src-C_aFsFJ3.mjs.map} +1 -1
- package/dist/{src-DW3tIczg.mjs → src-Cv4rRVzv.mjs} +4 -4
- package/dist/{src-DW3tIczg.mjs.map → src-Cv4rRVzv.mjs.map} +1 -1
- package/dist/{src-Ds9vl42d.mjs → src-DV9uwtE5.mjs} +2 -2
- package/dist/{src-Ds9vl42d.mjs.map → src-DV9uwtE5.mjs.map} +1 -1
- package/dist/{src-75qcxwT_.mjs → src-SqJ6k7Xv.mjs} +13 -29
- package/dist/src-SqJ6k7Xv.mjs.map +1 -0
- package/dist/ssg/index.d.mts +1 -1
- package/dist/ssg/index.d.mts.map +1 -1
- package/dist/ssg/index.mjs +14 -9
- package/dist/ssg/index.mjs.map +1 -1
- package/dist/ssg/plugins/docs-theme.d.mts +68 -29
- package/dist/ssg/plugins/docs-theme.d.mts.map +1 -1
- package/dist/ssg/plugins/docs-theme.mjs +2747 -380
- package/dist/ssg/plugins/docs-theme.mjs.map +1 -1
- package/dist/ssg/plugins/fonts/MAPLE_MONO_LICENSE.txt +93 -0
- package/dist/ssg/plugins/fonts/MapleMono-NF-CN-Regular.woff2 +0 -0
- package/dist/ssg/plugins/lucide.d.mts +2 -2
- package/dist/ssg/plugins/lucide.mjs +5 -5
- package/dist/ssr/client.d.mts +1 -1
- package/dist/ssr/client.mjs +5 -5
- package/dist/ssr/index.d.mts +1 -1
- package/dist/ssr/index.d.mts.map +1 -1
- package/dist/ssr/index.mjs +8 -8
- package/dist/style/index.mjs +1 -1
- package/dist/style/react.mjs +2 -2
- package/dist/style/vue.mjs +2 -2
- package/dist/terminal/index.mjs +3 -3
- package/dist/terminal/jsx-dev-runtime.mjs +2 -2
- package/dist/terminal/jsx-runtime.mjs +2 -2
- package/dist/{types-BmDIxXiP.d.mts → types-BaS-zTDX.d.mts} +3 -1
- package/dist/{types-BmDIxXiP.d.mts.map → types-BaS-zTDX.d.mts.map} +1 -1
- package/dist/{utils-DbTAs943.mjs → utils-BrGmTgfG.mjs} +1 -1
- package/dist/{utils-DbTAs943.mjs.map → utils-BrGmTgfG.mjs.map} +1 -1
- package/package.json +2 -2
- package/dist/document-CwHVG_PJ.mjs +0 -5
- package/dist/jsx-runtime-D9ZNjMJ2.mjs.map +0 -1
- package/dist/jsx-runtime-tIuFmhTh.d.mts.map +0 -1
- package/dist/resource-CNwiNxJX.d.mts.map +0 -1
- package/dist/src-75qcxwT_.mjs.map +0 -1
- package/dist/src-B4VBiHa8.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-theme.mjs","names":["c","root","title","icon","content","styles.root","styles.title","styles.icon","styles.content","c","root","styles.root","c","root","icon","styles.icon","styles.heading","styles.headingLink","styles.desc","styles.descLink","styles.root","styles.link","styles.linkStates","styles.feature","styles.featureStates","c","root","styles.root","styles.list","styles.trigger","styles.triggerStates","styles.panel","c","root","styles.root","styles.item","styles.number","styles.content","styles.title","styles.body","c","root","rootStates","sm","md","lg","c","root","c","root","c","label","root","sm","md","lg","c","root","c","root","buttonStyles","cardStyles","calloutStyles","badgeStyles","codeBlockStyles","tabsStyles","stepsStyles","separatorStyles","inputStyles","avatarStyles","kbdStyles","switchStyles","styles.solid","styles.solidStates","styles.outline","styles.outlineStates","styles.ghost","styles.ghostStates","sizeStyles","styles.sm","styles.md","styles.lg","styles.root","styles.rootStates","styles.danger","styles.dangerStates","styles.root","styles.horizontal","styles.vertical","sizeStyles","styles.sm","styles.md","styles.lg","styles.root","styles.rootStates","styles.wrapper","styles.label","styles.sm","styles.md","styles.lg","styles.root","styles.image","styles.fallback","styles.root","styles.root","styles.rootDisabled","styles.track","styles.trackOn","styles.thumb","styles.thumbOn","styles.label","join","dirname","mkdir","lucidePlugin","llmsPlugin"],"sources":["../../../../ssg/src/plugins/docs-theme/styles.ts","../../../../ui/src/theme/tokens.ts","../../../../ui/src/components/callout/callout.style.ts","../../../../ui/src/components/callout/callout.tsx","../../../../ui/src/components/badge/badge.style.ts","../../../../ui/src/components/badge/badge.tsx","../../../../ui/src/components/card/card.style.ts","../../../../ui/src/components/card/card.tsx","../../../../ui/src/components/tabs/tabs.style.ts","../../../../ui/src/components/tabs/tabs.tsx","../../../../ui/src/components/steps/steps.style.ts","../../../../ui/src/components/steps/steps.tsx","../../../../ui/src/theme/themes.ts","../../../../ui/src/components/button/button.style.ts","../../../../ui/src/components/code-block/code-block.style.ts","../../../../ui/src/components/separator/separator.style.ts","../../../../ui/src/components/input/input.style.ts","../../../../ui/src/components/avatar/avatar.style.ts","../../../../ui/src/components/kbd/kbd.style.ts","../../../../ui/src/components/switch/switch.style.ts","../../../../ui/src/css.ts","../../../../ui/src/components/button/button.tsx","../../../../ui/src/components/separator/separator.tsx","../../../../ui/src/components/input/input.tsx","../../../../ui/src/components/avatar/avatar.tsx","../../../../ui/src/components/kbd/kbd.tsx","../../../../ui/src/components/switch/switch.tsx","../../../../ssg/src/plugins/docs-theme/components.tsx","../../../../ssg/src/plugins/llms/index.ts","../../../../ssg/src/plugins/docs-theme/index.ts"],"sourcesContent":["/**\n * Apple-inspired theme CSS for the docs-theme plugin.\n *\n * All class names are prefixed with `dt-` to avoid collisions.\n * Component styles (Card, Callout, Badge) come from @semajsx/ui via componentCSS.\n * This file contains layout, navigation, hero, typography, animations, and responsive styles.\n */\n\nexport const THEME_CSS = /* css */ `\n/* ==============================================\n * Keyframes\n * ============================================== */\n\n@keyframes dt-fade-in-up {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes dt-fade-in-scale {\n from { opacity: 0; transform: scale(0.96) translateY(8px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n/* ==============================================\n * Font Face\n * ============================================== */\n\n@font-face {\n font-family: \"Maple Mono NF CN\";\n src: url(\"/fonts/MapleMono-NF-CN-Regular.woff2\") format(\"woff2\");\n font-weight: 400;\n font-style: normal;\n font-display: swap;\n}\n\n/* ==============================================\n * Global Reset & Base\n * ============================================== */\n\n* { margin: 0; padding: 0; box-sizing: border-box; }\n\nhtml { scroll-behavior: smooth; }\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"SF Pro Text\",\n Inter, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n line-height: 1.6;\n color: #1d1d1f;\n background: #fbfbfd;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\n::selection {\n background: rgba(0, 113, 227, 0.2);\n color: #1d1d1f;\n}\n\n/* ==============================================\n * Frosted Glass Navigation\n * ============================================== */\n\n.dt-glass-nav {\n position: sticky;\n top: 0;\n z-index: 50;\n background: rgba(251, 251, 253, 0.8);\n backdrop-filter: saturate(180%) blur(20px);\n -webkit-backdrop-filter: saturate(180%) blur(20px);\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.08);\n}\n\n.dt-nav-inner {\n max-width: 1200px;\n margin: 0 auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 2rem;\n height: 52px;\n}\n\n.dt-nav-logo {\n color: #1d1d1f;\n font-size: 1.25rem;\n font-weight: 600;\n letter-spacing: -0.02em;\n text-decoration: none;\n}\n\n.dt-nav-links {\n display: flex;\n list-style: none;\n margin: 0;\n gap: 2rem;\n}\n\n.dt-nav-link {\n color: #1d1d1f;\n text-decoration: none;\n font-size: 0.875rem;\n font-weight: 400;\n letter-spacing: -0.005em;\n transition: color 0.2s ease;\n}\n\n.dt-nav-link:hover {\n color: #0071e3;\n}\n\n/* ==============================================\n * Layout\n * ============================================== */\n\n.dt-root {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background: #fbfbfd;\n}\n\n.dt-main {\n flex: 1 1 0%;\n width: 100%;\n max-width: 1200px;\n margin: 0 auto;\n padding: 2rem 2rem 4rem;\n}\n\n/* ==============================================\n * Footer\n * ============================================== */\n\n.dt-footer {\n border-top: 0.5px solid rgba(0, 0, 0, 0.08);\n background: #f5f5f7;\n}\n\n.dt-footer-inner {\n max-width: 1200px;\n margin: 0 auto;\n padding: 2rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.dt-footer-links {\n display: flex;\n gap: 2rem;\n align-items: center;\n}\n\n.dt-footer-link {\n color: #6e6e73;\n text-decoration: none;\n font-size: 0.8125rem;\n transition: color 0.2s;\n}\n\n.dt-footer-link:hover {\n color: #0071e3;\n}\n\n.dt-footer-copy {\n color: #86868b;\n font-size: 0.8125rem;\n margin: 0;\n}\n\n/* ==============================================\n * Hero Section\n * ============================================== */\n\n.dt-hero-bg {\n background: linear-gradient(180deg, #fbfbfd 0%, #f5f5f7 40%, #fbfbfd 100%);\n position: relative;\n}\n\n.dt-hero-bg::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n width: 100%;\n height: 100%;\n background: radial-gradient(\n ellipse 60% 50% at 50% 40%,\n rgba(0, 113, 227, 0.06) 0%,\n rgba(251, 251, 253, 0) 70%\n );\n pointer-events: none;\n}\n\n.dt-hero-title {\n font-size: clamp(3rem, 8vw, 5rem);\n font-weight: 700;\n line-height: 1.05;\n letter-spacing: -0.03em;\n background: linear-gradient(135deg, #1d1d1f 30%, #6e6e73 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 1.25rem;\n}\n\n.dt-hero-subtitle {\n font-size: clamp(1.25rem, 2.5vw, 1.5rem);\n font-weight: 400;\n line-height: 1.5;\n color: #6e6e73;\n max-width: 40rem;\n margin: 0 auto 2.5rem;\n letter-spacing: -0.005em;\n}\n\n.dt-hero-cta {\n display: flex;\n gap: 1rem;\n justify-content: center;\n margin-top: 2rem;\n}\n\n/* ==============================================\n * Section Typography\n * ============================================== */\n\n.dt-section-title {\n font-size: clamp(2rem, 4vw, 2.75rem);\n font-weight: 700;\n letter-spacing: -0.02em;\n line-height: 1.1;\n color: #1d1d1f;\n margin-bottom: 0.75rem;\n}\n\n.dt-section-subtitle {\n font-size: clamp(1rem, 2vw, 1.25rem);\n font-weight: 400;\n line-height: 1.5;\n color: #6e6e73;\n max-width: 36rem;\n margin: 0 auto 3rem;\n}\n\n/* ==============================================\n * Buttons\n * ============================================== */\n\n.dt-primary-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.875rem 1.75rem;\n background: #0071e3;\n color: white;\n border-radius: 980px;\n font-size: 1.0625rem;\n font-weight: 500;\n text-decoration: none;\n transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);\n border: none;\n cursor: pointer;\n letter-spacing: -0.005em;\n}\n\n.dt-primary-btn:hover {\n background: #0077ed;\n transform: scale(1.02);\n box-shadow: 0 4px 16px rgba(0, 113, 227, 0.3);\n}\n\n.dt-secondary-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.875rem 1.75rem;\n background: transparent;\n color: #0071e3;\n border: 1.5px solid #0071e3;\n border-radius: 980px;\n font-size: 1.0625rem;\n font-weight: 500;\n text-decoration: none;\n transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);\n cursor: pointer;\n letter-spacing: -0.005em;\n}\n\n.dt-secondary-btn:hover {\n background: #0071e3;\n color: white;\n transform: scale(1.02);\n}\n\n/* ==============================================\n * Animations\n * ============================================== */\n\n.dt-anim-slide-up {\n animation: dt-fade-in-up 0.8s cubic-bezier(0.25, 0.1, 0.25, 1) both;\n}\n\n.dt-anim-scale-in {\n animation: dt-fade-in-scale 0.6s cubic-bezier(0.25, 0.1, 0.25, 1) both;\n}\n\n.dt-fade-in {\n animation: dt-fade-in-up 0.6s cubic-bezier(0.25, 0.1, 0.25, 1) both;\n}\n\n.dt-stagger-1 { animation-delay: 0.1s; }\n.dt-stagger-2 { animation-delay: 0.2s; }\n.dt-stagger-3 { animation-delay: 0.35s; }\n.dt-stagger-4 { animation-delay: 0.5s; }\n.dt-stagger-5 { animation-delay: 0.65s; }\n\n/* ==============================================\n * Page Layout\n * ============================================== */\n\n.dt-page-container {\n max-width: 720px;\n}\n\n.dt-page-title {\n font-size: 2.25rem;\n font-weight: 700;\n color: #1d1d1f;\n letter-spacing: -0.02em;\n margin-bottom: 0.5rem;\n}\n\n.dt-page-desc {\n font-size: 1.125rem;\n color: #6e6e73;\n line-height: 1.5;\n}\n\n.dt-category-heading {\n font-size: 0.8125rem;\n font-weight: 600;\n color: #86868b;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin-bottom: 1rem;\n}\n\n.dt-card-title {\n font-size: 1.0625rem;\n font-weight: 600;\n color: #1d1d1f;\n letter-spacing: -0.01em;\n margin-bottom: 0.25rem;\n}\n\n.dt-card-desc {\n color: #6e6e73;\n font-size: 0.875rem;\n line-height: 1.5;\n margin: 0;\n}\n\n.dt-content-desc {\n font-size: 1.125rem;\n color: #6e6e73;\n line-height: 1.5;\n padding-bottom: 1.5rem;\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.06);\n}\n\n/* ==============================================\n * Content Typography\n * ============================================== */\n\n.dt-content {\n line-height: 1.75;\n color: #1d1d1f;\n}\n\n.dt-content h1 {\n font-size: 1.875rem;\n font-weight: 700;\n margin-top: 3rem;\n margin-bottom: 0.75rem;\n color: #1d1d1f;\n letter-spacing: -0.02em;\n line-height: 1.2;\n}\n\n.dt-content h2 {\n font-size: 1.5rem;\n font-weight: 600;\n margin-top: 2.5rem;\n margin-bottom: 0.75rem;\n color: #1d1d1f;\n letter-spacing: -0.015em;\n line-height: 1.25;\n padding-top: 1.5rem;\n border-top: 0.5px solid rgba(0, 0, 0, 0.06);\n}\n\n.dt-content h2:first-child,\n.dt-content hr + h2 {\n border-top: none;\n padding-top: 0;\n margin-top: 0;\n}\n\n.dt-content h3 {\n font-size: 1.25rem;\n font-weight: 600;\n margin-top: 2rem;\n margin-bottom: 0.5rem;\n color: #1d1d1f;\n letter-spacing: -0.01em;\n line-height: 1.3;\n}\n\n.dt-content p {\n margin-bottom: 1.25rem;\n font-size: 1rem;\n color: #1d1d1f;\n}\n\n.dt-content ul,\n.dt-content ol {\n margin-left: 1.5rem;\n margin-bottom: 1.25rem;\n}\n\n.dt-content li {\n margin-bottom: 0.375rem;\n font-size: 1rem;\n line-height: 1.65;\n}\n\n.dt-content code {\n background: rgba(0, 0, 0, 0.04);\n padding: 0.15rem 0.4rem;\n border-radius: 5px;\n font-family: \"Maple Mono NF CN\", \"SF Mono\", \"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace;\n font-size: 0.875em;\n color: #1d1d1f;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n}\n\n.dt-content pre {\n background: #1d1d1f;\n color: #e5e5ea;\n padding: 1.25rem 1.5rem;\n border-radius: 12px;\n overflow-x: auto;\n margin-bottom: 1.25rem;\n font-size: 0.875rem;\n line-height: 1.65;\n border: 0.5px solid rgba(0, 0, 0, 0.1);\n}\n\n.dt-content pre code {\n background: none;\n color: inherit;\n padding: 0;\n border: none;\n font-size: inherit;\n}\n\n.dt-content a {\n color: #0071e3;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.dt-content a:hover {\n text-decoration: underline;\n}\n\n.dt-content strong {\n font-weight: 600;\n color: #1d1d1f;\n}\n\n.dt-content blockquote {\n border-left: 3px solid rgba(0, 0, 0, 0.08);\n padding: 0.75rem 1.25rem;\n margin: 1.5rem 0;\n color: #6e6e73;\n background: rgba(0, 0, 0, 0.02);\n border-radius: 0 10px 10px 0;\n}\n\n.dt-content hr {\n border: none;\n border-top: 0.5px solid rgba(0, 0, 0, 0.06);\n margin: 2.5rem 0;\n}\n\n/* Tables */\n\n.dt-table-wrapper {\n margin: 1.5rem 0;\n border-radius: 10px;\n border: 0.5px solid rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.dt-content table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9375rem;\n line-height: 1.5;\n}\n\n.dt-content thead {\n background: rgba(0, 0, 0, 0.03);\n}\n\n.dt-content th {\n font-weight: 600;\n color: #1d1d1f;\n text-align: left;\n padding: 0.75rem 1rem;\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.08);\n}\n\n.dt-content td {\n padding: 0.75rem 1rem;\n color: #1d1d1f;\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.04);\n}\n\n.dt-content tbody tr:last-child td {\n border-bottom: none;\n}\n\n.dt-content tbody tr:hover {\n background: rgba(0, 0, 0, 0.02);\n}\n\n/* Table scrollbar styling */\n.dt-table-wrapper {\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.12) rgba(0, 0, 0, 0.02);\n}\n\n.dt-table-wrapper::-webkit-scrollbar {\n height: 6px;\n}\n\n.dt-table-wrapper::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.02);\n border-radius: 3px;\n}\n\n.dt-table-wrapper::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.12);\n border-radius: 3px;\n}\n\n.dt-table-wrapper::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.2);\n}\n\n/* ==============================================\n * Code Blocks\n * ============================================== */\n\n.dt-code-block {\n position: relative;\n margin: 1.5rem 0;\n border-radius: 12px;\n overflow: hidden;\n border: 0.5px solid rgba(0, 0, 0, 0.1);\n}\n\n.dt-code-header {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.625rem 1rem;\n z-index: 1;\n pointer-events: none;\n background: linear-gradient(to left, rgba(34, 39, 46, 0.95) 70%, transparent);\n padding-left: 2rem;\n}\n\n.dt-code-lang {\n color: #636e7b;\n font-size: 0.6875rem;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.04em;\n user-select: none;\n}\n\n.dt-code-block pre {\n margin: 0;\n border-radius: 0;\n border: none;\n padding-top: 2.25rem;\n}\n\n/* Shiki integration */\n\n.dt-content pre.shiki code {\n display: block;\n}\n\n.dt-content pre.shiki .line {\n display: inline;\n}\n\n/* ==============================================\n * Tabs interactivity (aria-selected)\n * ============================================== */\n\n[role=\"tab\"][aria-selected=\"true\"] {\n color: #0071e3;\n border-bottom-color: #0071e3;\n}\n\n/* ==============================================\n * 404 Page\n * ============================================== */\n\n.dt-not-found-title {\n font-size: clamp(4rem, 12vw, 8rem);\n font-weight: 700;\n line-height: 1;\n letter-spacing: -0.04em;\n background: linear-gradient(135deg, #1d1d1f 30%, #6e6e73 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 1.25rem;\n}\n\n/* ==============================================\n * Responsive\n * ============================================== */\n\n@media (max-width: 768px) {\n .dt-nav-inner {\n padding: 12px 1rem !important;\n height: 48px !important;\n }\n\n .dt-nav-logo { font-size: 1.125rem !important; }\n .dt-nav-links { gap: 1.25rem !important; }\n .dt-nav-link { font-size: 0.8125rem; }\n\n .dt-main {\n padding: 1.25rem 1rem 2.5rem !important;\n }\n\n .dt-hero-section {\n padding: 60px 16px 48px !important;\n }\n\n .dt-hero-cta {\n flex-direction: column !important;\n align-items: center !important;\n gap: 0.75rem !important;\n }\n\n .dt-section-features {\n padding: 48px 16px !important;\n }\n\n .dt-section-links {\n padding: 0 16px 60px !important;\n }\n\n .dt-section-links-inner {\n padding-top: 48px !important;\n }\n\n .dt-features-grid {\n grid-template-columns: 1fr !important;\n gap: 1rem !important;\n }\n\n .dt-links-grid {\n grid-template-columns: 1fr !important;\n }\n\n .dt-page-title {\n font-size: 1.75rem !important;\n }\n\n .dt-page-desc {\n font-size: 1rem !important;\n }\n\n .dt-page-container {\n max-width: 100%;\n }\n\n .dt-footer-inner {\n flex-direction: column !important;\n align-items: center !important;\n text-align: center;\n padding: 1.5rem 1rem !important;\n }\n\n .dt-footer-links {\n justify-content: center !important;\n gap: 1.5rem !important;\n }\n\n .dt-not-found-section {\n padding: 60px 16px 48px !important;\n }\n\n .dt-not-found-cta {\n flex-direction: column !important;\n align-items: center !important;\n gap: 0.75rem !important;\n }\n\n .dt-content { line-height: 1.7; }\n .dt-content h1 { font-size: 1.5rem; margin-top: 2rem; }\n .dt-content h2 { font-size: 1.25rem; margin-top: 2rem; padding-top: 1.25rem; }\n .dt-content h3 { font-size: 1.125rem; margin-top: 1.5rem; }\n .dt-content pre { padding: 1rem; font-size: 0.8125rem; border-radius: 10px; }\n .dt-content ul, .dt-content ol { margin-left: 1.25rem; }\n\n .dt-table-wrapper {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: 8px;\n }\n\n .dt-content table {\n font-size: 0.8125rem;\n }\n\n .dt-content th {\n padding: 0.5rem 0.75rem;\n font-size: 0.75rem;\n }\n\n .dt-content td {\n padding: 0.5rem 0.75rem;\n }\n\n .dt-content td:first-child {\n font-weight: 500;\n }\n\n .dt-code-block { border-radius: 10px; }\n .dt-code-header { padding: 0.375rem 1rem; }\n\n .dt-ui-grid {\n grid-template-columns: 1fr !important;\n }\n\n .dt-preview-box {\n padding: 2rem 1rem !important;\n }\n}\n\n/* ==============================================\n * Component Preview (shadcn-style showcase)\n * ============================================== */\n\n.dt-preview {\n margin: 1.5rem 0;\n border: 0.5px solid rgba(0, 0, 0, 0.08);\n border-radius: 12px;\n overflow: hidden;\n background: white;\n}\n\n.dt-preview-box {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 3.5rem 2.5rem;\n min-height: 120px;\n background: white;\n position: relative;\n}\n\n.dt-preview-box > * {\n pointer-events: none;\n}\n\n.dt-preview-box.dt-preview-interactive > * {\n pointer-events: auto;\n}\n\n.dt-preview-box::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image:\n radial-gradient(circle, rgba(0, 0, 0, 0.04) 1px, transparent 1px);\n background-size: 20px 20px;\n pointer-events: none;\n}\n\n.dt-preview-label {\n position: absolute;\n top: 0.75rem;\n left: 1rem;\n font-size: 0.6875rem;\n font-weight: 600;\n color: #86868b;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n z-index: 1;\n}\n\n/* ==============================================\n * UI Components Section\n * ============================================== */\n\n.dt-ui-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n gap: 1rem;\n}\n\n.dt-ui-card {\n display: block;\n padding: 1.5rem;\n background: white;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n border-radius: 12px;\n text-decoration: none;\n transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.03);\n}\n\n.dt-ui-card:hover {\n border-color: rgba(0, 113, 227, 0.3);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n transform: translateY(-2px);\n}\n\n.dt-ui-card-preview {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 80px;\n margin-bottom: 1rem;\n background: #f9f9fb;\n border-radius: 8px;\n overflow: hidden;\n position: relative;\n}\n\n.dt-ui-card-preview > * {\n pointer-events: none;\n}\n\n.dt-ui-card-preview::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image:\n radial-gradient(circle, rgba(0, 0, 0, 0.03) 1px, transparent 1px);\n background-size: 16px 16px;\n pointer-events: none;\n}\n\n.dt-ui-card-name {\n font-size: 0.9375rem;\n font-weight: 600;\n color: #1d1d1f;\n margin: 0 0 0.25rem;\n letter-spacing: -0.01em;\n}\n\n.dt-ui-card-desc {\n font-size: 0.8125rem;\n color: #6e6e73;\n margin: 0;\n line-height: 1.4;\n}\n\n.dt-ui-badge-new {\n display: inline-block;\n padding: 0.1rem 0.4rem;\n background: rgba(0, 113, 227, 0.08);\n color: #0071e3;\n font-size: 0.6875rem;\n font-weight: 600;\n border-radius: 4px;\n margin-left: 0.5rem;\n vertical-align: middle;\n}\n`;\n","/**\n * Default design tokens for @semajsx/ui\n *\n * These tokens define the visual language of the component library.\n * All components reference these tokens via CSS custom properties,\n * enabling runtime theme switching.\n *\n * @example\n * ```ts\n * import { tokens } from \"@semajsx/ui/theme\";\n *\n * // Use in custom styles\n * const myRule = rule`${c.box} {\n * color: ${tokens.colors.text};\n * padding: ${tokens.space.md};\n * }`;\n * ```\n */\n\nimport { defineTokens } from \"@semajsx/style\";\nimport type { TokenRefs } from \"@semajsx/style\";\n\nconst tokenDefinition = {\n colors: {\n // Brand (Apple blue)\n primary: \"#0071e3\",\n primaryHover: \"#0077ed\",\n primaryActive: \"#0068d6\",\n\n // Neutral\n background: \"#fbfbfd\",\n surface: \"#f5f5f7\",\n border: \"rgba(0, 0, 0, 0.08)\",\n text: \"#1d1d1f\",\n textMuted: \"#6e6e73\",\n textTertiary: \"#86868b\",\n\n // Semantic\n danger: \"#ff453a\",\n dangerHover: \"#ff6961\",\n success: \"#34c759\",\n warning: \"#ff9f0a\",\n info: \"#007aff\",\n tip: \"#af52de\",\n\n // Inverse (for solid buttons, etc.)\n onPrimary: \"#ffffff\",\n onDanger: \"#ffffff\",\n },\n\n space: {\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\",\n xxl: \"2rem\",\n },\n\n radii: {\n sm: \"10px\",\n md: \"12px\",\n lg: \"16px\",\n xl: \"20px\",\n pill: \"980px\",\n },\n\n fonts: {\n base: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"SF Pro Text\", Inter, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n mono: '\"SF Mono\", \"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n },\n\n fontSizes: {\n xs: \"0.8125rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.0625rem\",\n },\n\n fontWeights: {\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n },\n\n lineHeights: {\n tight: \"1.25\",\n normal: \"1.6\",\n },\n\n shadows: {\n sm: \"0 1px 3px rgba(0, 0, 0, 0.03)\",\n md: \"0 1px 4px rgba(0, 0, 0, 0.04)\",\n lg: \"0 8px 28px rgba(0, 0, 0, 0.08)\",\n primaryGlow: \"0 4px 16px rgba(0, 113, 227, 0.3)\",\n },\n\n transitions: {\n fast: \"0.2s ease\",\n normal: \"0.3s cubic-bezier(0.25, 0.1, 0.25, 1)\",\n },\n} as const;\n\nexport const tokens: TokenRefs<typeof tokenDefinition> = defineTokens(tokenDefinition);\n","/**\n * Callout component styles\n *\n * Five semantic variants: info, warning, success, error, tip\n * Matching the docs site callout design.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"title\", \"icon\", \"content\"] as const);\n\n// --- Base ---\n\nexport const root = rule`${c.root} {\n padding: 1.25rem 1.5rem;\n margin: 1.5rem 0;\n border-radius: 14px;\n border: 0.5px solid rgba(0, 0, 0, 0.04);\n font-family: ${tokens.fonts.base};\n}`;\n\nexport const title = rule`${c.title} {\n font-weight: ${tokens.fontWeights.semibold};\n font-size: 0.9375rem;\n margin: 0 0 0.5rem;\n display: flex;\n align-items: center;\n gap: ${tokens.space.sm};\n letter-spacing: -0.005em;\n}`;\n\nexport const icon = rule`${c.icon} {\n width: 18px;\n height: 18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}`;\n\nexport const content = rule`${c.content} {\n color: ${tokens.colors.text};\n font-size: 0.9375rem;\n line-height: ${tokens.lineHeights.normal};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Callout component\n *\n * A styled box for highlighting important content with semantic variants.\n *\n * @example\n * ```tsx\n * import { Callout } from \"@semajsx/ui/callout\";\n *\n * <Callout type=\"info\" title=\"Note\">This is informational.</Callout>\n * <Callout type=\"warning\">Be careful with this.</Callout>\n * <Callout type=\"tip\" title=\"Pro tip\">Use signals for reactivity.</Callout>\n * ```\n */\n\nimport type { JSXNode, VNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./callout.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport type CalloutType = \"info\" | \"warning\" | \"success\" | \"error\" | \"tip\";\n\nexport interface CalloutProps {\n /** Semantic type controlling color and icon */\n type?: CalloutType;\n /** Optional title displayed above content */\n title?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content */\n children?: JSXNode;\n}\n\nconst SVG_ATTRS = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n};\n\nfunction InfoIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n\nfunction WarningIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nfunction SuccessIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <path d=\"m9 11 3 3L22 4\" />\n </svg>\n );\n}\n\nfunction ErrorIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6\" />\n <path d=\"m9 9 6 6\" />\n </svg>\n );\n}\n\nfunction TipIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n );\n}\n\nconst calloutConfig: Record<CalloutType, { bg: string; accent: string; icon: () => VNode }> = {\n info: { bg: \"rgba(0, 122, 255, 0.06)\", accent: \"#007aff\", icon: InfoIcon },\n warning: { bg: \"rgba(255, 159, 10, 0.08)\", accent: \"#ff9f0a\", icon: WarningIcon },\n success: { bg: \"rgba(52, 199, 89, 0.08)\", accent: \"#34c759\", icon: SuccessIcon },\n error: { bg: \"rgba(255, 69, 58, 0.08)\", accent: \"#ff453a\", icon: ErrorIcon },\n tip: { bg: \"rgba(175, 82, 222, 0.06)\", accent: \"#af52de\", icon: TipIcon },\n};\n\nexport function Callout(props: CalloutProps): JSXNode {\n const type = props.type ?? \"info\";\n const config = calloutConfig[type];\n const IconComponent = config.icon;\n\n return (\n <div class={[styles.root, props.class]} style={`background: ${config.bg}`} role=\"note\">\n {props.title && (\n <div class={styles.title} style={`color: ${config.accent}`}>\n <span class={styles.icon}>\n <IconComponent />\n </span>\n {props.title}\n </div>\n )}\n <div class={styles.content}>{props.children}</div>\n </div>\n );\n}\n","/**\n * Badge component styles\n *\n * Pill-shaped labels with semantic color variants.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n font-size: 0.6875rem;\n font-weight: ${tokens.fontWeights.semibold};\n font-family: ${tokens.fonts.base};\n padding: 0.125rem 0.5rem;\n border-radius: ${tokens.radii.pill};\n letter-spacing: 0.02em;\n text-transform: uppercase;\n white-space: nowrap;\n line-height: 1.6;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Badge component\n *\n * A small pill-shaped label for status, category, or metadata.\n *\n * @example\n * ```tsx\n * import { Badge } from \"@semajsx/ui/badge\";\n *\n * <Badge color=\"success\">Beginner</Badge>\n * <Badge color=\"warning\">Intermediate</Badge>\n * <Badge color=\"danger\">Advanced</Badge>\n * <Badge>Default</Badge>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./badge.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport type BadgeColor = \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"tip\";\n\nexport interface BadgeProps {\n /** Semantic color */\n color?: BadgeColor;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content */\n children?: JSXNode;\n}\n\nconst badgeColors: Record<BadgeColor, { bg: string; fg: string }> = {\n default: { bg: \"rgba(0, 0, 0, 0.06)\", fg: \"#1d1d1f\" },\n success: { bg: \"rgba(52, 199, 89, 0.12)\", fg: \"#248a3d\" },\n warning: { bg: \"rgba(255, 159, 10, 0.12)\", fg: \"#b25000\" },\n danger: { bg: \"rgba(255, 69, 58, 0.12)\", fg: \"#d70015\" },\n info: { bg: \"rgba(0, 122, 255, 0.1)\", fg: \"#0055b3\" },\n tip: { bg: \"rgba(175, 82, 222, 0.1)\", fg: \"#8944ab\" },\n};\n\nexport function Badge(props: BadgeProps): JSXNode {\n const color = props.color ?? \"default\";\n const config = badgeColors[color];\n\n return (\n <span\n class={[styles.root, props.class]}\n style={`background: ${config.bg}; color: ${config.fg}`}\n >\n {props.children}\n </span>\n );\n}\n","/**\n * Card component styles\n *\n * Two variants matching the docs site design:\n * - feature: Large card with icon, heading, description\n * - link: Smaller clickable card for navigation\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"feature\", \"link\", \"icon\", \"heading\", \"desc\"] as const);\n\n// --- Base ---\n\nexport const root = rule`${c.root} {\n background: white;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n font-family: ${tokens.fonts.base};\n transition: all 0.4s cubic-bezier(0.25, 0.1, 0.25, 1);\n}`;\n\n// --- Feature variant ---\n\nexport const feature = rule`${c.feature} {\n border-radius: ${tokens.radii.xl};\n padding: 2.5rem;\n box-shadow: ${tokens.shadows.md};\n}`;\n\nexport const featureStates = rule`${c.feature}:hover {\n transform: translateY(-4px) scale(1.01);\n box-shadow: ${tokens.shadows.lg};\n}`;\n\n// --- Link variant ---\n\nexport const link = rule`${c.link} {\n display: block;\n border-radius: ${tokens.radii.lg};\n padding: 1.75rem;\n box-shadow: ${tokens.shadows.sm};\n text-decoration: none;\n cursor: pointer;\n}`;\n\nexport const linkStates = rules(\n rule`${c.link}:hover {\n border-color: rgba(0, 113, 227, 0.3);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n transform: translateY(-2px);\n }`,\n);\n\n// --- Slots ---\n\nexport const icon = rule`${c.icon} {\n font-size: 2rem;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${tokens.colors.surface};\n border-radius: ${tokens.radii.md};\n margin-bottom: 1.25rem;\n}`;\n\nexport const heading = rule`${c.heading} {\n font-size: 1.375rem;\n font-weight: ${tokens.fontWeights.semibold};\n color: ${tokens.colors.text};\n margin: 0 0 0.5rem;\n letter-spacing: -0.01em;\n}`;\n\nexport const headingLink = rule`${c.link} ${c.heading} {\n font-size: ${tokens.fontSizes.lg};\n margin-bottom: 0.25rem;\n}`;\n\nexport const desc = rule`${c.desc} {\n color: ${tokens.colors.textMuted};\n line-height: ${tokens.lineHeights.normal};\n font-size: 0.9375rem;\n margin: 0;\n}`;\n\nexport const descLink = rule`${c.link} ${c.desc} {\n font-size: ${tokens.fontSizes.sm};\n line-height: 1.5;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Card component\n *\n * A content container with two variants matching the docs design:\n * - `feature` (default): Large card with icon, heading, and description\n * - `link`: Smaller clickable card for navigation\n *\n * @example\n * ```tsx\n * import { Card } from \"@semajsx/ui/card\";\n *\n * <Card icon=\"⚡\" heading=\"Fast\" description=\"Built for speed\" />\n * <Card variant=\"link\" heading=\"Guide\" description=\"Get started\" href=\"/docs\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./card.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface CardProps {\n /** Card variant */\n variant?: \"feature\" | \"link\";\n /** Icon content (emoji or JSX) */\n icon?: JSXNode;\n /** Card heading */\n heading?: string;\n /** Card description */\n description?: string;\n /** Link URL (for \"link\" variant) */\n href?: string;\n /** Inline style string */\n style?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content */\n children?: JSXNode;\n}\n\nexport function Card(props: CardProps): JSXNode {\n const variant = props.variant ?? \"feature\";\n\n const content = (\n <>\n {props.icon && <div class={styles.icon}>{props.icon}</div>}\n {props.heading && (\n <h3 class={[styles.heading, variant === \"link\" && styles.headingLink]}>{props.heading}</h3>\n )}\n {props.description && (\n <p class={[styles.desc, variant === \"link\" && styles.descLink]}>{props.description}</p>\n )}\n {props.children}\n </>\n );\n\n if (variant === \"link\") {\n return (\n <a\n href={props.href}\n class={[styles.root, styles.link, styles.linkStates, props.class]}\n style={props.style}\n >\n {content}\n </a>\n );\n }\n\n return (\n <div\n class={[styles.root, styles.feature, styles.featureStates, props.class]}\n style={props.style}\n >\n {content}\n </div>\n );\n}\n","/**\n * Tabs component styles\n *\n * A tab bar with active indicator and content panels.\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"list\", \"trigger\", \"active\", \"panel\"] as const);\n\n// --- Container ---\n\nexport const root = rule`${c.root} {\n margin: 1.5rem 0;\n font-family: ${tokens.fonts.base};\n}`;\n\n// --- Tab List ---\n\nexport const list = rule`${c.list} {\n display: flex;\n gap: 0;\n border-bottom: 1px solid ${tokens.colors.border};\n margin-bottom: 0;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}`;\n\n// --- Trigger ---\n\nexport const trigger = rule`${c.trigger} {\n padding: 0.625rem 1rem;\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.medium};\n font-family: ${tokens.fonts.base};\n color: ${tokens.colors.textMuted};\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n white-space: nowrap;\n transition: color ${tokens.transitions.fast}, border-color ${tokens.transitions.fast};\n margin-bottom: -1px;\n}`;\n\nexport const triggerStates = rules(\n rule`${c.trigger}:hover {\n color: ${tokens.colors.text};\n }`,\n rule`${c.trigger}:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: -2px;\n }`,\n);\n\n// --- Active Trigger ---\n\nexport const active = rule`${c.active} {\n color: ${tokens.colors.primary};\n border-bottom-color: ${tokens.colors.primary};\n}`;\n\n// --- Panel ---\n\nexport const panel = rule`${c.panel} {\n padding: 1rem 0;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Tabs component\n *\n * A tabbed interface for switching between content panels.\n * Uses signal-based reactivity: a signal tracks the active tab,\n * `onClick` handles switching, and a `ref` callback subscribes\n * to the signal to update `aria-selected` / `hidden` on children.\n *\n * Works both standalone (client-side) and as an SSR island —\n * wrap with `island()` for SSG hydration.\n *\n * @example\n * ```tsx\n * import { Tabs, TabList, Tab, TabPanel } from \"@semajsx/ui/tabs\";\n *\n * <Tabs defaultValue=\"npm\">\n * <TabList>\n * <Tab value=\"npm\">npm</Tab>\n * <Tab value=\"bun\">Bun</Tab>\n * </TabList>\n * <TabPanel value=\"npm\">npm install semajsx</TabPanel>\n * <TabPanel value=\"bun\">bun add semajsx</TabPanel>\n * </Tabs>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport { signal } from \"@semajsx/signal\";\nimport * as styles from \"./tabs.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\n/**\n * Module-level state for SSR initial rendering.\n *\n * Set by `Tabs` before returning JSX; read by `Tab` / `TabPanel` when they\n * render during the same synchronous (or awaited) SSR pass. This lets the\n * server output include the correct `aria-selected` and `hidden` attributes\n * so the page is styled correctly before any JS loads.\n *\n * On the client the `ref` callback in `Tabs` immediately overwrites these\n * attributes once the component mounts, so the initial values are harmless.\n */\nlet _ssrDefaultTab: string | undefined;\n\nexport interface TabsProps {\n /** The initially active tab value */\n defaultValue: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content (TabList and TabPanels) */\n children?: JSXNode;\n}\n\nexport interface TabListProps {\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Tab triggers */\n children?: JSXNode;\n}\n\nexport interface TabProps {\n /** Value matching a TabPanel */\n value: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Tab label */\n children?: JSXNode;\n}\n\nexport interface TabPanelProps {\n /** Value matching a Tab */\n value: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Panel content */\n children?: JSXNode;\n}\n\nexport function Tabs(props: TabsProps): JSXNode {\n const active = signal(props.defaultValue);\n _ssrDefaultTab = props.defaultValue;\n\n return (\n <div\n class={[styles.root, props.class]}\n data-tabs={active}\n onClick={(e: MouseEvent) => {\n const tab = (e.target as HTMLElement).closest(\"[role=tab]\");\n if (!tab) return;\n const value = tab.getAttribute(\"data-tab-value\");\n if (value) active.value = value;\n }}\n ref={(el: HTMLDivElement | null) => {\n if (!el) return;\n // Sync child tab/panel states to the active signal\n const sync = (value: string) => {\n for (const t of el.querySelectorAll(\"[role=tab]\")) {\n t.setAttribute(\"aria-selected\", String(t.getAttribute(\"data-tab-value\") === value));\n }\n for (const p of el.querySelectorAll(\"[role=tabpanel]\")) {\n (p as HTMLElement).hidden = p.getAttribute(\"data-tab-panel\") !== value;\n }\n };\n sync(active.value);\n active.subscribe(sync);\n }}\n >\n {props.children}\n </div>\n );\n}\n\nexport function TabList(props: TabListProps): JSXNode {\n return (\n <div class={[styles.list, props.class]} role=\"tablist\">\n {props.children}\n </div>\n );\n}\n\nexport function Tab(props: TabProps): JSXNode {\n return (\n <button\n class={[styles.trigger, styles.triggerStates, props.class]}\n role=\"tab\"\n data-tab-value={props.value}\n aria-selected={\n _ssrDefaultTab !== undefined\n ? props.value === _ssrDefaultTab\n ? \"true\"\n : \"false\"\n : undefined\n }\n >\n {props.children}\n </button>\n );\n}\n\nexport function TabPanel(props: TabPanelProps): JSXNode {\n const hidden = _ssrDefaultTab !== undefined ? props.value !== _ssrDefaultTab : undefined;\n return (\n <div\n class={[styles.panel, props.class]}\n role=\"tabpanel\"\n data-tab-panel={props.value}\n hidden={hidden || undefined}\n >\n {props.children}\n </div>\n );\n}\n","/**\n * Steps component styles\n *\n * Numbered step indicators for tutorials and guides.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"item\", \"number\", \"content\", \"title\", \"body\"] as const);\n\nexport const root = rule`${c.root} {\n display: flex;\n flex-direction: column;\n gap: 0;\n margin: 1.5rem 0;\n font-family: ${tokens.fonts.base};\n}`;\n\nexport const item = rule`${c.item} {\n display: flex;\n gap: 1rem;\n padding: 1.25rem 0;\n border-bottom: 0.5px solid ${tokens.colors.border};\n}`;\n\nexport const number = rule`${c.number} {\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: ${tokens.colors.primary};\n color: ${tokens.colors.onPrimary};\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.semibold};\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 0.125rem;\n}`;\n\nexport const content = rule`${c.content} {\n flex: 1;\n min-width: 0;\n}`;\n\nexport const title = rule`${c.title} {\n font-size: ${tokens.fontSizes.md};\n font-weight: ${tokens.fontWeights.semibold};\n color: ${tokens.colors.text};\n margin: 0 0 0.375rem;\n letter-spacing: -0.005em;\n}`;\n\nexport const body = rule`${c.body} {\n color: ${tokens.colors.textMuted};\n font-size: ${tokens.fontSizes.sm};\n line-height: ${tokens.lineHeights.normal};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Steps component\n *\n * A numbered step list for tutorials and walkthroughs.\n *\n * @example\n * ```tsx\n * import { Steps, Step } from \"@semajsx/ui/steps\";\n *\n * <Steps>\n * <Step title=\"Install\">Run bun add semajsx</Step>\n * <Step title=\"Create component\">Write your first JSX component</Step>\n * <Step title=\"Render\">Call render() to mount your app</Step>\n * </Steps>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./steps.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface StepsProps {\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Step items */\n children?: JSXNode;\n}\n\nexport interface StepProps {\n /** Step title */\n title: string;\n /** Step number (auto-assigned if omitted) */\n number?: number;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Step description/content */\n children?: JSXNode;\n}\n\nexport function Steps(props: StepsProps): JSXNode {\n return <div class={[styles.root, props.class]}>{props.children}</div>;\n}\n\nexport function Step(props: StepProps): JSXNode {\n return (\n <div class={[styles.item, props.class]}>\n {props.number !== undefined && <div class={styles.number}>{props.number}</div>}\n <div class={styles.content}>\n <h4 class={styles.title}>{props.title}</h4>\n <div class={styles.body}>{props.children}</div>\n </div>\n </div>\n );\n}\n","/**\n * Built-in themes for @semajsx/ui\n *\n * Provides light (default) and dark themes. Custom themes can be\n * created using createTheme() from @semajsx/style.\n *\n * @example\n * ```tsx\n * import { lightTheme, darkTheme } from \"@semajsx/ui/theme\";\n * import { inject } from \"@semajsx/style\";\n *\n * // Apply default (light) theme to :root\n * inject(lightTheme);\n *\n * // Scope dark theme to an element\n * <div class={darkTheme}>\n * <Button>Dark button</Button>\n * </div>\n * ```\n */\n\nimport { createTheme } from \"@semajsx/style\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\n/**\n * Light theme - applies token defaults to :root\n */\nexport const lightTheme: StyleToken = createTheme(tokens);\n\n/**\n * Dark theme - scoped to a CSS class\n */\nexport const darkTheme: StyleToken = createTheme(tokens, {\n colors: {\n primary: \"#2997ff\",\n primaryHover: \"#5ab4ff\",\n primaryActive: \"#0071e3\",\n\n background: \"#000000\",\n surface: \"#1c1c1e\",\n border: \"rgba(255, 255, 255, 0.12)\",\n text: \"#f5f5f7\",\n textMuted: \"#a1a1a6\",\n textTertiary: \"#6e6e73\",\n\n danger: \"#ff453a\",\n dangerHover: \"#ff6961\",\n success: \"#30d158\",\n warning: \"#ffd60a\",\n info: \"#0a84ff\",\n tip: \"#bf5af2\",\n\n onPrimary: \"#ffffff\",\n onDanger: \"#ffffff\",\n },\n\n shadows: {\n sm: \"0 1px 3px rgba(0, 0, 0, 0.2)\",\n md: \"0 1px 4px rgba(0, 0, 0, 0.3)\",\n lg: \"0 8px 28px rgba(0, 0, 0, 0.4)\",\n primaryGlow: \"0 4px 16px rgba(41, 151, 255, 0.3)\",\n },\n});\n","/**\n * Button component styles\n *\n * All styles reference theme tokens via CSS custom properties,\n * so they respond to theme changes automatically.\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\n \"root\",\n \"solid\",\n \"outline\",\n \"ghost\",\n \"sm\",\n \"md\",\n \"lg\",\n \"danger\",\n \"icon\",\n] as const);\n\n// --- Base ---\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.space.sm};\n border: 1.5px solid transparent;\n border-radius: ${tokens.radii.pill};\n font-family: ${tokens.fonts.base};\n font-weight: ${tokens.fontWeights.medium};\n line-height: ${tokens.lineHeights.tight};\n letter-spacing: -0.005em;\n cursor: pointer;\n user-select: none;\n transition: all ${tokens.transitions.normal};\n}`;\n\nexport const rootStates = rules(\n rule`${c.root}:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }`,\n rule`${c.root}:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }`,\n);\n\n// --- Variants ---\n\nexport const solid = rule`${c.solid} {\n background: ${tokens.colors.primary};\n color: ${tokens.colors.onPrimary};\n border-color: ${tokens.colors.primary};\n}`;\n\nexport const solidStates = rules(\n rule`${c.solid}:hover:not(:disabled) {\n background: ${tokens.colors.primaryHover};\n border-color: ${tokens.colors.primaryHover};\n transform: scale(1.02);\n box-shadow: ${tokens.shadows.primaryGlow};\n }`,\n rule`${c.solid}:active:not(:disabled) {\n background: ${tokens.colors.primaryActive};\n border-color: ${tokens.colors.primaryActive};\n transform: scale(0.98);\n box-shadow: none;\n }`,\n);\n\nexport const outline = rule`${c.outline} {\n background: transparent;\n color: ${tokens.colors.primary};\n border-color: ${tokens.colors.primary};\n}`;\n\nexport const outlineStates = rules(\n rule`${c.outline}:hover:not(:disabled) {\n background: ${tokens.colors.primary};\n color: ${tokens.colors.onPrimary};\n transform: scale(1.02);\n }`,\n rule`${c.outline}:active:not(:disabled) {\n background: ${tokens.colors.primaryActive};\n color: ${tokens.colors.onPrimary};\n transform: scale(0.98);\n }`,\n);\n\nexport const ghost = rule`${c.ghost} {\n background: transparent;\n color: ${tokens.colors.text};\n border-color: transparent;\n}`;\n\nexport const ghostStates = rules(\n rule`${c.ghost}:hover:not(:disabled) {\n background: ${tokens.colors.surface};\n }`,\n rule`${c.ghost}:active:not(:disabled) {\n background: ${tokens.colors.border};\n }`,\n);\n\n// --- Danger ---\n\nexport const danger = rule`${c.danger} {\n background: ${tokens.colors.danger};\n color: ${tokens.colors.onDanger};\n border-color: ${tokens.colors.danger};\n}`;\n\nexport const dangerStates = rules(\n rule`${c.danger}:hover:not(:disabled) {\n background: ${tokens.colors.dangerHover};\n border-color: ${tokens.colors.dangerHover};\n transform: scale(1.02);\n }`,\n rule`${c.danger}:focus-visible {\n outline-color: ${tokens.colors.danger};\n }`,\n);\n\n// --- Sizes ---\n\nexport const sm = rule`${c.sm} {\n padding: ${tokens.space.sm} ${tokens.space.lg};\n font-size: ${tokens.fontSizes.sm};\n}`;\n\nexport const md = rule`${c.md} {\n padding: ${tokens.space.md} ${tokens.space.xl};\n font-size: ${tokens.fontSizes.md};\n}`;\n\nexport const lg = rule`${c.lg} {\n padding: 0.875rem 1.75rem;\n font-size: ${tokens.fontSizes.lg};\n}`;\n\n// --- Icon slot ---\n\nexport const icon = rule`${c.icon} {\n display: inline-flex;\n flex-shrink: 0;\n}`;\n","/**\n * CodeBlock component styles\n *\n * Dark-themed code display with optional language header.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"header\", \"lang\", \"pre\", \"inline\"] as const);\n\n// --- Block ---\n\nexport const root = rule`${c.root} {\n margin: 1.5rem 0;\n border-radius: ${tokens.radii.md};\n overflow: hidden;\n border: 0.5px solid rgba(0, 0, 0, 0.1);\n font-family: ${tokens.fonts.mono};\n}`;\n\nexport const header = rule`${c.header} {\n background: #161617;\n padding: 0.5rem 1.25rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}`;\n\nexport const lang = rule`${c.lang} {\n color: #86868b;\n font-size: 0.6875rem;\n text-transform: uppercase;\n font-weight: ${tokens.fontWeights.semibold};\n letter-spacing: 0.04em;\n font-family: ${tokens.fonts.mono};\n}`;\n\nexport const pre = rule`${c.pre} {\n background: #1d1d1f;\n color: #e5e5ea;\n padding: 1.25rem 1.5rem;\n overflow-x: auto;\n margin: 0;\n font-size: ${tokens.fontSizes.sm};\n line-height: 1.65;\n font-family: ${tokens.fonts.mono};\n}`;\n\n// --- Inline code ---\n\nexport const inline = rule`${c.inline} {\n background: rgba(0, 0, 0, 0.04);\n padding: 0.15rem 0.4rem;\n border-radius: 5px;\n font-size: 0.875em;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n font-family: ${tokens.fonts.mono};\n}`;\n","/**\n * Separator component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"vertical\"] as const);\n\nexport const root = rule`${c.root} {\n border: none;\n background: ${tokens.colors.border};\n flex-shrink: 0;\n}`;\n\nexport const horizontal = rule`${c.root}:not(${c.vertical}) {\n height: 0.5px;\n width: 100%;\n margin: ${tokens.space.lg} 0;\n}`;\n\nexport const vertical = rule`${c.vertical} {\n width: 0.5px;\n height: auto;\n align-self: stretch;\n margin: 0 ${tokens.space.lg};\n}`;\n","/**\n * Input component styles\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"wrapper\", \"label\", \"sm\", \"md\", \"lg\"] as const);\n\nexport const wrapper = rule`${c.wrapper} {\n display: flex;\n flex-direction: column;\n gap: ${tokens.space.sm};\n font-family: ${tokens.fonts.base};\n}`;\n\nexport const label = rule`${c.label} {\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.medium};\n color: ${tokens.colors.text};\n letter-spacing: -0.005em;\n}`;\n\nexport const root = rule`${c.root} {\n display: block;\n width: 100%;\n border: 1.5px solid ${tokens.colors.border};\n border-radius: ${tokens.radii.sm};\n background: white;\n color: ${tokens.colors.text};\n font-family: ${tokens.fonts.base};\n font-size: ${tokens.fontSizes.md};\n line-height: ${tokens.lineHeights.normal};\n transition: all ${tokens.transitions.fast};\n outline: none;\n}`;\n\nexport const rootStates = rules(\n rule`${c.root}:focus {\n border-color: ${tokens.colors.primary};\n box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.15);\n }`,\n rule`${c.root}:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background: ${tokens.colors.surface};\n }`,\n rule`${c.root}::placeholder {\n color: ${tokens.colors.textTertiary};\n }`,\n);\n\nexport const sm = rule`${c.sm} {\n padding: ${tokens.space.sm} ${tokens.space.md};\n font-size: ${tokens.fontSizes.sm};\n}`;\n\nexport const md = rule`${c.md} {\n padding: ${tokens.space.md} ${tokens.space.lg};\n font-size: ${tokens.fontSizes.md};\n}`;\n\nexport const lg = rule`${c.lg} {\n padding: ${tokens.space.lg} ${tokens.space.xl};\n font-size: ${tokens.fontSizes.lg};\n}`;\n","/**\n * Avatar component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"image\", \"fallback\", \"sm\", \"md\", \"lg\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n overflow: hidden;\n background: ${tokens.colors.surface};\n border: 1.5px solid ${tokens.colors.border};\n flex-shrink: 0;\n font-family: ${tokens.fonts.base};\n user-select: none;\n}`;\n\nexport const image = rule`${c.image} {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}`;\n\nexport const fallback = rule`${c.fallback} {\n font-weight: ${tokens.fontWeights.semibold};\n color: ${tokens.colors.textMuted};\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}`;\n\nexport const sm = rule`${c.sm} {\n width: 32px;\n height: 32px;\n font-size: 0.75rem;\n}`;\n\nexport const md = rule`${c.md} {\n width: 40px;\n height: 40px;\n font-size: ${tokens.fontSizes.sm};\n}`;\n\nexport const lg = rule`${c.lg} {\n width: 48px;\n height: 48px;\n font-size: ${tokens.fontSizes.md};\n}`;\n","/**\n * Kbd (keyboard) component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5em;\n padding: 0.15rem 0.4rem;\n background: ${tokens.colors.surface};\n border: 0.5px solid ${tokens.colors.border};\n border-bottom-width: 2px;\n border-radius: 6px;\n font-family: ${tokens.fonts.base};\n font-size: 0.8125rem;\n font-weight: ${tokens.fontWeights.medium};\n color: ${tokens.colors.text};\n line-height: 1.4;\n white-space: nowrap;\n user-select: none;\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n}`;\n","/**\n * Switch component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"track\", \"trackOn\", \"thumb\", \"thumbOn\", \"label\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n gap: ${tokens.space.md};\n cursor: pointer;\n font-family: ${tokens.fonts.base};\n user-select: none;\n}`;\n\nexport const rootDisabled = rule`${c.root}[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n}`;\n\nexport const track = rule`${c.track} {\n position: relative;\n width: 44px;\n height: 24px;\n background: ${tokens.colors.border};\n border-radius: 12px;\n transition: background ${tokens.transitions.fast};\n flex-shrink: 0;\n}`;\n\nexport const trackOn = rule`${c.trackOn} {\n background: ${tokens.colors.primary};\n}`;\n\nexport const thumb = rule`${c.thumb} {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: white;\n border-radius: 50%;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform ${tokens.transitions.fast};\n}`;\n\nexport const thumbOn = rule`${c.thumbOn} {\n transform: translateX(20px);\n}`;\n\nexport const label = rule`${c.label} {\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.medium};\n color: ${tokens.colors.text};\n letter-spacing: -0.005em;\n}`;\n","/**\n * Pre-collected CSS for SSG/SSR usage\n *\n * Since @semajsx/style's inject() requires a DOM, this module provides\n * all component CSS as a static string for server-side rendering.\n *\n * @example\n * ```tsx\n * import { componentCSS } from \"@semajsx/ui/css\";\n *\n * // Include in a <style> tag for SSG output\n * <style>{componentCSS}</style>\n * ```\n */\n\nimport { isStyleToken } from \"@semajsx/style\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport { lightTheme } from \"./theme/themes\";\nimport * as buttonStyles from \"./components/button/button.style\";\nimport * as cardStyles from \"./components/card/card.style\";\nimport * as calloutStyles from \"./components/callout/callout.style\";\nimport * as badgeStyles from \"./components/badge/badge.style\";\nimport * as codeBlockStyles from \"./components/code-block/code-block.style\";\nimport * as tabsStyles from \"./components/tabs/tabs.style\";\nimport * as stepsStyles from \"./components/steps/steps.style\";\nimport * as separatorStyles from \"./components/separator/separator.style\";\nimport * as inputStyles from \"./components/input/input.style\";\nimport * as avatarStyles from \"./components/avatar/avatar.style\";\nimport * as kbdStyles from \"./components/kbd/kbd.style\";\nimport * as switchStyles from \"./components/switch/switch.style\";\n\nfunction collectCSS(styles: Record<string, unknown>): string {\n return Object.values(styles)\n .filter((v): v is StyleToken => isStyleToken(v))\n .map((t) => t.__cssTemplate)\n .join(\"\\n\");\n}\n\n/** All @semajsx/ui component CSS (theme variables + component rules) */\nexport const componentCSS: string = [\n lightTheme.__cssTemplate,\n collectCSS(buttonStyles),\n collectCSS(cardStyles),\n collectCSS(calloutStyles),\n collectCSS(badgeStyles),\n collectCSS(codeBlockStyles),\n collectCSS(tabsStyles),\n collectCSS(stepsStyles),\n collectCSS(separatorStyles),\n collectCSS(inputStyles),\n collectCSS(avatarStyles),\n collectCSS(kbdStyles),\n collectCSS(switchStyles),\n].join(\"\\n\");\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Button component\n *\n * A polymorphic button with variant, size, and color support.\n * All styles are driven by theme tokens for automatic theme switching.\n *\n * @example\n * ```tsx\n * import { Button } from \"@semajsx/ui/button\";\n *\n * <Button>Default</Button>\n * <Button variant=\"outline\">Outline</Button>\n * <Button variant=\"ghost\" size=\"sm\">Small Ghost</Button>\n * <Button color=\"danger\">Delete</Button>\n * <Button disabled>Disabled</Button>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./button.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface ButtonProps {\n /** Visual variant */\n variant?: \"solid\" | \"outline\" | \"ghost\";\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Color scheme - \"danger\" applies destructive styling */\n color?: \"default\" | \"danger\";\n /** Disabled state */\n disabled?: boolean;\n /** HTML button type attribute */\n type?: \"button\" | \"submit\" | \"reset\";\n /** Click handler */\n onClick?: (e: Event) => void;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Accessible label when button content isn't descriptive */\n \"aria-label\"?: string;\n /** Content */\n children?: JSXNode;\n}\n\nconst variantStyles = {\n solid: [styles.solid, styles.solidStates],\n outline: [styles.outline, styles.outlineStates],\n ghost: [styles.ghost, styles.ghostStates],\n} as const;\n\nconst sizeStyles = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const;\n\nexport function Button(props: ButtonProps): JSXNode {\n const variant = props.variant ?? \"solid\";\n const size = props.size ?? \"md\";\n const color = props.color ?? \"default\";\n\n return (\n <button\n type={props.type ?? \"button\"}\n disabled={props.disabled}\n class={[\n styles.root,\n styles.rootStates,\n ...variantStyles[variant],\n sizeStyles[size],\n color === \"danger\" && [styles.danger, styles.dangerStates],\n props.class,\n ]}\n onClick={props.onClick}\n aria-label={props[\"aria-label\"]}\n >\n {props.children}\n </button>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Separator component\n *\n * A visual divider between content sections.\n *\n * @example\n * ```tsx\n * import { Separator } from \"@semajsx/ui/components/separator\";\n *\n * <Separator />\n * <Separator orientation=\"vertical\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./separator.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface SeparatorProps {\n /** Orientation of the separator */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Inline style string */\n style?: string;\n}\n\nexport function Separator(props: SeparatorProps): JSXNode {\n const orientation = props.orientation ?? \"horizontal\";\n\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n class={[\n styles.root,\n styles.horizontal,\n orientation === \"vertical\" && styles.vertical,\n props.class,\n ]}\n style={props.style}\n />\n );\n}\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Input component\n *\n * A text input field with optional label and size variants.\n *\n * @example\n * ```tsx\n * import { Input } from \"@semajsx/ui/components/input\";\n *\n * <Input placeholder=\"Enter your name\" />\n * <Input label=\"Email\" type=\"email\" size=\"lg\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./input.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface InputProps {\n /** Input type */\n type?: \"text\" | \"email\" | \"password\" | \"number\" | \"search\" | \"url\" | \"tel\";\n /** Label text displayed above the input */\n label?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Current value */\n value?: string;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Disabled state */\n disabled?: boolean;\n /** Read-only state */\n readOnly?: boolean;\n /** HTML name attribute */\n name?: string;\n /** HTML id attribute */\n id?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nconst sizeStyles = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const;\n\nexport function Input(props: InputProps): JSXNode {\n const size = props.size ?? \"md\";\n const inputId = props.id ?? props.name;\n\n const input = (\n <input\n type={props.type ?? \"text\"}\n id={inputId}\n name={props.name}\n placeholder={props.placeholder}\n value={props.value}\n disabled={props.disabled}\n readOnly={props.readOnly}\n class={[styles.root, styles.rootStates, sizeStyles[size], props.class]}\n />\n );\n\n if (props.label) {\n return (\n <div class={styles.wrapper}>\n <label class={styles.label} for={inputId}>\n {props.label}\n </label>\n {input}\n </div>\n );\n }\n\n return input;\n}\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Avatar component\n *\n * Displays a user avatar with image or initials fallback.\n *\n * @example\n * ```tsx\n * import { Avatar } from \"@semajsx/ui/components/avatar\";\n *\n * <Avatar src=\"/photo.jpg\" alt=\"John\" />\n * <Avatar initials=\"JD\" />\n * <Avatar initials=\"AB\" size=\"lg\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./avatar.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface AvatarProps {\n /** Image source URL */\n src?: string;\n /** Alt text for the image */\n alt?: string;\n /** Initials to display when no image is provided */\n initials?: string;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nconst sizeStyles = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const;\n\nexport function Avatar(props: AvatarProps): JSXNode {\n const size = props.size ?? \"md\";\n\n return (\n <div\n class={[styles.root, sizeStyles[size], props.class]}\n role=\"img\"\n aria-label={props.alt ?? props.initials ?? \"Avatar\"}\n >\n {props.src ? (\n <img class={styles.image} src={props.src} alt={props.alt ?? \"\"} />\n ) : (\n <span class={styles.fallback}>{props.initials ?? \"?\"}</span>\n )}\n </div>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Kbd component\n *\n * Displays a keyboard key or shortcut.\n *\n * @example\n * ```tsx\n * import { Kbd } from \"@semajsx/ui/components/kbd\";\n *\n * <Kbd>Ctrl</Kbd>\n * <p>Press <Kbd>Cmd</Kbd> + <Kbd>K</Kbd> to search</p>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./kbd.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface KbdProps {\n /** Key label */\n children?: JSXNode;\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nexport function Kbd(props: KbdProps): JSXNode {\n return <kbd class={[styles.root, props.class]}>{props.children}</kbd>;\n}\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Switch component\n *\n * A toggle switch for boolean settings.\n *\n * @example\n * ```tsx\n * import { Switch } from \"@semajsx/ui/components/switch\";\n *\n * <Switch label=\"Dark mode\" />\n * <Switch label=\"Notifications\" checked />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./switch.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface SwitchProps {\n /** Label text */\n label?: string;\n /** Checked state */\n checked?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** HTML name attribute */\n name?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nexport function Switch(props: SwitchProps): JSXNode {\n const checked = props.checked ?? false;\n\n return (\n <div\n role=\"switch\"\n aria-checked={checked ? \"true\" : \"false\"}\n aria-disabled={props.disabled ? \"true\" : undefined}\n class={[styles.root, styles.rootDisabled, props.class]}\n >\n <div class={[styles.track, checked && styles.trackOn]}>\n <div class={[styles.thumb, checked && styles.thumbOn]} />\n </div>\n {props.label && <span class={styles.label}>{props.label}</span>}\n </div>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\n\nimport type { VNode, JSXNode } from \"@semajsx/core\";\nimport type { DocumentProps } from \"../../types\";\nimport type { DocsThemeOptions, NavLink } from \"./types\";\nimport { THEME_CSS } from \"./styles\";\nimport { Icon } from \"../lucide/component\";\n\nimport { Callout } from \"@semajsx/ui/components/callout\";\nimport { Badge } from \"@semajsx/ui/components/badge\";\nimport { Card } from \"@semajsx/ui/components/card\";\nimport { Tabs, TabList, Tab, TabPanel } from \"@semajsx/ui/components/tabs\";\nimport { Steps, Step } from \"@semajsx/ui/components/steps\";\nimport { componentCSS } from \"@semajsx/ui/css\";\n\nimport type { BadgeColor } from \"@semajsx/ui/components/badge\";\n\nimport { Button } from \"@semajsx/ui/components/button\";\nimport { Separator } from \"@semajsx/ui/components/separator\";\nimport { Input } from \"@semajsx/ui/components/input\";\nimport { Avatar } from \"@semajsx/ui/components/avatar\";\nimport { Kbd } from \"@semajsx/ui/components/kbd\";\nimport { Switch } from \"@semajsx/ui/components/switch\";\n\n/** Concatenate class names, filtering falsy values */\nfunction cx(...args: (string | false | null | undefined)[]): string {\n return args.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// Table — Wraps <table> in a scrollable container for mobile overflow\n// =============================================================================\n\nexport function Table({\n children,\n ...props\n}: { children?: JSXNode } & Record<string, unknown>): VNode {\n return (\n <div class=\"dt-table-wrapper\">\n <table {...props}>{children}</table>\n </div>\n );\n}\n\n// =============================================================================\n// Pre — Wraps <pre> in .dt-code-block so the language label stays outside\n// the scrollable area\n// =============================================================================\n\nexport function Pre({\n children,\n \"data-language\": lang,\n ...props\n}: { children?: JSXNode; \"data-language\"?: string } & Record<string, unknown>): VNode {\n return (\n <div class=\"dt-code-block\">\n {lang && (\n <div class=\"dt-code-header\">\n <span class=\"dt-code-lang\">{lang}</span>\n </div>\n )}\n <pre data-language={lang} {...props}>\n {children}\n </pre>\n </div>\n );\n}\n\n// =============================================================================\n// ComponentPreview — MDX component for showcasing UI components\n// =============================================================================\n\ninterface ComponentPreviewProps {\n /** Optional label shown above the preview */\n label?: string;\n /** Allow pointer events inside the preview */\n interactive?: boolean;\n children?: JSXNode;\n}\n\nexport function ComponentPreview({ label, interactive, children }: ComponentPreviewProps): VNode {\n const boxClass = interactive ? \"dt-preview-box dt-preview-interactive\" : \"dt-preview-box\";\n return (\n <div class=\"dt-preview\">\n <div class={boxClass}>\n {label && <span class=\"dt-preview-label\">{label}</span>}\n {children}\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// CodeBlock — MDX component (kept custom for Shiki className integration)\n// =============================================================================\n\ninterface CodeBlockProps {\n children: string;\n className?: string;\n language?: string;\n}\n\nexport function CodeBlock({ children, className, language }: CodeBlockProps): VNode {\n const lang = language || (className?.replace(/^language-/, \"\") ?? \"text\");\n return (\n <div class=\"dt-code-block\">\n {lang && lang !== \"text\" && (\n <div class=\"dt-code-header\">\n <span class=\"dt-code-lang\">{lang}</span>\n </div>\n )}\n <pre class={className}>\n <code>{children}</code>\n </pre>\n </div>\n );\n}\n\n// =============================================================================\n// Difficulty → Badge color mapping\n// =============================================================================\n\nconst DIFFICULTY_COLORS: Record<string, BadgeColor> = {\n beginner: \"success\",\n intermediate: \"warning\",\n advanced: \"danger\",\n};\n\nconst DIFFICULTY_LABELS: Record<string, string> = {\n beginner: \"Beginner\",\n intermediate: \"Intermediate\",\n advanced: \"Advanced\",\n};\n\n// =============================================================================\n// Component factory — creates all page components bound to theme options\n// =============================================================================\n\ninterface DocsIndexProps {\n docs: Array<{\n slug: string;\n data: { title: string; description?: string; category?: string; order: number };\n }>;\n}\n\ninterface DocPageProps {\n doc: { data: { title: string; description?: string } };\n content: VNode;\n}\n\ninterface GuidesIndexProps {\n guides: Array<{\n slug: string;\n data: { title: string; description?: string; difficulty: string; order: number };\n }>;\n}\n\ninterface GuidePageProps {\n guide: { data: { title: string; description?: string; difficulty: string } };\n content: VNode;\n}\n\ninterface UIIndexProps {\n components: Array<{\n slug: string;\n data: { title: string; description?: string; category?: string; order: number };\n }>;\n}\n\ninterface UIPageProps {\n component: { data: { title: string; description?: string } };\n content: VNode;\n}\n\n/** Props for the DocsIndexHome preset */\ninterface DocsIndexHomeProps {\n docs: Array<{\n slug: string;\n data: { title: string; description?: string; category?: string; order: number };\n }>;\n guides: Array<{\n slug: string;\n data: { title: string; description?: string; difficulty: string; order: number };\n }>;\n}\n\n/** Component map returned by createComponents */\nexport interface DocsThemeComponents {\n Document: (props: DocumentProps) => VNode;\n Layout: (props: { children: JSXNode }) => VNode;\n HomePage: () => VNode;\n DocsIndexHome: (props: DocsIndexHomeProps) => VNode;\n DocsIndex: (props: DocsIndexProps) => VNode;\n DocPage: (props: DocPageProps) => VNode;\n GuidesIndex: (props: GuidesIndexProps) => VNode;\n GuidePage: (props: GuidePageProps) => VNode;\n UIIndex: (props: UIIndexProps) => VNode;\n UIPage: (props: UIPageProps) => VNode;\n NotFound: () => VNode;\n ComponentPreview: typeof ComponentPreview;\n Callout: typeof Callout;\n CodeBlock: typeof CodeBlock;\n Tabs: typeof Tabs;\n TabList: typeof TabList;\n Tab: typeof Tab;\n TabPanel: typeof TabPanel;\n Steps: typeof Steps;\n Step: typeof Step;\n Button: typeof Button;\n Badge: typeof Badge;\n Card: typeof Card;\n Separator: typeof Separator;\n Input: typeof Input;\n Avatar: typeof Avatar;\n Kbd: typeof Kbd;\n Switch: typeof Switch;\n}\n\nexport function createComponents(options: DocsThemeOptions): DocsThemeComponents {\n // --------------------------------------------------\n // Document\n // --------------------------------------------------\n function Document(props: DocumentProps): VNode {\n const { children, title, scripts, css } = props;\n const defaultTitle = options.title;\n const pageTitle = title ?? defaultTitle;\n const desc = options.description ?? \"\";\n\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n {desc && <meta name=\"description\" content={desc} />}\n <meta name=\"theme-color\" content=\"#fbfbfd\" />\n <meta name=\"color-scheme\" content=\"light\" />\n <title>{pageTitle}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossOrigin=\"\" />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\"\n rel=\"stylesheet\"\n />\n {css?.map((href) => (\n <link key={href} rel=\"stylesheet\" href={href} />\n ))}\n </head>\n <body>\n {children}\n {scripts}\n </body>\n </html>\n );\n }\n\n // --------------------------------------------------\n // Layout (nav + main + footer)\n // --------------------------------------------------\n function Layout({ children }: { children: JSXNode }): VNode {\n const footerLinks = options.footer?.links ?? options.nav.links;\n const copyrightName = options.footer?.copyright ?? options.title;\n\n return (\n <div class=\"dt-root\">\n <style>{componentCSS}</style>\n <style>{THEME_CSS}</style>\n\n {/* Navigation */}\n <nav class=\"dt-glass-nav\">\n <div class=\"dt-nav-inner\">\n <a href=\"/\" class=\"dt-nav-logo\">\n {options.nav.logo}\n </a>\n <ul class=\"dt-nav-links\">\n {options.nav.links.map((link: NavLink) => (\n <li key={link.href}>\n <a\n href={link.href}\n class=\"dt-nav-link\"\n {...(link.external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </nav>\n\n <main class=\"dt-main\">{children}</main>\n\n {/* Footer */}\n <footer class=\"dt-footer\">\n <div class=\"dt-footer-inner\">\n <div class=\"dt-footer-links\">\n {footerLinks.map((link: NavLink) => (\n <a\n key={link.href}\n href={link.href}\n class=\"dt-footer-link\"\n {...(link.external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {link.label}\n </a>\n ))}\n </div>\n <p class=\"dt-footer-copy\">\n {`\\u00A9 ${new Date().getFullYear()} ${copyrightName}`}. MIT License.\n </p>\n </div>\n </footer>\n </div>\n );\n }\n\n // --------------------------------------------------\n // Home Page\n // --------------------------------------------------\n function HomePage(): VNode {\n return (\n <Layout>\n {/* Hero */}\n {options.hero && (\n <div\n class={cx(\"dt-hero-bg\", \"dt-hero-section\")}\n style=\"padding: 100px 24px 80px; position: relative;\"\n >\n <div style=\"max-width: 680px; margin: 0 auto; position: relative; z-index: 1; text-align: center;\">\n <h1 class={cx(\"dt-hero-title\", \"dt-anim-slide-up\")}>{options.hero.title}</h1>\n <p class={cx(\"dt-hero-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.hero.subtitle}\n </p>\n {options.hero.actions && options.hero.actions.length > 0 && (\n <div class={cx(\"dt-hero-cta\", \"dt-anim-slide-up\", \"dt-stagger-2\")}>\n {options.hero.actions.map((action) => (\n <a\n key={action.href}\n href={action.href}\n class={action.primary ? \"dt-primary-btn\" : \"dt-secondary-btn\"}\n >\n {action.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Features */}\n {options.features && (\n <section\n class=\"dt-section-features\"\n style=\"max-width: 1080px; margin: 0 auto; padding: 80px 24px;\"\n >\n <div style=\"text-align: center; margin-bottom: 3.5rem;\">\n <h2 class={cx(\"dt-section-title\", \"dt-anim-slide-up\")}>{options.features.title}</h2>\n <p class={cx(\"dt-section-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.features.subtitle}\n </p>\n </div>\n <div\n class=\"dt-features-grid\"\n style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem;\"\n >\n {options.features.items.map((item, i) => (\n <Card\n key={item.title}\n icon={<Icon name={item.icon} size={24} />}\n heading={item.title}\n description={item.description}\n class={cx(\"dt-anim-scale-in\", `dt-stagger-${Math.min(i + 2, 5)}`)}\n />\n ))}\n </div>\n </section>\n )}\n\n {/* Quick Links */}\n {options.quickLinks && (\n <section\n class=\"dt-section-links\"\n style=\"max-width: 1080px; margin: 0 auto; padding: 0 24px 100px;\"\n >\n <div\n class=\"dt-section-links-inner\"\n style=\"border-top: 0.5px solid rgba(0, 0, 0, 0.06); padding-top: 80px; text-align: center;\"\n >\n <h2 class={cx(\"dt-section-title\", \"dt-anim-slide-up\")}>{options.quickLinks.title}</h2>\n <p class={cx(\"dt-section-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.quickLinks.subtitle}\n </p>\n <div\n class=\"dt-links-grid\"\n style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.25rem; max-width: 720px; margin: 0 auto;\"\n >\n {options.quickLinks.items.map((item, i) => (\n <Card\n key={item.href}\n variant=\"link\"\n href={item.href}\n heading={item.title}\n description={item.description}\n class={cx(\"dt-anim-scale-in\", `dt-stagger-${Math.min(i + 2, 5)}`)}\n style=\"text-align: left;\"\n />\n ))}\n </div>\n </div>\n </section>\n )}\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Docs Index Home (preset for home: \"docs-index\")\n // --------------------------------------------------\n function DocsIndexHome({ docs: docsList, guides: guidesList }: DocsIndexHomeProps): VNode {\n const docsConf = options.docs;\n const guidesConf = options.guides;\n const docsBasePath = docsConf?.basePath ?? \"/docs\";\n const guidesBasePath = guidesConf?.basePath ?? \"/guides\";\n\n return (\n <Layout>\n <div style=\"max-width: 720px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{options.title}</h1>\n {options.description && (\n <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.description}\n </p>\n )}\n </div>\n\n {/* Docs listing */}\n {docsList.length > 0 && (\n <section class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{docsConf?.heading ?? \"Documentation\"}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {docsList\n .sort((a, b) => a.data.order - b.data.order)\n .map((doc, i) => (\n <Card\n key={doc.slug}\n variant=\"link\"\n href={`${docsBasePath}/${doc.slug}`}\n heading={doc.data.title}\n description={doc.data.description}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n />\n ))}\n </div>\n </section>\n )}\n\n {/* Guides listing */}\n {guidesList.length > 0 && (\n <section class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{guidesConf?.heading ?? \"Guides\"}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {guidesList\n .sort((a, b) => a.data.order - b.data.order)\n .map((guide, i) => (\n <Card\n key={guide.slug}\n variant=\"link\"\n href={`${guidesBasePath}/${guide.slug}`}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n >\n <div style=\"display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.375rem;\">\n <h3 class=\"dt-card-title\" style=\"margin: 0;\">\n {guide.data.title}\n </h3>\n <Badge color={DIFFICULTY_COLORS[guide.data.difficulty] ?? \"default\"}>\n {guide.data.difficulty}\n </Badge>\n </div>\n {guide.data.description && (\n <p class=\"dt-card-desc\">{guide.data.description}</p>\n )}\n </Card>\n ))}\n </div>\n </section>\n )}\n </div>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Docs Index\n // --------------------------------------------------\n function DocsIndex({ docs: docsList }: DocsIndexProps): VNode {\n const docsConf = options.docs;\n const heading = docsConf?.heading ?? \"Documentation\";\n const desc = docsConf?.description ?? \"\";\n\n const byCategory = docsList.reduce(\n (acc, doc) => {\n const category = doc.data.category || \"General\";\n if (!acc[category]) acc[category] = [];\n acc[category].push(doc);\n return acc;\n },\n {} as Record<string, typeof docsList>,\n );\n Object.values(byCategory).forEach((items) => items.sort((a, b) => a.data.order - b.data.order));\n\n const basePath = docsConf?.basePath ?? \"/docs\";\n\n return (\n <Layout>\n <div style=\"max-width: 720px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{heading}</h1>\n {desc && <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>{desc}</p>}\n </div>\n {Object.entries(byCategory).map(([category, items]) => (\n <section key={category} class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{category}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {items.map((doc, i) => (\n <Card\n key={doc.slug}\n variant=\"link\"\n href={`${basePath}/${doc.slug}`}\n heading={doc.data.title}\n description={doc.data.description}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n />\n ))}\n </div>\n </section>\n ))}\n </div>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Doc Page\n // --------------------------------------------------\n function DocPage({ doc, content }: DocPageProps): VNode {\n return (\n <Layout>\n <article class=\"dt-page-container\">\n <div style=\"margin-bottom: 2.5rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{doc.data.title}</h1>\n {doc.data.description && (\n <p class={cx(\"dt-content-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {doc.data.description}\n </p>\n )}\n </div>\n <div class={cx(\"dt-content\", \"dt-fade-in\")}>{content}</div>\n </article>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Guides Index\n // --------------------------------------------------\n function GuidesIndex({ guides: guidesList }: GuidesIndexProps): VNode {\n const guidesConf = options.guides;\n const heading = guidesConf?.heading ?? \"Guides\";\n const desc = guidesConf?.description ?? \"\";\n\n const byDifficulty = guidesList.reduce(\n (acc, guide) => {\n const difficulty = guide.data.difficulty || \"beginner\";\n if (!acc[difficulty]) acc[difficulty] = [];\n acc[difficulty].push(guide);\n return acc;\n },\n {} as Record<string, typeof guidesList>,\n );\n Object.values(byDifficulty).forEach((items) =>\n items.sort((a, b) => a.data.order - b.data.order),\n );\n\n const basePath = guidesConf?.basePath ?? \"/guides\";\n\n return (\n <Layout>\n <div style=\"max-width: 720px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{heading}</h1>\n {desc && <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>{desc}</p>}\n </div>\n {Object.entries(byDifficulty).map(([difficulty, items]) => (\n <section key={difficulty} class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{DIFFICULTY_LABELS[difficulty] ?? difficulty}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {items.map((guide, i) => (\n <Card\n key={guide.slug}\n variant=\"link\"\n href={`${basePath}/${guide.slug}`}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n >\n <div style=\"display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.375rem;\">\n <h3 class=\"dt-card-title\" style=\"margin: 0;\">\n {guide.data.title}\n </h3>\n <Badge color={DIFFICULTY_COLORS[guide.data.difficulty] ?? \"default\"}>\n {guide.data.difficulty}\n </Badge>\n </div>\n {guide.data.description && <p class=\"dt-card-desc\">{guide.data.description}</p>}\n </Card>\n ))}\n </div>\n </section>\n ))}\n </div>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Guide Page\n // --------------------------------------------------\n function GuidePage({ guide, content }: GuidePageProps): VNode {\n return (\n <Layout>\n <article class=\"dt-page-container\">\n <div style=\"margin-bottom: 2.5rem;\">\n <div class=\"dt-fade-in\" style=\"margin-bottom: 1rem;\">\n <Badge color={DIFFICULTY_COLORS[guide.data.difficulty] ?? \"default\"}>\n {guide.data.difficulty}\n </Badge>\n </div>\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{guide.data.title}</h1>\n {guide.data.description && (\n <p class={cx(\"dt-content-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {guide.data.description}\n </p>\n )}\n </div>\n <div class={cx(\"dt-content\", \"dt-fade-in\")}>{content}</div>\n </article>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // UI Components Index\n // --------------------------------------------------\n function UIIndex({ components: componentsList }: UIIndexProps): VNode {\n const uiConf = options.ui;\n const heading = uiConf?.heading ?? \"Components\";\n const desc = uiConf?.description ?? \"\";\n const basePath = uiConf?.basePath ?? \"/ui\";\n\n const byCategory = componentsList.reduce(\n (acc, comp) => {\n const category = comp.data.category || \"General\";\n if (!acc[category]) acc[category] = [];\n acc[category].push(comp);\n return acc;\n },\n {} as Record<string, typeof componentsList>,\n );\n Object.values(byCategory).forEach((items) => items.sort((a, b) => a.data.order - b.data.order));\n\n return (\n <Layout>\n <div style=\"max-width: 960px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{heading}</h1>\n {desc && <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>{desc}</p>}\n </div>\n {Object.entries(byCategory).map(([category, items]) => (\n <section key={category} class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{category}</h2>\n <div class=\"dt-ui-grid\">\n {items.map((comp, i) => (\n <a\n key={comp.slug}\n href={`${basePath}/${comp.slug}`}\n class={cx(\"dt-ui-card\", \"dt-anim-scale-in\")}\n style={`animation-delay: ${0.05 + i * 0.05}s;`}\n >\n <div class=\"dt-ui-card-preview\">{renderMiniPreview(comp.slug)}</div>\n <h3 class=\"dt-ui-card-name\">{comp.data.title}</h3>\n {comp.data.description && (\n <p class=\"dt-ui-card-desc\">{comp.data.description}</p>\n )}\n </a>\n ))}\n </div>\n </section>\n ))}\n </div>\n </Layout>\n );\n }\n\n /** Renders a small preview of the component for the index grid cards */\n function renderMiniPreview(slug: string): JSXNode {\n switch (slug) {\n case \"button\":\n return (\n <div style=\"display: flex; gap: 0.5rem; position: relative; z-index: 1;\">\n <Button size=\"sm\">Button</Button>\n <Button size=\"sm\" variant=\"outline\">\n Outline\n </Button>\n </div>\n );\n case \"badge\":\n return (\n <div style=\"display: flex; gap: 0.5rem; position: relative; z-index: 1;\">\n <Badge>Default</Badge>\n <Badge color=\"success\">Success</Badge>\n <Badge color=\"warning\">Warning</Badge>\n </div>\n );\n case \"input\":\n return (\n <div style=\"width: 160px; position: relative; z-index: 1;\">\n <Input size=\"sm\" placeholder=\"Type here...\" />\n </div>\n );\n case \"switch\":\n return (\n <div style=\"display: flex; gap: 1rem; position: relative; z-index: 1;\">\n <Switch />\n <Switch checked />\n </div>\n );\n case \"avatar\":\n return (\n <div style=\"display: flex; gap: 0.5rem; position: relative; z-index: 1;\">\n <Avatar initials=\"AB\" size=\"sm\" />\n <Avatar initials=\"CD\" size=\"md\" />\n <Avatar initials=\"EF\" size=\"lg\" />\n </div>\n );\n case \"separator\":\n return (\n <div style=\"width: 120px; position: relative; z-index: 1;\">\n <div style=\"font-size: 0.75rem; color: #86868b; text-align: center;\">Above</div>\n <Separator />\n <div style=\"font-size: 0.75rem; color: #86868b; text-align: center;\">Below</div>\n </div>\n );\n case \"kbd\":\n return (\n <div style=\"display: flex; gap: 0.25rem; align-items: center; position: relative; z-index: 1;\">\n <Kbd>Cmd</Kbd>\n <span style=\"color: #86868b; font-size: 0.75rem;\">+</span>\n <Kbd>K</Kbd>\n </div>\n );\n case \"card\":\n return (\n <div style=\"transform: scale(0.45); transform-origin: center; position: relative; z-index: 1; width: 240px;\">\n <Card heading=\"Card Title\" description=\"A brief description\" />\n </div>\n );\n case \"callout\":\n return (\n <div style=\"transform: scale(0.6); transform-origin: center; position: relative; z-index: 1; width: 260px;\">\n <Callout type=\"info\">Informational callout</Callout>\n </div>\n );\n case \"tabs\":\n return (\n <div style=\"transform: scale(0.7); transform-origin: center; position: relative; z-index: 1; width: 200px;\">\n <Tabs defaultValue=\"one\">\n <TabList>\n <Tab value=\"one\">First</Tab>\n <Tab value=\"two\">Second</Tab>\n </TabList>\n </Tabs>\n </div>\n );\n case \"steps\":\n return (\n <div style=\"transform: scale(0.4); transform-origin: center; position: relative; z-index: 1; width: 200px;\">\n <Steps>\n <Step title=\"Install\" number={1}>\n bun add semajsx\n </Step>\n <Step title=\"Build\" number={2}>\n Create app\n </Step>\n </Steps>\n </div>\n );\n case \"code-block\":\n return (\n <div style=\"position: relative; z-index: 1; width: 160px;\">\n <div style=\"background: #1e1e1e; border-radius: 6px; padding: 8px 10px; font-family: ui-monospace, 'SF Mono', monospace; font-size: 0.625rem; color: #d4d4d4; line-height: 1.5; white-space: pre; overflow: hidden;\">\n <span style=\"color: #c586c0;\">const</span> <span style=\"color: #9cdcfe;\">x</span>{\" \"}\n <span style=\"color: #d4d4d4;\">=</span> <span style=\"color: #b5cea8;\">42</span>;\n </div>\n </div>\n );\n default:\n return (\n <div style=\"font-size: 0.6875rem; color: #86868b; position: relative; z-index: 1;\">\n {slug}\n </div>\n );\n }\n }\n\n // --------------------------------------------------\n // UI Component Page\n // --------------------------------------------------\n function UIPage({ component: comp, content }: UIPageProps): VNode {\n return (\n <Layout>\n <article class=\"dt-page-container\" style=\"max-width: 800px;\">\n <div style=\"margin-bottom: 2.5rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{comp.data.title}</h1>\n {comp.data.description && (\n <p class={cx(\"dt-content-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {comp.data.description}\n </p>\n )}\n </div>\n <div class={cx(\"dt-content\", \"dt-fade-in\")}>{content}</div>\n </article>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // 404 Not Found\n // --------------------------------------------------\n function NotFound(): VNode {\n return (\n <Layout>\n <div\n class={cx(\"dt-hero-bg\", \"dt-not-found-section\")}\n style=\"padding: 100px 24px 80px; position: relative;\"\n >\n <div style=\"max-width: 680px; margin: 0 auto; position: relative; z-index: 1; text-align: center;\">\n <h1 class={cx(\"dt-not-found-title\", \"dt-anim-slide-up\")}>404</h1>\n <p\n class={cx(\"dt-hero-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}\n style=\"margin-bottom: 0.75rem;\"\n >\n Page Not Found\n </p>\n <p\n class={cx(\"dt-anim-slide-up\", \"dt-stagger-2\")}\n style=\"color: #86868b; font-size: 1rem; margin-bottom: 2.5rem; max-width: 28rem; margin-left: auto; margin-right: auto; line-height: 1.6;\"\n >\n The page you're looking for doesn't exist or has been moved.\n </p>\n <div class={cx(\"dt-hero-cta\", \"dt-anim-slide-up\", \"dt-stagger-3\", \"dt-not-found-cta\")}>\n <a href=\"/\" class=\"dt-primary-btn\">\n Go Back Home\n </a>\n <a href={options.docs?.basePath ?? \"/docs\"} class=\"dt-secondary-btn\">\n View Docs\n </a>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return {\n Document,\n Layout,\n HomePage,\n DocsIndexHome,\n DocsIndex,\n DocPage,\n GuidesIndex,\n GuidePage,\n UIIndex,\n UIPage,\n NotFound,\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n };\n}\n\n// Re-export for plugin index\nexport {\n Callout,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n};\n","import { writeFile, mkdir } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport type { SSGConfig, SSGPlugin, SSGInstance, CollectionEntry } from \"../../types\";\nimport type { LlmsOptions } from \"./types\";\n\nexport type { LlmsOptions, LlmsSection, LlmsLink } from \"./types\";\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction normalizePath(path: string): string {\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nfunction resolveUrl(base: string | undefined, path: string): string {\n if (!base) return path;\n return `${base.replace(/\\/$/, \"\")}${path}`;\n}\n\nfunction getEntryTitle(entry: CollectionEntry): string {\n const data = entry.data as Record<string, unknown>;\n return (data.title as string) ?? entry.slug;\n}\n\nfunction getEntryDescription(entry: CollectionEntry): string | undefined {\n const data = entry.data as Record<string, unknown>;\n return data.description as string | undefined;\n}\n\nfunction formatLink(title: string, url: string, description?: string): string {\n return description ? `- [${title}](${url}): ${description}` : `- [${title}](${url})`;\n}\n\n// =============================================================================\n// llms.txt Generator\n// =============================================================================\n\n/**\n * Generate llms.txt content following the llms.txt specification.\n *\n * Format:\n * - H1: site title (required)\n * - Blockquote: site description (optional)\n * - H2 sections: collection entries as markdown links\n * - ## Optional: additional links\n *\n * @see https://llmstxt.org/\n */\nfunction generateLlmsTxt(\n options: LlmsOptions,\n sectionEntries: Map<string, CollectionEntry[]>,\n): string {\n const lines: string[] = [];\n\n lines.push(`# ${options.title}`);\n lines.push(\"\");\n\n if (options.description) {\n lines.push(`> ${options.description}`);\n lines.push(\"\");\n }\n\n for (const section of options.sections ?? []) {\n const entries = sectionEntries.get(section.collection) ?? [];\n if (entries.length === 0) continue;\n\n const basePath = normalizePath(section.basePath);\n lines.push(`## ${section.title}`);\n lines.push(\"\");\n\n for (const entry of entries) {\n const title = getEntryTitle(entry);\n const url = resolveUrl(options.url, `${basePath}/${entry.slug}`);\n const desc = getEntryDescription(entry);\n lines.push(formatLink(title, url, desc));\n }\n\n lines.push(\"\");\n }\n\n if (options.links?.length) {\n lines.push(\"## Optional\");\n lines.push(\"\");\n for (const link of options.links) {\n lines.push(formatLink(link.title, link.url, link.description));\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\n// =============================================================================\n// llms-full.txt Generator\n// =============================================================================\n\n/**\n * Generate llms-full.txt with complete content for each entry.\n * Includes the full markdown body of every collection entry.\n */\nfunction generateLlmsFullTxt(\n options: LlmsOptions,\n sectionEntries: Map<string, CollectionEntry[]>,\n): string {\n const lines: string[] = [];\n\n lines.push(`# ${options.title}`);\n lines.push(\"\");\n\n if (options.description) {\n lines.push(`> ${options.description}`);\n lines.push(\"\");\n }\n\n for (const section of options.sections ?? []) {\n const entries = sectionEntries.get(section.collection) ?? [];\n if (entries.length === 0) continue;\n\n const basePath = normalizePath(section.basePath);\n lines.push(`## ${section.title}`);\n lines.push(\"\");\n\n for (const entry of entries) {\n const title = getEntryTitle(entry);\n const url = resolveUrl(options.url, `${basePath}/${entry.slug}`);\n const desc = getEntryDescription(entry);\n\n lines.push(`### ${title}`);\n\n if (desc) {\n lines.push(\"\");\n lines.push(`> ${desc}`);\n }\n\n lines.push(\"\");\n lines.push(`Source: ${url}`);\n lines.push(\"\");\n lines.push(entry.body.trim());\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n// =============================================================================\n// Per-Entry Markdown Generator\n// =============================================================================\n\nfunction generateEntryMarkdown(entry: CollectionEntry): string {\n const title = getEntryTitle(entry);\n const desc = getEntryDescription(entry);\n const lines: string[] = [];\n\n lines.push(`# ${title}`);\n\n if (desc) {\n lines.push(\"\");\n lines.push(`> ${desc}`);\n }\n\n lines.push(\"\");\n lines.push(entry.body.trim());\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n\n// =============================================================================\n// Plugin\n// =============================================================================\n\n/**\n * LLMs plugin for SSG.\n *\n * Generates `llms.txt`, `llms-full.txt`, and per-page `.md` files\n * following the llms.txt specification, making your site easily\n * consumable by LLMs and AI agents.\n *\n * @see https://llmstxt.org/\n *\n * @example\n * ```tsx\n * import { createSSG } from \"@semajsx/ssg\";\n * import { llms } from \"@semajsx/ssg/plugins/llms\";\n *\n * const ssg = createSSG({\n * outDir: \"./dist\",\n * plugins: [\n * llms({\n * title: \"My Project\",\n * description: \"Documentation for My Project\",\n * url: \"https://docs.myproject.com\",\n * sections: [\n * { title: \"Documentation\", collection: \"docs\", basePath: \"/docs\" },\n * ],\n * }),\n * ],\n * });\n * ```\n */\nexport function llms(options: LlmsOptions): SSGPlugin {\n let outDir = \"\";\n\n return {\n name: \"llms\",\n enforce: \"post\",\n\n configResolved(config: SSGConfig) {\n outDir = config.outDir ?? \"./dist\";\n },\n\n async buildEnd(_result, ssg: SSGInstance) {\n const genLlmsTxt = options.llmsTxt !== false;\n const genLlmsFullTxt = options.llmsFullTxt !== false;\n const genMarkdownPages = options.markdownPages !== false;\n\n // Collect entries for each configured section\n const sectionEntries = new Map<string, CollectionEntry[]>();\n\n for (const section of options.sections ?? []) {\n try {\n const entries = await ssg.getCollection(section.collection);\n sectionEntries.set(section.collection, entries);\n } catch {\n // Collection not found — skip silently\n sectionEntries.set(section.collection, []);\n }\n }\n\n await mkdir(outDir, { recursive: true });\n\n // Generate llms.txt\n if (genLlmsTxt) {\n const content = generateLlmsTxt(options, sectionEntries);\n await writeFile(join(outDir, \"llms.txt\"), content, \"utf-8\");\n }\n\n // Generate llms-full.txt\n if (genLlmsFullTxt) {\n const content = generateLlmsFullTxt(options, sectionEntries);\n await writeFile(join(outDir, \"llms-full.txt\"), content, \"utf-8\");\n }\n\n // Generate per-entry .md files\n if (genMarkdownPages) {\n for (const section of options.sections ?? []) {\n const basePath = normalizePath(section.basePath);\n const entries = sectionEntries.get(section.collection) ?? [];\n for (const entry of entries) {\n const mdPath = `${basePath}/${entry.slug}.md`;\n const fullPath = join(outDir, mdPath.slice(1)); // strip leading /\n const content = generateEntryMarkdown(entry);\n\n await mkdir(dirname(fullPath), { recursive: true });\n await writeFile(fullPath, content, \"utf-8\");\n }\n }\n }\n },\n };\n}\n\n// Export generators for testing\nexport { generateLlmsTxt as _generateLlmsTxt, generateLlmsFullTxt as _generateLlmsFullTxt };\n","import { copyFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport remarkGfm from \"remark-gfm\";\nimport { z } from \"zod\";\nimport type { SSGPlugin, SSGConfig, Collection, RouteConfig } from \"../../types\";\nimport { defineCollection } from \"../../index\";\nimport type { DocsThemeOptions } from \"./types\";\nimport {\n createComponents,\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n Table,\n Pre,\n} from \"./components\";\nimport { island } from \"@semajsx/ssr/client\";\nimport { lucide as lucidePlugin } from \"../lucide/index\";\nimport { llms as llmsPlugin } from \"../llms/index\";\nimport type { LlmsSection } from \"../llms/types\";\nimport type { Component } from \"@semajsx/core\";\n\n// Wrap Tabs as an island, pointing to the source module so the client\n// entry automatically has TabList/Tab/TabPanel in its component registry.\nconst TabsIsland = island(Tabs, \"@semajsx/ui/components/tabs\");\n\nexport type {\n DocsThemeOptions,\n LlmsThemeOptions,\n NavLink,\n HeroAction,\n FeatureItem,\n QuickLinkItem,\n DocsConfig,\n GuidesConfig,\n UIConfig,\n HomeOption,\n HomePageProps,\n LayoutComponent,\n} from \"./types\";\n\nexport {\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n} from \"./components\";\n\n// =============================================================================\n// Schemas\n// =============================================================================\n\nconst docsSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n order: z.number().default(999),\n category: z.string().optional(),\n});\n\nconst guidesSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n order: z.number().default(999),\n difficulty: z.enum([\"beginner\", \"intermediate\", \"advanced\"]).default(\"beginner\"),\n});\n\nconst uiSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n order: z.number().default(999),\n category: z.string().optional(),\n});\n\n// =============================================================================\n// Plugin factory\n// =============================================================================\n\n/**\n * Docs theme plugin for SSG.\n *\n * Provides an Apple-inspired documentation site with:\n * - Frosted glass navigation\n * - Home page with hero, features, and quick links\n * - Docs collection with category grouping\n * - Guides collection with difficulty levels\n * - MDX components (Callout, CodeBlock)\n * - Responsive design\n *\n * All text content, navigation links, and site metadata\n * are configured through options — nothing is hardcoded.\n *\n * @example\n * ```tsx\n * import { createSSG } from \"@semajsx/ssg\";\n * import { docsTheme } from \"@semajsx/ssg/plugins/docs-theme\";\n * import { fileSource } from \"@semajsx/ssg\";\n *\n * const ssg = createSSG({\n * outDir: \"./dist\",\n * plugins: [\n * docsTheme({\n * title: \"My Docs\",\n * nav: {\n * logo: \"MyProject\",\n * links: [\n * { label: \"Docs\", href: \"/docs\" },\n * { label: \"GitHub\", href: \"https://github.com/...\", external: true },\n * ],\n * },\n * hero: {\n * title: \"MyProject\",\n * subtitle: \"A great project.\",\n * actions: [{ label: \"Get Started\", href: \"/docs/intro\", primary: true }],\n * },\n * docs: { source: fileSource({ directory: \"content/docs\" }, rootDir) },\n * }),\n * ],\n * });\n * ```\n */\nexport function docsTheme(options: DocsThemeOptions): SSGPlugin[] {\n const components = createComponents(options);\n const docsBasePath = options.docs?.basePath ?? \"/docs\";\n const guidesBasePath = options.guides?.basePath ?? \"/guides\";\n const uiBasePath = options.ui?.basePath ?? \"/ui\";\n\n let outDir = \"\";\n\n const mainPlugin: SSGPlugin = {\n name: \"docs-theme\",\n\n configResolved(config: SSGConfig) {\n outDir = config.outDir ?? \"./dist\";\n },\n\n async buildEnd() {\n // Copy bundled font to output directory\n const thisDir = dirname(fileURLToPath(import.meta.url));\n const fontSrc = join(thisDir, \"fonts\", \"MapleMono-NF-CN-Regular.woff2\");\n const fontDest = join(outDir, \"fonts\", \"MapleMono-NF-CN-Regular.woff2\");\n await mkdir(dirname(fontDest), { recursive: true });\n await copyFile(fontSrc, fontDest);\n },\n\n config() {\n const collections: Collection[] = [];\n const routes: RouteConfig[] = [];\n\n // --- Collections ---\n\n if (options.docs) {\n collections.push(\n defineCollection({\n name: \"docs\",\n source: options.docs.source,\n schema: docsSchema,\n }),\n );\n }\n\n if (options.guides) {\n collections.push(\n defineCollection({\n name: \"guides\",\n source: options.guides.source,\n schema: guidesSchema,\n }),\n );\n }\n\n if (options.ui) {\n collections.push(\n defineCollection({\n name: \"ui\",\n source: options.ui.source,\n schema: uiSchema,\n }),\n );\n }\n\n // --- Routes ---\n\n // Home page\n if (options.home !== false) {\n if (options.home === \"docs-index\") {\n // Minimal document index preset\n routes.push({\n path: \"/\",\n component: components.DocsIndexHome,\n props: async (ssg) => ({\n title: options.title,\n docs: options.docs ? await ssg.getCollection(\"docs\") : [],\n guides: options.guides ? await ssg.getCollection(\"guides\") : [],\n }),\n });\n } else if (typeof options.home === \"function\") {\n // Custom component — pass Layout and collection data\n const CustomHome = options.home;\n routes.push({\n path: \"/\",\n component: (props: Record<string, unknown>) => CustomHome(props as never),\n props: async (ssg) => ({\n title: options.title,\n Layout: components.Layout,\n docs: options.docs ? await ssg.getCollection(\"docs\") : [],\n guides: options.guides ? await ssg.getCollection(\"guides\") : [],\n }),\n });\n } else {\n // Default marketing homepage\n routes.push({\n path: \"/\",\n component: components.HomePage,\n props: { title: options.title },\n });\n }\n }\n\n // Docs routes\n if (options.docs) {\n routes.push({\n path: docsBasePath,\n component: components.DocsIndex,\n props: async (ssg) => ({\n title: options.docs?.heading ?? \"Documentation\",\n docs: await ssg.getCollection(\"docs\"),\n }),\n });\n\n routes.push({\n path: `${docsBasePath}/:slug`,\n component: components.DocPage,\n getStaticPaths: async (ssg) => {\n const allDocs = await ssg.getCollection(\"docs\");\n return Promise.all(\n allDocs.map(async (doc) => {\n const { Content } = await doc.render();\n return {\n params: { slug: doc.slug },\n props: {\n doc,\n content: Content(),\n title: `${(doc.data as { title: string }).title} | ${options.title}`,\n },\n };\n }),\n );\n },\n });\n }\n\n // Guides routes\n if (options.guides) {\n routes.push({\n path: guidesBasePath,\n component: components.GuidesIndex,\n props: async (ssg) => ({\n title: options.guides?.heading ?? \"Guides\",\n guides: await ssg.getCollection(\"guides\"),\n }),\n });\n\n routes.push({\n path: `${guidesBasePath}/:slug`,\n component: components.GuidePage,\n getStaticPaths: async (ssg) => {\n const allGuides = await ssg.getCollection(\"guides\");\n return Promise.all(\n allGuides.map(async (guide) => {\n const { Content } = await guide.render();\n return {\n params: { slug: guide.slug },\n props: {\n guide,\n content: Content(),\n title: `${(guide.data as { title: string }).title} | ${options.title}`,\n },\n };\n }),\n );\n },\n });\n }\n\n // UI routes\n if (options.ui) {\n routes.push({\n path: uiBasePath,\n component: components.UIIndex,\n props: async (ssg) => ({\n title: options.ui?.heading ?? \"Components\",\n components: await ssg.getCollection(\"ui\"),\n }),\n });\n\n routes.push({\n path: `${uiBasePath}/:slug`,\n component: components.UIPage,\n getStaticPaths: async (ssg) => {\n const allComponents = await ssg.getCollection(\"ui\");\n return Promise.all(\n allComponents.map(async (comp) => {\n const { Content } = await comp.render();\n return {\n params: { slug: comp.slug },\n props: {\n component: comp,\n content: Content(),\n title: `${(comp.data as { title: string }).title} | ${options.title}`,\n },\n };\n }),\n );\n },\n });\n }\n\n // 404 page\n routes.push({\n path: \"/404\",\n component: components.NotFound,\n props: { title: `404 - Page Not Found | ${options.title}` },\n });\n\n // --- MDX ---\n\n const mdxComponents: Record<string, Component> = {\n table: Table,\n pre: Pre,\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs: TabsIsland,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n ...options.mdx?.components,\n };\n\n return {\n document: components.Document,\n collections,\n routes,\n mdx: {\n remarkPlugins: [remarkGfm, ...(options.mdx?.remarkPlugins ?? [])],\n rehypePlugins: options.mdx?.rehypePlugins,\n components: mdxComponents,\n },\n };\n },\n };\n\n // Compose sub-plugins Vite-style: return flat array\n const plugins: SSGPlugin[] = [mainPlugin];\n\n if (options.lucide !== false) {\n const lucideOpts = typeof options.lucide === \"object\" ? options.lucide : {};\n plugins.push(lucidePlugin(lucideOpts));\n }\n\n // LLMs (llms.txt) — enabled by default when docs, guides, or ui exist\n const hasContent = options.docs || options.guides || options.ui;\n if (options.llms !== false && hasContent) {\n const llmsOpts = typeof options.llms === \"object\" ? options.llms : {};\n\n // Auto-derive sections from configured collections\n const sections: LlmsSection[] = [];\n if (options.docs) {\n sections.push({\n title: options.docs.heading ?? \"Documentation\",\n collection: \"docs\",\n basePath: docsBasePath,\n });\n }\n if (options.guides) {\n sections.push({\n title: options.guides.heading ?? \"Guides\",\n collection: \"guides\",\n basePath: guidesBasePath,\n });\n }\n if (options.ui) {\n sections.push({\n title: options.ui.heading ?? \"Components\",\n collection: \"ui\",\n basePath: uiBasePath,\n });\n }\n\n plugins.push(\n llmsPlugin({\n title: options.title,\n description: options.description,\n url: llmsOpts.url,\n sections,\n links: llmsOpts.links,\n llmsTxt: llmsOpts.llmsTxt,\n llmsFullTxt: llmsOpts.llmsFullTxt,\n markdownPages: llmsOpts.markdownPages,\n }),\n );\n }\n\n return plugins;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docs-theme.mjs","names":["isEof","peek","advance","skipNewlines","c","tokenDefinition","tokens","c","tokens","tokens","c","tokens","c","c","c","c","c","c","c","c","c","c","c","c","c","tokens","DEFAULT_OPTIONS","estimateTextSize","lightTheme","tokens","darkTheme","c","tokens","c","root","title","icon","content","styles.root","styles.title","styles.icon","styles.content","c","root","styles.root","c","root","icon","styles.icon","styles.heading","styles.headingLink","styles.desc","styles.descLink","styles.root","styles.link","styles.linkStates","styles.feature","styles.featureStates","c","root","styles.root","styles.list","styles.trigger","styles.triggerStates","styles.panel","c","root","styles.root","styles.item","styles.number","styles.content","styles.title","styles.body","c","root","rootStates","sm","md","lg","styles.solid","styles.solidStates","styles.outline","styles.outlineStates","styles.ghost","styles.ghostStates","sizeStyles","styles.sm","styles.md","styles.lg","styles.root","styles.rootStates","styles.danger","styles.dangerStates","c","root","styles.root","styles.horizontal","styles.vertical","c","label","root","sm","md","lg","sizeStyles","styles.sm","styles.md","styles.lg","styles.root","styles.rootStates","styles.wrapper","styles.label","c","root","styles.sm","styles.md","styles.lg","styles.root","styles.image","styles.fallback","c","root","styles.root","styles.root","styles.rootDisabled","styles.track","styles.trackOn","styles.thumb","styles.thumbOn","styles.label","join","dirname","mkdir","lucidePlugin","llmsPlugin"],"sources":["../../../../mermaid/src/parser/tokenizer.ts","../../../../mermaid/src/parser/flowchart.ts","../../../../mermaid/src/parser/sequence.ts","../../../../mermaid/src/parser/index.ts","../../../../mermaid/src/root.style.ts","../../../../mermaid/src/tokens.ts","../../../../mermaid/src/edge.style.ts","../../../../mermaid/src/components/defs.tsx","../../../../mermaid/src/node.style.ts","../../../../mermaid/src/components/nodes/rect.tsx","../../../../mermaid/src/components/nodes/round.tsx","../../../../mermaid/src/components/nodes/circle.tsx","../../../../mermaid/src/components/nodes/rhombus.tsx","../../../../mermaid/src/components/nodes/hexagon.tsx","../../../../mermaid/src/components/nodes/stadium.tsx","../../../../mermaid/src/components/nodes/cylinder.tsx","../../../../mermaid/src/components/nodes/subroutine.tsx","../../../../mermaid/src/components/nodes/asymmetric.tsx","../../../../mermaid/src/components/nodes/parallelogram.tsx","../../../../mermaid/src/components/nodes/trapezoid.tsx","../../../../mermaid/src/components/nodes/double-circle.tsx","../../../../mermaid/src/components/nodes/index.ts","../../../../mermaid/src/components/edge.tsx","../../../../mermaid/src/subgraph.style.ts","../../../../mermaid/src/components/subgraph.tsx","../../../../mermaid/src/layout/flowchart.ts","../../../../mermaid/src/layout/sequence.ts","../../../../mermaid/src/layout/index.ts","../../../../mermaid/src/themes.ts","../../../../mermaid/src/provider.tsx","../../../../mermaid/src/components/label.tsx","../../../../mermaid/src/sequence.style.ts","../../../../mermaid/src/components/sequence/participant.tsx","../../../../mermaid/src/components/sequence/message.tsx","../../../../mermaid/src/components/sequence/lifeline.tsx","../../../../mermaid/src/components/sequence/activation.tsx","../../../../mermaid/src/components/sequence/block.tsx","../../../../mermaid/src/components/sequence/note.tsx","../../../../mermaid/src/components/index.ts","../../../../mermaid/src/flowchart.tsx","../../../../mermaid/src/sequence.tsx","../../../../mermaid/src/mermaid.tsx","../../../../mermaid/src/remark-mermaid.ts","../../../../ssg/src/plugins/docs-theme/styles.ts","../../../../ui/src/theme/tokens.ts","../../../../ui/src/components/callout/callout.style.ts","../../../../ui/src/components/callout/callout.tsx","../../../../ui/src/components/badge/badge.style.ts","../../../../ui/src/components/badge/badge.tsx","../../../../ui/src/components/card/card.style.ts","../../../../ui/src/components/card/card.tsx","../../../../ui/src/components/tabs/tabs.style.ts","../../../../ui/src/components/tabs/tabs.tsx","../../../../ui/src/components/steps/steps.style.ts","../../../../ui/src/components/steps/steps.tsx","../../../../ui/src/theme/themes.ts","../../../../ui/src/theme/provider.tsx","../../../../ui/src/components/button/button.style.ts","../../../../ui/src/components/button/button.tsx","../../../../ui/src/components/separator/separator.style.ts","../../../../ui/src/components/separator/separator.tsx","../../../../ui/src/components/input/input.style.ts","../../../../ui/src/components/input/input.tsx","../../../../ui/src/components/avatar/avatar.style.ts","../../../../ui/src/components/avatar/avatar.tsx","../../../../ui/src/components/kbd/kbd.style.ts","../../../../ui/src/components/kbd/kbd.tsx","../../../../ui/src/components/switch/switch.style.ts","../../../../ui/src/components/switch/switch.tsx","../../../../ssg/src/plugins/docs-theme/components.tsx","../../../../ssg/src/plugins/llms/index.ts","../../../../ssg/src/plugins/docs-theme/index.ts"],"sourcesContent":["export interface Token {\n type: TokenType;\n value: string;\n line: number;\n column: number;\n}\n\nexport type TokenType =\n | \"keyword\"\n | \"identifier\"\n | \"string\"\n | \"arrow\"\n | \"openBracket\"\n | \"closeBracket\"\n | \"openParen\"\n | \"closeParen\"\n | \"openBrace\"\n | \"closeBrace\"\n | \"pipe\"\n | \"colon\"\n | \"semicolon\"\n | \"newline\"\n | \"comment\"\n | \"eof\";\n\nconst KEYWORDS = new Set([\n \"graph\",\n \"flowchart\",\n \"sequenceDiagram\",\n \"subgraph\",\n \"end\",\n \"direction\",\n \"participant\",\n \"actor\",\n \"as\",\n \"activate\",\n \"deactivate\",\n \"loop\",\n \"alt\",\n \"else\",\n \"opt\",\n \"par\",\n \"and\",\n \"critical\",\n \"break\",\n \"Note\",\n \"over\",\n \"left\",\n \"right\",\n \"of\",\n]);\n\n// Arrow patterns sorted longest-first for greedy match\nconst ARROW_PATTERNS = [\n // Dotted arrows (sequence)\n \"-->>\",\n \"--))\",\n // Solid arrows (sequence)\n \"->>\",\n \"-))\",\n // Flowchart: bidirectional (longest first)\n \"x-.-x\",\n \"o-.-o\",\n \"<-.->\",\n \"x==x\",\n \"o==o\",\n \"<==>\",\n \"x--x\",\n \"o--o\",\n \"<-->\",\n // Flowchart: source-marker + target-marker combos\n \"o-.->\",\n \"o==>\",\n \"o-->\",\n // Flowchart: dotted with markers\n \"-.-o\",\n \"-.-x\",\n \"-.->|\",\n \"-.->\",\n \"-.-\",\n // Flowchart: thick with markers\n \"==o\",\n \"==x\",\n \"==>|\",\n \"==>\",\n \"===\",\n // Flowchart: solid with markers\n \"--o\",\n \"--x\",\n \"-->|\",\n \"-->\",\n \"---\",\n // Sequence\n \"-x\",\n // Short forms\n \"->\",\n \"--\",\n];\n\nexport function tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let pos = 0;\n let line = 1;\n let col = 1;\n\n while (pos < input.length) {\n const ch = input[pos];\n\n // Skip spaces and tabs (but not newlines)\n if (ch === \" \" || ch === \"\\t\") {\n pos++;\n col++;\n continue;\n }\n\n // Newlines\n if (ch === \"\\n\") {\n tokens.push({ type: \"newline\", value: \"\\n\", line, column: col });\n pos++;\n line++;\n col = 1;\n continue;\n }\n\n // Carriage return\n if (ch === \"\\r\") {\n pos++;\n if (pos < input.length && input[pos] === \"\\n\") pos++;\n tokens.push({ type: \"newline\", value: \"\\n\", line, column: col });\n line++;\n col = 1;\n continue;\n }\n\n // Comments (%%...)\n if (ch === \"%\" && pos + 1 < input.length && input[pos + 1] === \"%\") {\n const start = pos;\n pos += 2;\n while (pos < input.length && input[pos] !== \"\\n\") pos++;\n tokens.push({ type: \"comment\", value: input.slice(start, pos), line, column: col });\n col += pos - start;\n continue;\n }\n\n // Semicolons\n if (ch === \";\") {\n tokens.push({ type: \"semicolon\", value: \";\", line, column: col });\n pos++;\n col++;\n continue;\n }\n\n // Colons\n if (ch === \":\") {\n tokens.push({ type: \"colon\", value: \":\", line, column: col });\n pos++;\n col++;\n continue;\n }\n\n // Pipes\n if (ch === \"|\") {\n tokens.push({ type: \"pipe\", value: \"|\", line, column: col });\n pos++;\n col++;\n continue;\n }\n\n // Brackets\n if (ch === \"[\") {\n tokens.push({ type: \"openBracket\", value: \"[\", line, column: col });\n pos++;\n col++;\n continue;\n }\n if (ch === \"]\") {\n tokens.push({ type: \"closeBracket\", value: \"]\", line, column: col });\n pos++;\n col++;\n continue;\n }\n\n // Parens\n if (ch === \"(\") {\n // Check for (( double paren\n if (pos + 1 < input.length && input[pos + 1] === \"(\") {\n tokens.push({ type: \"openParen\", value: \"((\", line, column: col });\n pos += 2;\n col += 2;\n } else {\n tokens.push({ type: \"openParen\", value: \"(\", line, column: col });\n pos++;\n col++;\n }\n continue;\n }\n if (ch === \")\") {\n if (pos + 1 < input.length && input[pos + 1] === \")\") {\n tokens.push({ type: \"closeParen\", value: \"))\", line, column: col });\n pos += 2;\n col += 2;\n } else {\n tokens.push({ type: \"closeParen\", value: \")\", line, column: col });\n pos++;\n col++;\n }\n continue;\n }\n\n // Braces\n if (ch === \"{\") {\n tokens.push({ type: \"openBrace\", value: \"{\", line, column: col });\n pos++;\n col++;\n continue;\n }\n if (ch === \"}\") {\n tokens.push({ type: \"closeBrace\", value: \"}\", line, column: col });\n pos++;\n col++;\n continue;\n }\n\n // Quoted strings\n if (ch === '\"' || ch === \"'\") {\n const quote = ch;\n const startCol = col;\n pos++;\n col++;\n let value = \"\";\n while (pos < input.length && input[pos] !== quote) {\n if (input[pos] === \"\\\\\") {\n pos++;\n col++;\n }\n value += input[pos];\n pos++;\n col++;\n }\n if (pos < input.length) {\n pos++; // skip closing quote\n col++;\n }\n tokens.push({ type: \"string\", value, line, column: startCol });\n continue;\n }\n\n // Arrows — try longest match first\n let matchedArrow = false;\n for (const arrow of ARROW_PATTERNS) {\n if (input.startsWith(arrow, pos)) {\n tokens.push({ type: \"arrow\", value: arrow, line, column: col });\n pos += arrow.length;\n col += arrow.length;\n matchedArrow = true;\n break;\n }\n }\n if (matchedArrow) continue;\n\n // Identifiers and keywords\n if (isIdStart(ch)) {\n const startCol = col;\n let value = \"\";\n while (pos < input.length && isIdPart(input[pos])) {\n value += input[pos];\n pos++;\n col++;\n }\n const type = KEYWORDS.has(value) ? \"keyword\" : \"identifier\";\n tokens.push({ type, value, line, column: startCol });\n continue;\n }\n\n // Angle brackets for shapes like >text]\n if (ch === \">\") {\n tokens.push({ type: \"openBracket\", value: \">\", line, column: col });\n pos++;\n col++;\n continue;\n }\n\n // Skip other characters\n pos++;\n col++;\n }\n\n tokens.push({ type: \"eof\", value: \"\", line, column: col });\n return tokens;\n}\n\nfunction isIdStart(ch: string | undefined): boolean {\n return ch != null && /[a-zA-Z_$0-9]/.test(ch);\n}\n\nfunction isIdPart(ch: string | undefined): boolean {\n return ch != null && /[a-zA-Z0-9_$]/.test(ch);\n}\n\n/** Filter out comments and newlines for easier parsing */\nexport function filterTokens(tokens: Token[]): Token[] {\n return tokens.filter((t) => t.type !== \"comment\");\n}\n","import type { Token } from \"./tokenizer\";\nimport { tokenize, filterTokens } from \"./tokenizer\";\nimport type {\n FlowchartDiagram,\n FlowNode,\n FlowEdge,\n Subgraph,\n Direction,\n EdgeLineStyle,\n EdgeMarker,\n ParseError,\n} from \"../types\";\n\ninterface ParserState {\n tokens: Token[];\n pos: number;\n nodes: Map<string, FlowNode>;\n edges: FlowEdge[];\n subgraphs: Subgraph[];\n direction: Direction;\n}\n\nexport function parseFlowchart(input: string): FlowchartDiagram | ParseError {\n const rawTokens = tokenize(input);\n const tokens = filterTokens(rawTokens);\n\n const state: ParserState = {\n tokens,\n pos: 0,\n nodes: new Map(),\n edges: [],\n subgraphs: [],\n direction: \"TD\",\n };\n\n // Parse header: graph/flowchart + direction\n if (!parseHeader(state)) {\n return { message: \"Expected 'graph' or 'flowchart' keyword\", line: 1, column: 1 };\n }\n\n // Parse body\n while (!isEof(state)) {\n skipNewlines(state);\n if (isEof(state)) break;\n\n const token = peek(state);\n\n if (token.type === \"keyword\" && token.value === \"subgraph\") {\n const result = parseSubgraph(state);\n if (\"message\" in result) return result;\n continue;\n }\n\n if (token.type === \"keyword\" && token.value === \"direction\") {\n advance(state);\n const dir = peek(state);\n if (dir.type === \"identifier\" || dir.type === \"keyword\") {\n state.direction = dir.value as Direction;\n advance(state);\n }\n skipSemicolon(state);\n continue;\n }\n\n if (token.type === \"keyword\" && token.value === \"end\") {\n // end of subgraph handled in parseSubgraph\n break;\n }\n\n // Try to parse a node definition or edge chain\n const result = parseStatement(state);\n if (result && \"message\" in result) return result;\n }\n\n return {\n type: \"flowchart\",\n direction: state.direction,\n nodes: Array.from(state.nodes.values()),\n edges: state.edges,\n subgraphs: state.subgraphs,\n };\n}\n\nfunction parseHeader(state: ParserState): boolean {\n skipNewlines(state);\n const token = peek(state);\n if (token.type !== \"keyword\" || (token.value !== \"graph\" && token.value !== \"flowchart\")) {\n return false;\n }\n advance(state);\n\n // Optional direction\n skipNewlines(state);\n const dir = peek(state);\n if (dir.type === \"identifier\" || dir.type === \"keyword\") {\n const dirVal = dir.value.toUpperCase();\n if ([\"TB\", \"TD\", \"BT\", \"LR\", \"RL\"].includes(dirVal)) {\n state.direction = dirVal as Direction;\n advance(state);\n }\n }\n\n skipSemicolon(state);\n return true;\n}\n\nfunction parseStatement(state: ParserState): ParseError | undefined {\n // Parse first node\n let currentNode = parseNodeRef(state);\n if (!currentNode) {\n // Skip unknown token\n advance(state);\n return;\n }\n\n // Check if followed by arrow (edge chain: A --> B --> C)\n while (!isEof(state) && peek(state).type === \"arrow\") {\n const arrowToken = advance(state);\n const { lineStyle, sourceMarker, targetMarker } = parseArrow(arrowToken.value);\n\n // Check for edge label: -->|label| or arrow ending with |\n let edgeLabel: string | undefined;\n if (arrowToken.value.endsWith(\"|\")) {\n edgeLabel = parseEdgeLabel(state);\n } else if (peek(state).type === \"pipe\") {\n advance(state); // skip |\n edgeLabel = parseEdgeLabel(state);\n }\n\n // Parse target node\n const targetNode = parseNodeRef(state);\n if (!targetNode) {\n return {\n message: \"Expected target node after arrow\",\n line: arrowToken.line,\n column: arrowToken.column,\n };\n }\n\n state.edges.push({\n source: currentNode,\n target: targetNode,\n lineStyle,\n sourceMarker,\n targetMarker,\n label: edgeLabel,\n });\n\n // Chain: target becomes source for next arrow\n currentNode = targetNode;\n }\n\n skipSemicolon(state);\n}\n\nfunction parseNodeRef(state: ParserState): string | undefined {\n skipNewlines(state);\n const token = peek(state);\n\n if (token.type !== \"identifier\" && token.type !== \"keyword\") {\n return;\n }\n\n if (token.type === \"keyword\" && [\"subgraph\", \"end\", \"direction\"].includes(token.value)) {\n return;\n }\n\n const id = token.value;\n advance(state);\n\n // Check for node shape definition\n const next = peek(state);\n if (next.type === \"openBracket\" || next.type === \"openParen\" || next.type === \"openBrace\") {\n const shape = parseNodeShape(state, id);\n if (shape) {\n if (!state.nodes.has(id)) {\n state.nodes.set(id, shape);\n }\n return id;\n }\n }\n\n // Ensure node exists in map (plain reference)\n if (!state.nodes.has(id)) {\n state.nodes.set(id, { id, label: id, shape: \"rect\" });\n }\n\n return id;\n}\n\nfunction parseNodeShape(state: ParserState, id: string): FlowNode | undefined {\n const open = peek(state);\n\n // [text] → rect\n // (text) → round\n // ((text)) → double-circle\n // {text} → rhombus\n // ([text]) → stadium\n // [(text)] → cylinder\n // [[text]] → subroutine\n // >text] → asymmetric\n // {{text}} → hexagon\n\n if (open.value === \"[\") {\n advance(state);\n const next = peek(state);\n\n // [( → cylinder\n if (next.type === \"openParen\") {\n advance(state);\n const label = readUntil(state, \"closeParen\");\n expect(state, \"closeBracket\");\n return { id, label, shape: \"cylinder\" };\n }\n\n // [[ → subroutine\n if (next.type === \"openBracket\") {\n advance(state);\n const label = readUntil(state, \"closeBracket\");\n expect(state, \"closeBracket\");\n return { id, label, shape: \"subroutine\" };\n }\n\n // [text] → rect\n const label = readUntil(state, \"closeBracket\");\n return { id, label, shape: \"rect\" };\n }\n\n if (open.value === \"(\") {\n advance(state);\n const next = peek(state);\n\n // (( → double-circle\n if (next.type === \"openParen\" || next.value === \"(\") {\n advance(state);\n const label = readUntil(state, \"closeParen\");\n // consume extra )\n if (peek(state).type === \"closeParen\") advance(state);\n return { id, label, shape: \"double-circle\" };\n }\n\n // ([ → stadium (alt syntax)\n if (next.type === \"openBracket\") {\n advance(state);\n const label = readUntil(state, \"closeBracket\");\n expect(state, \"closeParen\");\n return { id, label, shape: \"stadium\" };\n }\n\n // (text) → round\n const label = readUntil(state, \"closeParen\");\n return { id, label, shape: \"round\" };\n }\n\n if (open.value === \"((\") {\n advance(state);\n const label = readUntil(state, \"closeParen\");\n // consume extra ) if needed\n if (peek(state).type === \"closeParen\") advance(state);\n return { id, label, shape: \"double-circle\" };\n }\n\n if (open.value === \"{\") {\n advance(state);\n const next = peek(state);\n\n // {{ → hexagon\n if (next.type === \"openBrace\") {\n advance(state);\n const label = readUntil(state, \"closeBrace\");\n expect(state, \"closeBrace\");\n return { id, label, shape: \"hexagon\" };\n }\n\n // {text} → rhombus\n const label = readUntil(state, \"closeBrace\");\n return { id, label, shape: \"rhombus\" };\n }\n\n // >text] → asymmetric\n if (open.value === \">\") {\n advance(state);\n const label = readUntil(state, \"closeBracket\");\n return { id, label, shape: \"asymmetric\" };\n }\n\n return;\n}\n\nfunction parseEdgeLabel(state: ParserState): string {\n let label = \"\";\n while (!isEof(state) && peek(state).type !== \"pipe\") {\n label += peek(state).value;\n advance(state);\n }\n if (peek(state).type === \"pipe\") advance(state); // skip closing |\n return label.trim();\n}\n\nfunction parseSubgraph(state: ParserState): { ok: true } | ParseError {\n advance(state); // skip \"subgraph\"\n skipNewlines(state);\n\n // subgraph id [label]\n let id = \"\";\n let label = \"\";\n\n const next = peek(state);\n if (next.type === \"identifier\" || next.type === \"keyword\") {\n id = next.value;\n label = id;\n advance(state);\n }\n\n // Optional [label]\n if (peek(state).type === \"openBracket\") {\n advance(state);\n label = readUntil(state, \"closeBracket\");\n }\n\n skipSemicolon(state);\n skipNewlines(state);\n\n // Optional direction inside subgraph\n let direction: Direction | undefined;\n if (peek(state).type === \"keyword\" && peek(state).value === \"direction\") {\n advance(state);\n const dir = peek(state);\n if (dir.type === \"identifier\" || dir.type === \"keyword\") {\n direction = dir.value as Direction;\n advance(state);\n }\n skipSemicolon(state);\n }\n\n // Collect node IDs until \"end\"\n const nodesBefore = new Set(state.nodes.keys());\n const nodeIds: string[] = [];\n while (!isEof(state)) {\n skipNewlines(state);\n if (isEof(state)) break;\n\n const token = peek(state);\n if (token.type === \"keyword\" && token.value === \"end\") {\n advance(state);\n break;\n }\n\n // Parse statements inside subgraph\n const result = parseStatement(state);\n if (result && \"message\" in result) return result;\n\n // Track only nodes added inside this subgraph\n for (const [nodeId] of state.nodes) {\n if (!nodesBefore.has(nodeId) && !nodeIds.includes(nodeId)) {\n nodeIds.push(nodeId);\n }\n }\n }\n\n state.subgraphs.push({\n id: id || `subgraph_${state.subgraphs.length}`,\n label,\n nodes: nodeIds,\n direction,\n });\n return { ok: true };\n}\n\ninterface ParsedArrow {\n lineStyle: EdgeLineStyle;\n sourceMarker: EdgeMarker;\n targetMarker: EdgeMarker;\n}\n\nfunction parseArrow(arrow: string): ParsedArrow {\n // Strip trailing | (label syntax)\n const raw = arrow.endsWith(\"|\") ? arrow.slice(0, -1) : arrow;\n\n // Determine source marker from prefix\n let sourceMarker: EdgeMarker = \"none\";\n let rest = raw;\n\n if (rest.startsWith(\"o\")) {\n sourceMarker = \"dot\";\n rest = rest.slice(1);\n } else if (rest.startsWith(\"x\")) {\n sourceMarker = \"cross\";\n rest = rest.slice(1);\n } else if (rest.startsWith(\"<\")) {\n sourceMarker = \"arrow\";\n rest = rest.slice(1);\n }\n\n // Determine target marker from suffix\n let targetMarker: EdgeMarker = \"none\";\n if (rest.endsWith(\">\")) {\n targetMarker = \"arrow\";\n rest = rest.slice(0, -1);\n } else if (rest.endsWith(\"o\")) {\n targetMarker = \"dot\";\n rest = rest.slice(0, -1);\n } else if (rest.endsWith(\"x\")) {\n targetMarker = \"cross\";\n rest = rest.slice(0, -1);\n }\n\n // Determine line style from the stem\n let lineStyle: EdgeLineStyle = \"solid\";\n if (rest.includes(\"-.\") || rest.includes(\".-\")) {\n lineStyle = \"dotted\";\n } else if (rest.startsWith(\"==\") || rest.startsWith(\"=\")) {\n lineStyle = \"thick\";\n }\n\n return { lineStyle, sourceMarker, targetMarker };\n}\n\n// ── Helpers ────────────────────────────────────────────\n\nfunction peek(state: ParserState): Token {\n return state.tokens[state.pos] ?? { type: \"eof\", value: \"\", line: 0, column: 0 };\n}\n\nfunction advance(state: ParserState): Token {\n const token = state.tokens[state.pos] ?? { type: \"eof\" as const, value: \"\", line: 0, column: 0 };\n if (state.pos < state.tokens.length) state.pos++;\n return token;\n}\n\nfunction isEof(state: ParserState): boolean {\n return state.pos >= state.tokens.length || state.tokens[state.pos]?.type === \"eof\";\n}\n\nfunction skipNewlines(state: ParserState): void {\n while (!isEof(state) && peek(state).type === \"newline\") {\n advance(state);\n }\n}\n\nfunction skipSemicolon(state: ParserState): void {\n if (!isEof(state) && peek(state).type === \"semicolon\") {\n advance(state);\n }\n}\n\nfunction expect(state: ParserState, type: string): Token | undefined {\n if (peek(state).type === type) {\n return advance(state);\n }\n return;\n}\n\nfunction readUntil(state: ParserState, closeType: string): string {\n let value = \"\";\n while (!isEof(state) && peek(state).type !== closeType) {\n if (value) value += \" \";\n value += peek(state).value;\n advance(state);\n }\n if (peek(state).type === closeType) advance(state);\n return value.trim();\n}\n","import type { Token } from \"./tokenizer\";\nimport { tokenize, filterTokens } from \"./tokenizer\";\nimport type {\n SequenceDiagram,\n Participant,\n Message,\n Block,\n Note,\n ArrowType,\n BlockType,\n NotePosition,\n ParseError,\n} from \"../types\";\n\ninterface ParserState {\n tokens: Token[];\n pos: number;\n participants: Map<string, Participant>;\n messages: Message[];\n blocks: Block[];\n notes: Note[];\n}\n\nexport function parseSequence(input: string): SequenceDiagram | ParseError {\n const rawTokens = tokenize(input);\n const tokens = filterTokens(rawTokens);\n\n const state: ParserState = {\n tokens,\n pos: 0,\n participants: new Map(),\n messages: [],\n blocks: [],\n notes: [],\n };\n\n // Parse header\n skipNewlines(state);\n const header = peek(state);\n if (header.type !== \"keyword\" || header.value !== \"sequenceDiagram\") {\n return {\n message: \"Expected 'sequenceDiagram' keyword\",\n line: header.line,\n column: header.column,\n };\n }\n advance(state);\n skipNewlines(state);\n\n // Parse body\n while (!isEof(state)) {\n skipNewlines(state);\n if (isEof(state)) break;\n\n const token = peek(state);\n\n // participant / actor declaration\n if (token.type === \"keyword\" && (token.value === \"participant\" || token.value === \"actor\")) {\n parseParticipant(state, token.value as \"participant\" | \"actor\");\n continue;\n }\n\n // activate / deactivate\n if (token.type === \"keyword\" && (token.value === \"activate\" || token.value === \"deactivate\")) {\n // Skip — we handle activate/deactivate inline on messages\n advance(state);\n skipNewlines(state);\n if (!isEof(state) && peek(state).type === \"identifier\") advance(state);\n skipNewlines(state);\n continue;\n }\n\n // Note\n if (token.type === \"keyword\" && token.value === \"Note\") {\n const result = parseNote(state);\n if (result && \"message\" in result) return result;\n continue;\n }\n\n // Block (loop, alt, opt, par, critical, break)\n if (token.type === \"keyword\" && isBlockKeyword(token.value)) {\n const result = parseBlock(state);\n if (\"message\" in result) return result;\n continue;\n }\n\n // end keyword\n if (token.type === \"keyword\" && token.value === \"end\") {\n break;\n }\n\n // Try to parse message: A->>B: text\n if (token.type === \"identifier\" || token.type === \"keyword\") {\n const result = parseMessage(state);\n if (result && \"message\" in result && \"line\" in result) return result;\n continue;\n }\n\n // Skip unknown\n advance(state);\n }\n\n return {\n type: \"sequence\",\n participants: Array.from(state.participants.values()),\n messages: state.messages,\n blocks: state.blocks,\n notes: state.notes,\n };\n}\n\nfunction parseParticipant(state: ParserState, type: \"participant\" | \"actor\"): void {\n advance(state); // skip participant/actor keyword\n skipNewlines(state);\n\n const idToken = peek(state);\n if (idToken.type !== \"identifier\" && idToken.type !== \"keyword\") return;\n\n const id = idToken.value;\n advance(state);\n\n // Optional \"as Label\"\n let label = id;\n if (peek(state).type === \"keyword\" && peek(state).value === \"as\") {\n advance(state); // skip \"as\"\n label = readRestOfLine(state);\n }\n\n state.participants.set(id, { id, label, type });\n skipNewlines(state);\n}\n\nfunction parseMessage(state: ParserState): ParseError | undefined {\n const fromToken = peek(state);\n const from = fromToken.value;\n advance(state);\n\n // Ensure participant exists\n ensureParticipant(state, from);\n\n // Expect arrow\n if (peek(state).type !== \"arrow\") {\n // Not a message, might be something else. Skip line.\n skipToEndOfLine(state);\n return;\n }\n\n const arrowToken = advance(state);\n const arrow = arrowToType(arrowToken.value);\n\n // Parse target\n const toToken = peek(state);\n if (toToken.type !== \"identifier\" && toToken.type !== \"keyword\") {\n return {\n message: `Expected target after arrow at line ${arrowToken.line}`,\n line: arrowToken.line,\n column: arrowToken.column,\n };\n }\n const to = toToken.value;\n advance(state);\n\n ensureParticipant(state, to);\n\n // Parse label after :\n let text = \"\";\n if (peek(state).type === \"colon\") {\n advance(state); // skip :\n text = readRestOfLine(state);\n }\n\n // Check for +/- suffix in arrow for activate/deactivate\n const activate = arrowToken.value.includes(\"+\") || undefined;\n const deactivate = arrowToken.value.includes(\"-\") || undefined;\n\n state.messages.push({ from, to, text, arrow, activate, deactivate });\n skipNewlines(state);\n}\n\nfunction parseNote(state: ParserState): ParseError | undefined {\n advance(state); // skip \"Note\"\n\n // Parse position: \"left of\", \"right of\", \"over\"\n let position: NotePosition;\n const posToken = peek(state);\n\n if (posToken.value === \"left\" || posToken.value === \"right\") {\n const side = posToken.value;\n advance(state);\n // expect \"of\"\n if (peek(state).value === \"of\") advance(state);\n position = `${side} of` as NotePosition;\n } else if (posToken.value === \"over\") {\n advance(state);\n position = \"over\";\n } else {\n return {\n message: `Expected note position (left of, right of, over) at line ${posToken.line}`,\n line: posToken.line,\n column: posToken.column,\n };\n }\n\n // Parse participants (comma-separated for \"over\")\n const participants: string[] = [];\n while (!isEof(state) && peek(state).type !== \"colon\" && peek(state).type !== \"newline\") {\n const p = peek(state);\n if (p.type === \"identifier\" || p.type === \"keyword\") {\n participants.push(p.value);\n ensureParticipant(state, p.value);\n }\n advance(state);\n }\n\n // Parse text after :\n let text = \"\";\n if (peek(state).type === \"colon\") {\n advance(state);\n text = readRestOfLine(state);\n }\n\n state.notes.push({ position, participants, text });\n skipNewlines(state);\n}\n\nfunction parseBlock(state: ParserState): { ok: true } | ParseError {\n const typeToken = advance(state);\n const blockType = typeToken.value as BlockType;\n\n // Read label (rest of line)\n let label = \"\";\n if (peek(state).type !== \"newline\" && !isEof(state)) {\n label = readRestOfLine(state);\n }\n skipNewlines(state);\n\n const messages: Message[] = [];\n const sections: { label: string; messages: Message[] }[] = [];\n let currentSection: { label: string; messages: Message[] } | undefined;\n\n while (!isEof(state)) {\n skipNewlines(state);\n if (isEof(state)) break;\n\n const token = peek(state);\n\n // end of block\n if (token.type === \"keyword\" && token.value === \"end\") {\n advance(state);\n break;\n }\n\n // else section (for alt blocks)\n if (token.type === \"keyword\" && token.value === \"else\") {\n advance(state);\n const sectionLabel = readRestOfLine(state);\n if (currentSection) sections.push(currentSection);\n currentSection = { label: sectionLabel, messages: [] };\n skipNewlines(state);\n continue;\n }\n\n // and section (for par blocks)\n if (token.type === \"keyword\" && token.value === \"and\") {\n advance(state);\n const sectionLabel = readRestOfLine(state);\n if (currentSection) sections.push(currentSection);\n currentSection = { label: sectionLabel, messages: [] };\n skipNewlines(state);\n continue;\n }\n\n // Nested Note\n if (token.type === \"keyword\" && token.value === \"Note\") {\n parseNote(state);\n continue;\n }\n\n // Parse message inside block\n if (token.type === \"identifier\" || token.type === \"keyword\") {\n const beforeLen = state.messages.length;\n parseMessage(state);\n // Move the message from state.messages to block messages\n if (state.messages.length > beforeLen) {\n const msg = state.messages.pop()!;\n if (currentSection) {\n currentSection.messages.push(msg);\n } else {\n messages.push(msg);\n }\n }\n continue;\n }\n\n advance(state); // skip unknown\n }\n\n if (currentSection) sections.push(currentSection);\n\n state.blocks.push({\n type: blockType,\n label,\n messages,\n sections: sections.length > 0 ? sections : undefined,\n });\n\n skipNewlines(state);\n return { ok: true };\n}\n\nfunction arrowToType(arrow: string): ArrowType {\n if (arrow === \"->>\") return \"solid\";\n if (arrow === \"-->>\") return \"dotted\";\n if (arrow === \"-x\" || arrow === \"-X\") return \"solidCross\";\n if (arrow === \"--x\" || arrow === \"--X\") return \"dottedCross\";\n if (arrow === \"-))\") return \"solidOpen\";\n if (arrow === \"--))\") return \"dottedOpen\";\n if (arrow === \"->\") return \"solid\";\n return \"solid\";\n}\n\nfunction isBlockKeyword(value: string): boolean {\n return [\"loop\", \"alt\", \"opt\", \"par\", \"critical\", \"break\"].includes(value);\n}\n\nfunction ensureParticipant(state: ParserState, id: string): void {\n if (!state.participants.has(id)) {\n state.participants.set(id, { id, label: id, type: \"participant\" });\n }\n}\n\n// ── Helpers ────────────────────────────────────────────\n\nfunction peek(state: ParserState): Token {\n return state.tokens[state.pos] ?? { type: \"eof\" as const, value: \"\", line: 0, column: 0 };\n}\n\nfunction advance(state: ParserState): Token {\n const token = state.tokens[state.pos] ?? { type: \"eof\" as const, value: \"\", line: 0, column: 0 };\n if (state.pos < state.tokens.length) state.pos++;\n return token;\n}\n\nfunction isEof(state: ParserState): boolean {\n return state.pos >= state.tokens.length || state.tokens[state.pos]?.type === \"eof\";\n}\n\nfunction skipNewlines(state: ParserState): void {\n while (!isEof(state) && peek(state).type === \"newline\") {\n advance(state);\n }\n}\n\nfunction skipToEndOfLine(state: ParserState): void {\n while (!isEof(state) && peek(state).type !== \"newline\") {\n advance(state);\n }\n}\n\nfunction readRestOfLine(state: ParserState): string {\n let text = \"\";\n while (!isEof(state) && peek(state).type !== \"newline\" && peek(state).type !== \"semicolon\") {\n if (text) text += \" \";\n text += peek(state).value;\n advance(state);\n }\n return text.trim();\n}\n","import { parseFlowchart } from \"./flowchart\";\nimport { parseSequence } from \"./sequence\";\nimport type { ParseResult } from \"../types\";\n\n/**\n * Parse a Mermaid DSL string into a structured diagram IR.\n *\n * Returns a FlowchartDiagram, SequenceDiagram, or ParseError.\n * Check for errors with: `if (\"message\" in result)`\n */\nexport function parse(input: string): ParseResult {\n const trimmed = input.trim();\n\n if (trimmed.startsWith(\"sequenceDiagram\")) {\n return parseSequence(trimmed);\n }\n\n if (trimmed.startsWith(\"graph\") || trimmed.startsWith(\"flowchart\")) {\n return parseFlowchart(trimmed);\n }\n\n return {\n message: `Unknown diagram type. Expected 'graph', 'flowchart', or 'sequenceDiagram'.`,\n line: 1,\n column: 1,\n };\n}\n\nexport { parseFlowchart } from \"./flowchart\";\nexport { parseSequence } from \"./sequence\";\nexport { tokenize } from \"./tokenizer\";\n","import { classes, rule } from \"@semajsx/style\";\nimport type { StyleToken, ClassRefs } from \"@semajsx/style\";\n\nconst ROOT_CLASSES = [\"svgRoot\"] as const;\n\nconst c: ClassRefs<typeof ROOT_CLASSES> = classes(ROOT_CLASSES);\n\nexport const svgRoot: StyleToken = rule`${c.svgRoot} {\n width: 100%;\n height: auto;\n font-family: inherit;\n}`;\n\nexport { c };\n","import { createTheme, defineTokens } from \"@semajsx/style\";\nimport type { StyleToken, TokenRefs } from \"@semajsx/style\";\n\nconst tokenDefinition = {\n // Node\n nodeFill: \"#e8f4f8\",\n nodeStroke: \"#23395d\",\n nodeText: \"#1d1d1f\",\n nodeRadius: \"8\",\n\n // Edge\n edgeStroke: \"#666\",\n edgeWidth: \"2\",\n edgeLabelBg: \"#fff\",\n edgeLabelText: \"#333\",\n\n // Arrow\n arrowFill: \"#666\",\n\n // Animation\n animatedDashArray: \"5\",\n animatedDuration: \"0.5s\",\n animatedDashOffset: \"10\",\n\n // Subgraph\n subgraphFill: \"#f8f9fa\",\n subgraphStroke: \"#ccc\",\n subgraphTitleBg: \"#eee\",\n subgraphTitleText: \"#333\",\n\n // Sequence\n actorFill: \"#e8f4f8\",\n actorStroke: \"#23395d\",\n lifelineStroke: \"#999\",\n activationFill: \"#d4e6f1\",\n messageStroke: \"#333\",\n blockFill: \"rgba(200,200,200,0.1)\",\n blockStroke: \"#aaa\",\n noteBg: \"#fffacd\",\n noteStroke: \"#e6d800\",\n noteText: \"#333\",\n\n // Background\n bgColor: \"#ffffff\",\n gridDotColor: \"rgba(0, 0, 0, 0.1)\",\n gridDotGap: \"20\",\n gridDotRadius: \"1\",\n\n // General\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Inter', sans-serif\",\n fontSize: \"14\",\n} as const;\n\nexport const tokens: TokenRefs<typeof tokenDefinition> = defineTokens(tokenDefinition);\n\n/**\n * Default mermaid theme — sets CSS custom properties on :root.\n * Embed its __cssTemplate in an SVG <style> for self-contained rendering.\n */\nexport const defaultTheme: StyleToken = createTheme(tokens);\n","import { classes, rule } from \"@semajsx/style\";\nimport type { StyleToken, ClassRefs } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\nconst EDGE_CLASSES = [\n \"edgeLine\",\n \"edgeInteraction\",\n \"edgeArrow\",\n \"edgeDotted\",\n \"edgeThick\",\n \"edgeAnimated\",\n \"edgeLabel\",\n \"edgeLabelBg\",\n \"arrowHead\",\n \"arrowHeadClosed\",\n \"dotMarker\",\n \"crossMarker\",\n] as const;\n\nconst c: ClassRefs<typeof EDGE_CLASSES> = classes(EDGE_CLASSES);\n\nexport const edgeLine: StyleToken = rule`${c.edgeLine} {\n fill: none;\n stroke: ${tokens.edgeStroke};\n stroke-width: ${tokens.edgeWidth};\n stroke-linecap: round;\n stroke-linejoin: round;\n}`;\n\nexport const edgeInteraction: StyleToken = rule`${c.edgeInteraction} {\n fill: none;\n stroke-opacity: 0;\n stroke-width: 20;\n}`;\n\nexport const edgeDotted: StyleToken = rule`${c.edgeDotted} {\n stroke-dasharray: 6, 4;\n}`;\n\nexport const edgeAnimated: StyleToken = rule`${c.edgeAnimated} {\n stroke-dasharray: ${tokens.animatedDashArray};\n animation: mmd-dash-flow ${tokens.animatedDuration} linear infinite;\n}`;\n\nexport const edgeAnimatedKeyframes: StyleToken = rule`\n@keyframes mmd-dash-flow {\n from {\n stroke-dashoffset: ${tokens.animatedDashOffset};\n }\n}\n`;\n\nexport const edgeThick: StyleToken = rule`${c.edgeThick} {\n stroke-width: 3;\n}`;\n\nexport const edgeLabel: StyleToken = rule`${c.edgeLabel} {\n fill: ${tokens.edgeLabelText};\n stroke: none;\n font-family: ${tokens.fontFamily};\n font-size: 12px;\n text-anchor: middle;\n dominant-baseline: central;\n}`;\n\nexport const edgeLabelBg: StyleToken = rule`${c.edgeLabelBg} {\n fill: ${tokens.edgeLabelBg};\n stroke: none;\n}`;\n\nexport const arrowHead: StyleToken = rule`${c.arrowHead} {\n fill: none;\n stroke: ${tokens.arrowFill};\n stroke-width: 1;\n stroke-linecap: round;\n stroke-linejoin: round;\n}`;\n\nexport const arrowHeadClosed: StyleToken = rule`${c.arrowHeadClosed} {\n fill: ${tokens.arrowFill};\n stroke: ${tokens.arrowFill};\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n}`;\n\nexport const dotMarker: StyleToken = rule`${c.dotMarker} {\n fill: ${tokens.bgColor};\n stroke: ${tokens.edgeStroke};\n stroke-width: 1.5;\n}`;\n\nexport const crossMarker: StyleToken = rule`${c.crossMarker} {\n fill: none;\n stroke: ${tokens.edgeStroke};\n stroke-width: 2;\n stroke-linecap: round;\n}`;\n\nexport { c };\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { arrowHead, arrowHeadClosed, dotMarker, crossMarker } from \"../edge.style\";\nimport { tokens } from \"../tokens\";\n\n/**\n * Arrow markers follow xyflow conventions:\n * - viewBox \"-10 -10 20 20\", tip at origin (0,0)\n * - refX=0 so the arrow tip aligns with the path endpoint\n * - markerUnits=\"strokeWidth\" for automatic scaling\n *\n * Closed arrow: polyline \"-5,-4 0,0 -5,4 -5,-4\" (filled triangle)\n * Open arrow: polyline \"-5,-4 0,0 -5,4\" (chevron)\n */\nconst ARROW_CLOSED_POINTS = \"-5,-4 0,0 -5,4 -5,-4\";\nconst ARROW_OPEN_POINTS = \"-5,-4 0,0 -5,4\";\n\n/** Dot marker radius in marker coordinate space. */\nconst DOT_RADIUS = 4;\n\nexport function Defs(): JSXNode {\n return (\n <defs>\n {/* Grid dot background pattern */}\n <pattern\n id=\"mmd-grid\"\n x={0}\n y={0}\n width={tokens.gridDotGap}\n height={tokens.gridDotGap}\n patternUnits=\"userSpaceOnUse\"\n >\n <circle\n cx={tokens.gridDotGap}\n cy={tokens.gridDotGap}\n r={tokens.gridDotRadius}\n fill={tokens.gridDotColor}\n />\n </pattern>\n\n {/* Arrow — filled triangle, tip at origin */}\n <marker\n id=\"mmd-arrow\"\n viewBox=\"-10 -10 20 20\"\n refX={0}\n refY={0}\n markerWidth={12.5}\n markerHeight={12.5}\n markerUnits=\"strokeWidth\"\n orient=\"auto-start-reverse\"\n >\n <polyline\n class={arrowHeadClosed}\n points={ARROW_CLOSED_POINTS}\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </marker>\n\n {/* Arrow filled — identical, kept for edge-type mapping */}\n <marker\n id=\"mmd-arrow-filled\"\n viewBox=\"-10 -10 20 20\"\n refX={0}\n refY={0}\n markerWidth={12.5}\n markerHeight={12.5}\n markerUnits=\"strokeWidth\"\n orient=\"auto-start-reverse\"\n >\n <polyline\n class={arrowHeadClosed}\n points={ARROW_CLOSED_POINTS}\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </marker>\n\n {/* Open arrow — chevron (unfilled), tip at origin */}\n <marker\n id=\"mmd-arrow-open\"\n viewBox=\"-10 -10 20 20\"\n refX={0}\n refY={0}\n markerWidth={12.5}\n markerHeight={12.5}\n markerUnits=\"strokeWidth\"\n orient=\"auto-start-reverse\"\n >\n <polyline\n class={arrowHead}\n points={ARROW_OPEN_POINTS}\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </marker>\n\n {/* Dot endpoint — hollow circle, center at origin */}\n <marker\n id=\"mmd-dot\"\n viewBox=\"-10 -10 20 20\"\n refX={0}\n refY={0}\n markerWidth={8}\n markerHeight={8}\n markerUnits=\"strokeWidth\"\n orient=\"auto-start-reverse\"\n >\n <circle class={dotMarker} cx={0} cy={0} r={DOT_RADIUS} />\n </marker>\n\n {/* Cross endpoint — X mark, center at origin */}\n <marker\n id=\"mmd-cross\"\n viewBox=\"-10 -10 20 20\"\n refX={0}\n refY={0}\n markerWidth={10}\n markerHeight={10}\n markerUnits=\"strokeWidth\"\n orient=\"auto-start-reverse\"\n >\n <path class={crossMarker} d=\"M -4,-4 L 4,4 M -4,4 L 4,-4\" />\n </marker>\n </defs>\n );\n}\n","import { classes, rule } from \"@semajsx/style\";\nimport type { StyleToken, ClassRefs } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\nconst NODE_CLASSES = [\n \"node\",\n \"nodeShape\",\n \"nodeRect\",\n \"nodeRound\",\n \"nodeCircle\",\n \"nodeRhombus\",\n \"nodeHexagon\",\n \"nodeCylinder\",\n \"nodeStadium\",\n \"nodeLabel\",\n] as const;\n\nconst c: ClassRefs<typeof NODE_CLASSES> = classes(NODE_CLASSES);\n\nexport const nodeShape: StyleToken = rule`${c.nodeShape} {\n fill: ${tokens.nodeFill};\n stroke: ${tokens.nodeStroke};\n stroke-width: ${tokens.edgeWidth};\n}`;\n\nexport const nodeShapeHover: StyleToken = rule`${c.nodeShape} {\n transition: filter 0.15s ease;\n cursor: pointer;\n}\n${c.nodeShape}:hover {\n filter: brightness(0.93);\n}`;\n\nexport const nodeLabel: StyleToken = rule`${c.nodeLabel} {\n fill: ${tokens.nodeText};\n stroke: none;\n font-family: ${tokens.fontFamily};\n font-size: ${tokens.fontSize}px;\n text-anchor: middle;\n dominant-baseline: central;\n pointer-events: none;\n}`;\n\nexport { c };\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function RectNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <rect\n class={[nodeShape, nodeShapeHover]}\n x={-width / 2}\n y={-height / 2}\n width={width}\n height={height}\n rx={12}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function RoundNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <rect\n class={[nodeShape, nodeShapeHover]}\n x={-width / 2}\n y={-height / 2}\n width={width}\n height={height}\n rx={height / 2}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function CircleNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width } = props.positioned;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <circle class={[nodeShape, nodeShapeHover]} r={width / 2} />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function RhombusNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <polygon class={[nodeShape, nodeShapeHover]} points={`0,${-hh} ${hw},0 0,${hh} ${-hw},0`} />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function HexagonNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n const inset = width * 0.15;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <polygon\n class={[nodeShape, nodeShapeHover]}\n points={`${-hw + inset},${-hh} ${hw - inset},${-hh} ${hw},0 ${hw - inset},${hh} ${-hw + inset},${hh} ${-hw},0`}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function StadiumNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <rect\n class={[nodeShape, nodeShapeHover]}\n x={-width / 2}\n y={-height / 2}\n width={width}\n height={height}\n rx={height / 2}\n ry={height / 2}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function CylinderNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n const ry = 8;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <path\n class={[nodeShape, nodeShapeHover]}\n d={`M ${-hw} ${-hh + ry} A ${hw} ${ry} 0 0 1 ${hw} ${-hh + ry} L ${hw} ${hh - ry} A ${hw} ${ry} 0 0 1 ${-hw} ${hh - ry} Z`}\n />\n <ellipse class={nodeShape} cx={0} cy={-hh + ry} rx={hw} ry={ry} />\n <text class={nodeLabel} y={ry / 2}>\n {node.label}\n </text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function SubroutineNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n const inset = 8;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <rect\n class={[nodeShape, nodeShapeHover]}\n x={-hw}\n y={-hh}\n width={width}\n height={height}\n rx={0}\n />\n <line class={nodeShape} x1={-hw + inset} y1={-hh} x2={-hw + inset} y2={hh} />\n <line class={nodeShape} x1={hw - inset} y1={-hh} x2={hw - inset} y2={hh} />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function AsymmetricNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n const notch = 10;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <polygon\n class={[nodeShape, nodeShapeHover]}\n points={`${-hw},${-hh} ${hw},${-hh} ${hw},${hh} ${-hw},${hh} ${-hw + notch},0`}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function ParallelogramNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n const skew = width * 0.15;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <polygon\n class={[nodeShape, nodeShapeHover]}\n points={`${-hw + skew},${-hh} ${hw + skew},${-hh} ${hw - skew},${hh} ${-hw - skew},${hh}`}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function TrapezoidNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width, height } = props.positioned;\n const hw = width / 2;\n const hh = height / 2;\n const inset = width * 0.15;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <polygon\n class={[nodeShape, nodeShapeHover]}\n points={`${-hw + inset},${-hh} ${hw - inset},${-hh} ${hw},${hh} ${-hw},${hh}`}\n />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { c, nodeShape, nodeShapeHover, nodeLabel } from \"../../node.style\";\nimport type { NodeRenderProps } from \"../../types\";\n\nexport function DoubleCircleNode(props: NodeRenderProps): JSXNode {\n const { node, x, y, width } = props.positioned;\n const outerR = width / 2;\n const innerR = outerR - 4;\n return (\n <g class={[c.node, props.class]} transform={`translate(${x}, ${y})`}>\n <circle class={[nodeShape, nodeShapeHover]} r={outerR} />\n <circle class={nodeShape} r={innerR} />\n <text class={nodeLabel}>{node.label}</text>\n </g>\n );\n}\n","import type { Component } from \"@semajsx/core\";\nimport type { NodeRenderProps, NodeShape } from \"../../types\";\nimport { RectNode } from \"./rect\";\nimport { RoundNode } from \"./round\";\nimport { CircleNode } from \"./circle\";\nimport { RhombusNode } from \"./rhombus\";\nimport { HexagonNode } from \"./hexagon\";\nimport { StadiumNode } from \"./stadium\";\nimport { CylinderNode } from \"./cylinder\";\nimport { SubroutineNode } from \"./subroutine\";\nimport { AsymmetricNode } from \"./asymmetric\";\nimport { ParallelogramNode } from \"./parallelogram\";\nimport { TrapezoidNode } from \"./trapezoid\";\nimport { DoubleCircleNode } from \"./double-circle\";\n\nexport const shapeMap: Record<NodeShape, Component<NodeRenderProps>> = {\n rect: RectNode,\n round: RoundNode,\n stadium: StadiumNode,\n circle: CircleNode,\n rhombus: RhombusNode,\n hexagon: HexagonNode,\n cylinder: CylinderNode,\n subroutine: SubroutineNode,\n asymmetric: AsymmetricNode,\n parallelogram: ParallelogramNode,\n trapezoid: TrapezoidNode,\n \"double-circle\": DoubleCircleNode,\n};\n\nexport {\n RectNode,\n RoundNode,\n CircleNode,\n RhombusNode,\n HexagonNode,\n StadiumNode,\n CylinderNode,\n SubroutineNode,\n AsymmetricNode,\n ParallelogramNode,\n TrapezoidNode,\n DoubleCircleNode,\n};\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport {\n edgeLine,\n edgeInteraction,\n edgeLabel,\n edgeLabelBg,\n edgeDotted,\n edgeThick,\n} from \"../edge.style\";\nimport type { EdgeRenderProps, EdgeMarker, EdgeLineStyle } from \"../types\";\n\nconst LINE_STYLE: Record<EdgeLineStyle, StyleToken | undefined> = {\n solid: undefined,\n dotted: edgeDotted,\n thick: edgeThick,\n};\n\nconst MARKER_URL: Record<EdgeMarker, string | undefined> = {\n arrow: \"url(#mmd-arrow)\",\n dot: \"url(#mmd-dot)\",\n cross: \"url(#mmd-cross)\",\n none: undefined,\n};\n\nexport function Edge(props: EdgeRenderProps): JSXNode {\n const { edge, path, labelPosition, labelSize } = props.positioned;\n\n const lineStyle = LINE_STYLE[edge.lineStyle];\n const markerEnd = MARKER_URL[edge.targetMarker];\n const markerStart = MARKER_URL[edge.sourceMarker];\n\n return (\n <g class={props.class}>\n <path\n class={[edgeLine, lineStyle]}\n d={path}\n marker-start={markerStart}\n marker-end={markerEnd}\n />\n <path class={edgeInteraction} d={path} />\n {edge.label && labelPosition && labelSize ? (\n <g>\n <rect\n class={edgeLabelBg}\n x={labelPosition.x - labelSize.width / 2 - 4}\n y={labelPosition.y - labelSize.height / 2 - 2}\n width={labelSize.width + 8}\n height={labelSize.height + 4}\n rx={4}\n />\n <text class={edgeLabel} x={labelPosition.x} y={labelPosition.y}>\n {edge.label}\n </text>\n </g>\n ) : null}\n </g>\n );\n}\n","import { classes, rule } from \"@semajsx/style\";\nimport type { StyleToken, ClassRefs } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\nconst SUBGRAPH_CLASSES = [\"subgraphBg\", \"subgraphTitle\"] as const;\n\nconst c: ClassRefs<typeof SUBGRAPH_CLASSES> = classes(SUBGRAPH_CLASSES);\n\nexport const subgraphBg: StyleToken = rule`${c.subgraphBg} {\n fill: ${tokens.subgraphFill};\n stroke: ${tokens.subgraphStroke};\n stroke-width: 1;\n}`;\n\nexport const subgraphTitle: StyleToken = rule`${c.subgraphTitle} {\n fill: ${tokens.subgraphTitleText};\n font-family: ${tokens.fontFamily};\n font-size: 12px;\n font-weight: 600;\n}`;\n\nexport { c };\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { subgraphBg, subgraphTitle } from \"../subgraph.style\";\nimport type { SubgraphRenderProps } from \"../types\";\n\nexport function SubgraphBox(props: SubgraphRenderProps): JSXNode {\n const { subgraph, x, y, width, height } = props.positioned;\n return (\n <g class={props.class} transform={`translate(${x}, ${y})`}>\n <rect class={subgraphBg} width={width} height={height} rx={8} />\n <text class={subgraphTitle} x={16} y={24}>\n {subgraph.label}\n </text>\n </g>\n );\n}\n","import type {\n FlowchartDiagram,\n FlowchartLayout,\n FlowNode,\n FlowEdge,\n PositionedNode,\n PositionedEdge,\n PositionedSubgraph,\n LayoutOptions,\n Size,\n} from \"../types\";\n\nconst DEFAULT_OPTIONS: LayoutOptions = {\n nodeSpacing: 60,\n rankSpacing: 80,\n nodeWidth: 150,\n nodeHeight: 50,\n nodePadding: 16,\n diagramPadding: 20,\n edgeRouting: \"bezier\",\n};\n\nexport function flowchartLayout(\n diagram: FlowchartDiagram,\n options?: Partial<LayoutOptions>,\n): FlowchartLayout {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const { nodes, edges, subgraphs, direction } = diagram;\n\n if (nodes.length === 0) {\n return { width: 0, height: 0, viewBox: \"0 0 0 0\", nodes: [], edges: [], subgraphs: [] };\n }\n\n // Phase 1: Measure node sizes\n const nodeSizes = new Map<string, Size>();\n for (const node of nodes) {\n nodeSizes.set(node.id, measureNode(node, opts));\n }\n\n // Phase 2: Build adjacency + reverse edges for cycle removal\n const adj = new Map<string, string[]>();\n const safeEdges: FlowEdge[] = [];\n const visited = new Set<string>();\n const inStack = new Set<string>();\n\n for (const node of nodes) adj.set(node.id, []);\n for (const edge of edges) {\n const targets = adj.get(edge.source);\n if (targets) targets.push(edge.target);\n }\n\n // DFS cycle removal\n function dfs(node: string): void {\n visited.add(node);\n inStack.add(node);\n for (const neighbor of adj.get(node) ?? []) {\n if (inStack.has(neighbor)) {\n // Back edge — reverse it\n const edge = edges.find((e) => e.source === node && e.target === neighbor);\n if (edge) safeEdges.push({ ...edge, source: neighbor, target: node });\n } else if (!visited.has(neighbor)) {\n dfs(neighbor);\n }\n }\n inStack.delete(node);\n }\n\n for (const node of nodes) {\n if (!visited.has(node.id)) dfs(node.id);\n }\n\n // Add non-back edges\n for (const edge of edges) {\n if (!safeEdges.some((e) => e.source === edge.target && e.target === edge.source)) {\n safeEdges.push(edge);\n }\n }\n\n // Phase 3: Layer assignment (longest path from sources)\n const layers = new Map<string, number>();\n const safeAdj = new Map<string, string[]>();\n const inDegree = new Map<string, number>();\n\n for (const node of nodes) {\n safeAdj.set(node.id, []);\n inDegree.set(node.id, 0);\n }\n for (const edge of safeEdges) {\n safeAdj.get(edge.source)?.push(edge.target);\n inDegree.set(edge.target, (inDegree.get(edge.target) ?? 0) + 1);\n }\n\n // BFS topological order\n const queue: string[] = [];\n for (const node of nodes) {\n if ((inDegree.get(node.id) ?? 0) === 0) {\n queue.push(node.id);\n layers.set(node.id, 0);\n }\n }\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n const currentLayer = layers.get(current) ?? 0;\n for (const neighbor of safeAdj.get(current) ?? []) {\n const existingLayer = layers.get(neighbor) ?? -1;\n layers.set(neighbor, Math.max(existingLayer, currentLayer + 1));\n inDegree.set(neighbor, (inDegree.get(neighbor) ?? 1) - 1);\n if (inDegree.get(neighbor) === 0) {\n queue.push(neighbor);\n }\n }\n }\n\n // Handle disconnected nodes\n for (const node of nodes) {\n if (!layers.has(node.id)) layers.set(node.id, 0);\n }\n\n // Phase 4: Group nodes by layer\n const maxLayer = Math.max(...Array.from(layers.values()), 0);\n const layerGroups: string[][] = Array.from({ length: maxLayer + 1 }, () => []);\n for (const node of nodes) {\n const layer = layers.get(node.id) ?? 0;\n layerGroups[layer]!.push(node.id);\n }\n\n // Phase 5: Barycenter ordering\n for (let pass = 0; pass < 2; pass++) {\n for (let l = 1; l <= maxLayer; l++) {\n const layer = layerGroups[l]!;\n const barycenters = new Map<string, number>();\n\n for (const nodeId of layer) {\n // Find positions of connected nodes in previous layer\n const prevLayer = layerGroups[l - 1]!;\n let sum = 0;\n let count = 0;\n for (const edge of safeEdges) {\n if (edge.target === nodeId && prevLayer.includes(edge.source)) {\n sum += prevLayer.indexOf(edge.source);\n count++;\n }\n }\n barycenters.set(nodeId, count > 0 ? sum / count : prevLayer.length / 2);\n }\n\n layer.sort((a, b) => (barycenters.get(a) ?? 0) - (barycenters.get(b) ?? 0));\n }\n }\n\n // Phase 6: Coordinate assignment\n const isVertical = direction === \"TB\" || direction === \"TD\" || direction === \"BT\";\n const positions = new Map<string, { x: number; y: number }>();\n\n for (let l = 0; l <= maxLayer; l++) {\n const layer = layerGroups[l]!;\n const layerWidth = layer.reduce((sum, id) => {\n const size = nodeSizes.get(id)!;\n return sum + (isVertical ? size.width : size.height) + opts.nodeSpacing;\n }, -opts.nodeSpacing);\n\n let offset = -layerWidth / 2;\n\n for (const nodeId of layer) {\n const size = nodeSizes.get(nodeId)!;\n const primaryDim = isVertical ? size.width : size.height;\n\n if (isVertical) {\n positions.set(nodeId, {\n x: offset + primaryDim / 2,\n y: l * (opts.nodeHeight + opts.rankSpacing),\n });\n } else {\n positions.set(nodeId, {\n x: l * (opts.nodeWidth + opts.rankSpacing),\n y: offset + primaryDim / 2,\n });\n }\n\n offset += primaryDim + opts.nodeSpacing;\n }\n }\n\n // Center and apply padding\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const [id, pos] of positions) {\n const size = nodeSizes.get(id)!;\n minX = Math.min(minX, pos.x - size.width / 2);\n minY = Math.min(minY, pos.y - size.height / 2);\n maxX = Math.max(maxX, pos.x + size.width / 2);\n maxY = Math.max(maxY, pos.y + size.height / 2);\n }\n\n // Shift positions so diagram starts at (padding, padding)\n const offsetX = opts.diagramPadding - minX;\n const offsetY = opts.diagramPadding - minY;\n for (const [, pos] of positions) {\n pos.x += offsetX;\n pos.y += offsetY;\n }\n\n if (direction === \"BT\") {\n // Flip vertically\n const totalHeight = maxY - minY;\n for (const [, pos] of positions) {\n pos.y = totalHeight - (pos.y - opts.diagramPadding) + opts.diagramPadding;\n }\n }\n if (direction === \"RL\") {\n // Flip horizontally\n const totalWidth = maxX - minX;\n for (const [, pos] of positions) {\n pos.x = totalWidth - (pos.x - opts.diagramPadding) + opts.diagramPadding;\n }\n }\n\n // Build positioned nodes\n const positionedNodes: PositionedNode[] = nodes.map((node) => {\n const pos = positions.get(node.id)!;\n const size = nodeSizes.get(node.id)!;\n return { node, x: pos.x, y: pos.y, width: size.width, height: size.height };\n });\n\n // Phase 7: Edge routing\n const positionedEdges: PositionedEdge[] = edges.map((edge) => {\n const sourcePos = positions.get(edge.source);\n const targetPos = positions.get(edge.target);\n if (!sourcePos || !targetPos) {\n return { edge, path: \"M 0 0\" };\n }\n\n const sourceSize = nodeSizes.get(edge.source)!;\n const targetSize = nodeSizes.get(edge.target)!;\n\n const result = buildEdgePath(sourcePos, targetPos, sourceSize, targetSize, isVertical, opts);\n\n // Label position from bezier midpoint formula\n let labelPosition;\n let labelSize;\n if (edge.label) {\n labelPosition = result.labelMid;\n labelSize = measureLabel(edge.label, opts);\n }\n\n return { edge, path: result.path, labelPosition, labelSize };\n });\n\n // Phase 8: Subgraph bounding boxes\n const positionedSubgraphs: PositionedSubgraph[] = subgraphs.map((sg) => {\n let sgMinX = Infinity,\n sgMinY = Infinity,\n sgMaxX = -Infinity,\n sgMaxY = -Infinity;\n\n for (const nodeId of sg.nodes) {\n const pos = positions.get(nodeId);\n const size = nodeSizes.get(nodeId);\n if (pos && size) {\n sgMinX = Math.min(sgMinX, pos.x - size.width / 2);\n sgMinY = Math.min(sgMinY, pos.y - size.height / 2);\n sgMaxX = Math.max(sgMaxX, pos.x + size.width / 2);\n sgMaxY = Math.max(sgMaxY, pos.y + size.height / 2);\n }\n }\n\n const padding = opts.nodePadding;\n return {\n subgraph: sg,\n x: sgMinX - padding,\n y: sgMinY - padding - 20, // Extra for title\n width: sgMaxX - sgMinX + padding * 2,\n height: sgMaxY - sgMinY + padding * 2 + 20,\n };\n });\n\n // Final dimensions\n const diagramWidth = maxX - minX + opts.diagramPadding * 2;\n const diagramHeight = maxY - minY + opts.diagramPadding * 2;\n\n return {\n width: diagramWidth,\n height: diagramHeight,\n viewBox: `0 0 ${diagramWidth} ${diagramHeight}`,\n nodes: positionedNodes,\n edges: positionedEdges,\n subgraphs: positionedSubgraphs,\n };\n}\n\n/** Default curvature factor (matches xyflow) */\nconst DEFAULT_CURVATURE = 0.25;\n\n/**\n * Calculate control-point offset along the primary axis.\n * When distance >= 0 (normal flow), the offset is half the distance.\n * When distance < 0 (backward edge), use a wider curve via sqrt scaling.\n */\nfunction controlOffset(distance: number, curvature: number): number {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n return curvature * 25 * Math.sqrt(-distance);\n}\n\n/**\n * Compute the label position on a cubic bezier at t=0.5.\n * Uses the exact bezier midpoint formula instead of a simple linear midpoint.\n */\nexport function bezierMidpoint(\n sx: number,\n sy: number,\n cx1: number,\n cy1: number,\n cx2: number,\n cy2: number,\n tx: number,\n ty: number,\n): { x: number; y: number } {\n // Cubic bezier at t=0.5: B(0.5) = (1/8)P0 + (3/8)P1 + (3/8)P2 + (1/8)P3\n return {\n x: sx * 0.125 + cx1 * 0.375 + cx2 * 0.375 + tx * 0.125,\n y: sy * 0.125 + cy1 * 0.375 + cy2 * 0.375 + ty * 0.125,\n };\n}\n\nfunction buildEdgePath(\n source: { x: number; y: number },\n target: { x: number; y: number },\n sourceSize: Size,\n targetSize: Size,\n isVertical: boolean,\n opts: LayoutOptions,\n): { path: string; labelMid: { x: number; y: number } } {\n // Connection points at node geometric boundary (no stroke offset, following xyflow)\n let sx: number, sy: number, tx: number, ty: number;\n\n if (isVertical) {\n sx = source.x;\n sy = source.y + sourceSize.height / 2;\n tx = target.x;\n ty = target.y - targetSize.height / 2;\n\n // If target is above source, flip\n if (source.y > target.y) {\n sy = source.y - sourceSize.height / 2;\n ty = target.y + targetSize.height / 2;\n }\n } else {\n sx = source.x + sourceSize.width / 2;\n sy = source.y;\n tx = target.x - targetSize.width / 2;\n ty = target.y;\n\n if (source.x > target.x) {\n sx = source.x - sourceSize.width / 2;\n tx = target.x + targetSize.width / 2;\n }\n }\n\n if (opts.edgeRouting === \"bezier\") {\n if (isVertical) {\n const dist = ty - sy;\n const offset = controlOffset(dist, DEFAULT_CURVATURE);\n const cy1 = sy + offset;\n const cy2 = ty - offset;\n const mid = bezierMidpoint(sx, sy, sx, cy1, tx, cy2, tx, ty);\n return {\n path: `M ${sx} ${sy} C ${sx} ${cy1} ${tx} ${cy2} ${tx} ${ty}`,\n labelMid: mid,\n };\n } else {\n const dist = tx - sx;\n const offset = controlOffset(dist, DEFAULT_CURVATURE);\n const cx1 = sx + offset;\n const cx2 = tx - offset;\n const mid = bezierMidpoint(sx, sy, cx1, sy, cx2, ty, tx, ty);\n return {\n path: `M ${sx} ${sy} C ${cx1} ${sy} ${cx2} ${ty} ${tx} ${ty}`,\n labelMid: mid,\n };\n }\n }\n\n // Polyline fallback\n return {\n path: `M ${sx} ${sy} L ${tx} ${ty}`,\n labelMid: { x: (sx + tx) / 2, y: (sy + ty) / 2 },\n };\n}\n\nfunction measureNode(node: FlowNode, opts: LayoutOptions): Size {\n const measure = opts.measureText ?? estimateTextSize;\n const textSize = measure(node.label, 14);\n return {\n width: Math.max(textSize.width + opts.nodePadding * 2, opts.nodeWidth),\n height: Math.max(textSize.height + opts.nodePadding * 2, opts.nodeHeight),\n };\n}\n\nfunction measureLabel(text: string, opts: LayoutOptions): Size {\n const measure = opts.measureText ?? estimateTextSize;\n return measure(text, 12);\n}\n\nfunction estimateTextSize(text: string, fontSize: number): Size {\n const avgCharWidth = fontSize * 0.6;\n const width = text.length * avgCharWidth;\n const height = fontSize * 1.4;\n return { width, height };\n}\n","import type {\n SequenceDiagram,\n SequenceLayout,\n PositionedParticipant,\n PositionedMessage,\n PositionedLifeline,\n PositionedActivation,\n PositionedBlock,\n PositionedNote,\n LayoutOptions,\n Size,\n} from \"../types\";\n\nconst DEFAULT_OPTIONS: LayoutOptions = {\n nodeSpacing: 200,\n rankSpacing: 50,\n nodeWidth: 120,\n nodeHeight: 40,\n nodePadding: 16,\n diagramPadding: 20,\n edgeRouting: \"bezier\",\n};\n\nexport function sequenceLayout(\n diagram: SequenceDiagram,\n options?: Partial<LayoutOptions>,\n): SequenceLayout {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const { participants, messages, blocks, notes } = diagram;\n\n if (participants.length === 0) {\n return {\n width: 0,\n height: 0,\n viewBox: \"0 0 0 0\",\n participants: [],\n messages: [],\n lifelines: [],\n activations: [],\n blocks: [],\n notes: [],\n };\n }\n\n // Phase 1: Column assignment\n const participantX = new Map<string, number>();\n participants.forEach((p, i) => {\n participantX.set(p.id, opts.diagramPadding + opts.nodeWidth / 2 + i * opts.nodeSpacing);\n });\n\n const headerY = opts.diagramPadding + opts.nodeHeight / 2;\n const headerBottom = headerY + opts.nodeHeight / 2 + 20;\n\n // Phase 2: Row assignment\n const positionedMessages: PositionedMessage[] = messages.map((msg, i) => {\n const fromX = participantX.get(msg.from) ?? 0;\n const toX = participantX.get(msg.to) ?? 0;\n const y = headerBottom + i * opts.rankSpacing;\n return { message: msg, fromX, toX, y };\n });\n\n // Phase 3: Activation tracking\n const activationStarts = new Map<string, number>();\n const positionedActivations: PositionedActivation[] = [];\n\n for (const pmsg of positionedMessages) {\n const msg = pmsg.message;\n if (msg.activate) {\n activationStarts.set(msg.to, pmsg.y);\n }\n if (msg.deactivate) {\n const startY = activationStarts.get(msg.from);\n if (startY !== undefined) {\n const x = participantX.get(msg.from) ?? 0;\n const participant = participants.find((p) => p.id === msg.from);\n if (participant) {\n positionedActivations.push({\n participant,\n x: x - 7,\n y: startY,\n width: 14,\n height: pmsg.y - startY,\n });\n }\n activationStarts.delete(msg.from);\n }\n }\n }\n\n // Calculate diagram height\n const lastMsg = positionedMessages[positionedMessages.length - 1];\n const lastMessageY = lastMsg ? lastMsg.y : headerBottom;\n const diagramBottom = lastMessageY + opts.rankSpacing;\n\n // Phase 4: Lifelines\n const positionedLifelines: PositionedLifeline[] = participants.map((p) => {\n const x = participantX.get(p.id) ?? 0;\n return { participant: p, x, y1: headerY + opts.nodeHeight / 2, y2: diagramBottom };\n });\n\n // Phase 5: Blocks\n const positionedBlocks: PositionedBlock[] = blocks.map((block) => {\n // Find messages that belong to this block\n const blockMsgs = block.messages;\n const allMsgs = [...blockMsgs, ...(block.sections?.flatMap((s) => s.messages) ?? [])];\n\n let minX = Infinity;\n let maxX = -Infinity;\n\n for (const msg of allMsgs) {\n const fromX = participantX.get(msg.from) ?? 0;\n const toX = participantX.get(msg.to) ?? 0;\n minX = Math.min(minX, fromX, toX);\n maxX = Math.max(maxX, fromX, toX);\n }\n\n // Find y range from positioned messages\n const msgIndices = allMsgs\n .map((m) =>\n messages.findIndex((pm) => pm.from === m.from && pm.to === m.to && pm.text === m.text),\n )\n .filter((i) => i >= 0);\n\n const firstBlockMsg =\n msgIndices.length > 0 ? positionedMessages[Math.min(...msgIndices)] : undefined;\n const lastBlockMsg =\n msgIndices.length > 0 ? positionedMessages[Math.max(...msgIndices)] : undefined;\n const startY = firstBlockMsg ? firstBlockMsg.y - 20 : headerBottom;\n const endY = lastBlockMsg ? lastBlockMsg.y + 20 : headerBottom + opts.rankSpacing;\n\n const padding = opts.nodePadding;\n return {\n block,\n x: minX - padding - opts.nodeWidth / 2,\n y: startY,\n width: maxX - minX + opts.nodeWidth + padding * 2,\n height: endY - startY,\n };\n });\n\n // Phase 6: Notes\n const positionedNotes: PositionedNote[] = notes.map((note, i) => {\n const pIds = note.participants;\n const xs = pIds.map((id) => participantX.get(id) ?? 0).filter((x) => x > 0);\n\n let x: number;\n if (note.position === \"left of\") {\n x = (xs[0] ?? opts.diagramPadding) - opts.nodeWidth;\n } else if (note.position === \"right of\") {\n x = (xs[0] ?? opts.diagramPadding) + opts.nodeWidth;\n } else {\n // \"over\" — centered between participants\n x = xs.length > 0 ? xs.reduce((a, b) => a + b, 0) / xs.length : opts.diagramPadding;\n }\n\n // Put note at a y position based on its index in notes array\n // In real usage, notes are interleaved with messages, but for now approximate\n const y = headerBottom + (messages.length + i) * opts.rankSpacing * 0.5;\n\n const size = estimateTextSize(note.text, 12);\n return {\n note,\n x,\n y,\n width: Math.max(size.width + opts.nodePadding * 2, 80),\n height: Math.max(size.height + opts.nodePadding, 30),\n };\n });\n\n // Positioned participants\n const positionedParticipants: PositionedParticipant[] = participants.map((p) => {\n const x = participantX.get(p.id) ?? 0;\n const size = estimateTextSize(p.label, 14);\n const width = Math.max(size.width + opts.nodePadding * 2, opts.nodeWidth);\n return { participant: p, x, y: headerY, width, height: opts.nodeHeight };\n });\n\n // Final dimensions\n const diagramWidth =\n (participants.length - 1) * opts.nodeSpacing + opts.nodeWidth + opts.diagramPadding * 2;\n const diagramHeight = diagramBottom + opts.diagramPadding;\n\n return {\n width: diagramWidth,\n height: diagramHeight,\n viewBox: `0 0 ${diagramWidth} ${diagramHeight}`,\n participants: positionedParticipants,\n messages: positionedMessages,\n lifelines: positionedLifelines,\n activations: positionedActivations,\n blocks: positionedBlocks,\n notes: positionedNotes,\n };\n}\n\nfunction estimateTextSize(text: string, fontSize: number): Size {\n const avgCharWidth = fontSize * 0.6;\n return {\n width: text.length * avgCharWidth,\n height: fontSize * 1.4,\n };\n}\n","import { flowchartLayout } from \"./flowchart\";\nimport { sequenceLayout } from \"./sequence\";\nimport type { LayoutEngine } from \"../types\";\n\nexport const builtinLayout: LayoutEngine = {\n flowchart: flowchartLayout,\n sequence: sequenceLayout,\n};\n\nexport { flowchartLayout } from \"./flowchart\";\nexport { sequenceLayout } from \"./sequence\";\n","import { createTheme } from \"@semajsx/style\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\nexport const lightTheme: StyleToken = createTheme(tokens);\n\nexport const darkTheme: StyleToken = createTheme(tokens, {\n nodeFill: \"#2d3748\",\n nodeStroke: \"#63b3ed\",\n nodeText: \"#e2e8f0\",\n edgeStroke: \"#a0aec0\",\n edgeLabelBg: \"#1a202c\",\n edgeLabelText: \"#e2e8f0\",\n arrowFill: \"#a0aec0\",\n subgraphFill: \"#1a202c\",\n subgraphStroke: \"#4a5568\",\n subgraphTitleBg: \"#2d3748\",\n subgraphTitleText: \"#e2e8f0\",\n actorFill: \"#2d3748\",\n actorStroke: \"#63b3ed\",\n lifelineStroke: \"#4a5568\",\n activationFill: \"#2d3748\",\n messageStroke: \"#a0aec0\",\n blockFill: \"rgba(100,100,100,0.15)\",\n blockStroke: \"#4a5568\",\n noteBg: \"#4a4528\",\n noteStroke: \"#b8a900\",\n noteText: \"#e2e8f0\",\n bgColor: \"#1a202c\",\n gridDotColor: \"rgba(255, 255, 255, 0.08)\",\n});\n","/** @jsxImportSource @semajsx/dom */\nimport { context, Context } from \"@semajsx/core\";\nimport type { JSXNode, ContextProvide, ContextType } from \"@semajsx/core\";\nimport { inject } from \"@semajsx/style\";\nimport { lightTheme, darkTheme } from \"./themes\";\nimport type { RendererMap, LayoutEngine } from \"./types\";\n\nexport const MermaidRenderers: ContextType<RendererMap> = context<RendererMap>(\"mermaid-renderers\");\nexport const MermaidLayout: ContextType<LayoutEngine> = context<LayoutEngine>(\"mermaid-layout\");\n\nexport interface MermaidProviderProps extends Partial<RendererMap> {\n children?: JSXNode;\n theme?: \"light\" | \"dark\";\n layout?: LayoutEngine;\n}\n\nexport function MermaidProvider(props: MermaidProviderProps): JSXNode {\n const { children, theme = \"light\", layout, ...rendererOverrides } = props;\n\n inject(lightTheme);\n if (theme === \"dark\") inject(darkTheme);\n\n const contexts: ContextProvide[] = [[MermaidRenderers, rendererOverrides as RendererMap]];\n if (layout) contexts.push([MermaidLayout, layout]);\n\n return (\n <Context provide={contexts}>\n <div class={theme === \"dark\" ? darkTheme : undefined}>{children}</div>\n </Context>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { nodeLabel } from \"../node.style\";\nimport type { LabelRenderProps } from \"../types\";\n\nexport function Label(props: LabelRenderProps): JSXNode {\n return (\n <text class={[nodeLabel, props.class]} x={props.x} y={props.y}>\n {props.text}\n </text>\n );\n}\n","import { classes, rule } from \"@semajsx/style\";\nimport type { StyleToken, ClassRefs } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\nconst SEQUENCE_CLASSES = [\n \"participantBox\",\n \"participantLabel\",\n \"lifeline\",\n \"activation\",\n \"messageLine\",\n \"messageDotted\",\n \"messageText\",\n \"blockBg\",\n \"blockLabel\",\n \"blockLabelText\",\n \"noteBg\",\n \"noteText\",\n] as const;\n\nconst c: ClassRefs<typeof SEQUENCE_CLASSES> = classes(SEQUENCE_CLASSES);\n\nexport const participantBox: StyleToken = rule`${c.participantBox} {\n fill: ${tokens.actorFill};\n stroke: ${tokens.actorStroke};\n stroke-width: 2;\n}`;\n\nexport const participantLabel: StyleToken = rule`${c.participantLabel} {\n fill: ${tokens.nodeText};\n stroke: none;\n font-family: ${tokens.fontFamily};\n font-size: ${tokens.fontSize}px;\n text-anchor: middle;\n dominant-baseline: central;\n}`;\n\nexport const lifeline: StyleToken = rule`${c.lifeline} {\n stroke: ${tokens.lifelineStroke};\n stroke-width: 1;\n stroke-dasharray: 6, 4;\n}`;\n\nexport const activation: StyleToken = rule`${c.activation} {\n fill: ${tokens.activationFill};\n stroke: ${tokens.actorStroke};\n stroke-width: 1;\n}`;\n\nexport const messageLine: StyleToken = rule`${c.messageLine} {\n stroke: ${tokens.messageStroke};\n stroke-width: 1.5;\n fill: none;\n}`;\n\nexport const messageDotted: StyleToken = rule`${c.messageDotted} {\n stroke-dasharray: 6, 4;\n}`;\n\nexport const messageText: StyleToken = rule`${c.messageText} {\n fill: ${tokens.nodeText};\n stroke: none;\n font-family: ${tokens.fontFamily};\n font-size: 12px;\n text-anchor: middle;\n}`;\n\nexport const blockBg: StyleToken = rule`${c.blockBg} {\n fill: ${tokens.blockFill};\n stroke: ${tokens.blockStroke};\n stroke-width: 1;\n}`;\n\nexport const blockLabel: StyleToken = rule`${c.blockLabel} {\n fill: ${tokens.blockStroke};\n}`;\n\nexport const blockLabelText: StyleToken = rule`${c.blockLabelText} {\n fill: ${tokens.nodeText};\n stroke: none;\n font-family: ${tokens.fontFamily};\n font-size: 11px;\n font-weight: 600;\n}`;\n\nexport const noteBg: StyleToken = rule`${c.noteBg} {\n fill: ${tokens.noteBg};\n stroke: ${tokens.noteStroke};\n stroke-width: 1;\n}`;\n\nexport const noteText: StyleToken = rule`${c.noteText} {\n fill: ${tokens.noteText};\n stroke: none;\n font-family: ${tokens.fontFamily};\n font-size: 12px;\n text-anchor: middle;\n dominant-baseline: central;\n}`;\n\nexport { c };\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { participantBox, participantLabel } from \"../../sequence.style\";\nimport type { ParticipantRenderProps } from \"../../types\";\n\nexport function Participant(props: ParticipantRenderProps): JSXNode {\n const { participant, x, y, width, height } = props;\n return (\n <g class={props.class} transform={`translate(${x}, ${y})`}>\n <rect\n class={participantBox}\n x={-width / 2}\n y={-height / 2}\n width={width}\n height={height}\n rx={6}\n />\n <text class={participantLabel}>{participant.label}</text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { messageLine, messageDotted, messageText } from \"../../sequence.style\";\nimport type { ArrowType, MessageRenderProps } from \"../../types\";\n\nconst MARKER: Record<ArrowType, string> = {\n solid: \"url(#mmd-arrow)\",\n dotted: \"url(#mmd-arrow)\",\n solidCross: \"url(#mmd-cross)\",\n dottedCross: \"url(#mmd-cross)\",\n solidOpen: \"url(#mmd-arrow-open)\",\n dottedOpen: \"url(#mmd-arrow-open)\",\n};\n\nexport function Message(props: MessageRenderProps): JSXNode {\n const { message, fromX, toX, y } = props;\n const isDotted =\n message.arrow === \"dotted\" || message.arrow === \"dottedCross\" || message.arrow === \"dottedOpen\";\n const midX = (fromX + toX) / 2;\n const markerEnd = MARKER[message.arrow];\n\n return (\n <g class={props.class}>\n <line\n class={[messageLine, isDotted ? messageDotted : undefined]}\n x1={fromX}\n y1={y}\n x2={toX}\n y2={y}\n marker-end={markerEnd}\n />\n <text class={messageText} x={midX} y={y - 8}>\n {message.text}\n </text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { lifeline } from \"../../sequence.style\";\nimport type { LifelineRenderProps } from \"../../types\";\n\nexport function Lifeline(props: LifelineRenderProps): JSXNode {\n return (\n <line class={[lifeline, props.class]} x1={props.x} y1={props.y1} x2={props.x} y2={props.y2} />\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { activation } from \"../../sequence.style\";\nimport type { ActivationRenderProps } from \"../../types\";\n\nexport function Activation(props: ActivationRenderProps): JSXNode {\n return (\n <rect\n class={[activation, props.class]}\n x={props.x - props.width / 2}\n y={props.y}\n width={props.width}\n height={props.height}\n />\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { blockBg, blockLabel, blockLabelText } from \"../../sequence.style\";\nimport type { BlockRenderProps } from \"../../types\";\n\nexport function Block(props: BlockRenderProps): JSXNode {\n const { block, x, y, width, height } = props;\n return (\n <g class={props.class}>\n <rect class={blockBg} x={x} y={y} width={width} height={height} rx={4} />\n <rect class={blockLabel} x={x} y={y} width={50} height={20} rx={4} />\n <text class={blockLabelText} x={x + 5} y={y + 14}>\n {block.type}\n </text>\n </g>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { noteBg, noteText } from \"../../sequence.style\";\nimport type { NoteRenderProps } from \"../../types\";\n\nexport function Note(props: NoteRenderProps): JSXNode {\n const { note, x, y, width, height } = props;\n return (\n <g class={props.class} transform={`translate(${x}, ${y})`}>\n <rect class={noteBg} x={-width / 2} y={-height / 2} width={width} height={height} rx={4} />\n <text class={noteText}>{note.text}</text>\n </g>\n );\n}\n","import { shapeMap } from \"./nodes\";\nimport { Edge } from \"./edge\";\nimport { SubgraphBox } from \"./subgraph\";\nimport { Label } from \"./label\";\nimport { Participant } from \"./sequence/participant\";\nimport { Message } from \"./sequence/message\";\nimport { Lifeline } from \"./sequence/lifeline\";\nimport { Activation } from \"./sequence/activation\";\nimport { Block } from \"./sequence/block\";\nimport { Note } from \"./sequence/note\";\nimport type { RendererMap } from \"../types\";\n\nexport const defaultRenderers: RendererMap = {\n node: shapeMap.rect,\n edge: Edge,\n subgraph: SubgraphBox,\n label: Label,\n participant: Participant,\n message: Message,\n lifeline: Lifeline,\n activation: Activation,\n block: Block,\n note: Note,\n};\n\nexport { shapeMap } from \"./nodes\";\nexport { Edge } from \"./edge\";\nexport { Defs } from \"./defs\";\nexport { SubgraphBox } from \"./subgraph\";\nexport { Label } from \"./label\";\nexport * from \"./sequence\";\n","/** @jsxImportSource @semajsx/dom */\nimport type { ComponentAPI, JSXNode } from \"@semajsx/core\";\nimport { unwrap } from \"@semajsx/signal\";\nimport { svgRoot } from \"./root.style\";\nimport { Defs } from \"./components/defs\";\nimport { shapeMap } from \"./components/nodes\";\nimport { Edge } from \"./components/edge\";\nimport { SubgraphBox } from \"./components/subgraph\";\nimport { builtinLayout } from \"./layout\";\nimport { MermaidLayout, MermaidRenderers } from \"./provider\";\nimport { defaultRenderers } from \"./components\";\nimport { defaultTheme } from \"./tokens\";\nimport type {\n FlowchartProps,\n LayoutEngine,\n RendererMap,\n PositionedSubgraph,\n PositionedEdge,\n PositionedNode,\n NodeShape,\n} from \"./types\";\n\nexport function Flowchart(props: FlowchartProps, ctx?: ComponentAPI): JSXNode {\n const engine: LayoutEngine = ctx?.inject(MermaidLayout) ?? builtinLayout;\n const renderers: RendererMap = ctx?.inject(MermaidRenderers) ?? defaultRenderers;\n\n const graphData = unwrap(props.graph);\n const positioned = engine.flowchart(graphData);\n\n return (\n <svg\n class={[svgRoot, props.class]}\n viewBox={positioned.viewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <style>{defaultTheme.__cssTemplate}</style>\n <Defs />\n\n {/* Grid dot background */}\n <rect x={0} y={0} width={positioned.width} height={positioned.height} fill=\"url(#mmd-grid)\" />\n\n {positioned.subgraphs.map((s: PositionedSubgraph) => {\n const Comp = renderers.subgraph ?? SubgraphBox;\n return <Comp positioned={s} />;\n })}\n\n {positioned.edges.map((e: PositionedEdge) => {\n const key = `edge:${e.edge.lineStyle}` as keyof RendererMap;\n const Comp = (renderers[key] as typeof Edge) ?? renderers.edge ?? Edge;\n return <Comp positioned={e} />;\n })}\n\n {positioned.nodes.map((n: PositionedNode) => {\n const key = `node:${n.node.shape}` as keyof RendererMap;\n const Comp =\n (renderers[key] as typeof shapeMap.rect) ??\n renderers.node ??\n shapeMap[n.node.shape as NodeShape] ??\n shapeMap.rect;\n return <Comp positioned={n} />;\n })}\n </svg>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { ComponentAPI, JSXNode } from \"@semajsx/core\";\nimport { unwrap } from \"@semajsx/signal\";\nimport { svgRoot } from \"./root.style\";\nimport { Defs } from \"./components/defs\";\nimport { builtinLayout } from \"./layout\";\nimport { MermaidLayout, MermaidRenderers } from \"./provider\";\nimport { defaultRenderers } from \"./components\";\nimport { defaultTheme } from \"./tokens\";\nimport type {\n SequenceProps,\n LayoutEngine,\n RendererMap,\n PositionedLifeline,\n PositionedBlock,\n PositionedActivation,\n PositionedNote,\n PositionedMessage,\n PositionedParticipant,\n} from \"./types\";\n\nexport function Sequence(props: SequenceProps, ctx?: ComponentAPI): JSXNode {\n const engine: LayoutEngine = ctx?.inject(MermaidLayout) ?? builtinLayout;\n const renderers: RendererMap = ctx?.inject(MermaidRenderers) ?? defaultRenderers;\n\n const graphData = unwrap(props.graph);\n const positioned = engine.sequence(graphData);\n\n const LifelineComp = renderers.lifeline!;\n const BlockComp = renderers.block!;\n const ActivationComp = renderers.activation!;\n const NoteComp = renderers.note!;\n const MessageComp = renderers.message!;\n const ParticipantComp = renderers.participant!;\n\n return (\n <svg\n class={[svgRoot, props.class]}\n viewBox={positioned.viewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <style>{defaultTheme.__cssTemplate}</style>\n <Defs />\n\n {positioned.lifelines.map((l: PositionedLifeline) => (\n <LifelineComp participant={l.participant} x={l.x} y1={l.y1} y2={l.y2} />\n ))}\n\n {positioned.blocks.map((b: PositionedBlock) => (\n <BlockComp block={b.block} x={b.x} y={b.y} width={b.width} height={b.height} />\n ))}\n\n {positioned.activations.map((a: PositionedActivation) => (\n <ActivationComp\n participant={a.participant}\n x={a.x}\n y={a.y}\n width={a.width}\n height={a.height}\n />\n ))}\n\n {positioned.notes.map((n: PositionedNote) => (\n <NoteComp note={n.note} x={n.x} y={n.y} width={n.width} height={n.height} />\n ))}\n\n {positioned.messages.map((m: PositionedMessage) => (\n <MessageComp message={m.message} fromX={m.fromX} toX={m.toX} y={m.y} />\n ))}\n\n {positioned.participants.map((p: PositionedParticipant) => (\n <ParticipantComp\n participant={p.participant}\n x={p.x}\n y={p.y}\n width={p.width}\n height={p.height}\n />\n ))}\n </svg>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\nimport type { JSXNode } from \"@semajsx/core\";\nimport { unwrap } from \"@semajsx/signal\";\nimport { parse } from \"./parser\";\nimport { Flowchart } from \"./flowchart\";\nimport { Sequence } from \"./sequence\";\nimport type { MermaidProps } from \"./types\";\n\nexport function Mermaid(props: MermaidProps): JSXNode {\n const code = unwrap(props.code);\n const diagram = parse(code);\n\n if (\"message\" in diagram) {\n props.onError?.(diagram);\n return null;\n }\n\n if (diagram.type === \"flowchart\") {\n return <Flowchart graph={diagram} class={props.class} />;\n }\n\n if (diagram.type === \"sequence\") {\n return <Sequence graph={diagram} class={props.class} />;\n }\n\n return null;\n}\n","/**\n * Remark plugin that transforms ```mermaid code blocks into <Mermaid> JSX components.\n *\n * Usage in MDX config:\n * ```ts\n * import { remarkMermaid } from \"@semajsx/mermaid/remark\";\n *\n * mdx: {\n * remarkPlugins: [remarkMermaid],\n * components: { Mermaid },\n * }\n * ```\n */\n\ninterface MdastNode {\n type: string;\n lang?: string;\n value?: string;\n children?: MdastNode[];\n}\n\ninterface MdxJsxAttribute {\n type: \"mdxJsxAttribute\";\n name: string;\n value: string;\n}\n\ninterface MdxJsxFlowElement {\n type: \"mdxJsxFlowElement\";\n name: string;\n attributes: MdxJsxAttribute[];\n children: never[];\n data: { _mdxExplicitJsx: true };\n}\n\nfunction walk(node: MdastNode): void {\n if (!node.children) return;\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i]!;\n if (child.type === \"code\" && child.lang === \"mermaid\") {\n (node.children as unknown[])[i] = {\n type: \"mdxJsxFlowElement\",\n name: \"Mermaid\",\n attributes: [{ type: \"mdxJsxAttribute\", name: \"code\", value: child.value ?? \"\" }],\n children: [],\n data: { _mdxExplicitJsx: true },\n } satisfies MdxJsxFlowElement;\n } else {\n walk(child);\n }\n }\n}\n\nexport function remarkMermaid(): (tree: MdastNode) => void {\n return (tree: MdastNode) => walk(tree);\n}\n","/**\n * Apple-inspired theme CSS for the docs-theme plugin.\n *\n * All class names are prefixed with `dt-` to avoid collisions.\n * Component styles (Card, Callout, Badge) from @semajsx/ui are collected automatically\n * by the SSR renderer from StyleTokens.\n * This file contains layout, navigation, hero, typography, animations, and responsive styles.\n */\n\nexport const THEME_CSS = /* css */ `\n/* ==============================================\n * Keyframes\n * ============================================== */\n\n@keyframes dt-fade-in-up {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes dt-fade-in-scale {\n from { opacity: 0; transform: scale(0.96) translateY(8px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n/* ==============================================\n * Font Face\n * ============================================== */\n\n@font-face {\n font-family: \"Maple Mono NF CN\";\n src: url(\"/fonts/MapleMono-NF-CN-Regular.woff2\") format(\"woff2\");\n font-weight: 400;\n font-style: normal;\n font-display: swap;\n}\n\n/* ==============================================\n * Global Reset & Base\n * ============================================== */\n\n* { margin: 0; padding: 0; box-sizing: border-box; }\n\nhtml { scroll-behavior: smooth; }\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"SF Pro Text\",\n Inter, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n line-height: 1.6;\n color: #1d1d1f;\n background: #fbfbfd;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\n::selection {\n background: rgba(0, 113, 227, 0.2);\n color: #1d1d1f;\n}\n\n/* ==============================================\n * Frosted Glass Navigation\n * ============================================== */\n\n.dt-glass-nav {\n position: sticky;\n top: 0;\n z-index: 50;\n background: rgba(251, 251, 253, 0.8);\n backdrop-filter: saturate(180%) blur(20px);\n -webkit-backdrop-filter: saturate(180%) blur(20px);\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.08);\n}\n\n.dt-nav-inner {\n max-width: 1200px;\n margin: 0 auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 2rem;\n height: 52px;\n}\n\n.dt-nav-logo {\n color: #1d1d1f;\n font-size: 1.25rem;\n font-weight: 600;\n letter-spacing: -0.02em;\n text-decoration: none;\n}\n\n.dt-nav-links {\n display: flex;\n list-style: none;\n margin: 0;\n gap: 2rem;\n}\n\n.dt-nav-link {\n color: #1d1d1f;\n text-decoration: none;\n font-size: 0.875rem;\n font-weight: 400;\n letter-spacing: -0.005em;\n transition: color 0.2s ease;\n}\n\n.dt-nav-link:hover {\n color: #0071e3;\n}\n\n/* ==============================================\n * Layout\n * ============================================== */\n\n.dt-root {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background: #fbfbfd;\n}\n\n.dt-main {\n flex: 1 1 0%;\n width: 100%;\n max-width: 1200px;\n margin: 0 auto;\n padding: 2rem 2rem 4rem;\n}\n\n/* ==============================================\n * Footer\n * ============================================== */\n\n.dt-footer {\n border-top: 0.5px solid rgba(0, 0, 0, 0.08);\n background: #f5f5f7;\n}\n\n.dt-footer-inner {\n max-width: 1200px;\n margin: 0 auto;\n padding: 2rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.dt-footer-links {\n display: flex;\n gap: 2rem;\n align-items: center;\n}\n\n.dt-footer-link {\n color: #6e6e73;\n text-decoration: none;\n font-size: 0.8125rem;\n transition: color 0.2s;\n}\n\n.dt-footer-link:hover {\n color: #0071e3;\n}\n\n.dt-footer-copy {\n color: #86868b;\n font-size: 0.8125rem;\n margin: 0;\n}\n\n/* ==============================================\n * Hero Section\n * ============================================== */\n\n.dt-hero-bg {\n background: linear-gradient(180deg, #fbfbfd 0%, #f5f5f7 40%, #fbfbfd 100%);\n position: relative;\n}\n\n.dt-hero-bg::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n width: 100%;\n height: 100%;\n background: radial-gradient(\n ellipse 60% 50% at 50% 40%,\n rgba(0, 113, 227, 0.06) 0%,\n rgba(251, 251, 253, 0) 70%\n );\n pointer-events: none;\n}\n\n.dt-hero-title {\n font-size: clamp(3rem, 8vw, 5rem);\n font-weight: 700;\n line-height: 1.05;\n letter-spacing: -0.03em;\n background: linear-gradient(135deg, #1d1d1f 30%, #6e6e73 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 1.25rem;\n}\n\n.dt-hero-subtitle {\n font-size: clamp(1.25rem, 2.5vw, 1.5rem);\n font-weight: 400;\n line-height: 1.5;\n color: #6e6e73;\n max-width: 40rem;\n margin: 0 auto 2.5rem;\n letter-spacing: -0.005em;\n}\n\n.dt-hero-cta {\n display: flex;\n gap: 1rem;\n justify-content: center;\n margin-top: 2rem;\n}\n\n/* ==============================================\n * Section Typography\n * ============================================== */\n\n.dt-section-title {\n font-size: clamp(2rem, 4vw, 2.75rem);\n font-weight: 700;\n letter-spacing: -0.02em;\n line-height: 1.1;\n color: #1d1d1f;\n margin-bottom: 0.75rem;\n}\n\n.dt-section-subtitle {\n font-size: clamp(1rem, 2vw, 1.25rem);\n font-weight: 400;\n line-height: 1.5;\n color: #6e6e73;\n max-width: 36rem;\n margin: 0 auto 3rem;\n}\n\n/* ==============================================\n * Buttons\n * ============================================== */\n\n.dt-primary-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.875rem 1.75rem;\n background: #0071e3;\n color: white;\n border-radius: 980px;\n font-size: 1.0625rem;\n font-weight: 500;\n text-decoration: none;\n transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);\n border: none;\n cursor: pointer;\n letter-spacing: -0.005em;\n}\n\n.dt-primary-btn:hover {\n background: #0077ed;\n transform: scale(1.02);\n box-shadow: 0 4px 16px rgba(0, 113, 227, 0.3);\n}\n\n.dt-secondary-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.875rem 1.75rem;\n background: transparent;\n color: #0071e3;\n border: 1.5px solid #0071e3;\n border-radius: 980px;\n font-size: 1.0625rem;\n font-weight: 500;\n text-decoration: none;\n transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);\n cursor: pointer;\n letter-spacing: -0.005em;\n}\n\n.dt-secondary-btn:hover {\n background: #0071e3;\n color: white;\n transform: scale(1.02);\n}\n\n/* ==============================================\n * Animations\n * ============================================== */\n\n.dt-anim-slide-up {\n animation: dt-fade-in-up 0.8s cubic-bezier(0.25, 0.1, 0.25, 1) both;\n}\n\n.dt-anim-scale-in {\n animation: dt-fade-in-scale 0.6s cubic-bezier(0.25, 0.1, 0.25, 1) both;\n}\n\n.dt-fade-in {\n animation: dt-fade-in-up 0.6s cubic-bezier(0.25, 0.1, 0.25, 1) both;\n}\n\n.dt-stagger-1 { animation-delay: 0.1s; }\n.dt-stagger-2 { animation-delay: 0.2s; }\n.dt-stagger-3 { animation-delay: 0.35s; }\n.dt-stagger-4 { animation-delay: 0.5s; }\n.dt-stagger-5 { animation-delay: 0.65s; }\n\n/* ==============================================\n * Page Layout\n * ============================================== */\n\n.dt-page-container {\n max-width: 720px;\n}\n\n.dt-page-title {\n font-size: 2.25rem;\n font-weight: 700;\n color: #1d1d1f;\n letter-spacing: -0.02em;\n margin-bottom: 0.5rem;\n}\n\n.dt-page-desc {\n font-size: 1.125rem;\n color: #6e6e73;\n line-height: 1.5;\n}\n\n.dt-category-heading {\n font-size: 0.8125rem;\n font-weight: 600;\n color: #86868b;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin-bottom: 1rem;\n}\n\n.dt-card-title {\n font-size: 1.0625rem;\n font-weight: 600;\n color: #1d1d1f;\n letter-spacing: -0.01em;\n margin-bottom: 0.25rem;\n}\n\n.dt-card-desc {\n color: #6e6e73;\n font-size: 0.875rem;\n line-height: 1.5;\n margin: 0;\n}\n\n.dt-content-desc {\n font-size: 1.125rem;\n color: #6e6e73;\n line-height: 1.5;\n padding-bottom: 1.5rem;\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.06);\n}\n\n/* ==============================================\n * Content Typography\n * ============================================== */\n\n.dt-content {\n line-height: 1.75;\n color: #1d1d1f;\n}\n\n.dt-content h1 {\n font-size: 1.875rem;\n font-weight: 700;\n margin-top: 3rem;\n margin-bottom: 0.75rem;\n color: #1d1d1f;\n letter-spacing: -0.02em;\n line-height: 1.2;\n}\n\n.dt-content h2 {\n font-size: 1.5rem;\n font-weight: 600;\n margin-top: 2.5rem;\n margin-bottom: 0.75rem;\n color: #1d1d1f;\n letter-spacing: -0.015em;\n line-height: 1.25;\n padding-top: 1.5rem;\n border-top: 0.5px solid rgba(0, 0, 0, 0.06);\n}\n\n.dt-content h2:first-child,\n.dt-content hr + h2 {\n border-top: none;\n padding-top: 0;\n margin-top: 0;\n}\n\n.dt-content h3 {\n font-size: 1.25rem;\n font-weight: 600;\n margin-top: 2rem;\n margin-bottom: 0.5rem;\n color: #1d1d1f;\n letter-spacing: -0.01em;\n line-height: 1.3;\n}\n\n.dt-content p {\n margin-bottom: 1.25rem;\n font-size: 1rem;\n color: #1d1d1f;\n}\n\n.dt-content ul,\n.dt-content ol {\n margin-left: 1.5rem;\n margin-bottom: 1.25rem;\n}\n\n.dt-content li {\n margin-bottom: 0.375rem;\n font-size: 1rem;\n line-height: 1.65;\n}\n\n.dt-content code {\n background: rgba(0, 0, 0, 0.04);\n padding: 0.15rem 0.4rem;\n border-radius: 5px;\n font-family: \"Maple Mono NF CN\", \"SF Mono\", \"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace;\n font-size: 0.875em;\n color: #1d1d1f;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n}\n\n.dt-content pre {\n background: #1d1d1f;\n color: #e5e5ea;\n padding: 1.25rem 1.5rem;\n border-radius: 12px;\n overflow-x: auto;\n margin-bottom: 1.25rem;\n font-size: 0.875rem;\n line-height: 1.65;\n border: 0.5px solid rgba(0, 0, 0, 0.1);\n}\n\n.dt-content pre code {\n background: none;\n color: inherit;\n padding: 0;\n border: none;\n font-size: inherit;\n}\n\n.dt-content a {\n color: #0071e3;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.dt-content a:hover {\n text-decoration: underline;\n}\n\n.dt-content strong {\n font-weight: 600;\n color: #1d1d1f;\n}\n\n.dt-content blockquote {\n border-left: 3px solid rgba(0, 0, 0, 0.08);\n padding: 0.75rem 1.25rem;\n margin: 1.5rem 0;\n color: #6e6e73;\n background: rgba(0, 0, 0, 0.02);\n border-radius: 0 10px 10px 0;\n}\n\n.dt-content hr {\n border: none;\n border-top: 0.5px solid rgba(0, 0, 0, 0.06);\n margin: 2.5rem 0;\n}\n\n/* Tables */\n\n.dt-table-wrapper {\n margin: 1.5rem 0;\n border-radius: 10px;\n border: 0.5px solid rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.dt-content table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9375rem;\n line-height: 1.5;\n}\n\n.dt-content thead {\n background: rgba(0, 0, 0, 0.03);\n}\n\n.dt-content th {\n font-weight: 600;\n color: #1d1d1f;\n text-align: left;\n padding: 0.75rem 1rem;\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.08);\n}\n\n.dt-content td {\n padding: 0.75rem 1rem;\n color: #1d1d1f;\n border-bottom: 0.5px solid rgba(0, 0, 0, 0.04);\n}\n\n.dt-content tbody tr:last-child td {\n border-bottom: none;\n}\n\n.dt-content tbody tr:hover {\n background: rgba(0, 0, 0, 0.02);\n}\n\n/* Table scrollbar styling */\n.dt-table-wrapper {\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.12) rgba(0, 0, 0, 0.02);\n}\n\n.dt-table-wrapper::-webkit-scrollbar {\n height: 6px;\n}\n\n.dt-table-wrapper::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.02);\n border-radius: 3px;\n}\n\n.dt-table-wrapper::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.12);\n border-radius: 3px;\n}\n\n.dt-table-wrapper::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.2);\n}\n\n/* ==============================================\n * Code Blocks\n * ============================================== */\n\n.dt-code-block {\n position: relative;\n margin: 1.5rem 0;\n border-radius: 12px;\n overflow: hidden;\n border: 0.5px solid rgba(0, 0, 0, 0.1);\n}\n\n.dt-code-header {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.625rem 1rem;\n z-index: 1;\n pointer-events: none;\n background: linear-gradient(to left, rgba(34, 39, 46, 0.95) 70%, transparent);\n padding-left: 2rem;\n}\n\n.dt-code-lang {\n color: #636e7b;\n font-size: 0.6875rem;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.04em;\n user-select: none;\n}\n\n.dt-code-block pre {\n margin: 0;\n border-radius: 0;\n border: none;\n padding-top: 2.25rem;\n}\n\n/* Shiki integration */\n\n.dt-content pre.shiki code {\n display: block;\n}\n\n.dt-content pre.shiki .line {\n display: inline;\n}\n\n/* ==============================================\n * Tabs interactivity (aria-selected)\n * ============================================== */\n\n[role=\"tab\"][aria-selected=\"true\"] {\n color: #0071e3;\n border-bottom-color: #0071e3;\n}\n\n/* ==============================================\n * 404 Page\n * ============================================== */\n\n.dt-not-found-title {\n font-size: clamp(4rem, 12vw, 8rem);\n font-weight: 700;\n line-height: 1;\n letter-spacing: -0.04em;\n background: linear-gradient(135deg, #1d1d1f 30%, #6e6e73 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 1.25rem;\n}\n\n/* ==============================================\n * Responsive\n * ============================================== */\n\n@media (max-width: 768px) {\n .dt-nav-inner {\n padding: 12px 1rem !important;\n height: 48px !important;\n }\n\n .dt-nav-logo { font-size: 1.125rem !important; }\n .dt-nav-links { gap: 1.25rem !important; }\n .dt-nav-link { font-size: 0.8125rem; }\n\n .dt-main {\n padding: 1.25rem 1rem 2.5rem !important;\n }\n\n .dt-hero-section {\n padding: 60px 16px 48px !important;\n }\n\n .dt-hero-cta {\n flex-direction: column !important;\n align-items: center !important;\n gap: 0.75rem !important;\n }\n\n .dt-section-features {\n padding: 48px 16px !important;\n }\n\n .dt-section-links {\n padding: 0 16px 60px !important;\n }\n\n .dt-section-links-inner {\n padding-top: 48px !important;\n }\n\n .dt-features-grid {\n grid-template-columns: 1fr !important;\n gap: 1rem !important;\n }\n\n .dt-links-grid {\n grid-template-columns: 1fr !important;\n }\n\n .dt-page-title {\n font-size: 1.75rem !important;\n }\n\n .dt-page-desc {\n font-size: 1rem !important;\n }\n\n .dt-page-container {\n max-width: 100%;\n }\n\n .dt-footer-inner {\n flex-direction: column !important;\n align-items: center !important;\n text-align: center;\n padding: 1.5rem 1rem !important;\n }\n\n .dt-footer-links {\n justify-content: center !important;\n gap: 1.5rem !important;\n }\n\n .dt-not-found-section {\n padding: 60px 16px 48px !important;\n }\n\n .dt-not-found-cta {\n flex-direction: column !important;\n align-items: center !important;\n gap: 0.75rem !important;\n }\n\n .dt-content { line-height: 1.7; }\n .dt-content h1 { font-size: 1.5rem; margin-top: 2rem; }\n .dt-content h2 { font-size: 1.25rem; margin-top: 2rem; padding-top: 1.25rem; }\n .dt-content h3 { font-size: 1.125rem; margin-top: 1.5rem; }\n .dt-content pre { padding: 1rem; font-size: 0.8125rem; border-radius: 10px; }\n .dt-content ul, .dt-content ol { margin-left: 1.25rem; }\n\n .dt-table-wrapper {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: 8px;\n }\n\n .dt-content table {\n font-size: 0.8125rem;\n }\n\n .dt-content th {\n padding: 0.5rem 0.75rem;\n font-size: 0.75rem;\n }\n\n .dt-content td {\n padding: 0.5rem 0.75rem;\n }\n\n .dt-content td:first-child {\n font-weight: 500;\n }\n\n .dt-code-block { border-radius: 10px; }\n .dt-code-header { padding: 0.375rem 1rem; }\n\n .dt-ui-grid {\n grid-template-columns: 1fr !important;\n }\n\n .dt-preview-box {\n padding: 2rem 1rem !important;\n }\n}\n\n/* ==============================================\n * Component Preview (shadcn-style showcase)\n * ============================================== */\n\n.dt-preview {\n margin: 1.5rem 0;\n border: 0.5px solid rgba(0, 0, 0, 0.08);\n border-radius: 12px;\n overflow: hidden;\n background: white;\n}\n\n.dt-preview-box {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 3.5rem 2.5rem;\n min-height: 120px;\n background: white;\n position: relative;\n}\n\n.dt-preview-box > * {\n pointer-events: none;\n}\n\n.dt-preview-box.dt-preview-interactive > * {\n pointer-events: auto;\n}\n\n.dt-preview-box::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image:\n radial-gradient(circle, rgba(0, 0, 0, 0.04) 1px, transparent 1px);\n background-size: 20px 20px;\n pointer-events: none;\n}\n\n.dt-preview-label {\n position: absolute;\n top: 0.75rem;\n left: 1rem;\n font-size: 0.6875rem;\n font-weight: 600;\n color: #86868b;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n z-index: 1;\n}\n\n/* ==============================================\n * UI Components Section\n * ============================================== */\n\n.dt-ui-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n gap: 1rem;\n}\n\n.dt-ui-card {\n display: block;\n padding: 1.5rem;\n background: white;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n border-radius: 12px;\n text-decoration: none;\n transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.03);\n}\n\n.dt-ui-card:hover {\n border-color: rgba(0, 113, 227, 0.3);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n transform: translateY(-2px);\n}\n\n.dt-ui-card-preview {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 80px;\n margin-bottom: 1rem;\n background: #f9f9fb;\n border-radius: 8px;\n overflow: hidden;\n position: relative;\n}\n\n.dt-ui-card-preview > * {\n pointer-events: none;\n}\n\n.dt-ui-card-preview::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image:\n radial-gradient(circle, rgba(0, 0, 0, 0.03) 1px, transparent 1px);\n background-size: 16px 16px;\n pointer-events: none;\n}\n\n.dt-ui-card-name {\n font-size: 0.9375rem;\n font-weight: 600;\n color: #1d1d1f;\n margin: 0 0 0.25rem;\n letter-spacing: -0.01em;\n}\n\n.dt-ui-card-desc {\n font-size: 0.8125rem;\n color: #6e6e73;\n margin: 0;\n line-height: 1.4;\n}\n\n.dt-ui-badge-new {\n display: inline-block;\n padding: 0.1rem 0.4rem;\n background: rgba(0, 113, 227, 0.08);\n color: #0071e3;\n font-size: 0.6875rem;\n font-weight: 600;\n border-radius: 4px;\n margin-left: 0.5rem;\n vertical-align: middle;\n}\n`;\n","/**\n * Default design tokens for @semajsx/ui\n *\n * These tokens define the visual language of the component library.\n * All components reference these tokens via CSS custom properties,\n * enabling runtime theme switching.\n *\n * @example\n * ```ts\n * import { tokens } from \"@semajsx/ui/theme\";\n *\n * // Use in custom styles\n * const myRule = rule`${c.box} {\n * color: ${tokens.colors.text};\n * padding: ${tokens.space.md};\n * }`;\n * ```\n */\n\nimport { defineTokens } from \"@semajsx/style\";\nimport type { TokenRefs } from \"@semajsx/style\";\n\nconst tokenDefinition = {\n colors: {\n // Brand (Apple blue)\n primary: \"#0071e3\",\n primaryHover: \"#0077ed\",\n primaryActive: \"#0068d6\",\n\n // Neutral\n background: \"#fbfbfd\",\n surface: \"#f5f5f7\",\n border: \"rgba(0, 0, 0, 0.08)\",\n text: \"#1d1d1f\",\n textMuted: \"#6e6e73\",\n textTertiary: \"#86868b\",\n\n // Semantic\n danger: \"#ff453a\",\n dangerHover: \"#ff6961\",\n success: \"#34c759\",\n warning: \"#ff9f0a\",\n info: \"#007aff\",\n tip: \"#af52de\",\n\n // Inverse (for solid buttons, etc.)\n onPrimary: \"#ffffff\",\n onDanger: \"#ffffff\",\n },\n\n space: {\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\",\n xxl: \"2rem\",\n },\n\n radii: {\n sm: \"10px\",\n md: \"12px\",\n lg: \"16px\",\n xl: \"20px\",\n pill: \"980px\",\n },\n\n fonts: {\n base: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"SF Pro Text\", Inter, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n mono: '\"SF Mono\", \"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n },\n\n fontSizes: {\n xs: \"0.8125rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.0625rem\",\n },\n\n fontWeights: {\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n },\n\n lineHeights: {\n tight: \"1.25\",\n normal: \"1.6\",\n },\n\n shadows: {\n sm: \"0 1px 3px rgba(0, 0, 0, 0.03)\",\n md: \"0 1px 4px rgba(0, 0, 0, 0.04)\",\n lg: \"0 8px 28px rgba(0, 0, 0, 0.08)\",\n primaryGlow: \"0 4px 16px rgba(0, 113, 227, 0.3)\",\n },\n\n transitions: {\n fast: \"0.2s ease\",\n normal: \"0.3s cubic-bezier(0.25, 0.1, 0.25, 1)\",\n },\n} as const;\n\nexport const tokens: TokenRefs<typeof tokenDefinition> = defineTokens(tokenDefinition);\n","/**\n * Callout component styles\n *\n * Five semantic variants: info, warning, success, error, tip\n * Matching the docs site callout design.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"title\", \"icon\", \"content\"] as const);\n\n// --- Base ---\n\nexport const root = rule`${c.root} {\n padding: 1.25rem 1.5rem;\n margin: 1.5rem 0;\n border-radius: 14px;\n border: 0.5px solid rgba(0, 0, 0, 0.04);\n font-family: ${tokens.fonts.base};\n}`;\n\nexport const title = rule`${c.title} {\n font-weight: ${tokens.fontWeights.semibold};\n font-size: 0.9375rem;\n margin: 0 0 0.5rem;\n display: flex;\n align-items: center;\n gap: ${tokens.space.sm};\n letter-spacing: -0.005em;\n}`;\n\nexport const icon = rule`${c.icon} {\n width: 18px;\n height: 18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}`;\n\nexport const content = rule`${c.content} {\n color: ${tokens.colors.text};\n font-size: 0.9375rem;\n line-height: ${tokens.lineHeights.normal};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Callout component\n *\n * A styled box for highlighting important content with semantic variants.\n *\n * @example\n * ```tsx\n * import { Callout } from \"@semajsx/ui/callout\";\n *\n * <Callout type=\"info\" title=\"Note\">This is informational.</Callout>\n * <Callout type=\"warning\">Be careful with this.</Callout>\n * <Callout type=\"tip\" title=\"Pro tip\">Use signals for reactivity.</Callout>\n * ```\n */\n\nimport type { JSXNode, VNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./callout.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport type CalloutType = \"info\" | \"warning\" | \"success\" | \"error\" | \"tip\";\n\nexport interface CalloutProps {\n /** Semantic type controlling color and icon */\n type?: CalloutType;\n /** Optional title displayed above content */\n title?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content */\n children?: JSXNode;\n}\n\nconst SVG_ATTRS = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n};\n\nfunction InfoIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n\nfunction WarningIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nfunction SuccessIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <path d=\"m9 11 3 3L22 4\" />\n </svg>\n );\n}\n\nfunction ErrorIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6\" />\n <path d=\"m9 9 6 6\" />\n </svg>\n );\n}\n\nfunction TipIcon(): VNode {\n return (\n <svg {...SVG_ATTRS}>\n <path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n );\n}\n\nconst calloutConfig: Record<CalloutType, { bg: string; accent: string; icon: () => VNode }> = {\n info: { bg: \"rgba(0, 122, 255, 0.06)\", accent: \"#007aff\", icon: InfoIcon },\n warning: { bg: \"rgba(255, 159, 10, 0.08)\", accent: \"#ff9f0a\", icon: WarningIcon },\n success: { bg: \"rgba(52, 199, 89, 0.08)\", accent: \"#34c759\", icon: SuccessIcon },\n error: { bg: \"rgba(255, 69, 58, 0.08)\", accent: \"#ff453a\", icon: ErrorIcon },\n tip: { bg: \"rgba(175, 82, 222, 0.06)\", accent: \"#af52de\", icon: TipIcon },\n};\n\nexport function Callout(props: CalloutProps): JSXNode {\n const type = props.type ?? \"info\";\n const config = calloutConfig[type];\n const IconComponent = config.icon;\n\n return (\n <div class={[styles.root, props.class]} style={`background: ${config.bg}`} role=\"note\">\n {props.title && (\n <div class={styles.title} style={`color: ${config.accent}`}>\n <span class={styles.icon}>\n <IconComponent />\n </span>\n {props.title}\n </div>\n )}\n <div class={styles.content}>{props.children}</div>\n </div>\n );\n}\n","/**\n * Badge component styles\n *\n * Pill-shaped labels with semantic color variants.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n font-size: 0.6875rem;\n font-weight: ${tokens.fontWeights.semibold};\n font-family: ${tokens.fonts.base};\n padding: 0.125rem 0.5rem;\n border-radius: ${tokens.radii.pill};\n letter-spacing: 0.02em;\n text-transform: uppercase;\n white-space: nowrap;\n line-height: 1.6;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Badge component\n *\n * A small pill-shaped label for status, category, or metadata.\n *\n * @example\n * ```tsx\n * import { Badge } from \"@semajsx/ui/badge\";\n *\n * <Badge color=\"success\">Beginner</Badge>\n * <Badge color=\"warning\">Intermediate</Badge>\n * <Badge color=\"danger\">Advanced</Badge>\n * <Badge>Default</Badge>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./badge.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport type BadgeColor = \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"tip\";\n\nexport interface BadgeProps {\n /** Semantic color */\n color?: BadgeColor;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content */\n children?: JSXNode;\n}\n\nconst badgeColors: Record<BadgeColor, { bg: string; fg: string }> = {\n default: { bg: \"rgba(0, 0, 0, 0.06)\", fg: \"#1d1d1f\" },\n success: { bg: \"rgba(52, 199, 89, 0.12)\", fg: \"#248a3d\" },\n warning: { bg: \"rgba(255, 159, 10, 0.12)\", fg: \"#b25000\" },\n danger: { bg: \"rgba(255, 69, 58, 0.12)\", fg: \"#d70015\" },\n info: { bg: \"rgba(0, 122, 255, 0.1)\", fg: \"#0055b3\" },\n tip: { bg: \"rgba(175, 82, 222, 0.1)\", fg: \"#8944ab\" },\n};\n\nexport function Badge(props: BadgeProps): JSXNode {\n const color = props.color ?? \"default\";\n const config = badgeColors[color];\n\n return (\n <span\n class={[styles.root, props.class]}\n style={`background: ${config.bg}; color: ${config.fg}`}\n >\n {props.children}\n </span>\n );\n}\n","/**\n * Card component styles\n *\n * Two variants matching the docs site design:\n * - feature: Large card with icon, heading, description\n * - link: Smaller clickable card for navigation\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"feature\", \"link\", \"icon\", \"heading\", \"desc\"] as const);\n\n// --- Base ---\n\nexport const root = rule`${c.root} {\n background: white;\n border: 0.5px solid rgba(0, 0, 0, 0.06);\n font-family: ${tokens.fonts.base};\n transition: all 0.4s cubic-bezier(0.25, 0.1, 0.25, 1);\n}`;\n\n// --- Feature variant ---\n\nexport const feature = rule`${c.feature} {\n border-radius: ${tokens.radii.xl};\n padding: 2.5rem;\n box-shadow: ${tokens.shadows.md};\n}`;\n\nexport const featureStates = rule`${c.feature}:hover {\n transform: translateY(-4px) scale(1.01);\n box-shadow: ${tokens.shadows.lg};\n}`;\n\n// --- Link variant ---\n\nexport const link = rule`${c.link} {\n display: block;\n border-radius: ${tokens.radii.lg};\n padding: 1.75rem;\n box-shadow: ${tokens.shadows.sm};\n text-decoration: none;\n cursor: pointer;\n}`;\n\nexport const linkStates = rules(\n rule`${c.link}:hover {\n border-color: rgba(0, 113, 227, 0.3);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n transform: translateY(-2px);\n }`,\n);\n\n// --- Slots ---\n\nexport const icon = rule`${c.icon} {\n font-size: 2rem;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${tokens.colors.surface};\n border-radius: ${tokens.radii.md};\n margin-bottom: 1.25rem;\n}`;\n\nexport const heading = rule`${c.heading} {\n font-size: 1.375rem;\n font-weight: ${tokens.fontWeights.semibold};\n color: ${tokens.colors.text};\n margin: 0 0 0.5rem;\n letter-spacing: -0.01em;\n}`;\n\nexport const headingLink = rule`${c.link} ${c.heading} {\n font-size: ${tokens.fontSizes.lg};\n margin-bottom: 0.25rem;\n}`;\n\nexport const desc = rule`${c.desc} {\n color: ${tokens.colors.textMuted};\n line-height: ${tokens.lineHeights.normal};\n font-size: 0.9375rem;\n margin: 0;\n}`;\n\nexport const descLink = rule`${c.link} ${c.desc} {\n font-size: ${tokens.fontSizes.sm};\n line-height: 1.5;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Card component\n *\n * A content container with two variants matching the docs design:\n * - `feature` (default): Large card with icon, heading, and description\n * - `link`: Smaller clickable card for navigation\n *\n * @example\n * ```tsx\n * import { Card } from \"@semajsx/ui/card\";\n *\n * <Card icon=\"⚡\" heading=\"Fast\" description=\"Built for speed\" />\n * <Card variant=\"link\" heading=\"Guide\" description=\"Get started\" href=\"/docs\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./card.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface CardProps {\n /** Card variant */\n variant?: \"feature\" | \"link\";\n /** Icon content (emoji or JSX) */\n icon?: JSXNode;\n /** Card heading */\n heading?: string;\n /** Card description */\n description?: string;\n /** Link URL (for \"link\" variant) */\n href?: string;\n /** Inline style string */\n style?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content */\n children?: JSXNode;\n}\n\nexport function Card(props: CardProps): JSXNode {\n const variant = props.variant ?? \"feature\";\n\n const content = (\n <>\n {props.icon && <div class={styles.icon}>{props.icon}</div>}\n {props.heading && (\n <h3 class={[styles.heading, variant === \"link\" && styles.headingLink]}>{props.heading}</h3>\n )}\n {props.description && (\n <p class={[styles.desc, variant === \"link\" && styles.descLink]}>{props.description}</p>\n )}\n {props.children}\n </>\n );\n\n if (variant === \"link\") {\n return (\n <a\n href={props.href}\n class={[styles.root, styles.link, styles.linkStates, props.class]}\n style={props.style}\n >\n {content}\n </a>\n );\n }\n\n return (\n <div\n class={[styles.root, styles.feature, styles.featureStates, props.class]}\n style={props.style}\n >\n {content}\n </div>\n );\n}\n","/**\n * Tabs component styles\n *\n * A tab bar with active indicator and content panels.\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"list\", \"trigger\", \"active\", \"panel\"] as const);\n\n// --- Container ---\n\nexport const root = rule`${c.root} {\n margin: 1.5rem 0;\n font-family: ${tokens.fonts.base};\n}`;\n\n// --- Tab List ---\n\nexport const list = rule`${c.list} {\n display: flex;\n gap: 0;\n border-bottom: 1px solid ${tokens.colors.border};\n margin-bottom: 0;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}`;\n\n// --- Trigger ---\n\nexport const trigger = rule`${c.trigger} {\n padding: 0.625rem 1rem;\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.medium};\n font-family: ${tokens.fonts.base};\n color: ${tokens.colors.textMuted};\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n white-space: nowrap;\n transition: color ${tokens.transitions.fast}, border-color ${tokens.transitions.fast};\n margin-bottom: -1px;\n}`;\n\nexport const triggerStates = rules(\n rule`${c.trigger}:hover {\n color: ${tokens.colors.text};\n }`,\n rule`${c.trigger}:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: -2px;\n }`,\n);\n\n// --- Active Trigger ---\n\nexport const active = rule`${c.active} {\n color: ${tokens.colors.primary};\n border-bottom-color: ${tokens.colors.primary};\n}`;\n\n// --- Panel ---\n\nexport const panel = rule`${c.panel} {\n padding: 1rem 0;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Tabs component\n *\n * A tabbed interface for switching between content panels.\n * Uses signal-based reactivity: a signal tracks the active tab,\n * `onClick` handles switching, and a `ref` callback subscribes\n * to the signal to update `aria-selected` / `hidden` on children.\n *\n * Works both standalone (client-side) and as an SSR island —\n * wrap with `island()` for SSG hydration.\n *\n * @example\n * ```tsx\n * import { Tabs, TabList, Tab, TabPanel } from \"@semajsx/ui/tabs\";\n *\n * <Tabs defaultValue=\"npm\">\n * <TabList>\n * <Tab value=\"npm\">npm</Tab>\n * <Tab value=\"bun\">Bun</Tab>\n * </TabList>\n * <TabPanel value=\"npm\">npm install semajsx</TabPanel>\n * <TabPanel value=\"bun\">bun add semajsx</TabPanel>\n * </Tabs>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport { signal } from \"@semajsx/signal\";\nimport * as styles from \"./tabs.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\n/**\n * Module-level state for SSR initial rendering.\n *\n * Set by `Tabs` before returning JSX; read by `Tab` / `TabPanel` when they\n * render during the same synchronous (or awaited) SSR pass. This lets the\n * server output include the correct `aria-selected` and `hidden` attributes\n * so the page is styled correctly before any JS loads.\n *\n * On the client the `ref` callback in `Tabs` immediately overwrites these\n * attributes once the component mounts, so the initial values are harmless.\n */\nlet _ssrDefaultTab: string | undefined;\n\nexport interface TabsProps {\n /** The initially active tab value */\n defaultValue: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Content (TabList and TabPanels) */\n children?: JSXNode;\n}\n\nexport interface TabListProps {\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Tab triggers */\n children?: JSXNode;\n}\n\nexport interface TabProps {\n /** Value matching a TabPanel */\n value: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Tab label */\n children?: JSXNode;\n}\n\nexport interface TabPanelProps {\n /** Value matching a Tab */\n value: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Panel content */\n children?: JSXNode;\n}\n\nexport function Tabs(props: TabsProps): JSXNode {\n const active = signal(props.defaultValue);\n _ssrDefaultTab = props.defaultValue;\n\n return (\n <div\n class={[styles.root, props.class]}\n data-tabs={active}\n onClick={(e: MouseEvent) => {\n const tab = (e.target as HTMLElement).closest(\"[role=tab]\");\n if (!tab) return;\n const value = tab.getAttribute(\"data-tab-value\");\n if (value) active.value = value;\n }}\n ref={(el: HTMLDivElement | null) => {\n if (!el) return;\n // Sync child tab/panel states to the active signal\n const sync = (value: string) => {\n for (const t of el.querySelectorAll(\"[role=tab]\")) {\n t.setAttribute(\"aria-selected\", String(t.getAttribute(\"data-tab-value\") === value));\n }\n for (const p of el.querySelectorAll(\"[role=tabpanel]\")) {\n (p as HTMLElement).hidden = p.getAttribute(\"data-tab-panel\") !== value;\n }\n };\n sync(active.value);\n active.subscribe(sync);\n }}\n >\n {props.children}\n </div>\n );\n}\n\nexport function TabList(props: TabListProps): JSXNode {\n return (\n <div class={[styles.list, props.class]} role=\"tablist\">\n {props.children}\n </div>\n );\n}\n\nexport function Tab(props: TabProps): JSXNode {\n return (\n <button\n class={[styles.trigger, styles.triggerStates, props.class]}\n role=\"tab\"\n data-tab-value={props.value}\n aria-selected={\n _ssrDefaultTab !== undefined\n ? props.value === _ssrDefaultTab\n ? \"true\"\n : \"false\"\n : undefined\n }\n >\n {props.children}\n </button>\n );\n}\n\nexport function TabPanel(props: TabPanelProps): JSXNode {\n const hidden = _ssrDefaultTab !== undefined ? props.value !== _ssrDefaultTab : undefined;\n return (\n <div\n class={[styles.panel, props.class]}\n role=\"tabpanel\"\n data-tab-panel={props.value}\n hidden={hidden || undefined}\n >\n {props.children}\n </div>\n );\n}\n","/**\n * Steps component styles\n *\n * Numbered step indicators for tutorials and guides.\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"item\", \"number\", \"content\", \"title\", \"body\"] as const);\n\nexport const root = rule`${c.root} {\n display: flex;\n flex-direction: column;\n gap: 0;\n margin: 1.5rem 0;\n font-family: ${tokens.fonts.base};\n}`;\n\nexport const item = rule`${c.item} {\n display: flex;\n gap: 1rem;\n padding: 1.25rem 0;\n border-bottom: 0.5px solid ${tokens.colors.border};\n}`;\n\nexport const number = rule`${c.number} {\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: ${tokens.colors.primary};\n color: ${tokens.colors.onPrimary};\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.semibold};\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 0.125rem;\n}`;\n\nexport const content = rule`${c.content} {\n flex: 1;\n min-width: 0;\n}`;\n\nexport const title = rule`${c.title} {\n font-size: ${tokens.fontSizes.md};\n font-weight: ${tokens.fontWeights.semibold};\n color: ${tokens.colors.text};\n margin: 0 0 0.375rem;\n letter-spacing: -0.005em;\n}`;\n\nexport const body = rule`${c.body} {\n color: ${tokens.colors.textMuted};\n font-size: ${tokens.fontSizes.sm};\n line-height: ${tokens.lineHeights.normal};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Steps component\n *\n * A numbered step list for tutorials and walkthroughs.\n *\n * @example\n * ```tsx\n * import { Steps, Step } from \"@semajsx/ui/steps\";\n *\n * <Steps>\n * <Step title=\"Install\">Run bun add semajsx</Step>\n * <Step title=\"Create component\">Write your first JSX component</Step>\n * <Step title=\"Render\">Call render() to mount your app</Step>\n * </Steps>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./steps.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface StepsProps {\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Step items */\n children?: JSXNode;\n}\n\nexport interface StepProps {\n /** Step title */\n title: string;\n /** Step number (auto-assigned if omitted) */\n number?: number;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Step description/content */\n children?: JSXNode;\n}\n\nexport function Steps(props: StepsProps): JSXNode {\n return <div class={[styles.root, props.class]}>{props.children}</div>;\n}\n\nexport function Step(props: StepProps): JSXNode {\n return (\n <div class={[styles.item, props.class]}>\n {props.number !== undefined && <div class={styles.number}>{props.number}</div>}\n <div class={styles.content}>\n <h4 class={styles.title}>{props.title}</h4>\n <div class={styles.body}>{props.children}</div>\n </div>\n </div>\n );\n}\n","/**\n * Built-in themes for @semajsx/ui\n *\n * Provides light (default) and dark themes. Custom themes can be\n * created using createTheme() from @semajsx/style.\n *\n * @example\n * ```tsx\n * import { lightTheme, darkTheme } from \"@semajsx/ui/theme\";\n * import { inject } from \"@semajsx/style\";\n *\n * // Apply default (light) theme to :root\n * inject(lightTheme);\n *\n * // Scope dark theme to an element\n * <div class={darkTheme}>\n * <Button>Dark button</Button>\n * </div>\n * ```\n */\n\nimport { createTheme } from \"@semajsx/style\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\n\n/**\n * Light theme - applies token defaults to :root\n */\nexport const lightTheme: StyleToken = createTheme(tokens);\n\n/**\n * Dark theme - scoped to a CSS class\n */\nexport const darkTheme: StyleToken = createTheme(tokens, {\n colors: {\n primary: \"#2997ff\",\n primaryHover: \"#5ab4ff\",\n primaryActive: \"#0071e3\",\n\n background: \"#000000\",\n surface: \"#1c1c1e\",\n border: \"rgba(255, 255, 255, 0.12)\",\n text: \"#f5f5f7\",\n textMuted: \"#a1a1a6\",\n textTertiary: \"#6e6e73\",\n\n danger: \"#ff453a\",\n dangerHover: \"#ff6961\",\n success: \"#30d158\",\n warning: \"#ffd60a\",\n info: \"#0a84ff\",\n tip: \"#bf5af2\",\n\n onPrimary: \"#ffffff\",\n onDanger: \"#ffffff\",\n },\n\n shadows: {\n sm: \"0 1px 3px rgba(0, 0, 0, 0.2)\",\n md: \"0 1px 4px rgba(0, 0, 0, 0.3)\",\n lg: \"0 8px 28px rgba(0, 0, 0, 0.4)\",\n primaryGlow: \"0 4px 16px rgba(41, 151, 255, 0.3)\",\n },\n});\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * ThemeProvider component\n *\n * Wraps the application to provide theme context and inject CSS custom properties.\n * Components can access theme tokens via ctx.inject(ThemeContext).\n *\n * @example\n * ```tsx\n * import { ThemeProvider } from \"@semajsx/ui/theme\";\n *\n * function App() {\n * return (\n * <ThemeProvider>\n * <Button>Themed button</Button>\n * </ThemeProvider>\n * );\n * }\n *\n * // With dark theme\n * <ThemeProvider theme=\"dark\">\n * <App />\n * </ThemeProvider>\n * ```\n */\n\nimport { context, Context } from \"@semajsx/core\";\nimport type { ContextType, JSXNode } from \"@semajsx/core\";\nimport { inject } from \"@semajsx/style\";\nimport { tokens } from \"./tokens\";\nimport { lightTheme, darkTheme } from \"./themes\";\n\n/**\n * Theme context value provided to components\n */\nexport interface ThemeContextValue {\n /** The token refs for building custom styles */\n tokens: typeof tokens;\n}\n\n/**\n * Context for passing theme tokens through the component tree\n */\nexport const ThemeContext: ContextType<ThemeContextValue> =\n context<ThemeContextValue>(\"semajsx-theme\");\n\ninterface ThemeProviderProps {\n /** Which built-in theme to apply: \"light\" (default) or \"dark\" */\n theme?: \"light\" | \"dark\";\n children?: JSXNode;\n}\n\n/**\n * ThemeProvider injects the base theme CSS variables and provides\n * token refs to descendant components via context.\n */\nexport function ThemeProvider(props: ThemeProviderProps): JSXNode {\n // Inject the base theme (light) CSS variables to :root\n inject(lightTheme);\n\n // If dark, also inject the dark theme class\n if (props.theme === \"dark\") {\n inject(darkTheme);\n }\n\n const value: ThemeContextValue = { tokens };\n\n return (\n <Context provide={[ThemeContext, value]}>\n <div class={props.theme === \"dark\" ? darkTheme : undefined}>{props.children}</div>\n </Context>\n );\n}\n","/**\n * Button component styles\n *\n * All styles reference theme tokens via CSS custom properties,\n * so they respond to theme changes automatically.\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\n \"root\",\n \"solid\",\n \"outline\",\n \"ghost\",\n \"sm\",\n \"md\",\n \"lg\",\n \"danger\",\n \"icon\",\n] as const);\n\n// --- Base ---\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.space.sm};\n border: 1.5px solid transparent;\n border-radius: ${tokens.radii.pill};\n font-family: ${tokens.fonts.base};\n font-weight: ${tokens.fontWeights.medium};\n line-height: ${tokens.lineHeights.tight};\n letter-spacing: -0.005em;\n cursor: pointer;\n user-select: none;\n transition: all ${tokens.transitions.normal};\n}`;\n\nexport const rootStates = rules(\n rule`${c.root}:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }`,\n rule`${c.root}:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }`,\n);\n\n// --- Variants ---\n\nexport const solid = rule`${c.solid} {\n background: ${tokens.colors.primary};\n color: ${tokens.colors.onPrimary};\n border-color: ${tokens.colors.primary};\n}`;\n\nexport const solidStates = rules(\n rule`${c.solid}:hover:not(:disabled) {\n background: ${tokens.colors.primaryHover};\n border-color: ${tokens.colors.primaryHover};\n transform: scale(1.02);\n box-shadow: ${tokens.shadows.primaryGlow};\n }`,\n rule`${c.solid}:active:not(:disabled) {\n background: ${tokens.colors.primaryActive};\n border-color: ${tokens.colors.primaryActive};\n transform: scale(0.98);\n box-shadow: none;\n }`,\n);\n\nexport const outline = rule`${c.outline} {\n background: transparent;\n color: ${tokens.colors.primary};\n border-color: ${tokens.colors.primary};\n}`;\n\nexport const outlineStates = rules(\n rule`${c.outline}:hover:not(:disabled) {\n background: ${tokens.colors.primary};\n color: ${tokens.colors.onPrimary};\n transform: scale(1.02);\n }`,\n rule`${c.outline}:active:not(:disabled) {\n background: ${tokens.colors.primaryActive};\n color: ${tokens.colors.onPrimary};\n transform: scale(0.98);\n }`,\n);\n\nexport const ghost = rule`${c.ghost} {\n background: transparent;\n color: ${tokens.colors.text};\n border-color: transparent;\n}`;\n\nexport const ghostStates = rules(\n rule`${c.ghost}:hover:not(:disabled) {\n background: ${tokens.colors.surface};\n }`,\n rule`${c.ghost}:active:not(:disabled) {\n background: ${tokens.colors.border};\n }`,\n);\n\n// --- Danger ---\n\nexport const danger = rule`${c.danger} {\n background: ${tokens.colors.danger};\n color: ${tokens.colors.onDanger};\n border-color: ${tokens.colors.danger};\n}`;\n\nexport const dangerStates = rules(\n rule`${c.danger}:hover:not(:disabled) {\n background: ${tokens.colors.dangerHover};\n border-color: ${tokens.colors.dangerHover};\n transform: scale(1.02);\n }`,\n rule`${c.danger}:focus-visible {\n outline-color: ${tokens.colors.danger};\n }`,\n);\n\n// --- Sizes ---\n\nexport const sm = rule`${c.sm} {\n padding: ${tokens.space.sm} ${tokens.space.lg};\n font-size: ${tokens.fontSizes.sm};\n}`;\n\nexport const md = rule`${c.md} {\n padding: ${tokens.space.md} ${tokens.space.xl};\n font-size: ${tokens.fontSizes.md};\n}`;\n\nexport const lg = rule`${c.lg} {\n padding: 0.875rem 1.75rem;\n font-size: ${tokens.fontSizes.lg};\n}`;\n\n// --- Icon slot ---\n\nexport const icon = rule`${c.icon} {\n display: inline-flex;\n flex-shrink: 0;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Button component\n *\n * A polymorphic button with variant, size, and color support.\n * All styles are driven by theme tokens for automatic theme switching.\n *\n * @example\n * ```tsx\n * import { Button } from \"@semajsx/ui/button\";\n *\n * <Button>Default</Button>\n * <Button variant=\"outline\">Outline</Button>\n * <Button variant=\"ghost\" size=\"sm\">Small Ghost</Button>\n * <Button color=\"danger\">Delete</Button>\n * <Button disabled>Disabled</Button>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./button.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface ButtonProps {\n /** Visual variant */\n variant?: \"solid\" | \"outline\" | \"ghost\";\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Color scheme - \"danger\" applies destructive styling */\n color?: \"default\" | \"danger\";\n /** Disabled state */\n disabled?: boolean;\n /** HTML button type attribute */\n type?: \"button\" | \"submit\" | \"reset\";\n /** Click handler */\n onClick?: (e: Event) => void;\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Accessible label when button content isn't descriptive */\n \"aria-label\"?: string;\n /** Content */\n children?: JSXNode;\n}\n\nconst variantStyles = {\n solid: [styles.solid, styles.solidStates],\n outline: [styles.outline, styles.outlineStates],\n ghost: [styles.ghost, styles.ghostStates],\n} as const;\n\nconst sizeStyles = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const;\n\nexport function Button(props: ButtonProps): JSXNode {\n const variant = props.variant ?? \"solid\";\n const size = props.size ?? \"md\";\n const color = props.color ?? \"default\";\n\n return (\n <button\n type={props.type ?? \"button\"}\n disabled={props.disabled}\n class={[\n styles.root,\n styles.rootStates,\n ...variantStyles[variant],\n sizeStyles[size],\n color === \"danger\" && [styles.danger, styles.dangerStates],\n props.class,\n ]}\n onClick={props.onClick}\n aria-label={props[\"aria-label\"]}\n >\n {props.children}\n </button>\n );\n}\n","/**\n * Separator component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"vertical\"] as const);\n\nexport const root = rule`${c.root} {\n border: none;\n background: ${tokens.colors.border};\n flex-shrink: 0;\n}`;\n\nexport const horizontal = rule`${c.root}:not(${c.vertical}) {\n height: 0.5px;\n width: 100%;\n margin: ${tokens.space.lg} 0;\n}`;\n\nexport const vertical = rule`${c.vertical} {\n width: 0.5px;\n height: auto;\n align-self: stretch;\n margin: 0 ${tokens.space.lg};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Separator component\n *\n * A visual divider between content sections.\n *\n * @example\n * ```tsx\n * import { Separator } from \"@semajsx/ui/components/separator\";\n *\n * <Separator />\n * <Separator orientation=\"vertical\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./separator.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface SeparatorProps {\n /** Orientation of the separator */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional CSS class(es) */\n class?: ClassValue;\n /** Inline style string */\n style?: string;\n}\n\nexport function Separator(props: SeparatorProps): JSXNode {\n const orientation = props.orientation ?? \"horizontal\";\n\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n class={[\n styles.root,\n styles.horizontal,\n orientation === \"vertical\" && styles.vertical,\n props.class,\n ]}\n style={props.style}\n />\n );\n}\n","/**\n * Input component styles\n */\n\nimport { classes, rule, rules } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"wrapper\", \"label\", \"sm\", \"md\", \"lg\"] as const);\n\nexport const wrapper = rule`${c.wrapper} {\n display: flex;\n flex-direction: column;\n gap: ${tokens.space.sm};\n font-family: ${tokens.fonts.base};\n}`;\n\nexport const label = rule`${c.label} {\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.medium};\n color: ${tokens.colors.text};\n letter-spacing: -0.005em;\n}`;\n\nexport const root = rule`${c.root} {\n display: block;\n width: 100%;\n border: 1.5px solid ${tokens.colors.border};\n border-radius: ${tokens.radii.sm};\n background: white;\n color: ${tokens.colors.text};\n font-family: ${tokens.fonts.base};\n font-size: ${tokens.fontSizes.md};\n line-height: ${tokens.lineHeights.normal};\n transition: all ${tokens.transitions.fast};\n outline: none;\n}`;\n\nexport const rootStates = rules(\n rule`${c.root}:focus {\n border-color: ${tokens.colors.primary};\n box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.15);\n }`,\n rule`${c.root}:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background: ${tokens.colors.surface};\n }`,\n rule`${c.root}::placeholder {\n color: ${tokens.colors.textTertiary};\n }`,\n);\n\nexport const sm = rule`${c.sm} {\n padding: ${tokens.space.sm} ${tokens.space.md};\n font-size: ${tokens.fontSizes.sm};\n}`;\n\nexport const md = rule`${c.md} {\n padding: ${tokens.space.md} ${tokens.space.lg};\n font-size: ${tokens.fontSizes.md};\n}`;\n\nexport const lg = rule`${c.lg} {\n padding: ${tokens.space.lg} ${tokens.space.xl};\n font-size: ${tokens.fontSizes.lg};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Input component\n *\n * A text input field with optional label and size variants.\n *\n * @example\n * ```tsx\n * import { Input } from \"@semajsx/ui/components/input\";\n *\n * <Input placeholder=\"Enter your name\" />\n * <Input label=\"Email\" type=\"email\" size=\"lg\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./input.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface InputProps {\n /** Input type */\n type?: \"text\" | \"email\" | \"password\" | \"number\" | \"search\" | \"url\" | \"tel\";\n /** Label text displayed above the input */\n label?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Current value */\n value?: string;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Disabled state */\n disabled?: boolean;\n /** Read-only state */\n readOnly?: boolean;\n /** HTML name attribute */\n name?: string;\n /** HTML id attribute */\n id?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nconst sizeStyles = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const;\n\nexport function Input(props: InputProps): JSXNode {\n const size = props.size ?? \"md\";\n const inputId = props.id ?? props.name;\n\n const input = (\n <input\n type={props.type ?? \"text\"}\n id={inputId}\n name={props.name}\n placeholder={props.placeholder}\n value={props.value}\n disabled={props.disabled}\n readOnly={props.readOnly}\n class={[styles.root, styles.rootStates, sizeStyles[size], props.class]}\n />\n );\n\n if (props.label) {\n return (\n <div class={styles.wrapper}>\n <label class={styles.label} for={inputId}>\n {props.label}\n </label>\n {input}\n </div>\n );\n }\n\n return input;\n}\n","/**\n * Avatar component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"image\", \"fallback\", \"sm\", \"md\", \"lg\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n overflow: hidden;\n background: ${tokens.colors.surface};\n border: 1.5px solid ${tokens.colors.border};\n flex-shrink: 0;\n font-family: ${tokens.fonts.base};\n user-select: none;\n}`;\n\nexport const image = rule`${c.image} {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}`;\n\nexport const fallback = rule`${c.fallback} {\n font-weight: ${tokens.fontWeights.semibold};\n color: ${tokens.colors.textMuted};\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}`;\n\nexport const sm = rule`${c.sm} {\n width: 32px;\n height: 32px;\n font-size: 0.75rem;\n}`;\n\nexport const md = rule`${c.md} {\n width: 40px;\n height: 40px;\n font-size: ${tokens.fontSizes.sm};\n}`;\n\nexport const lg = rule`${c.lg} {\n width: 48px;\n height: 48px;\n font-size: ${tokens.fontSizes.md};\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Avatar component\n *\n * Displays a user avatar with image or initials fallback.\n *\n * @example\n * ```tsx\n * import { Avatar } from \"@semajsx/ui/components/avatar\";\n *\n * <Avatar src=\"/photo.jpg\" alt=\"John\" />\n * <Avatar initials=\"JD\" />\n * <Avatar initials=\"AB\" size=\"lg\" />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./avatar.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface AvatarProps {\n /** Image source URL */\n src?: string;\n /** Alt text for the image */\n alt?: string;\n /** Initials to display when no image is provided */\n initials?: string;\n /** Size preset */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nconst sizeStyles = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const;\n\nexport function Avatar(props: AvatarProps): JSXNode {\n const size = props.size ?? \"md\";\n\n return (\n <div\n class={[styles.root, sizeStyles[size], props.class]}\n role=\"img\"\n aria-label={props.alt ?? props.initials ?? \"Avatar\"}\n >\n {props.src ? (\n <img class={styles.image} src={props.src} alt={props.alt ?? \"\"} />\n ) : (\n <span class={styles.fallback}>{props.initials ?? \"?\"}</span>\n )}\n </div>\n );\n}\n","/**\n * Kbd (keyboard) component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5em;\n padding: 0.15rem 0.4rem;\n background: ${tokens.colors.surface};\n border: 0.5px solid ${tokens.colors.border};\n border-bottom-width: 2px;\n border-radius: 6px;\n font-family: ${tokens.fonts.base};\n font-size: 0.8125rem;\n font-weight: ${tokens.fontWeights.medium};\n color: ${tokens.colors.text};\n line-height: 1.4;\n white-space: nowrap;\n user-select: none;\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Kbd component\n *\n * Displays a keyboard key or shortcut.\n *\n * @example\n * ```tsx\n * import { Kbd } from \"@semajsx/ui/components/kbd\";\n *\n * <Kbd>Ctrl</Kbd>\n * <p>Press <Kbd>Cmd</Kbd> + <Kbd>K</Kbd> to search</p>\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./kbd.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface KbdProps {\n /** Key label */\n children?: JSXNode;\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nexport function Kbd(props: KbdProps): JSXNode {\n return <kbd class={[styles.root, props.class]}>{props.children}</kbd>;\n}\n","/**\n * Switch component styles\n */\n\nimport { classes, rule } from \"@semajsx/style\";\nimport { tokens } from \"../../theme/tokens\";\n\nconst c = classes([\"root\", \"track\", \"trackOn\", \"thumb\", \"thumbOn\", \"label\"] as const);\n\nexport const root = rule`${c.root} {\n display: inline-flex;\n align-items: center;\n gap: ${tokens.space.md};\n cursor: pointer;\n font-family: ${tokens.fonts.base};\n user-select: none;\n}`;\n\nexport const rootDisabled = rule`${c.root}[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n}`;\n\nexport const track = rule`${c.track} {\n position: relative;\n width: 44px;\n height: 24px;\n background: ${tokens.colors.border};\n border-radius: 12px;\n transition: background ${tokens.transitions.fast};\n flex-shrink: 0;\n}`;\n\nexport const trackOn = rule`${c.trackOn} {\n background: ${tokens.colors.primary};\n}`;\n\nexport const thumb = rule`${c.thumb} {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: white;\n border-radius: 50%;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform ${tokens.transitions.fast};\n}`;\n\nexport const thumbOn = rule`${c.thumbOn} {\n transform: translateX(20px);\n}`;\n\nexport const label = rule`${c.label} {\n font-size: ${tokens.fontSizes.sm};\n font-weight: ${tokens.fontWeights.medium};\n color: ${tokens.colors.text};\n letter-spacing: -0.005em;\n}`;\n","/** @jsxImportSource @semajsx/dom */\n\n/**\n * Switch component\n *\n * A toggle switch for boolean settings.\n *\n * @example\n * ```tsx\n * import { Switch } from \"@semajsx/ui/components/switch\";\n *\n * <Switch label=\"Dark mode\" />\n * <Switch label=\"Notifications\" checked />\n * ```\n */\n\nimport type { JSXNode } from \"@semajsx/core\";\nimport type { StyleToken } from \"@semajsx/style\";\nimport * as styles from \"./switch.style\";\n\ntype ClassValue = string | StyleToken | ClassValue[] | false | null | undefined;\n\nexport interface SwitchProps {\n /** Label text */\n label?: string;\n /** Checked state */\n checked?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** HTML name attribute */\n name?: string;\n /** Additional CSS class(es) */\n class?: ClassValue;\n}\n\nexport function Switch(props: SwitchProps): JSXNode {\n const checked = props.checked ?? false;\n\n return (\n <div\n role=\"switch\"\n aria-checked={checked ? \"true\" : \"false\"}\n aria-disabled={props.disabled ? \"true\" : undefined}\n class={[styles.root, styles.rootDisabled, props.class]}\n >\n <div class={[styles.track, checked && styles.trackOn]}>\n <div class={[styles.thumb, checked && styles.thumbOn]} />\n </div>\n {props.label && <span class={styles.label}>{props.label}</span>}\n </div>\n );\n}\n","/** @jsxImportSource @semajsx/dom */\n\nimport type { VNode, JSXNode } from \"@semajsx/core\";\nimport type { DocumentProps } from \"../../types\";\nimport type { DocsThemeOptions, NavLink } from \"./types\";\nimport { THEME_CSS } from \"./styles\";\nimport { Icon } from \"../lucide/component\";\n\nimport { Callout } from \"@semajsx/ui/components/callout\";\nimport { Badge } from \"@semajsx/ui/components/badge\";\nimport { Card } from \"@semajsx/ui/components/card\";\nimport { Tabs, TabList, Tab, TabPanel } from \"@semajsx/ui/components/tabs\";\nimport { Steps, Step } from \"@semajsx/ui/components/steps\";\nimport { lightTheme } from \"@semajsx/ui/theme\";\n\nimport type { BadgeColor } from \"@semajsx/ui/components/badge\";\n\nimport { Button } from \"@semajsx/ui/components/button\";\nimport { Separator } from \"@semajsx/ui/components/separator\";\nimport { Input } from \"@semajsx/ui/components/input\";\nimport { Avatar } from \"@semajsx/ui/components/avatar\";\nimport { Kbd } from \"@semajsx/ui/components/kbd\";\nimport { Switch } from \"@semajsx/ui/components/switch\";\n\n/** Concatenate class names, filtering falsy values */\nfunction cx(...args: (string | false | null | undefined)[]): string {\n return args.filter(Boolean).join(\" \");\n}\n\n// =============================================================================\n// Table — Wraps <table> in a scrollable container for mobile overflow\n// =============================================================================\n\nexport function Table({\n children,\n ...props\n}: { children?: JSXNode } & Record<string, unknown>): VNode {\n return (\n <div class=\"dt-table-wrapper\">\n <table {...props}>{children}</table>\n </div>\n );\n}\n\n// =============================================================================\n// Pre — Wraps <pre> in .dt-code-block so the language label stays outside\n// the scrollable area\n// =============================================================================\n\nexport function Pre({\n children,\n \"data-language\": lang,\n ...props\n}: { children?: JSXNode; \"data-language\"?: string } & Record<string, unknown>): VNode {\n return (\n <div class=\"dt-code-block\">\n {lang && (\n <div class=\"dt-code-header\">\n <span class=\"dt-code-lang\">{lang}</span>\n </div>\n )}\n <pre data-language={lang} {...props}>\n {children}\n </pre>\n </div>\n );\n}\n\n// =============================================================================\n// ComponentPreview — MDX component for showcasing UI components\n// =============================================================================\n\ninterface ComponentPreviewProps {\n /** Optional label shown above the preview */\n label?: string;\n /** Allow pointer events inside the preview */\n interactive?: boolean;\n children?: JSXNode;\n}\n\nexport function ComponentPreview({ label, interactive, children }: ComponentPreviewProps): VNode {\n const boxClass = interactive ? \"dt-preview-box dt-preview-interactive\" : \"dt-preview-box\";\n return (\n <div class=\"dt-preview\">\n <div class={boxClass}>\n {label && <span class=\"dt-preview-label\">{label}</span>}\n {children}\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// CodeBlock — MDX component (kept custom for Shiki className integration)\n// =============================================================================\n\ninterface CodeBlockProps {\n children: string;\n className?: string;\n language?: string;\n}\n\nexport function CodeBlock({ children, className, language }: CodeBlockProps): VNode {\n const lang = language || (className?.replace(/^language-/, \"\") ?? \"text\");\n return (\n <div class=\"dt-code-block\">\n {lang && lang !== \"text\" && (\n <div class=\"dt-code-header\">\n <span class=\"dt-code-lang\">{lang}</span>\n </div>\n )}\n <pre class={className}>\n <code>{children}</code>\n </pre>\n </div>\n );\n}\n\n// =============================================================================\n// Difficulty → Badge color mapping\n// =============================================================================\n\nconst DIFFICULTY_COLORS: Record<string, BadgeColor> = {\n beginner: \"success\",\n intermediate: \"warning\",\n advanced: \"danger\",\n};\n\nconst DIFFICULTY_LABELS: Record<string, string> = {\n beginner: \"Beginner\",\n intermediate: \"Intermediate\",\n advanced: \"Advanced\",\n};\n\n// =============================================================================\n// Component factory — creates all page components bound to theme options\n// =============================================================================\n\ninterface DocsIndexProps {\n docs: Array<{\n slug: string;\n data: { title: string; description?: string; category?: string; order: number };\n }>;\n}\n\ninterface DocPageProps {\n doc: { data: { title: string; description?: string } };\n content: VNode;\n}\n\ninterface GuidesIndexProps {\n guides: Array<{\n slug: string;\n data: { title: string; description?: string; difficulty: string; order: number };\n }>;\n}\n\ninterface GuidePageProps {\n guide: { data: { title: string; description?: string; difficulty: string } };\n content: VNode;\n}\n\ninterface UIIndexProps {\n components: Array<{\n slug: string;\n data: { title: string; description?: string; category?: string; order: number };\n }>;\n}\n\ninterface UIPageProps {\n component: { data: { title: string; description?: string } };\n content: VNode;\n}\n\n/** Props for the DocsIndexHome preset */\ninterface DocsIndexHomeProps {\n docs: Array<{\n slug: string;\n data: { title: string; description?: string; category?: string; order: number };\n }>;\n guides: Array<{\n slug: string;\n data: { title: string; description?: string; difficulty: string; order: number };\n }>;\n}\n\n/** Component map returned by createComponents */\nexport interface DocsThemeComponents {\n Document: (props: DocumentProps) => VNode;\n Layout: (props: { children: JSXNode }) => VNode;\n HomePage: () => VNode;\n DocsIndexHome: (props: DocsIndexHomeProps) => VNode;\n DocsIndex: (props: DocsIndexProps) => VNode;\n DocPage: (props: DocPageProps) => VNode;\n GuidesIndex: (props: GuidesIndexProps) => VNode;\n GuidePage: (props: GuidePageProps) => VNode;\n UIIndex: (props: UIIndexProps) => VNode;\n UIPage: (props: UIPageProps) => VNode;\n NotFound: () => VNode;\n ComponentPreview: typeof ComponentPreview;\n Callout: typeof Callout;\n CodeBlock: typeof CodeBlock;\n Tabs: typeof Tabs;\n TabList: typeof TabList;\n Tab: typeof Tab;\n TabPanel: typeof TabPanel;\n Steps: typeof Steps;\n Step: typeof Step;\n Button: typeof Button;\n Badge: typeof Badge;\n Card: typeof Card;\n Separator: typeof Separator;\n Input: typeof Input;\n Avatar: typeof Avatar;\n Kbd: typeof Kbd;\n Switch: typeof Switch;\n}\n\nexport function createComponents(options: DocsThemeOptions): DocsThemeComponents {\n // --------------------------------------------------\n // Document\n // --------------------------------------------------\n function Document(props: DocumentProps): VNode {\n const { children, title, scripts, css, styles } = props;\n const defaultTitle = options.title;\n const pageTitle = title ?? defaultTitle;\n const desc = options.description ?? \"\";\n\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n {desc && <meta name=\"description\" content={desc} />}\n <meta name=\"theme-color\" content=\"#fbfbfd\" />\n <meta name=\"color-scheme\" content=\"light\" />\n <title>{pageTitle}</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossOrigin=\"\" />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\"\n rel=\"stylesheet\"\n />\n {css?.map((href) => (\n <link key={href} rel=\"stylesheet\" href={href} />\n ))}\n {styles && styles.length > 0 && <style>{styles.join(\"\\n\")}</style>}\n </head>\n <body>\n {children}\n {scripts}\n </body>\n </html>\n );\n }\n\n // --------------------------------------------------\n // Layout (nav + main + footer)\n // --------------------------------------------------\n function Layout({ children }: { children: JSXNode }): VNode {\n const footerLinks = options.footer?.links ?? options.nav.links;\n const copyrightName = options.footer?.copyright ?? options.title;\n\n return (\n <div class=\"dt-root\">\n <style>{lightTheme.__cssTemplate}</style>\n <style>{THEME_CSS}</style>\n\n {/* Navigation */}\n <nav class=\"dt-glass-nav\">\n <div class=\"dt-nav-inner\">\n <a href=\"/\" class=\"dt-nav-logo\">\n {options.nav.logo}\n </a>\n <ul class=\"dt-nav-links\">\n {options.nav.links.map((link: NavLink) => (\n <li key={link.href}>\n <a\n href={link.href}\n class=\"dt-nav-link\"\n {...(link.external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </nav>\n\n <main class=\"dt-main\">{children}</main>\n\n {/* Footer */}\n <footer class=\"dt-footer\">\n <div class=\"dt-footer-inner\">\n <div class=\"dt-footer-links\">\n {footerLinks.map((link: NavLink) => (\n <a\n key={link.href}\n href={link.href}\n class=\"dt-footer-link\"\n {...(link.external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n >\n {link.label}\n </a>\n ))}\n </div>\n <p class=\"dt-footer-copy\">\n {`\\u00A9 ${new Date().getFullYear()} ${copyrightName}`}. MIT License.\n </p>\n </div>\n </footer>\n </div>\n );\n }\n\n // --------------------------------------------------\n // Home Page\n // --------------------------------------------------\n function HomePage(): VNode {\n return (\n <Layout>\n {/* Hero */}\n {options.hero && (\n <div\n class={cx(\"dt-hero-bg\", \"dt-hero-section\")}\n style=\"padding: 100px 24px 80px; position: relative;\"\n >\n <div style=\"max-width: 680px; margin: 0 auto; position: relative; z-index: 1; text-align: center;\">\n <h1 class={cx(\"dt-hero-title\", \"dt-anim-slide-up\")}>{options.hero.title}</h1>\n <p class={cx(\"dt-hero-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.hero.subtitle}\n </p>\n {options.hero.actions && options.hero.actions.length > 0 && (\n <div class={cx(\"dt-hero-cta\", \"dt-anim-slide-up\", \"dt-stagger-2\")}>\n {options.hero.actions.map((action) => (\n <a\n key={action.href}\n href={action.href}\n class={action.primary ? \"dt-primary-btn\" : \"dt-secondary-btn\"}\n >\n {action.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Features */}\n {options.features && (\n <section\n class=\"dt-section-features\"\n style=\"max-width: 1080px; margin: 0 auto; padding: 80px 24px;\"\n >\n <div style=\"text-align: center; margin-bottom: 3.5rem;\">\n <h2 class={cx(\"dt-section-title\", \"dt-anim-slide-up\")}>{options.features.title}</h2>\n <p class={cx(\"dt-section-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.features.subtitle}\n </p>\n </div>\n <div\n class=\"dt-features-grid\"\n style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem;\"\n >\n {options.features.items.map((item, i) => (\n <Card\n key={item.title}\n icon={<Icon name={item.icon} size={24} />}\n heading={item.title}\n description={item.description}\n class={cx(\"dt-anim-scale-in\", `dt-stagger-${Math.min(i + 2, 5)}`)}\n />\n ))}\n </div>\n </section>\n )}\n\n {/* Quick Links */}\n {options.quickLinks && (\n <section\n class=\"dt-section-links\"\n style=\"max-width: 1080px; margin: 0 auto; padding: 0 24px 100px;\"\n >\n <div\n class=\"dt-section-links-inner\"\n style=\"border-top: 0.5px solid rgba(0, 0, 0, 0.06); padding-top: 80px; text-align: center;\"\n >\n <h2 class={cx(\"dt-section-title\", \"dt-anim-slide-up\")}>{options.quickLinks.title}</h2>\n <p class={cx(\"dt-section-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.quickLinks.subtitle}\n </p>\n <div\n class=\"dt-links-grid\"\n style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.25rem; max-width: 720px; margin: 0 auto;\"\n >\n {options.quickLinks.items.map((item, i) => (\n <Card\n key={item.href}\n variant=\"link\"\n href={item.href}\n heading={item.title}\n description={item.description}\n class={cx(\"dt-anim-scale-in\", `dt-stagger-${Math.min(i + 2, 5)}`)}\n style=\"text-align: left;\"\n />\n ))}\n </div>\n </div>\n </section>\n )}\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Docs Index Home (preset for home: \"docs-index\")\n // --------------------------------------------------\n function DocsIndexHome({ docs: docsList, guides: guidesList }: DocsIndexHomeProps): VNode {\n const docsConf = options.docs;\n const guidesConf = options.guides;\n const docsBasePath = docsConf?.basePath ?? \"/docs\";\n const guidesBasePath = guidesConf?.basePath ?? \"/guides\";\n\n return (\n <Layout>\n <div style=\"max-width: 720px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{options.title}</h1>\n {options.description && (\n <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {options.description}\n </p>\n )}\n </div>\n\n {/* Docs listing */}\n {docsList.length > 0 && (\n <section class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{docsConf?.heading ?? \"Documentation\"}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {docsList\n .sort((a, b) => a.data.order - b.data.order)\n .map((doc, i) => (\n <Card\n key={doc.slug}\n variant=\"link\"\n href={`${docsBasePath}/${doc.slug}`}\n heading={doc.data.title}\n description={doc.data.description}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n />\n ))}\n </div>\n </section>\n )}\n\n {/* Guides listing */}\n {guidesList.length > 0 && (\n <section class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{guidesConf?.heading ?? \"Guides\"}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {guidesList\n .sort((a, b) => a.data.order - b.data.order)\n .map((guide, i) => (\n <Card\n key={guide.slug}\n variant=\"link\"\n href={`${guidesBasePath}/${guide.slug}`}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n >\n <div style=\"display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.375rem;\">\n <h3 class=\"dt-card-title\" style=\"margin: 0;\">\n {guide.data.title}\n </h3>\n <Badge color={DIFFICULTY_COLORS[guide.data.difficulty] ?? \"default\"}>\n {guide.data.difficulty}\n </Badge>\n </div>\n {guide.data.description && (\n <p class=\"dt-card-desc\">{guide.data.description}</p>\n )}\n </Card>\n ))}\n </div>\n </section>\n )}\n </div>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Docs Index\n // --------------------------------------------------\n function DocsIndex({ docs: docsList }: DocsIndexProps): VNode {\n const docsConf = options.docs;\n const heading = docsConf?.heading ?? \"Documentation\";\n const desc = docsConf?.description ?? \"\";\n\n const byCategory = docsList.reduce(\n (acc, doc) => {\n const category = doc.data.category || \"General\";\n if (!acc[category]) acc[category] = [];\n acc[category].push(doc);\n return acc;\n },\n {} as Record<string, typeof docsList>,\n );\n Object.values(byCategory).forEach((items) => items.sort((a, b) => a.data.order - b.data.order));\n\n const basePath = docsConf?.basePath ?? \"/docs\";\n\n return (\n <Layout>\n <div style=\"max-width: 720px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{heading}</h1>\n {desc && <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>{desc}</p>}\n </div>\n {Object.entries(byCategory).map(([category, items]) => (\n <section key={category} class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{category}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {items.map((doc, i) => (\n <Card\n key={doc.slug}\n variant=\"link\"\n href={`${basePath}/${doc.slug}`}\n heading={doc.data.title}\n description={doc.data.description}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n />\n ))}\n </div>\n </section>\n ))}\n </div>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Doc Page\n // --------------------------------------------------\n function DocPage({ doc, content }: DocPageProps): VNode {\n return (\n <Layout>\n <article class=\"dt-page-container\">\n <div style=\"margin-bottom: 2.5rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{doc.data.title}</h1>\n {doc.data.description && (\n <p class={cx(\"dt-content-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {doc.data.description}\n </p>\n )}\n </div>\n <div class={cx(\"dt-content\", \"dt-fade-in\")}>{content}</div>\n </article>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Guides Index\n // --------------------------------------------------\n function GuidesIndex({ guides: guidesList }: GuidesIndexProps): VNode {\n const guidesConf = options.guides;\n const heading = guidesConf?.heading ?? \"Guides\";\n const desc = guidesConf?.description ?? \"\";\n\n const byDifficulty = guidesList.reduce(\n (acc, guide) => {\n const difficulty = guide.data.difficulty || \"beginner\";\n if (!acc[difficulty]) acc[difficulty] = [];\n acc[difficulty].push(guide);\n return acc;\n },\n {} as Record<string, typeof guidesList>,\n );\n Object.values(byDifficulty).forEach((items) =>\n items.sort((a, b) => a.data.order - b.data.order),\n );\n\n const basePath = guidesConf?.basePath ?? \"/guides\";\n\n return (\n <Layout>\n <div style=\"max-width: 720px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{heading}</h1>\n {desc && <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>{desc}</p>}\n </div>\n {Object.entries(byDifficulty).map(([difficulty, items]) => (\n <section key={difficulty} class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{DIFFICULTY_LABELS[difficulty] ?? difficulty}</h2>\n <div style=\"display: flex; flex-direction: column; gap: 0.75rem;\">\n {items.map((guide, i) => (\n <Card\n key={guide.slug}\n variant=\"link\"\n href={`${basePath}/${guide.slug}`}\n class={cx(\"dt-anim-scale-in\")}\n style={`animation-delay: ${0.1 + i * 0.08}s;`}\n >\n <div style=\"display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.375rem;\">\n <h3 class=\"dt-card-title\" style=\"margin: 0;\">\n {guide.data.title}\n </h3>\n <Badge color={DIFFICULTY_COLORS[guide.data.difficulty] ?? \"default\"}>\n {guide.data.difficulty}\n </Badge>\n </div>\n {guide.data.description && <p class=\"dt-card-desc\">{guide.data.description}</p>}\n </Card>\n ))}\n </div>\n </section>\n ))}\n </div>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // Guide Page\n // --------------------------------------------------\n function GuidePage({ guide, content }: GuidePageProps): VNode {\n return (\n <Layout>\n <article class=\"dt-page-container\">\n <div style=\"margin-bottom: 2.5rem;\">\n <div class=\"dt-fade-in\" style=\"margin-bottom: 1rem;\">\n <Badge color={DIFFICULTY_COLORS[guide.data.difficulty] ?? \"default\"}>\n {guide.data.difficulty}\n </Badge>\n </div>\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{guide.data.title}</h1>\n {guide.data.description && (\n <p class={cx(\"dt-content-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {guide.data.description}\n </p>\n )}\n </div>\n <div class={cx(\"dt-content\", \"dt-fade-in\")}>{content}</div>\n </article>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // UI Components Index\n // --------------------------------------------------\n function UIIndex({ components: componentsList }: UIIndexProps): VNode {\n const uiConf = options.ui;\n const heading = uiConf?.heading ?? \"Components\";\n const desc = uiConf?.description ?? \"\";\n const basePath = uiConf?.basePath ?? \"/ui\";\n\n const byCategory = componentsList.reduce(\n (acc, comp) => {\n const category = comp.data.category || \"General\";\n if (!acc[category]) acc[category] = [];\n acc[category].push(comp);\n return acc;\n },\n {} as Record<string, typeof componentsList>,\n );\n Object.values(byCategory).forEach((items) => items.sort((a, b) => a.data.order - b.data.order));\n\n return (\n <Layout>\n <div style=\"max-width: 960px;\">\n <div style=\"margin-bottom: 3rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{heading}</h1>\n {desc && <p class={cx(\"dt-page-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>{desc}</p>}\n </div>\n {Object.entries(byCategory).map(([category, items]) => (\n <section key={category} class=\"dt-fade-in\" style=\"margin-bottom: 2.5rem;\">\n <h2 class=\"dt-category-heading\">{category}</h2>\n <div class=\"dt-ui-grid\">\n {items.map((comp, i) => (\n <a\n key={comp.slug}\n href={`${basePath}/${comp.slug}`}\n class={cx(\"dt-ui-card\", \"dt-anim-scale-in\")}\n style={`animation-delay: ${0.05 + i * 0.05}s;`}\n >\n <div class=\"dt-ui-card-preview\">{renderMiniPreview(comp.slug)}</div>\n <h3 class=\"dt-ui-card-name\">{comp.data.title}</h3>\n {comp.data.description && (\n <p class=\"dt-ui-card-desc\">{comp.data.description}</p>\n )}\n </a>\n ))}\n </div>\n </section>\n ))}\n </div>\n </Layout>\n );\n }\n\n /** Renders a small preview of the component for the index grid cards */\n function renderMiniPreview(slug: string): JSXNode {\n switch (slug) {\n case \"button\":\n return (\n <div style=\"display: flex; gap: 0.5rem; position: relative; z-index: 1;\">\n <Button size=\"sm\">Button</Button>\n <Button size=\"sm\" variant=\"outline\">\n Outline\n </Button>\n </div>\n );\n case \"badge\":\n return (\n <div style=\"display: flex; gap: 0.5rem; position: relative; z-index: 1;\">\n <Badge>Default</Badge>\n <Badge color=\"success\">Success</Badge>\n <Badge color=\"warning\">Warning</Badge>\n </div>\n );\n case \"input\":\n return (\n <div style=\"width: 160px; position: relative; z-index: 1;\">\n <Input size=\"sm\" placeholder=\"Type here...\" />\n </div>\n );\n case \"switch\":\n return (\n <div style=\"display: flex; gap: 1rem; position: relative; z-index: 1;\">\n <Switch />\n <Switch checked />\n </div>\n );\n case \"avatar\":\n return (\n <div style=\"display: flex; gap: 0.5rem; position: relative; z-index: 1;\">\n <Avatar initials=\"AB\" size=\"sm\" />\n <Avatar initials=\"CD\" size=\"md\" />\n <Avatar initials=\"EF\" size=\"lg\" />\n </div>\n );\n case \"separator\":\n return (\n <div style=\"width: 120px; position: relative; z-index: 1;\">\n <div style=\"font-size: 0.75rem; color: #86868b; text-align: center;\">Above</div>\n <Separator />\n <div style=\"font-size: 0.75rem; color: #86868b; text-align: center;\">Below</div>\n </div>\n );\n case \"kbd\":\n return (\n <div style=\"display: flex; gap: 0.25rem; align-items: center; position: relative; z-index: 1;\">\n <Kbd>Cmd</Kbd>\n <span style=\"color: #86868b; font-size: 0.75rem;\">+</span>\n <Kbd>K</Kbd>\n </div>\n );\n case \"card\":\n return (\n <div style=\"transform: scale(0.45); transform-origin: center; position: relative; z-index: 1; width: 240px;\">\n <Card heading=\"Card Title\" description=\"A brief description\" />\n </div>\n );\n case \"callout\":\n return (\n <div style=\"transform: scale(0.6); transform-origin: center; position: relative; z-index: 1; width: 260px;\">\n <Callout type=\"info\">Informational callout</Callout>\n </div>\n );\n case \"tabs\":\n return (\n <div style=\"transform: scale(0.7); transform-origin: center; position: relative; z-index: 1; width: 200px;\">\n <Tabs defaultValue=\"one\">\n <TabList>\n <Tab value=\"one\">First</Tab>\n <Tab value=\"two\">Second</Tab>\n </TabList>\n </Tabs>\n </div>\n );\n case \"steps\":\n return (\n <div style=\"transform: scale(0.4); transform-origin: center; position: relative; z-index: 1; width: 200px;\">\n <Steps>\n <Step title=\"Install\" number={1}>\n bun add semajsx\n </Step>\n <Step title=\"Build\" number={2}>\n Create app\n </Step>\n </Steps>\n </div>\n );\n case \"code-block\":\n return (\n <div style=\"position: relative; z-index: 1; width: 160px;\">\n <div style=\"background: #1e1e1e; border-radius: 6px; padding: 8px 10px; font-family: ui-monospace, 'SF Mono', monospace; font-size: 0.625rem; color: #d4d4d4; line-height: 1.5; white-space: pre; overflow: hidden;\">\n <span style=\"color: #c586c0;\">const</span> <span style=\"color: #9cdcfe;\">x</span>{\" \"}\n <span style=\"color: #d4d4d4;\">=</span> <span style=\"color: #b5cea8;\">42</span>;\n </div>\n </div>\n );\n default:\n return (\n <div style=\"font-size: 0.6875rem; color: #86868b; position: relative; z-index: 1;\">\n {slug}\n </div>\n );\n }\n }\n\n // --------------------------------------------------\n // UI Component Page\n // --------------------------------------------------\n function UIPage({ component: comp, content }: UIPageProps): VNode {\n return (\n <Layout>\n <article class=\"dt-page-container\" style=\"max-width: 800px;\">\n <div style=\"margin-bottom: 2.5rem;\">\n <h1 class={cx(\"dt-page-title\", \"dt-anim-slide-up\")}>{comp.data.title}</h1>\n {comp.data.description && (\n <p class={cx(\"dt-content-desc\", \"dt-anim-slide-up\", \"dt-stagger-1\")}>\n {comp.data.description}\n </p>\n )}\n </div>\n <div class={cx(\"dt-content\", \"dt-fade-in\")}>{content}</div>\n </article>\n </Layout>\n );\n }\n\n // --------------------------------------------------\n // 404 Not Found\n // --------------------------------------------------\n function NotFound(): VNode {\n return (\n <Layout>\n <div\n class={cx(\"dt-hero-bg\", \"dt-not-found-section\")}\n style=\"padding: 100px 24px 80px; position: relative;\"\n >\n <div style=\"max-width: 680px; margin: 0 auto; position: relative; z-index: 1; text-align: center;\">\n <h1 class={cx(\"dt-not-found-title\", \"dt-anim-slide-up\")}>404</h1>\n <p\n class={cx(\"dt-hero-subtitle\", \"dt-anim-slide-up\", \"dt-stagger-1\")}\n style=\"margin-bottom: 0.75rem;\"\n >\n Page Not Found\n </p>\n <p\n class={cx(\"dt-anim-slide-up\", \"dt-stagger-2\")}\n style=\"color: #86868b; font-size: 1rem; margin-bottom: 2.5rem; max-width: 28rem; margin-left: auto; margin-right: auto; line-height: 1.6;\"\n >\n The page you're looking for doesn't exist or has been moved.\n </p>\n <div class={cx(\"dt-hero-cta\", \"dt-anim-slide-up\", \"dt-stagger-3\", \"dt-not-found-cta\")}>\n <a href=\"/\" class=\"dt-primary-btn\">\n Go Back Home\n </a>\n <a href={options.docs?.basePath ?? \"/docs\"} class=\"dt-secondary-btn\">\n View Docs\n </a>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return {\n Document,\n Layout,\n HomePage,\n DocsIndexHome,\n DocsIndex,\n DocPage,\n GuidesIndex,\n GuidePage,\n UIIndex,\n UIPage,\n NotFound,\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n };\n}\n\n// Re-export for plugin index\nexport {\n Callout,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n};\n","import { writeFile, mkdir } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport type { SSGConfig, SSGPlugin, SSGInstance, CollectionEntry } from \"../../types\";\nimport type { LlmsOptions } from \"./types\";\n\nexport type { LlmsOptions, LlmsSection, LlmsLink } from \"./types\";\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction normalizePath(path: string): string {\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nfunction resolveUrl(base: string | undefined, path: string): string {\n if (!base) return path;\n return `${base.replace(/\\/$/, \"\")}${path}`;\n}\n\nfunction getEntryTitle(entry: CollectionEntry): string {\n const data = entry.data as Record<string, unknown>;\n return (data.title as string) ?? entry.slug;\n}\n\nfunction getEntryDescription(entry: CollectionEntry): string | undefined {\n const data = entry.data as Record<string, unknown>;\n return data.description as string | undefined;\n}\n\nfunction formatLink(title: string, url: string, description?: string): string {\n return description ? `- [${title}](${url}): ${description}` : `- [${title}](${url})`;\n}\n\n// =============================================================================\n// llms.txt Generator\n// =============================================================================\n\n/**\n * Generate llms.txt content following the llms.txt specification.\n *\n * Format:\n * - H1: site title (required)\n * - Blockquote: site description (optional)\n * - H2 sections: collection entries as markdown links\n * - ## Optional: additional links\n *\n * @see https://llmstxt.org/\n */\nfunction generateLlmsTxt(\n options: LlmsOptions,\n sectionEntries: Map<string, CollectionEntry[]>,\n): string {\n const lines: string[] = [];\n\n lines.push(`# ${options.title}`);\n lines.push(\"\");\n\n if (options.description) {\n lines.push(`> ${options.description}`);\n lines.push(\"\");\n }\n\n for (const section of options.sections ?? []) {\n const entries = sectionEntries.get(section.collection) ?? [];\n if (entries.length === 0) continue;\n\n const basePath = normalizePath(section.basePath);\n lines.push(`## ${section.title}`);\n lines.push(\"\");\n\n for (const entry of entries) {\n const title = getEntryTitle(entry);\n const url = resolveUrl(options.url, `${basePath}/${entry.slug}`);\n const desc = getEntryDescription(entry);\n lines.push(formatLink(title, url, desc));\n }\n\n lines.push(\"\");\n }\n\n if (options.links?.length) {\n lines.push(\"## Optional\");\n lines.push(\"\");\n for (const link of options.links) {\n lines.push(formatLink(link.title, link.url, link.description));\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\n// =============================================================================\n// llms-full.txt Generator\n// =============================================================================\n\n/**\n * Generate llms-full.txt with complete content for each entry.\n * Includes the full markdown body of every collection entry.\n */\nfunction generateLlmsFullTxt(\n options: LlmsOptions,\n sectionEntries: Map<string, CollectionEntry[]>,\n): string {\n const lines: string[] = [];\n\n lines.push(`# ${options.title}`);\n lines.push(\"\");\n\n if (options.description) {\n lines.push(`> ${options.description}`);\n lines.push(\"\");\n }\n\n for (const section of options.sections ?? []) {\n const entries = sectionEntries.get(section.collection) ?? [];\n if (entries.length === 0) continue;\n\n const basePath = normalizePath(section.basePath);\n lines.push(`## ${section.title}`);\n lines.push(\"\");\n\n for (const entry of entries) {\n const title = getEntryTitle(entry);\n const url = resolveUrl(options.url, `${basePath}/${entry.slug}`);\n const desc = getEntryDescription(entry);\n\n lines.push(`### ${title}`);\n\n if (desc) {\n lines.push(\"\");\n lines.push(`> ${desc}`);\n }\n\n lines.push(\"\");\n lines.push(`Source: ${url}`);\n lines.push(\"\");\n lines.push(entry.body.trim());\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n// =============================================================================\n// Per-Entry Markdown Generator\n// =============================================================================\n\nfunction generateEntryMarkdown(entry: CollectionEntry): string {\n const title = getEntryTitle(entry);\n const desc = getEntryDescription(entry);\n const lines: string[] = [];\n\n lines.push(`# ${title}`);\n\n if (desc) {\n lines.push(\"\");\n lines.push(`> ${desc}`);\n }\n\n lines.push(\"\");\n lines.push(entry.body.trim());\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n\n// =============================================================================\n// Plugin\n// =============================================================================\n\n/**\n * LLMs plugin for SSG.\n *\n * Generates `llms.txt`, `llms-full.txt`, and per-page `.md` files\n * following the llms.txt specification, making your site easily\n * consumable by LLMs and AI agents.\n *\n * @see https://llmstxt.org/\n *\n * @example\n * ```tsx\n * import { createSSG } from \"@semajsx/ssg\";\n * import { llms } from \"@semajsx/ssg/plugins/llms\";\n *\n * const ssg = createSSG({\n * outDir: \"./dist\",\n * plugins: [\n * llms({\n * title: \"My Project\",\n * description: \"Documentation for My Project\",\n * url: \"https://docs.myproject.com\",\n * sections: [\n * { title: \"Documentation\", collection: \"docs\", basePath: \"/docs\" },\n * ],\n * }),\n * ],\n * });\n * ```\n */\nexport function llms(options: LlmsOptions): SSGPlugin {\n let outDir = \"\";\n\n return {\n name: \"llms\",\n enforce: \"post\",\n\n configResolved(config: SSGConfig) {\n outDir = config.outDir ?? \"./dist\";\n },\n\n async buildEnd(_result, ssg: SSGInstance) {\n const genLlmsTxt = options.llmsTxt !== false;\n const genLlmsFullTxt = options.llmsFullTxt !== false;\n const genMarkdownPages = options.markdownPages !== false;\n\n // Collect entries for each configured section\n const sectionEntries = new Map<string, CollectionEntry[]>();\n\n for (const section of options.sections ?? []) {\n try {\n const entries = await ssg.getCollection(section.collection);\n sectionEntries.set(section.collection, entries);\n } catch {\n // Collection not found — skip silently\n sectionEntries.set(section.collection, []);\n }\n }\n\n await mkdir(outDir, { recursive: true });\n\n // Generate llms.txt\n if (genLlmsTxt) {\n const content = generateLlmsTxt(options, sectionEntries);\n await writeFile(join(outDir, \"llms.txt\"), content, \"utf-8\");\n }\n\n // Generate llms-full.txt\n if (genLlmsFullTxt) {\n const content = generateLlmsFullTxt(options, sectionEntries);\n await writeFile(join(outDir, \"llms-full.txt\"), content, \"utf-8\");\n }\n\n // Generate per-entry .md files\n if (genMarkdownPages) {\n for (const section of options.sections ?? []) {\n const basePath = normalizePath(section.basePath);\n const entries = sectionEntries.get(section.collection) ?? [];\n for (const entry of entries) {\n const mdPath = `${basePath}/${entry.slug}.md`;\n const fullPath = join(outDir, mdPath.slice(1)); // strip leading /\n const content = generateEntryMarkdown(entry);\n\n await mkdir(dirname(fullPath), { recursive: true });\n await writeFile(fullPath, content, \"utf-8\");\n }\n }\n }\n },\n };\n}\n\n// Export generators for testing\nexport { generateLlmsTxt as _generateLlmsTxt, generateLlmsFullTxt as _generateLlmsFullTxt };\n","import { copyFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport remarkGfm from \"remark-gfm\";\nimport { Mermaid } from \"@semajsx/mermaid\";\nimport { remarkMermaid } from \"@semajsx/mermaid/remark\";\nimport { z } from \"zod\";\nimport type { SSGPlugin, SSGConfig, Collection, RouteConfig } from \"../../types\";\nimport { defineCollection } from \"../../index\";\nimport type { DocsThemeOptions } from \"./types\";\nimport {\n createComponents,\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n Table,\n Pre,\n} from \"./components\";\nimport { island } from \"@semajsx/ssr/client\";\nimport { lucide as lucidePlugin } from \"../lucide/index\";\nimport { llms as llmsPlugin } from \"../llms/index\";\nimport type { LlmsSection } from \"../llms/types\";\nimport type { Component } from \"@semajsx/core\";\n\n// Wrap Tabs as an island, pointing to the source module so the client\n// entry automatically has TabList/Tab/TabPanel in its component registry.\nconst TabsIsland = island(Tabs, \"@semajsx/ui/components/tabs\");\n\nexport type {\n DocsThemeOptions,\n LlmsThemeOptions,\n NavLink,\n HeroAction,\n FeatureItem,\n QuickLinkItem,\n DocsConfig,\n GuidesConfig,\n UIConfig,\n HomeOption,\n HomePageProps,\n LayoutComponent,\n} from \"./types\";\n\nexport {\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n} from \"./components\";\n\nexport { Mermaid } from \"@semajsx/mermaid\";\nexport { remarkMermaid } from \"@semajsx/mermaid/remark\";\n\n// =============================================================================\n// Schemas\n// =============================================================================\n\nconst docsSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n order: z.number().default(999),\n category: z.string().optional(),\n});\n\nconst guidesSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n order: z.number().default(999),\n difficulty: z.enum([\"beginner\", \"intermediate\", \"advanced\"]).default(\"beginner\"),\n});\n\nconst uiSchema = z.object({\n title: z.string(),\n description: z.string().optional(),\n order: z.number().default(999),\n category: z.string().optional(),\n});\n\n// =============================================================================\n// Plugin factory\n// =============================================================================\n\n/**\n * Docs theme plugin for SSG.\n *\n * Provides an Apple-inspired documentation site with:\n * - Frosted glass navigation\n * - Home page with hero, features, and quick links\n * - Docs collection with category grouping\n * - Guides collection with difficulty levels\n * - MDX components (Callout, CodeBlock)\n * - Responsive design\n *\n * All text content, navigation links, and site metadata\n * are configured through options — nothing is hardcoded.\n *\n * @example\n * ```tsx\n * import { createSSG } from \"@semajsx/ssg\";\n * import { docsTheme } from \"@semajsx/ssg/plugins/docs-theme\";\n * import { fileSource } from \"@semajsx/ssg\";\n *\n * const ssg = createSSG({\n * outDir: \"./dist\",\n * plugins: [\n * docsTheme({\n * title: \"My Docs\",\n * nav: {\n * logo: \"MyProject\",\n * links: [\n * { label: \"Docs\", href: \"/docs\" },\n * { label: \"GitHub\", href: \"https://github.com/...\", external: true },\n * ],\n * },\n * hero: {\n * title: \"MyProject\",\n * subtitle: \"A great project.\",\n * actions: [{ label: \"Get Started\", href: \"/docs/intro\", primary: true }],\n * },\n * docs: { source: fileSource({ directory: \"content/docs\" }, rootDir) },\n * }),\n * ],\n * });\n * ```\n */\nexport function docsTheme(options: DocsThemeOptions): SSGPlugin[] {\n const components = createComponents(options);\n const docsBasePath = options.docs?.basePath ?? \"/docs\";\n const guidesBasePath = options.guides?.basePath ?? \"/guides\";\n const uiBasePath = options.ui?.basePath ?? \"/ui\";\n\n let outDir = \"\";\n\n const mainPlugin: SSGPlugin = {\n name: \"docs-theme\",\n\n configResolved(config: SSGConfig) {\n outDir = config.outDir ?? \"./dist\";\n },\n\n async buildEnd() {\n // Copy bundled font to output directory\n const thisDir = dirname(fileURLToPath(import.meta.url));\n const fontSrc = join(thisDir, \"fonts\", \"MapleMono-NF-CN-Regular.woff2\");\n const fontDest = join(outDir, \"fonts\", \"MapleMono-NF-CN-Regular.woff2\");\n await mkdir(dirname(fontDest), { recursive: true });\n await copyFile(fontSrc, fontDest);\n },\n\n config() {\n const collections: Collection[] = [];\n const routes: RouteConfig[] = [];\n\n // --- Collections ---\n\n if (options.docs) {\n collections.push(\n defineCollection({\n name: \"docs\",\n source: options.docs.source,\n schema: docsSchema,\n }),\n );\n }\n\n if (options.guides) {\n collections.push(\n defineCollection({\n name: \"guides\",\n source: options.guides.source,\n schema: guidesSchema,\n }),\n );\n }\n\n if (options.ui) {\n collections.push(\n defineCollection({\n name: \"ui\",\n source: options.ui.source,\n schema: uiSchema,\n }),\n );\n }\n\n // --- Routes ---\n\n // Home page\n if (options.home !== false) {\n if (options.home === \"docs-index\") {\n // Minimal document index preset\n routes.push({\n path: \"/\",\n component: components.DocsIndexHome,\n props: async (ssg) => ({\n title: options.title,\n docs: options.docs ? await ssg.getCollection(\"docs\") : [],\n guides: options.guides ? await ssg.getCollection(\"guides\") : [],\n }),\n });\n } else if (typeof options.home === \"function\") {\n // Custom component — pass Layout and collection data\n const CustomHome = options.home;\n routes.push({\n path: \"/\",\n component: (props: Record<string, unknown>) => CustomHome(props as never),\n props: async (ssg) => ({\n title: options.title,\n Layout: components.Layout,\n docs: options.docs ? await ssg.getCollection(\"docs\") : [],\n guides: options.guides ? await ssg.getCollection(\"guides\") : [],\n }),\n });\n } else {\n // Default marketing homepage\n routes.push({\n path: \"/\",\n component: components.HomePage,\n props: { title: options.title },\n });\n }\n }\n\n // Docs routes\n if (options.docs) {\n routes.push({\n path: docsBasePath,\n component: components.DocsIndex,\n props: async (ssg) => ({\n title: options.docs?.heading ?? \"Documentation\",\n docs: await ssg.getCollection(\"docs\"),\n }),\n });\n\n routes.push({\n path: `${docsBasePath}/:slug`,\n component: components.DocPage,\n getStaticPaths: async (ssg) => {\n const allDocs = await ssg.getCollection(\"docs\");\n return Promise.all(\n allDocs.map(async (doc) => {\n const { Content } = await doc.render();\n return {\n params: { slug: doc.slug },\n props: {\n doc,\n content: Content(),\n title: `${(doc.data as { title: string }).title} | ${options.title}`,\n },\n };\n }),\n );\n },\n });\n }\n\n // Guides routes\n if (options.guides) {\n routes.push({\n path: guidesBasePath,\n component: components.GuidesIndex,\n props: async (ssg) => ({\n title: options.guides?.heading ?? \"Guides\",\n guides: await ssg.getCollection(\"guides\"),\n }),\n });\n\n routes.push({\n path: `${guidesBasePath}/:slug`,\n component: components.GuidePage,\n getStaticPaths: async (ssg) => {\n const allGuides = await ssg.getCollection(\"guides\");\n return Promise.all(\n allGuides.map(async (guide) => {\n const { Content } = await guide.render();\n return {\n params: { slug: guide.slug },\n props: {\n guide,\n content: Content(),\n title: `${(guide.data as { title: string }).title} | ${options.title}`,\n },\n };\n }),\n );\n },\n });\n }\n\n // UI routes\n if (options.ui) {\n routes.push({\n path: uiBasePath,\n component: components.UIIndex,\n props: async (ssg) => ({\n title: options.ui?.heading ?? \"Components\",\n components: await ssg.getCollection(\"ui\"),\n }),\n });\n\n routes.push({\n path: `${uiBasePath}/:slug`,\n component: components.UIPage,\n getStaticPaths: async (ssg) => {\n const allComponents = await ssg.getCollection(\"ui\");\n return Promise.all(\n allComponents.map(async (comp) => {\n const { Content } = await comp.render();\n return {\n params: { slug: comp.slug },\n props: {\n component: comp,\n content: Content(),\n title: `${(comp.data as { title: string }).title} | ${options.title}`,\n },\n };\n }),\n );\n },\n });\n }\n\n // 404 page\n routes.push({\n path: \"/404\",\n component: components.NotFound,\n props: { title: `404 - Page Not Found | ${options.title}` },\n });\n\n // --- MDX ---\n\n const mdxComponents: Record<string, Component> = {\n table: Table,\n pre: Pre,\n ComponentPreview,\n Callout,\n CodeBlock,\n Tabs: TabsIsland,\n TabList,\n Tab,\n TabPanel,\n Steps,\n Step,\n Button,\n Badge,\n Card,\n Separator,\n Input,\n Avatar,\n Kbd,\n Switch,\n Mermaid,\n ...options.mdx?.components,\n };\n\n return {\n document: components.Document,\n collections,\n routes,\n mdx: {\n remarkPlugins: [remarkGfm, remarkMermaid, ...(options.mdx?.remarkPlugins ?? [])],\n rehypePlugins: options.mdx?.rehypePlugins,\n components: mdxComponents,\n },\n };\n },\n };\n\n // Compose sub-plugins Vite-style: return flat array\n const plugins: SSGPlugin[] = [mainPlugin];\n\n if (options.lucide !== false) {\n const lucideOpts = typeof options.lucide === \"object\" ? options.lucide : {};\n plugins.push(lucidePlugin(lucideOpts));\n }\n\n // LLMs (llms.txt) — enabled by default when docs, guides, or ui exist\n const hasContent = options.docs || options.guides || options.ui;\n if (options.llms !== false && hasContent) {\n const llmsOpts = typeof options.llms === \"object\" ? options.llms : {};\n\n // Auto-derive sections from configured collections\n const sections: LlmsSection[] = [];\n if (options.docs) {\n sections.push({\n title: options.docs.heading ?? \"Documentation\",\n collection: \"docs\",\n basePath: docsBasePath,\n });\n }\n if (options.guides) {\n sections.push({\n title: options.guides.heading ?? \"Guides\",\n collection: \"guides\",\n basePath: guidesBasePath,\n });\n }\n if (options.ui) {\n sections.push({\n title: options.ui.heading ?? \"Components\",\n collection: \"ui\",\n basePath: uiBasePath,\n });\n }\n\n plugins.push(\n llmsPlugin({\n title: options.title,\n description: options.description,\n url: llmsOpts.url,\n sections,\n links: llmsOpts.links,\n llmsTxt: llmsOpts.llmsTxt,\n llmsFullTxt: llmsOpts.llmsFullTxt,\n markdownPages: llmsOpts.markdownPages,\n }),\n );\n }\n\n return plugins;\n}\n"],"mappings":"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"}
|