Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 14 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,20 @@ Components SHOULD be developed and released in batches, not individually. The ty

There is no fixed release schedule. Release when a batch feels complete.

### Tags and GitHub Releases

- Release entries in `apps/docs/lib/releases.ts` and the docs site are the canonical source for jalco ui release metadata.
- Git tags and GitHub Releases SHOULD be created after the release PR is merged to `main`.
- Historical docs-site release entries MAY exist without matching git tags or GitHub Releases.
- The project starts clean with real git/GitHub releases at `2026.04.0`.
- Agents MUST NOT assume older release entries in `releases.ts` have matching tags unless verified.
- When creating a new real release, agents SHOULD:
1. merge the PR to `main`
2. pull latest `main`
3. create tag `YYYY.MM.patch`
4. push the tag
5. create the GitHub Release for that tag

### Release data

All releases are defined in `lib/releases.ts`. Each release has:
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/.source/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ const create = browser<typeof Config, import("fumadocs-mdx/runtime/types").Inter
}
}>();
const browserCollections = {
docs: create.doc("docs", {"index.mdx": () => import("../content/docs/index.mdx?collection=docs"), "components/activity-graph.mdx": () => import("../content/docs/components/activity-graph.mdx?collection=docs"), "components/ai-copy-button.mdx": () => import("../content/docs/components/ai-copy-button.mdx?collection=docs"), "components/api-ref-table.mdx": () => import("../content/docs/components/api-ref-table.mdx?collection=docs"), "components/code-block-command.mdx": () => import("../content/docs/components/code-block-command.mdx?collection=docs"), "components/code-block.mdx": () => import("../content/docs/components/code-block.mdx?collection=docs"), "components/code-line.mdx": () => import("../content/docs/components/code-line.mdx?collection=docs"), "components/color-palette.mdx": () => import("../content/docs/components/color-palette.mdx?collection=docs"), "components/commit-graph.mdx": () => import("../content/docs/components/commit-graph.mdx?collection=docs"), "components/contributor-grid.mdx": () => import("../content/docs/components/contributor-grid.mdx?collection=docs"), "components/cron-schedule.mdx": () => import("../content/docs/components/cron-schedule.mdx?collection=docs"), "components/diff-viewer.mdx": () => import("../content/docs/components/diff-viewer.mdx?collection=docs"), "components/env-table.mdx": () => import("../content/docs/components/env-table.mdx?collection=docs"), "components/file-tree.mdx": () => import("../content/docs/components/file-tree.mdx?collection=docs"), "components/github-button-group.mdx": () => import("../content/docs/components/github-button-group.mdx?collection=docs"), "components/github-stars-button.mdx": () => import("../content/docs/components/github-stars-button.mdx?collection=docs"), "components/json-viewer.mdx": () => import("../content/docs/components/json-viewer.mdx?collection=docs"), "components/kbd.mdx": () => import("../content/docs/components/kbd.mdx?collection=docs"), "components/license-badge.mdx": () => import("../content/docs/components/license-badge.mdx?collection=docs"), "components/log-viewer.mdx": () => import("../content/docs/components/log-viewer.mdx?collection=docs"), "components/logo-cloud.mdx": () => import("../content/docs/components/logo-cloud.mdx?collection=docs"), "components/npm-badge.mdx": () => import("../content/docs/components/npm-badge.mdx?collection=docs"), "components/producthunt-button.mdx": () => import("../content/docs/components/producthunt-button.mdx?collection=docs"), "components/repo-card.mdx": () => import("../content/docs/components/repo-card.mdx?collection=docs"), "components/request-viewer.mdx": () => import("../content/docs/components/request-viewer.mdx?collection=docs"), "components/status-indicator.mdx": () => import("../content/docs/components/status-indicator.mdx?collection=docs"), "components/stepper.mdx": () => import("../content/docs/components/stepper.mdx?collection=docs"), "components/testimonial.mdx": () => import("../content/docs/components/testimonial.mdx?collection=docs"), "components/tip-jar.mdx": () => import("../content/docs/components/tip-jar.mdx?collection=docs"), }),
docs: create.doc("docs", {"index.mdx": () => import("../content/docs/index.mdx?collection=docs"), "components/activity-graph.mdx": () => import("../content/docs/components/activity-graph.mdx?collection=docs"), "components/ai-copy-button.mdx": () => import("../content/docs/components/ai-copy-button.mdx?collection=docs"), "components/api-ref-table.mdx": () => import("../content/docs/components/api-ref-table.mdx?collection=docs"), "components/balanced-text.mdx": () => import("../content/docs/components/balanced-text.mdx?collection=docs"), "components/chat-bubble.mdx": () => import("../content/docs/components/chat-bubble.mdx?collection=docs"), "components/code-block-command.mdx": () => import("../content/docs/components/code-block-command.mdx?collection=docs"), "components/code-block.mdx": () => import("../content/docs/components/code-block.mdx?collection=docs"), "components/code-line.mdx": () => import("../content/docs/components/code-line.mdx?collection=docs"), "components/color-palette.mdx": () => import("../content/docs/components/color-palette.mdx?collection=docs"), "components/commit-graph.mdx": () => import("../content/docs/components/commit-graph.mdx?collection=docs"), "components/contributor-grid.mdx": () => import("../content/docs/components/contributor-grid.mdx?collection=docs"), "components/cron-schedule.mdx": () => import("../content/docs/components/cron-schedule.mdx?collection=docs"), "components/diff-viewer.mdx": () => import("../content/docs/components/diff-viewer.mdx?collection=docs"), "components/env-table.mdx": () => import("../content/docs/components/env-table.mdx?collection=docs"), "components/file-tree.mdx": () => import("../content/docs/components/file-tree.mdx?collection=docs"), "components/github-button-group.mdx": () => import("../content/docs/components/github-button-group.mdx?collection=docs"), "components/github-stars-button.mdx": () => import("../content/docs/components/github-stars-button.mdx?collection=docs"), "components/json-viewer.mdx": () => import("../content/docs/components/json-viewer.mdx?collection=docs"), "components/kbd.mdx": () => import("../content/docs/components/kbd.mdx?collection=docs"), "components/license-badge.mdx": () => import("../content/docs/components/license-badge.mdx?collection=docs"), "components/log-viewer.mdx": () => import("../content/docs/components/log-viewer.mdx?collection=docs"), "components/logo-cloud.mdx": () => import("../content/docs/components/logo-cloud.mdx?collection=docs"), "components/masonry-grid.mdx": () => import("../content/docs/components/masonry-grid.mdx?collection=docs"), "components/npm-badge.mdx": () => import("../content/docs/components/npm-badge.mdx?collection=docs"), "components/pretext.mdx": () => import("../content/docs/components/pretext.mdx?collection=docs"), "components/producthunt-button.mdx": () => import("../content/docs/components/producthunt-button.mdx?collection=docs"), "components/repo-card.mdx": () => import("../content/docs/components/repo-card.mdx?collection=docs"), "components/request-viewer.mdx": () => import("../content/docs/components/request-viewer.mdx?collection=docs"), "components/status-indicator.mdx": () => import("../content/docs/components/status-indicator.mdx?collection=docs"), "components/stepper.mdx": () => import("../content/docs/components/stepper.mdx?collection=docs"), "components/testimonial.mdx": () => import("../content/docs/components/testimonial.mdx?collection=docs"), "components/tip-jar.mdx": () => import("../content/docs/components/tip-jar.mdx?collection=docs"), }),
};
export default browserCollections;
56 changes: 30 additions & 26 deletions apps/docs/.source/server.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
// @ts-nocheck
import * as __fd_glob_30 from "../content/docs/components/tip-jar.mdx?collection=docs"
import * as __fd_glob_29 from "../content/docs/components/testimonial.mdx?collection=docs"
import * as __fd_glob_28 from "../content/docs/components/stepper.mdx?collection=docs"
import * as __fd_glob_27 from "../content/docs/components/status-indicator.mdx?collection=docs"
import * as __fd_glob_26 from "../content/docs/components/request-viewer.mdx?collection=docs"
import * as __fd_glob_25 from "../content/docs/components/repo-card.mdx?collection=docs"
import * as __fd_glob_24 from "../content/docs/components/producthunt-button.mdx?collection=docs"
import * as __fd_glob_23 from "../content/docs/components/npm-badge.mdx?collection=docs"
import * as __fd_glob_22 from "../content/docs/components/logo-cloud.mdx?collection=docs"
import * as __fd_glob_21 from "../content/docs/components/log-viewer.mdx?collection=docs"
import * as __fd_glob_20 from "../content/docs/components/license-badge.mdx?collection=docs"
import * as __fd_glob_19 from "../content/docs/components/kbd.mdx?collection=docs"
import * as __fd_glob_18 from "../content/docs/components/json-viewer.mdx?collection=docs"
import * as __fd_glob_17 from "../content/docs/components/github-stars-button.mdx?collection=docs"
import * as __fd_glob_16 from "../content/docs/components/github-button-group.mdx?collection=docs"
import * as __fd_glob_15 from "../content/docs/components/file-tree.mdx?collection=docs"
import * as __fd_glob_14 from "../content/docs/components/env-table.mdx?collection=docs"
import * as __fd_glob_13 from "../content/docs/components/diff-viewer.mdx?collection=docs"
import * as __fd_glob_12 from "../content/docs/components/cron-schedule.mdx?collection=docs"
import * as __fd_glob_11 from "../content/docs/components/contributor-grid.mdx?collection=docs"
import * as __fd_glob_10 from "../content/docs/components/commit-graph.mdx?collection=docs"
import * as __fd_glob_9 from "../content/docs/components/color-palette.mdx?collection=docs"
import * as __fd_glob_8 from "../content/docs/components/code-line.mdx?collection=docs"
import * as __fd_glob_7 from "../content/docs/components/code-block.mdx?collection=docs"
import * as __fd_glob_6 from "../content/docs/components/code-block-command.mdx?collection=docs"
import * as __fd_glob_34 from "../content/docs/components/tip-jar.mdx?collection=docs"
import * as __fd_glob_33 from "../content/docs/components/testimonial.mdx?collection=docs"
import * as __fd_glob_32 from "../content/docs/components/stepper.mdx?collection=docs"
import * as __fd_glob_31 from "../content/docs/components/status-indicator.mdx?collection=docs"
import * as __fd_glob_30 from "../content/docs/components/request-viewer.mdx?collection=docs"
import * as __fd_glob_29 from "../content/docs/components/repo-card.mdx?collection=docs"
import * as __fd_glob_28 from "../content/docs/components/producthunt-button.mdx?collection=docs"
import * as __fd_glob_27 from "../content/docs/components/pretext.mdx?collection=docs"
import * as __fd_glob_26 from "../content/docs/components/npm-badge.mdx?collection=docs"
import * as __fd_glob_25 from "../content/docs/components/masonry-grid.mdx?collection=docs"
import * as __fd_glob_24 from "../content/docs/components/logo-cloud.mdx?collection=docs"
import * as __fd_glob_23 from "../content/docs/components/log-viewer.mdx?collection=docs"
import * as __fd_glob_22 from "../content/docs/components/license-badge.mdx?collection=docs"
import * as __fd_glob_21 from "../content/docs/components/kbd.mdx?collection=docs"
import * as __fd_glob_20 from "../content/docs/components/json-viewer.mdx?collection=docs"
import * as __fd_glob_19 from "../content/docs/components/github-stars-button.mdx?collection=docs"
import * as __fd_glob_18 from "../content/docs/components/github-button-group.mdx?collection=docs"
import * as __fd_glob_17 from "../content/docs/components/file-tree.mdx?collection=docs"
import * as __fd_glob_16 from "../content/docs/components/env-table.mdx?collection=docs"
import * as __fd_glob_15 from "../content/docs/components/diff-viewer.mdx?collection=docs"
import * as __fd_glob_14 from "../content/docs/components/cron-schedule.mdx?collection=docs"
import * as __fd_glob_13 from "../content/docs/components/contributor-grid.mdx?collection=docs"
import * as __fd_glob_12 from "../content/docs/components/commit-graph.mdx?collection=docs"
import * as __fd_glob_11 from "../content/docs/components/color-palette.mdx?collection=docs"
import * as __fd_glob_10 from "../content/docs/components/code-line.mdx?collection=docs"
import * as __fd_glob_9 from "../content/docs/components/code-block.mdx?collection=docs"
import * as __fd_glob_8 from "../content/docs/components/code-block-command.mdx?collection=docs"
import * as __fd_glob_7 from "../content/docs/components/chat-bubble.mdx?collection=docs"
import * as __fd_glob_6 from "../content/docs/components/balanced-text.mdx?collection=docs"
import * as __fd_glob_5 from "../content/docs/components/api-ref-table.mdx?collection=docs"
import * as __fd_glob_4 from "../content/docs/components/ai-copy-button.mdx?collection=docs"
import * as __fd_glob_3 from "../content/docs/components/activity-graph.mdx?collection=docs"
Expand All @@ -38,4 +42,4 @@ const create = server<typeof Config, import("fumadocs-mdx/runtime/types").Intern
}
}>({"doc":{"passthroughs":["extractedReferences"]}});

