Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
34fc6bf
feat: add prev/next nav fields to Page type
rsbh Apr 22, 2026
3e9a3d7
fix: add std-env as root dep to unblock nitro beta
rsbh Apr 22, 2026
1d83884
feat: restructure default theme layout with tab bar
rsbh Apr 22, 2026
664a820
chore: switch docs theme to default
rsbh Apr 17, 2026
c51f3fa
feat: compute page prev/next on the server
rsbh Apr 22, 2026
e589e49
feat: wrap content in card with prev/next sub-navbar
rsbh Apr 22, 2026
8188530
feat: sidebar top navbar and layout polish
rsbh Apr 22, 2026
02eeed5
feat: floating TOC with hover panel
rsbh Apr 17, 2026
c2e063d
fix: address PR review feedback
rsbh Apr 22, 2026
ce18ae4
feat: show sidebar on landing, fix sidebar header height
rsbh Apr 22, 2026
c1c50ff
fix: address copilot review feedback (phase 1)
rsbh Apr 22, 2026
8b307cd
refactor: address copilot review feedback (phase 2)
rsbh Apr 22, 2026
48e2225
feat(default theme): nested collapsible sidebar groups
rsbh Apr 23, 2026
c11ea8d
docs: rename Tabs.Trigger to Tabs.Tab in components doc
rsbh Apr 23, 2026
ab63d4d
refactor(default theme): align sidebar + card to Figma
rsbh Apr 23, 2026
2b4aa84
feat(default theme): content-dir + API cells at top of sidebar
rsbh Apr 23, 2026
4e9e45e
refactor(default theme): align sidebar text + spacing to Figma
rsbh Apr 24, 2026
440a47e
feat(default theme): config-driven sidebar logo
rsbh Apr 24, 2026
2c3217f
feat(config): optional icon per content dir and API
rsbh Apr 24, 2026
2f7cd0a
feat: always enable raw .md and llms.txt endpoints
rsbh Apr 24, 2026
d9a26d8
feat: drop Footer component and footer config
rsbh Apr 24, 2026
dcc97bb
feat: add <link rel="alternate"> markdown version on docs pages
rsbh Apr 24, 2026
abc4b17
feat(default theme): Open in AI dropdown
rsbh Apr 24, 2026
cf60717
feat(search): migrate to apsara 1.0.0-rc.4 Command API
rsbh Apr 24, 2026
3f534e6
refactor(default theme): extract --navbar-height CSS variable
rsbh Apr 24, 2026
9bcad4b
feat(OpenInAI): add ChatGPT and Claude brand icons to menu items
rsbh Apr 24, 2026
d248f4c
fix: address coderabbit review feedback
rsbh Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# TODO

## Default theme

- [x] Replace sidebar logo placeholder (`CubeIcon`) with configurable logo from `config.logo` (light/dark)
- [x] Add optional `icon` field per content dir and API in `chronicle.yaml` (accepts URL or inline SVG string)
- [x] "Open in AI" dropdown (Copy/View MD, Open in ChatGPT/Claude) in subNav
- [x] Sidebar nesting supports 2 levels; 3rd+ level items are ignored
69 changes: 5 additions & 64 deletions bun.lock

Large diffs are not rendered by default.

11 changes: 1 addition & 10 deletions docs/chronicle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ content:
label: Docs

theme:
name: paper
name: default

navigation:
links:
Expand All @@ -18,16 +18,7 @@ search:
enabled: true
placeholder: Search docs...

llms:
enabled: true

telemetry:
enabled: true

preset: "vercel"

footer:
copyright: "© 2026 Raystack. All rights reserved."
links:
- label: GitHub
href: https://github.com/raystack/chronicle
4 changes: 2 additions & 2 deletions docs/content/docs/components.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ Tabbed content panels using Apsara's `Tabs` component.
````mdx
<Tabs defaultValue="npm">
<Tabs.List>
<Tabs.Trigger value="npm">npm</Tabs.Trigger>
<Tabs.Trigger value="bun">bun</Tabs.Trigger>
<Tabs.Tab value="npm">npm</Tabs.Tab>
<Tabs.Tab value="bun">bun</Tabs.Tab>
</Tabs.List>
<Tabs.Content value="npm">

Expand Down
7 changes: 0 additions & 7 deletions examples/basic/chronicle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,3 @@ analytics:
googleAnalytics:
measurementId: G-XXXXXXXXXX

footer:
copyright: "© 2024 Chronicle. All rights reserved."
links:
- label: GitHub
href: https://github.com/raystack/chronicle
- label: Documentation
href: /
3 changes: 0 additions & 3 deletions examples/versioned/chronicle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,3 @@ versions:
search:
enabled: true
placeholder: Search...

