Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
905d4f9
Add the 0.2.0 restructure design and implementation plan
YaelAnaya Sep 6, 2026
00493a3
Keep the multiline modifiers in the select trigger plan
YaelAnaya Sep 6, 2026
fd5cc37
Retire the upstream-fidelity apparatus
YaelAnaya Sep 6, 2026
3ff06ef
Relocate the test-only gate helpers instead of unexporting them
YaelAnaya Sep 6, 2026
5598140
Let Progress report its own value
YaelAnaya Sep 6, 2026
389bea6
Give Button an inline size
YaelAnaya Sep 6, 2026
9b4d2d1
Fix vacuous test assertions after inline size migration
YaelAnaya Sep 6, 2026
88dc752
Give SelectTrigger a multiline prop
YaelAnaya Sep 6, 2026
69add95
Bake the menu surface into DropdownMenuContent
YaelAnaya Sep 6, 2026
c1514ae
Move cn to the published package
YaelAnaya Sep 6, 2026
feec41e
Widen the components.json step to the three values that go stale
YaelAnaya Sep 6, 2026
919ef8e
Prune the gates to the rules this package still owns
YaelAnaya Sep 6, 2026
68e9b27
Restructure src around what the package is
YaelAnaya Sep 6, 2026
fe81371
Compile the gates with the rest of the package
YaelAnaya Sep 6, 2026
fd6cb8a
Rewrite the design docs around the rules this package owns
YaelAnaya Sep 6, 2026
fef88d7
Restore the shadcn dependency the stylesheet imports
YaelAnaya Sep 6, 2026
0836438
Record that the menu's exit animation is deleted, not overridden
YaelAnaya Sep 6, 2026
49a6b64
Write the components here instead of generating them
YaelAnaya Sep 7, 2026
0fc877e
Bring every file to the formatter
YaelAnaya Sep 7, 2026
456db6a
Release 0.2.0
YaelAnaya Sep 7, 2026
e409050
Widen the cn floor so a consumer's cool-down can resolve it
YaelAnaya Sep 7, 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
27 changes: 27 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# The one place this repository states its own formatting.
#
# Without it, style lives only inside the committed files as a convention, and
# every editor applies its own defaults instead — which is how `styles.css`
# came back from a save at four-space indent while the other forty files stayed
# at two. Every mainstream editor reads this file natively, with nothing to
# install, so the rule travels with the checkout rather than with whoever set
# their editor up correctly.
#
# `.gitattributes` is the other half: it holds the line endings, which git
# rewrites on checkout and an editor never sees.

root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
max_line_length = 100

# Two trailing spaces are a hard line break in Markdown, so trimming them here
# would silently edit the prose rather than tidy it.
[*.md]
trim_trailing_whitespace = false
19 changes: 19 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Line endings are this repository's decision, not each machine's `core.autocrlf`.
#
# Unset, the same file is different bytes on Windows and on Linux: twenty files
# in this tree carry CRLF, every git command on a Windows checkout warns that it
# is converting them, and a diff can come back as "every line changed" for a
# commit that changed one. `eol=lf` normalises the index *and* the working tree,
# so the bytes are the same everywhere — including in the published package,
# where `styles.css` and `tailwind.css` ship as source and get read by somebody
# else's build.
#
# Every tracked file here is text; there is nothing `text=auto` could mangle.
* text=auto eol=lf

# Generated: collapsed by default in GitHub's diff view, where a dependency
# change otherwise arrives as two thousand lines nobody reads. Not marked
# `-diff`, because suppressing the diff locally too would hide the one thing
# worth checking in a lockfile — whether a dependency turned up that the
# manifest change did not explain.
pnpm-lock.yaml linguist-generated
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
node-version-file: .nvmrc
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm format:check
- run: pnpm lint
- run: pnpm build
- run: pnpm test
- run: pnpm test:gates
22 changes: 22 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Build output and generated files.
dist/
pnpm-lock.yaml

# Markdown is formatted by hand here, and Prettier's markdown printer fights
# that on two counts rather than helping:
#
# 1. It rewrites `*emphasis*` as `_emphasis_`. The repository uses the asterisk
# form throughout, the two render identically, and the change is 40-odd
# lines of diff that mean nothing.
# 2. It pads table cells so the pipes line up. `DESIGN.md`'s tables carry long
# sentences, so alignment pushes single lines past 170 characters — in the
# two files whose whole convention is a hard wrap at 100.
#
# Prose wrapping itself is safe (`proseWrap` defaults to preserve); it is the
# other two that make the docs worse. They stay hand-formatted, held to the
# 100-column guide in `.editorconfig`.
*.md

# Process records, kept as written at the time.
docs/superpowers/
.superpowers/
591 changes: 316 additions & 275 deletions DESIGN.md

Large diffs are not rendered by default.

22 changes: 15 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

# @robomous/ui-core

The Robomous design system: shadcn Nova primitives under Radix behaviour, the foundation design
tokens, and the gates that keep them canonical. Extracted from
[Robomous/VisionSet](https://github.com/Robomous/VisionSet), where it grew up.
The Robomous design system: twenty-one React components this package owns outright, the design
tokens they resolve through, and the gates that hold the rules the design system is made of.
Extracted from [Robomous/VisionSet](https://github.com/Robomous/VisionSet), where it grew up.

## Install

Expand All @@ -27,13 +27,21 @@ The stylesheet is the contract: Tailwind v4 reads its `@theme` block, so `bg-pri
component here and `bg-primary` in a consuming app are the same colour by construction. A
consumer adds its own extensions in its own stylesheet after importing this one.

## Adding a component

Write it. A component is a file in `src/components/` that wraps Radix or Base UI behaviour,
spells colour only through the tokens, keeps its own geometry, and is exported by name from
`src/index.ts`. [DESIGN.md](DESIGN.md) has the checklist and the reasoning behind each item; the
gates hold the parts of it that a review would otherwise have to catch by eye.

## The gates

The rules that keep the design system honest are published alongside it:
`import { ... } from "@robomous/ui-core/gates"` gives a consumer the same pure scan helpers and
foundation facts this repo's own gate tests run — canonical-plus-additive primitives, one status
palette with one home, no colour in a class string, brand as identity only. The governance, and
what each gate holds, is [DESIGN.md](DESIGN.md).
`import { ... } from "@robomous/ui-core/gates"` gives a consumer the same eight pure scan helpers
and token facts this repo's own gates run — no colour in a class string, one status palette with
one home, no rival colour family standing in for it, brand as identity only, and the token names
read off the shipped stylesheet so a consumer can prove none of its own extensions shadows one.
The rules themselves, and which gate holds each, are in [DESIGN.md](DESIGN.md).

## Release

Expand Down
13 changes: 0 additions & 13 deletions components.json

This file was deleted.

Loading