export const docs = await create.docs("docs", "content/docs", {"meta.json": __fd_glob_0, "components/meta.json": __fd_glob_1, }, {"index.mdx": __fd_glob_2, "components/activity-graph.mdx": __fd_glob_3, "components/ai-copy-button.mdx": __fd_glob_4, "components/api-ref-table.mdx": __fd_glob_5, "components/code-block-command.mdx": __fd_glob_6, "components/code-block.mdx": __fd_glob_7, "components/code-line.mdx": __fd_glob_8, "components/color-palette.mdx": __fd_glob_9, "components/commit-graph.mdx": __fd_glob_10, "components/contributor-grid.mdx": __fd_glob_11, "components/cron-schedule.mdx": __fd_glob_12, "components/diff-viewer.mdx": __fd_glob_13, "components/env-table.mdx": __fd_glob_14, "components/file-tree.mdx": __fd_glob_15, "components/github-button-group.mdx": __fd_glob_16, "components/github-stars-button.mdx": __fd_glob_17, "components/json-viewer.mdx": __fd_glob_18, "components/kbd.mdx": __fd_glob_19, "components/license-badge.mdx": __fd_glob_20, "components/log-viewer.mdx": __fd_glob_21, "components/logo-cloud.mdx": __fd_glob_22, "components/npm-badge.mdx": __fd_glob_23, "components/producthunt-button.mdx": __fd_glob_24, "components/repo-card.mdx": __fd_glob_25, "components/request-viewer.mdx": __fd_glob_26, "components/status-indicator.mdx": __fd_glob_27, "components/stepper.mdx": __fd_glob_28, "components/testimonial.mdx": __fd_glob_29, "components/tip-jar.mdx": __fd_glob_30, });
export const docs = await create.docs("docs", "content/docs", {"meta.json": __fd_glob_0, "components/meta.json": __fd_glob_1, }, {"index.mdx": __fd_glob_2, "components/activity-graph.mdx": __fd_glob_3, "components/ai-copy-button.mdx": __fd_glob_4, "components/api-ref-table.mdx": __fd_glob_5, "components/balanced-text.mdx": __fd_glob_6, "components/chat-bubble.mdx": __fd_glob_7, "components/code-block-command.mdx": __fd_glob_8, "components/code-block.mdx": __fd_glob_9, "components/code-line.mdx": __fd_glob_10, "components/color-palette.mdx": __fd_glob_11, "components/commit-graph.mdx": __fd_glob_12, "components/contributor-grid.mdx": __fd_glob_13, "components/cron-schedule.mdx": __fd_glob_14, "components/diff-viewer.mdx": __fd_glob_15, "components/env-table.mdx": __fd_glob_16, "components/file-tree.mdx": __fd_glob_17, "components/github-button-group.mdx": __fd_glob_18, "components/github-stars-button.mdx": __fd_glob_19, "components/json-viewer.mdx": __fd_glob_20, "components/kbd.mdx": __fd_glob_21, "components/license-badge.mdx": __fd_glob_22, "components/log-viewer.mdx": __fd_glob_23, "components/logo-cloud.mdx": __fd_glob_24, "components/masonry-grid.mdx": __fd_glob_25, "components/npm-badge.mdx": __fd_glob_26, "components/pretext.mdx": __fd_glob_27, "components/producthunt-button.mdx": __fd_glob_28, "components/repo-card.mdx": __fd_glob_29, "components/request-viewer.mdx": __fd_glob_30, "components/status-indicator.mdx": __fd_glob_31, "components/stepper.mdx": __fd_glob_32, "components/testimonial.mdx": __fd_glob_33, "components/tip-jar.mdx": __fd_glob_34, });
8 changes: 7 additions & 1 deletion apps/docs/components/docs/dependency-badges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ interface DependencyBadgesProps {
className?: string
}