llms:
enabled: true
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,8 @@
"build:examples:basic": "./packages/chronicle/bin/chronicle.js build --config examples/basic/chronicle.yaml",
"dev:examples:versioned": "./packages/chronicle/bin/chronicle.js dev --config examples/versioned/chronicle.yaml",
"build:examples:versioned": "./packages/chronicle/bin/chronicle.js build --config examples/versioned/chronicle.yaml"
},
"dependencies": {
"std-env": "^4.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/chronicle/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"@opentelemetry/resources": "^2.6.1",
"@opentelemetry/sdk-metrics": "^2.6.1",
"@opentelemetry/semantic-conventions": "^1.40.0",
"@raystack/apsara": "1.0.0-rc.3",
"@raystack/apsara": "1.0.0-rc.4",
"@shikijs/rehype": "^4.0.2",
"@vitejs/plugin-react": "^6.0.1",
"chalk": "^5.6.2",
Expand Down
6 changes: 4 additions & 2 deletions packages/chronicle/src/components/ui/breadcrumbs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import { Breadcrumb } from '@raystack/apsara'
import { getBreadcrumbItems } from 'fumadocs-core/breadcrumb'
import type { Root } from 'fumadocs-core/page-tree'
import { Link as RouterLink } from 'react-router'

interface BreadcrumbsProps {
slug: string[]
Expand All @@ -18,11 +19,12 @@ export function Breadcrumbs({ slug, tree }: BreadcrumbsProps) {
return (
<Breadcrumb size="small">
{items.flatMap((item, index) => {
const isCurrent = index === items.length - 1
const breadcrumbItem = (
<Breadcrumb.Item
key={`item-${index}`}
href={item.url}
current={index === items.length - 1}
current={isCurrent}
render={isCurrent ? undefined : <RouterLink to={item.url} />}
>
{item.name}
</Breadcrumb.Item>
Expand Down
25 changes: 21 additions & 4 deletions packages/chronicle/src/components/ui/client-theme-switcher.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,35 @@
'use client'

import { ThemeSwitcher } from '@raystack/apsara'
import { useState, useEffect } from 'react'
import { MoonIcon, SunIcon } from '@heroicons/react/24/outline'
import { IconButton, useTheme } from '@raystack/apsara'
import { useEffect, useState } from 'react'

interface ClientThemeSwitcherProps {
size?: number
}

export function ClientThemeSwitcher({ size }: ClientThemeSwitcherProps) {
export function ClientThemeSwitcher({ size = 16 }: ClientThemeSwitcherProps) {
const [isClient, setIsClient] = useState(false)
const { resolvedTheme, setTheme } = useTheme()

useEffect(() => {
setIsClient(true)
}, [])

return isClient ? <ThemeSwitcher size={size} /> : null
if (!isClient) return null

const isDark = resolvedTheme === 'dark'
return (
<IconButton
size={3}
aria-label={isDark ? 'Switch to light theme' : 'Switch to dark theme'}
onClick={() => setTheme(isDark ? 'light' : 'dark')}
>
{isDark ? (
<SunIcon width={size} height={size} />
) : (
<MoonIcon width={size} height={size} />
)}
</IconButton>
)
}
27 changes: 0 additions & 27 deletions packages/chronicle/src/components/ui/footer.module.css

This file was deleted.

30 changes: 0 additions & 30 deletions packages/chronicle/src/components/ui/footer.tsx

This file was deleted.

57 changes: 16 additions & 41 deletions packages/chronicle/src/components/ui/search.module.css
Original file line number Diff line number Diff line change
@@ -1,63 +1,38 @@
.trigger {
gap: 8px;
color: var(--rs-color-foreground-base-secondary);
cursor: pointer;
}

.kbd {
padding: 2px 6px;
border-radius: 4px;
border: 1px solid var(--rs-color-border-base-primary);
font-size: 12px;
}

.dialogContent {
border-radius: var(--rs-radius-4);
padding: 0px;
width: 80%;
max-width: 600px;
padding: 0;
min-height: 0;
position: fixed;
top: 20%;
left: 50%;
transform: translateX(-50%);
border-radius: var(--rs-radius-4);
}

.input {
flex: 1;
border: none;
outline: none;
background: transparent;
font-size: 16px;
color: var(--rs-color-foreground-base-primary);
font-size: var(--rs-font-size-small);
}

.list {
max-height: 300px;
overflow: auto;
padding: 0;
max-height: 400px;
}

.visuallyHidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
.list :global([cmdk-group-heading]) {
color: var(--rs-color-foreground-base-tertiary);
font-size: var(--rs-font-size-mini);
font-weight: var(--rs-font-weight-medium);
letter-spacing: var(--rs-letter-spacing-mini);
padding: var(--rs-space-6) var(--rs-space-5) var(--rs-space-3);
}

.item {
padding: 12px 16px;
height: 32px;
padding: var(--rs-space-3);
gap: var(--rs-space-3);
border-radius: var(--rs-radius-2);
cursor: pointer;
border-radius: 6px;
}

.item[data-selected="true"] {
background: var(--rs-color-background-base-secondary);
color: var(--rs-color-foreground-accent-primary-hover);
background: var(--rs-color-background-base-primary-hover);
}

.itemContent {
Expand Down
Loading
Loading