Skip to content

docs: fix inaccuracies, dead links, and stale references across docs - #885

Merged
ravisuhag merged 6 commits into
mainfrom
docs/cleanup-and-fixes
Aug 8, 2026
Merged

docs: fix inaccuracies, dead links, and stale references across docs#885
ravisuhag merged 6 commits into
mainfrom
docs/cleanup-and-fixes

Conversation

@ravisuhag

@ravisuhag ravisuhag commented Aug 8, 2026

Copy link
Copy Markdown
Member

Summary

Cleanup pass across all documentation — the docs site, repo-level guides, and RFCs. Fixes wrong information users would hit, repairs broken links, aligns docs with the real codebase, and fills gaps. Everything was verified against source; the docs site builds clean (191 pages, no MDX errors).

Wrong information (highest impact)

  • getting-started: useTheme now imports from the main entry (was the broken /hooks path); prerequisites corrected to Node ≥22 / React 19 (were Node 18 / React 18); added React peer-dep note; Next Steps point to DataView instead of the deprecated DataTable.
  • 14 broken internal links in the overview and theme pages were missing the /docs base path — now resolve.
  • select props: variant is 'outline' | 'text' (was 'default' | 'filter'); removed non-existent aria props; added nativeButton.
  • datatable props: replaced non-existent columnType with the real dataType; added loadingRowCount and onRowClick.
  • table props: colSpan is required.

License

  • Added an Apache-2.0 LICENSE file (there was none, despite the README badge). Copied it into the published packages so npm README links resolve. Changed the raystack package.json license from ISC to Apache-2.0.
  • ⚠️ Please confirm Apache-2.0 is intended. I standardized on it because the public README badge and tools-config already declared it; only the raystack package.json disagreed (ISC). Easy to flip if ISC was the intent.

Repo docs

  • README: pnpm testpnpm test:apsara; dropped deprecated DataTable from highlights.
  • DEVELOPMENT.md: fixed directory layout (removed the fictional v1/ tree), build outputs, and a non-existent hook in an example.
  • CONTRIBUTING.md: fixed docs path and barrel filename; added a Project Documentation section linking the migration guide and RFCs (previously unlinked).
  • agents.md: test-utils is a directory.
  • RFC 003 marked Completed (Tour shipped); removed dead ANALYSIS.md links in RFC 002/003.
  • V1-migration: dropped the unshipped "1.0.0" framing (package is 0.48.0).
  • apps/www/README.md: replaced create-next-app boilerplate with a real docs-site README.