/**
* Internal registry:lib items that should not appear as badges.
* These are installed automatically as transitive dependencies.
*/
const HIDDEN_REGISTRY_DEPS = new Set(["pretext"])

/**
* Maps npm dependency names to their bundled icon key.
* Extend as new dependencies are added to registry items.
Expand Down Expand Up @@ -137,7 +143,7 @@ export function DependencyBadges({
return (
<div className={cn("flex flex-wrap gap-1.5", className)}>
{registryDependencies
.filter((dep) => !dep.startsWith("http"))
.filter((dep) => !dep.startsWith("http") && !HIDDEN_REGISTRY_DEPS.has(dep))
.map((dep) => {
const parsed = parseRegistryDep(dep)
return (
Expand Down
28 changes: 28 additions & 0 deletions apps/docs/components/docs/previews/balanced-text.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"use client"

import * as React from "react"
import { BalancedText } from "@/registry/balanced-text/balanced-text"

export default function BalancedTextPreview() {
const [mounted, setMounted] = React.useState(false)
React.useEffect(() => { setMounted(true) }, [])
if (!mounted) return null

return (
<div className="flex flex-col gap-4">
<BalancedText
text="Build faster with components that measure text without the DOM"
as="h2"
font='700 24px ui-sans-serif, system-ui, sans-serif'
maxWidth={380}
className="text-2xl font-bold tracking-tight"
/>
<BalancedText
text="Pure arithmetic text measurement for accurate layouts at any width, in any language."
font="14px ui-sans-serif, system-ui, sans-serif"
maxWidth={340}
className="text-sm text-muted-foreground"
/>
</div>
)
}
23 changes: 23 additions & 0 deletions apps/docs/components/docs/previews/chat-bubble.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"use client"

import * as React from "react"
import { ChatThread, type ChatMessage } from "@/registry/chat-bubble/chat-bubble"

const messages: ChatMessage[] = [
{ text: "Hey, did you see the new Pretext library?", sent: false },
{ text: "Yeah! Pure arithmetic text measurement.", sent: true },
{ text: "That shrinkwrap is wild — pixel-tight bubbles.", sent: false },
{ text: "CJK and emoji too 🎉", sent: true },
]

export default function ChatBubblePreview() {
const [mounted, setMounted] = React.useState(false)
React.useEffect(() => { setMounted(true) }, [])
if (!mounted) return null

return (
<div className="rounded-xl bg-background p-3 border border-border">
<ChatThread messages={messages} maxWidth={240} />
</div>
)
}
21 changes: 21 additions & 0 deletions apps/docs/components/docs/previews/masonry-grid.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
"use client"

import * as React from "react"
import { MasonryGrid } from "@/registry/masonry-grid/masonry-grid"

const items = [
{ title: "Quick thought", text: "Ship beats perfection." },
{ text: "The bug is never where you think it is." },
{ title: "Design", text: "A design system makes things feel intentional." },
{ text: "Good abstractions are discovered, not invented." },
{ title: "Typography", text: "If your UI looks wrong, check spacing first." },
{ text: "Documentation is the feature nobody asks for." },
]

export default function MasonryGridPreview() {
const [mounted, setMounted] = React.useState(false)
React.useEffect(() => { setMounted(true) }, [])
if (!mounted) return null

return <MasonryGrid items={items} columns={3} gap={8} />
}
Loading
Loading