New & improved content pages

  • Added a Box page (was undocumented; it's a deprecated alias of Flex and says so).
  • Theme: the Theme provider and useTheme were documented in two places. Consolidated the React API into the Theme overview (its natural home alongside tokens and scoped theming), folded in ThemeSwitcher and the useTheme options overload, and removed the duplicate components/theme page. Documents only the current API — the deprecated ThemeProvider alias is dropped.
  • Added missing Accessibility/Examples sections and source: frontmatter; renamed stray "Usage" headings to "Anatomy".
  • Enriched six thin pages (flex, empty-state, headline, container, grid, copy-button) and rewrote weak descriptions; replaced Lorem Ipsum demo text.

How it was found

Three parallel read-only audits (docs-site content, props accuracy vs source, repo-level docs). Every finding was verified against the actual component TypeScript and package config before fixing.

Test plan

  • pnpm --filter www build succeeds (191 pages, no MDX errors)
  • No remaining non-/docs internal links
  • New Box and ThemeProvider pages render
  • Confirm Apache-2.0 license choice

Deprecation cleanup (prep for next cleanup release)

  • Removed the deprecated DataTable and Box pages and every reference to them (getting-started, intro, README highlights). floating-actions now points to DataView row selection.
  • Stripped all @deprecated prop entries from the API tables (sidebar, calendar, indicator, dataview, empty-state, table) — kept the one className explicitly marked "not deprecated".
  • Added explanatory text to the thin list and table Examples sections.
  • Verified heading consistency across all pages: no # H1 in body, no heading-level skips, consistent H2 → H3 → H4 nesting.
  • Also prunes the old playground example harness, standalone /examples routes, and related dead components, and removes the orphaned DataTable demo components.

Correct wrong information users would hit, repair broken links, align
repo docs with the real codebase, and fill documentation gaps.

Docs site:
- getting-started: fix useTheme import (main entry, not /hooks), correct
  prerequisites to Node >=22 / React 19, note React peer deps, point Next
  Steps to DataView instead of the deprecated DataTable
- fix 14 internal links missing the /docs base path (overview + theme pages)
- select props: variant is 'outline' | 'text' (was 'default' | 'filter'),
  drop non-existent aria props, add nativeButton
- datatable props: replace non-existent columnType with dataType, add
  loadingRowCount and onRowClick
- table props: colSpan is required
- add missing Box and ThemeProvider pages (both deprecated aliases, noted)
- add missing Accessibility/Examples sections and source frontmatter,
  rename stray "Usage" headings to "Anatomy"
- enrich thin pages and rewrite weak descriptions; drop Lorem Ipsum demo text

Repo docs:
- add Apache-2.0 LICENSE (was missing); align raystack package license
  from ISC; copy LICENSE into published packages
- README: fix pnpm test -> pnpm test:apsara; drop deprecated DataTable
- DEVELOPMENT.md: fix directory layout, build outputs, and hook example
- CONTRIBUTING.md: fix docs path and barrel filename; link migration guide
  and RFCs
- agents.md: test-utils is a directory
- RFC 003 marked Completed; remove dead ANALYSIS.md links in RFC 002/003
- V1-migration: drop unshipped "1.0.0" framing
- apps/www: replace create-next-app boilerplate README
@vercel

vercel Bot commented Aug 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
apsara Ready Ready Preview Aug 8, 2026 12:40pm

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Too many files!

This PR contains 113 files, which is 13 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 419e9442-2ecb-437e-a5e5-4585e2fae9ff

📥 Commits

Reviewing files that changed from the base of the PR and between 7763452 and 7a587c8.

📒 Files selected for processing (113)
  • .agents/skills/add-new-component/SKILL.md
  • DEVELOPMENT.md
  • apps/www/src/app/examples/README.md
  • apps/www/src/app/examples/color-picker/page.tsx
  • apps/www/src/app/examples/combobox/page.tsx
  • apps/www/src/app/examples/datatable-virtual/page.tsx
  • apps/www/src/app/examples/datatable/page.tsx
  • apps/www/src/app/examples/dataview/page.tsx
  • apps/www/src/app/examples/page.tsx
  • apps/www/src/app/examples/table/page.tsx
  • apps/www/src/app/examples/theme-overrides/page.tsx
  • apps/www/src/app/examples/timeline/page.tsx
  • apps/www/src/app/examples/tour/page.tsx
  • apps/www/src/components/chip-input-demo.tsx
  • apps/www/src/components/datatable-demo.tsx
  • apps/www/src/components/datatable-selection-demo.tsx
  • apps/www/src/components/dataview-demo.tsx
  • apps/www/src/components/demo/demo.tsx
  • apps/www/src/components/docs/docs-body.module.css
  • apps/www/src/components/docs/docs-body.tsx
  • apps/www/src/components/docs/index.ts
  • apps/www/src/components/linear-menu-demo.tsx
  • apps/www/src/components/mdx/mdx-components.tsx
  • apps/www/src/components/navbar/index.ts
  • apps/www/src/components/navbar/navbar.module.css
  • apps/www/src/components/navbar/navbar.tsx
  • apps/www/src/components/playground/alert-dialog-examples.tsx
  • apps/www/src/components/playground/amount-examples.tsx
  • apps/www/src/components/playground/announcement-bar-examples.tsx
  • apps/www/src/components/playground/avatar-examples.tsx
  • apps/www/src/components/playground/badge-examples.tsx
  • apps/www/src/components/playground/breadcrumb-examples.tsx
  • apps/www/src/components/playground/button-examples.tsx
  • apps/www/src/components/playground/calendar-examples.tsx
  • apps/www/src/components/playground/callout-examples.tsx
  • apps/www/src/components/playground/checkbox-examples.tsx
  • apps/www/src/components/playground/chip-examples.tsx
  • apps/www/src/components/playground/code-block-examples.tsx
  • apps/www/src/components/playground/collapsible-examples.tsx
  • apps/www/src/components/playground/combobox-examples.tsx
  • apps/www/src/components/playground/command-examples.tsx
  • apps/www/src/components/playground/container-examples.tsx
  • apps/www/src/components/playground/context-menu-examples.tsx
  • apps/www/src/components/playground/data-table-examples.tsx
  • apps/www/src/components/playground/dialog-examples.tsx
  • apps/www/src/components/playground/drawer-examples.tsx
  • apps/www/src/components/playground/empty-state-examples.tsx
  • apps/www/src/components/playground/field-examples.tsx
  • apps/www/src/components/playground/fieldset-examples.tsx
  • apps/www/src/components/playground/filter-chip-examples.tsx
  • apps/www/src/components/playground/flex-examples.tsx
  • apps/www/src/components/playground/floating-actions-examples.tsx
  • apps/www/src/components/playground/form-examples.tsx
  • apps/www/src/components/playground/headline-examples.tsx
  • apps/www/src/components/playground/icon-button-examples.tsx
  • apps/www/src/components/playground/image-examples.tsx
  • apps/www/src/components/playground/index.ts
  • apps/www/src/components/playground/indicator-examples.tsx
  • apps/www/src/components/playground/input-examples.tsx
  • apps/www/src/components/playground/label-examples.tsx
  • apps/www/src/components/playground/link-examples.tsx
  • apps/www/src/components/playground/list-examples.tsx
  • apps/www/src/components/playground/menu-examples.tsx
  • apps/www/src/components/playground/menubar-examples.tsx
  • apps/www/src/components/playground/number-field-examples.tsx
  • apps/www/src/components/playground/otp-field-examples.tsx
  • apps/www/src/components/playground/playground-layout.module.css
  • apps/www/src/components/playground/playground-layout.tsx
  • apps/www/src/components/playground/popover-examples.tsx
  • apps/www/src/components/playground/preview-card-examples.tsx
  • apps/www/src/components/playground/radio-examples.tsx
  • apps/www/src/components/playground/search-examples.tsx
  • apps/www/src/components/playground/select-examples.tsx
  • apps/www/src/components/playground/separator-examples.tsx
  • apps/www/src/components/playground/sidebar-examples.tsx
  • apps/www/src/components/playground/skeleton-examples.tsx
  • apps/www/src/components/playground/slider-examples.tsx
  • apps/www/src/components/playground/spinner-examples.tsx
  • apps/www/src/components/playground/switch-examples.tsx
  • apps/www/src/components/playground/table-examples.tsx
  • apps/www/src/components/playground/tabs-examples.tsx
  • apps/www/src/components/playground/text-area-examples.tsx
  • apps/www/src/components/playground/text-examples.tsx
  • apps/www/src/components/playground/toast-examples.tsx
  • apps/www/src/components/playground/toggle-examples.tsx
  • apps/www/src/components/playground/toolbar-examples.tsx
  • apps/www/src/components/playground/tooltip-examples.tsx
  • apps/www/src/components/playground/tour-examples.tsx
  • apps/www/src/components/theme-customiser/index.ts
  • apps/www/src/components/theme-customiser/theme-customiser.module.css
  • apps/www/src/components/theme-customiser/theme-customiser.tsx
  • apps/www/src/components/toc/toc.tsx
  • apps/www/src/content/docs/(overview)/index.mdx
  • apps/www/src/content/docs/(overview)/styling.mdx
  • apps/www/src/content/docs/components/calendar/props.ts
  • apps/www/src/content/docs/components/datatable/demo.ts
  • apps/www/src/content/docs/components/datatable/index.mdx
  • apps/www/src/content/docs/components/datatable/props.ts
  • apps/www/src/content/docs/components/dataview/props.ts
  • apps/www/src/content/docs/components/empty-state/index.mdx
  • apps/www/src/content/docs/components/empty-state/props.ts
  • apps/www/src/content/docs/components/floating-actions/index.mdx
  • apps/www/src/content/docs/components/indicator/props.ts
  • apps/www/src/content/docs/components/list/index.mdx
  • apps/www/src/content/docs/components/select/props.ts
  • apps/www/src/content/docs/components/sidebar/props.ts
  • apps/www/src/content/docs/components/table/index.mdx
  • apps/www/src/content/docs/components/table/props.ts
  • apps/www/src/content/docs/theme/overview/demo.ts
  • apps/www/src/content/docs/theme/overview/index.mdx
  • apps/www/src/content/docs/theme/overview/props.ts
  • apps/www/src/lib/ai.ts
  • packages/raystack/README.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

📝 Walkthrough

Walkthrough

The changes refresh repository structure and contribution guidance, replace the documentation-site starter README, and update documentation routes and prerequisites. Component pages add demos, usage details, accessibility guidance, and API declarations for Box, theme provider, DataTable, Select, and Table. Overview pages update component catalogs and links. Migration and RFC references are revised. Apache License 2.0 text is added to the repository and packages, and the Raystack package metadata changes from ISC to Apache-2.0.

Suggested reviewers: paansinghcoder, rohanchkrabrty

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the documentation cleanup, including inaccurate content, broken links, and stale references.
Description check ✅ Passed The description is detailed and directly explains the documentation, link, license, and metadata changes in the pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-new Bot commented Aug 8, 2026

Copy link
Copy Markdown

Open in StackBlitz

pnpm add https://pkg.pr.new/raystack/apsara/@raystack/apsara@885

commit: 7a587c8

Rename the theme-provider page to "Theme", drop the ThemeProvider
deprecation callout, and rename ThemeProviderProps -> ThemeProps so the
page documents only the current theming API (Theme, useTheme, ThemeSwitcher).

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/www/README.md`:
- Around line 21-26: Add the text language identifier to the file-tree fenced
code block in the README, changing the opening fence to use text/plaintext while
preserving the tree content unchanged.

In `@apps/www/src/content/docs/components/box/props.ts`:
- Around line 1-10: Update the BoxProps documentation to reflect that Box
supports the full ComponentProps<'div'> surface, including ref and other DOM
props, by adding them to the API table or explicitly marking the table as
intentionally limited. Keep the existing children, className, and style entries
accurate.
- Around line 1-10: Update the BoxProps type references to use explicit
type-only imports from react for the ReactNode and CSSProperties types,
replacing the unimported React namespace usage while preserving the existing
children, className, and style prop contracts.

In `@apps/www/src/content/docs/components/context-menu/index.mdx`:
- Around line 19-31: Add visible child text to the Anatomy example’s
ContextMenu.Trigger and ContextMenu.Item elements so copied usage shows a
trigger label and menu-item label; keep the existing component structure
unchanged.

In `@apps/www/src/content/docs/components/datatable/props.ts`:
- Around line 28-33: Remove the unsupported loadingRowCount and onRowClick
declarations from the DataTable props documentation, unless matching renderer
behavior and tests are implemented. Keep the published API limited to props
currently honored by DataTable.

In `@apps/www/src/content/docs/components/dataview/index.mdx`:
- Around line 560-578: Add accessibility tests covering the documented DataView
behaviors: rows with onRowClick receive tabIndex={0}, keyboard events from
interactive descendants do not activate the row, Timeline accepts an aria-label
override, and Timeline decorative axis, ticks, markers, gridlines, and cursor
elements are aria-hidden. Place the tests alongside the existing DataView
accessibility coverage and assert the documented semantics without changing
implementation behavior.

In `@apps/www/src/content/docs/components/empty-state/index.mdx`:
- Around line 3-14: Update the EmptyState anatomy example to pass a valid icon
so it matches the Overview’s required icon guidance. Keep the prose and
required-prop contract unchanged, and use the existing example’s established
icon symbol if available.

In `@apps/www/src/content/docs/components/grid/index.mdx`:
- Around line 66-67: Update the Grid documentation guidance to preserve valid
list semantics: when using a `<ul>` root, configure every `Grid.Item` to render
as `<li>`; recommend `<section>` instead when the children are not list items.
Keep the existing semantic-element guidance and reflect Grid.Item’s default
`<div>` behavior.

In `@apps/www/src/content/docs/components/select/props.ts`:
- Around line 44-45: Update the nativeButton prop documentation to describe how
it affects the element provided through render, clarifying that it makes Base UI
treat that rendered element as a native <button> rather than selecting a
different trigger implementation.

In `@apps/www/src/content/docs/components/table/props.ts`:
- Around line 55-56: Update the colSpan documentation in the table row props
definition to state that it spans the supplied number of columns, without
claiming it guarantees coverage of all table columns. Retain that consumers may
provide a computed full-column span, but describe the prop generically for
callers that pass smaller values.

In `@apps/www/src/content/docs/components/theme-provider/index.mdx`:
- Line 13: Update the Theme documentation paragraph to scope localStorage
persistence and the pre-paint inline script to the root provider. Explicitly
state that nested providers persist only when given storageKey and do not render
the root theme script, while preserving the descriptions of theme management and
design-token attributes.

In `@CONTRIBUTING.md`:
- Around line 96-108: Update the directory-tree code fence in the contributing
guide to specify the text language identifier, changing the opening fence before
the component structure example while leaving the example content unchanged.

In `@DEVELOPMENT.md`:
- Around line 256-258: Update the package output documentation near the ESM,
CommonJS, and TypeScript declaration entries to match the
`packages/raystack/package.json` exports: either remove the `./v1` export if
unsupported or add the generated `/v1` files when it remains supported, keeping
documentation and package metadata consistent.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 04ddd0cc-cef7-44ba-bd00-e65bf78671b8

📥 Commits

Reviewing files that changed from the base of the PR and between d527aa4 and 7763452.

📒 Files selected for processing (45)
  • CONTRIBUTING.md
  • DEVELOPMENT.md
  • LICENSE
  • agents.md
  • apps/www/README.md
  • apps/www/src/content/docs/(overview)/getting-started.mdx
  • apps/www/src/content/docs/(overview)/index.mdx
  • apps/www/src/content/docs/(overview)/styling.mdx
  • apps/www/src/content/docs/components/amount/index.mdx
  • apps/www/src/content/docs/components/announcement-bar/demo.ts
  • apps/www/src/content/docs/components/announcement-bar/index.mdx
  • apps/www/src/content/docs/components/badge/index.mdx
  • apps/www/src/content/docs/components/box/demo.ts
  • apps/www/src/content/docs/components/box/index.mdx
  • apps/www/src/content/docs/components/box/props.ts
  • apps/www/src/content/docs/components/checkbox/index.mdx
  • apps/www/src/content/docs/components/combobox/index.mdx
  • apps/www/src/content/docs/components/container/demo.ts
  • apps/www/src/content/docs/components/container/index.mdx
  • apps/www/src/content/docs/components/context-menu/index.mdx
  • apps/www/src/content/docs/components/copy-button/index.mdx
  • apps/www/src/content/docs/components/datatable/props.ts
  • apps/www/src/content/docs/components/dataview/index.mdx
  • apps/www/src/content/docs/components/empty-state/index.mdx
  • apps/www/src/content/docs/components/flex/index.mdx
  • apps/www/src/content/docs/components/grid/index.mdx
  • apps/www/src/content/docs/components/headline/index.mdx
  • apps/www/src/content/docs/components/link/index.mdx
  • apps/www/src/content/docs/components/menu/index.mdx
  • apps/www/src/content/docs/components/menubar/index.mdx
  • apps/www/src/content/docs/components/scroll-area/index.mdx
  • apps/www/src/content/docs/components/select/props.ts
  • apps/www/src/content/docs/components/table/props.ts
  • apps/www/src/content/docs/components/text/index.mdx
  • apps/www/src/content/docs/components/theme-provider/demo.ts
  • apps/www/src/content/docs/components/theme-provider/index.mdx
  • apps/www/src/content/docs/components/theme-provider/props.ts
  • apps/www/src/content/docs/theme/overview/index.mdx
  • docs/V1-migration.md
  • docs/rfcs/002-unified-dataview-component.md
  • docs/rfcs/003-guided-tour-component.md
  • packages/raystack/LICENSE
  • packages/raystack/README.md
  • packages/raystack/package.json
  • packages/tools-config/LICENSE
💤 Files with no reviewable changes (1)
  • docs/rfcs/002-unified-dataview-component.md

Comment thread apps/www/README.md
Comment on lines +21 to +26
```
src/content/docs/components/<name>/
├── index.mdx # the page: overview, anatomy, examples, accessibility
├── props.ts # prop tables, rendered by <auto-type-table />
└── demo.ts # live code examples shown by the <Demo /> component
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language to the file-tree code fence.

Markdownlint reports MD040 at Line [21]. Use text or plaintext for this non-code tree.

Proposed fix
-```
+```text
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
src/content/docs/components/<name>/
├── index.mdx # the page: overview, anatomy, examples, accessibility
├── props.ts # prop tables, rendered by <auto-type-table />
└── demo.ts # live code examples shown by the <Demo /> component
```
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 21-21: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/README.md` around lines 21 - 26, Add the text language identifier to
the file-tree fenced code block in the README, changing the opening fence to use
text/plaintext while preserving the tree content unchanged.

Source: Linters/SAST tools

Comment on lines +1 to +10
export interface BoxProps {
/** Content rendered inside the box */
children?: React.ReactNode;

/** Custom CSS class names */
className?: string;

/** Inline styles applied to the underlying `<div>` */
style?: React.CSSProperties;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

rg -n -C 12 '\bBoxProps\b|auto-type-table' packages/raystack apps/www/src/content/docs/components/box

Repository: raystack/apsara

Length of output: 5086


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "== locate box files =="
git ls-files | rg '(^|/)packages/raystack/components/box|(^|/)apps/www/src/content/docs/components/box|(^|/)src/content/docs/components/box' || true

echo
echo "== inspect app docs =="
sed -n '1,80p' apps/www/src/content/docs/components/box/index.mdx
echo
sed -n '1,80p' apps/www/src/content/docs/components/box/props.ts

echo
echo "== inspect package files =="
wc -l packages/raystack/components/flex/flex.tsx packages/raystack/components/box 2>/dev/null || true
fd -a . packages/raystack/components | rg 'box|flex' | sed -n '1,80p'

Repository: raystack/apsara

Length of output: 5363


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "== package box implementation =="
sed -n '1,120p' packages/raystack/components/box/box.tsx
echo
sed -n '1,60p' packages/raystack/components/box/index.tsx

echo
echo "== package box tests =="
sed -n '1,180p' packages/raystack/components/box/__tests__/box.test.tsx
echo
sed -n '1,160p' packages/raystack/components/box/__tests__/data-slots.test.tsx

Repository: raystack/apsara

Length of output: 5656


Mirror the public Box prop surface in the API table.

Box is typed as ComponentProps<'div'>, but props.ts only documents children, className, and style. Add ref/DOM props as a complete row or state that this table is intentionally limited.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/box/props.ts` around lines 1 - 10,
Update the BoxProps documentation to reflect that Box supports the full
ComponentProps<'div'> surface, including ref and other DOM props, by adding them
to the API table or explicitly marking the table as intentionally limited. Keep
the existing children, className, and style entries accurate.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

rg -n -C 3 'allowUmdGlobalAccess|typeRoots|types' --glob 'tsconfig*.json' .

Repository: raystack/apsara

Length of output: 2325


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf 'Candidate files:\n'
fd -a 'tsconfig\.json$|package\.json$' apps/www packages/raystack 2>/dev/null | sed 's#^\./##' | sort

printf '\napps/www/tsconfig.json:\n'
cat -n apps/www/tsconfig.json

printf '\napps/www package manifests referencing react/types:\n'
for f in apps/www/package.json package.json apps/www/node_modules/@types/react/package.json; do
  [ -f "$f" ] && printf '\n--- %s ---\n' "$f" && sed -n '1,120p' "$f"
done

printf '\nRelevant docs box props file:\n'
cat -n apps/www/src/content/docs/components/box/props.ts

printf '\nReact namespace usages in apps/www/src/content/docs:\n'
rg -n "React\.(ReactNode|CSSProperties)" apps/www/src/content/docs || true

printf '\nReact imports in apps/www/src/content/docs components:\n'
rg -n "import .*React|from ['\"]react['\"]" apps/www/src/content/docs -g '*.ts' -g '*.tsx' || true

printf '\nCheck lockfiles for `@types/react` version:\n'
rg -n '"`@types/react`"|`@types/react`' -g 'package-lock.json' -g 'pnpm-lock.yaml' -g 'yarn.lock' -g 'bun.lockb' -g 'bun.lock' . | head -80

Repository: raystack/apsara

Length of output: 24759


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf 'Check if TypeScript compiler is available in sandbox:\n'
if command -v tsc >/dev/null 2>&1; then
  tsc --version
  tmpdir="$(mktemp -d)"
  cat > "$tmpdir/test.ts" <<'TS'
export interface BoxProps {
  children?: React.ReactNode;
  style?: React.CSSProperties;
}
TS
  cat > "$tmpdir/tsconfig.json" <<'JSON'
{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "noEmit": true,
    "types": []
  },
  "include": ["test.ts"]
}
JSON
  echo "--- --noLib=false, default --allowUmdGlobalAccess ---"
  tsc --pretty false --outDir "$tmpdir/out" -p "$tmpdir/tsconfig.json" 2>&1 || true
  cat > "$tmpdir/tsconfig.json" <<'JSON'
{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "noEmit": true,
    "allowUmdGlobalAccess": true
  },
  "include": ["test.ts"]
}
JSON
  echo "--- with allowUmdGlobalAccess ---"
  tsc --pretty false --outDir "$tmpdir/out" -p "$tmpdir/tsconfig.json" 2>&1 || true
  rm -rf "$tmpdir"
else
  echo "tsc not available"
fi

printf '\nInspect base tools-config react tsconfig path if present:\n'
fd -a 'tsconfig.*' packages/raystack | while read -r f; do
  [ -f "$f" ] || continue
  printf '\n--- %s ---\n' "$f"
  cat -n "$f"
done

printf '\nFocused source files importing namespaces/types in docs:\n'
sed -n '1,20p' apps/www/src/content/docs/components/code-block/props.ts
sed -n '1,20p' apps/www/src/content/docs/components/button/props.ts
sed -n '1,20p' apps/www/src/content/docs/components/context-menu/props.ts

Repository: raystack/apsara

Length of output: 2954


Import the React types explicitly.

apps/www does not enable allowUmdGlobalAccess, so React.ReactNode and React.CSSProperties are referenced through an unimported global module namespace. Use type-only imports from react instead.

Proposed fix
+import type { CSSProperties, ReactNode } from 'react';
+
 export interface BoxProps {
-  children?: React.ReactNode;
+  children?: ReactNode;
...
-  style?: React.CSSProperties;
+  style?: CSSProperties;
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export interface BoxProps {
/** Content rendered inside the box */
children?: React.ReactNode;
/** Custom CSS class names */
className?: string;
/** Inline styles applied to the underlying `<div>` */
style?: React.CSSProperties;
}
import type { CSSProperties, ReactNode } from 'react';
export interface BoxProps {
/** Content rendered inside the box */
children?: ReactNode;
/** Custom CSS class names */
className?: string;
/** Inline styles applied to the underlying `<div>` */
style?: CSSProperties;
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/box/props.ts` around lines 1 - 10,
Update the BoxProps type references to use explicit type-only imports from react
for the ReactNode and CSSProperties types, replacing the unimported React
namespace usage while preserving the existing children, className, and style
prop contracts.

Comment on lines +19 to +31
## Anatomy

Import and assemble the component:

```tsx
import { ContextMenu } from '@raystack/apsara'

<ContextMenu>
<ContextMenu.Trigger />
<ContextMenu.Content>
<ContextMenu.Item />
</ContextMenu.Content>
</ContextMenu>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add visible content to the anatomy example.

The snippet uses self-closing ContextMenu.Trigger and ContextMenu.Item. A copied example has no trigger label and no menu-item label. Add minimal children, or label the block as pseudocode.

Proposed fix
 <ContextMenu>
-  <ContextMenu.Trigger />
+  <ContextMenu.Trigger>Right-click here</ContextMenu.Trigger>
   <ContextMenu.Content>
-    <ContextMenu.Item />
+    <ContextMenu.Item>Open</ContextMenu.Item>
   </ContextMenu.Content>
 </ContextMenu>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Anatomy
Import and assemble the component:
```tsx
import { ContextMenu } from '@raystack/apsara'
<ContextMenu>
<ContextMenu.Trigger />
<ContextMenu.Content>
<ContextMenu.Item />
</ContextMenu.Content>
</ContextMenu>
## Anatomy
Import and assemble the component:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/context-menu/index.mdx` around lines 19
- 31, Add visible child text to the Anatomy example’s ContextMenu.Trigger and
ContextMenu.Item elements so copied usage shows a trigger label and menu-item
label; keep the existing component structure unchanged.

Comment thread apps/www/src/content/docs/components/datatable/props.ts Outdated
Comment on lines +560 to +578

## Accessibility

- `DataView.List` with `variant="table"` renders real table semantics:
`role="table"` on the grid with `rowgroup`, `row`, `columnheader`, and
`cell` on its parts. `variant="list"` uses `role="list"` with `listitem`
rows instead.
- When `onRowClick` is set, each row gets `tabIndex={0}` and activates with
Enter or Space, matching a native button. Rows keep their structural role
(`row`/`listitem`) so cells stay associated with their row, and key presses
bubbling up from interactive children (buttons, links in cells) are ignored
so they don't also trigger row activation.
- Skeleton loader rows are marked `aria-busy="true"`; the infinite-scroll
sentinel and the duplicate sticky group-header anchor are `aria-hidden` so
screen readers don't announce them.
- The Timeline pane is a focusable, labelled `role="region"` (`aria-label`,
default "Timeline") that keyboard users can Tab to and scroll with arrow
keys; the card canvas is a `role="list"` with each card as a `listitem`,
and decorative gridlines, markers, and the axis are `aria-hidden`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 \
  --glob '*.{ts,tsx}' \
  '\b(DataView\.List|DataView\.Timeline|onRowClick|tabIndex|aria-busy|aria-hidden|Arrow|Enter|Space)\b' .

Repository: raystack/apsara

Length of output: 50372


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Locate data-view files"
fd -a 'data-view' packages apps www 2>/dev/null | head -100

echo
echo "Focus tests/implementation"
fd -a '.*\.tsx?$' packages/raystack/components/data-view | head -100

Repository: raystack/apsara

Length of output: 3383


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "list.tsx outline"
ast-grep outline packages/raystack/components/data-view/components/list.tsx --view expanded || true

echo
echo "timeline.tsx outline"
ast-grep outline packages/raystack/components/data-view/components/timeline.tsx --view expanded || true

echo
echo "Relevant list implementation slices"
wc -l packages/raystack/components/data-view/components/list.tsx
sed -n '1,260p' packages/raystack/components/data-view/components/list.tsx

echo
echo "Relevant timeline implementation slices"
wc -l packages/raystack/components/data-view/components/timeline.tsx
sed -n '1,360p' packages/raystack/components/data-view/components/timeline.tsx
sed -n '360,560p' packages/raystack/components/data-view/components/timeline.tsx

Repository: raystack/apsara

Length of output: 30986


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Remaining list.tsx slice"
sed -n '260,530p' packages/raystack/components/data-view/components/list.tsx

echo
echo "Remaining timeline.tsx slices"
sed -n '560,900p' packages/raystack/components/data-view/components/timeline.tsx
sed -n '900,1180p' packages/raystack/components/data-view/components/timeline.tsx
sed -n '1180,1394p' packages/raystack/components/data-view/components/timeline.tsx

echo
echo "Data view types Timeline/List"
sed -n '1,260p' packages/raystack/components/data-view/data-view.types.tsx

echo
echo "Timeline tests"
wc -l packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '1,260p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '260,540p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '540,760p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '760,1080p' packages/raystack/components/data-view/__tests__/timeline.test.tsx

Repository: raystack/apsara

Length of output: 50371


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo
echo "Remaining data-view.types.tsx Timeline interfaces"
sed -n '240,420p' packages/raystack/components/data-view/data-view.types.tsx

echo
echo "Focused data-view list tests"
sed -n '240,290p' packages/raystack/components/data-view/__tests__/data-view.test.tsx
sed -n '830,910p' packages/raystack/components/data-view/__tests__/data-view.test.tsx
sed -n '1040,1090p' packages/raystack/components/data-view/__tests__/data-view.test.tsx

echo
echo "Focused timeline tests"
sed -n '1,120p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '120,240p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '240,380p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '380,520p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '520,660p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '700,860p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '900,1100p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '1100,1320p' packages/raystack/components/data-view/__tests__/timeline.test.tsx
sed -n '1320,1480p' packages/raystack/components/data-view/__tests__/timeline.test.tsx

Repository: raystack/apsara

Length of output: 50371


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Find docs section around lines 560-578"
wc -l apps/www/src/content/docs/components/dataview/index.mdx
sed -n '520,590p' apps/www/src/content/docs/components/dataview/index.mdx

Repository: raystack/apsara

Length of output: 4504


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Search tests for keypress descendant / interactive descendants / aria-hidden hidden / axis labels and decorative markup"
rg -n -C 3 \
  --glob '*.ts,*.tsx' \
  '\b(interactive descendants|key press|bubb|onKeyDown|children|aria-hidden|listGroup|axis Band|axis Tick|gridline|marker|cursor)\b' \
  packages/raystack/components/data-view/__tests__/data-view.test.tsx \
  packages/raystack/components/data-view/__tests__/timeline.test.tsx \
  packages/raystack/components/data-view/__tests__/data-slots.test.tsx \
  packages/raystack/components/data-view/__tests__/data-view.test.tsx

Repository: raystack/apsara

Length of output: 15481


Add tests for the documented accessibility behaviors.

The implementation matches most of this section, but documentation-specific coverage is still needed for the row tabIndex={0} case, interactive descendant key handling, Timeline aria-label override, and decorator aria-hidden coverage for axis/ticks/markers/gridlines/cursor.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/dataview/index.mdx` around lines 560 -
578, Add accessibility tests covering the documented DataView behaviors: rows
with onRowClick receive tabIndex={0}, keyboard events from interactive
descendants do not activate the row, Timeline accepts an aria-label override,
and Timeline decorative axis, ticks, markers, gridlines, and cursor elements are
aria-hidden. Place the tests alongside the existing DataView accessibility
coverage and assert the documented semantics without changing implementation
behavior.

Comment thread apps/www/src/content/docs/components/select/props.ts Outdated
Comment on lines +55 to +56
/** Number of cells the row should span across. Ensures the section header spans all table columns. (Required) */
colSpan: number;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify what colSpan guarantees.

colSpan spans the number supplied. It does not ensure all table columns by itself. The data-table consumer passes a computed full-column span, but generic callers can pass a smaller value.

Proposed wording
-  /** Number of cells the row should span across. Ensures the section header spans all table columns. (Required) */
+  /** Number of columns this header spans. Pass the table's column count
+   * when the header should span the full table. (Required)
+   */
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
/** Number of cells the row should span across. Ensures the section header spans all table columns. (Required) */
colSpan: number;
/** Number of columns this header spans. Pass the table's column count
* when the header should span the full table. (Required)
*/
colSpan: number;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/table/props.ts` around lines 55 - 56,
Update the colSpan documentation in the table row props definition to state that
it spans the supplied number of columns, without claiming it guarantees coverage
of all table columns. Retain that consumers may provide a computed full-column
span, but describe the prop generically for callers that pass smaller values.


This page documents the React API for theming: the `Theme` provider component, the `useTheme` hook, and the `ThemeSwitcher` button. For the theming system itself — design tokens, colors, spacing, and scoped theming in depth — see the [Theme overview](/docs/theme/overview).

`Theme` manages light/dark mode (including the `system` preference), persists the user's choice to localStorage, and applies the `style`, `accentColor`, and `grayColor` attributes that drive Apsara's design tokens. It injects a small inline script so the correct theme is applied before first paint, avoiding a flash of the wrong theme.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Limit persistence and script behavior to the root provider.

Line 13 states that every Theme persists to localStorage and injects the pre-paint script. A nested scope persists only when it receives storageKey. It renders no root theme script. State these behaviors for the root provider, and document the scoped condition.

Proposed fix
-`Theme` manages light/dark mode (including the `system` preference), persists the user's choice to localStorage, and applies the `style`, `accentColor`, and `grayColor` attributes that drive Apsara's design tokens. It injects a small inline script so the correct theme is applied before first paint, avoiding a flash of the wrong theme.
+At the root, `Theme` manages light/dark mode (including the `system` preference), persists the user's choice to localStorage, and applies the `style`, `accentColor`, and `grayColor` attributes that drive Apsara's design tokens. The root provider injects a small inline script so the correct theme is applied before first paint, avoiding a flash of the wrong theme. A nested `Theme` persists only when it has a `storageKey`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
`Theme` manages light/dark mode (including the `system` preference), persists the user's choice to localStorage, and applies the `style`, `accentColor`, and `grayColor` attributes that drive Apsara's design tokens. It injects a small inline script so the correct theme is applied before first paint, avoiding a flash of the wrong theme.
At the root, `Theme` manages light/dark mode (including the `system` preference), persists the user's choice to localStorage, and applies the `style`, `accentColor`, and `grayColor` attributes that drive Apsara's design tokens. The root provider injects a small inline script so the correct theme is applied before first paint, avoiding a flash of the wrong theme. A nested `Theme` persists only when it has a `storageKey`.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/theme-provider/index.mdx` at line 13,
Update the Theme documentation paragraph to scope localStorage persistence and
the pre-paint inline script to the root provider. Explicitly state that nested
providers persist only when given storageKey and do not render the root theme
script, while preserving the descriptions of theme management and design-token
attributes.

Comment thread CONTRIBUTING.md
Comment on lines +96 to +108
1. Create components in `packages/raystack/components/`
2. Follow the existing component structure:
```
component-name/
├── index.ts # Export barrel file
├── index.tsx # Export barrel file
├── component-name.tsx # Main component
├── component-name.module.css # Styles
└── __tests__/ # Tests
└── component-name.test.tsx
```

3. Export new components from `packages/raystack/index.ts`
4. Update the component documentation in `apps/www/content/docs`
3. Export new components from `packages/raystack/index.tsx`
4. Update the component documentation in `apps/www/src/content/docs`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language identifier to the directory-tree fence.

markdownlint-cli2 reports MD040 at Line 98. Use a text fence for the directory tree.

Proposed fix
-   ```
+   ```text
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
1. Create components in `packages/raystack/components/`
2. Follow the existing component structure:
```
component-name/
├── index.ts # Export barrel file
├── index.tsx # Export barrel file
├── component-name.tsx # Main component
├── component-name.module.css # Styles
└── __tests__/ # Tests
└── component-name.test.tsx
```
3. Export new components from `packages/raystack/index.ts`
4. Update the component documentation in `apps/www/content/docs`
3. Export new components from `packages/raystack/index.tsx`
4. Update the component documentation in `apps/www/src/content/docs`
1. Create components in `packages/raystack/components/`
2. Follow the existing component structure:
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 98-98: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CONTRIBUTING.md` around lines 96 - 108, Update the directory-tree code fence
in the contributing guide to specify the text language identifier, changing the
opening fence before the component structure example while leaving the example
content unchanged.

Source: Linters/SAST tools

Comment thread DEVELOPMENT.md
The Theme provider and useTheme were documented in both the Theme
overview and a components/theme page. The theme section is the apt home:
it already covers the theming system, tokens, and scoped theming, all of
which reference Theme and useTheme.

- Remove the duplicate components/theme page.
- Fold ThemeSwitcher (component + live demos) and the useTheme options
  overload into theme/overview, which previously lacked both.
- Rename ThemeProviderProps -> ThemeProps and drop the ThemeProvider
  deprecation note so only the current API is documented.
…d harness

Prepare the docs for the next cleanup release by removing everything
deprecated from the docs site.

Docs content:
- Remove the deprecated DataTable and Box pages and every link to them
  (getting-started, intro, README highlights, floating-actions now points
  to DataView row selection).
- Strip all @deprecated prop entries from the API tables (sidebar,
  calendar, indicator, dataview, empty-state, table); keep the one
  className explicitly marked "not deprecated".
- Drop the data-table exception note from the styling page.
- Add explanatory text to the thin list and table Examples sections.

Site harness cleanup:
- Remove the old playground example harness, standalone /examples routes,
  navbar, theme-customiser, and docs-body components.
- Delete the orphaned DataTable demo components and drop them from the
  live-demo scope; rename chip/menu demo files.

Verified: docs site builds (no MDX errors), headings are consistent
(no level skips), no deprecated references remain in docs content.
- select: clarify nativeButton describes the render element, not a variant
- DEVELOPMENT: note ./v1 is a legacy alias for the root dist output
- empty-state: pass required icon in the anatomy example
- table: clarify colSpan must equal the total column count
The old Step 7 described the deleted playground/*-examples.tsx harness.
Rewrite it around the interactive playground driven by the demo.ts
playground export, and drop the dead playground/ dir from the file tree.
@ravisuhag
ravisuhag merged commit 0b755cd into main Aug 8, 2026
7 checks passed
@ravisuhag
ravisuhag deleted the docs/cleanup-and-fixes branch August 8, 2026 12:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant