Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
324d0e8
A1: Require React 19
n4ff4h Nov 1, 2026
d05c72d
A2: Release every package at one version
n4ff4h Nov 1, 2026
85509ba
A3: Load the Thaana fonts without the optional font pack
n4ff4h Nov 1, 2026
c4de3d5
A4: Make react-hook-form and TanStack Query peers
n4ff4h Nov 1, 2026
f78af77
A5: Remove the unused base-ui Combobox primitive
n4ff4h Nov 1, 2026
ca42386
A6: Drop optional peers nothing imports
n4ff4h Nov 1, 2026
7b30030
B1: Stop the calendar's month arrows flipping twice in RTL
n4ff4h Nov 1, 2026
c105788
B2: Keep touch targets when a Button sets its own slot
n4ff4h Nov 1, 2026
c0b9a84
B3: Translate three hard-coded English strings
n4ff4h Nov 1, 2026
bf91ce2
B4: Give the toast close button a usable size, and test toasts
n4ff4h Nov 1, 2026
e7503ac
B5: Use the editor's thaana prop on the image alt text field
n4ff4h Nov 1, 2026
f96bcc7
B6: Use placeholders instead of gluing translated labels together
n4ff4h Nov 1, 2026
b03561d
B7: Stop the vertical carousel arrows mirroring in RTL
n4ff4h Nov 1, 2026
46ec8a5
B8: Give the kanban count screen reader text instead of an aria-label…
n4ff4h Nov 1, 2026
1a13337
B9: Don't read the clock or Math.random during the first render
n4ff4h Nov 1, 2026
f9ebac5
B10: Guard useLayoutEffect for server rendering
n4ff4h Nov 1, 2026
8302a59
B11: Use tokens for overlays and the app shell
n4ff4h Nov 1, 2026
178e966
B12: Type SegmentedControl's name prop
n4ff4h Nov 1, 2026
18ad3c8
B13: Take logical sides on Tip, PopoverPanel and ActionMenu
n4ff4h Nov 1, 2026
0213d57
C1: Share one useControllableState
n4ff4h Nov 1, 2026
a2d7f1e
C2: Use onValueChange for every callback that reports a value
n4ff4h Nov 1, 2026
2d504ab
C3: Use one severity scale, tone
n4ff4h Nov 1, 2026
d3399b3
C4: Use one size scale
n4ff4h Nov 1, 2026
56ae1f7
C5: Accept rest props, ref and classNames consistently
n4ff4h Nov 1, 2026
ebb8254
C6: Share one copy of each duplicated helper
n4ff4h Nov 1, 2026
4d2b26b
C7: Give every controlled prop an uncontrolled partner
n4ff4h Nov 1, 2026
b76ac6f
C8: Use label and minChars everywhere
n4ff4h Nov 1, 2026
9d44964
C9: Remove unused locale keys and announce filter and selection changes
n4ff4h Nov 1, 2026
361bddb
C10: Split the auth forms into one file per form
n4ff4h Nov 1, 2026
166879a
D1: Run a Chromium E2E smoke on pull requests
n4ff4h Nov 1, 2026
0368548
D2: Run the Figma plugin tests in CI
n4ff4h Nov 1, 2026
148a695
D3: Cover src/ui in the coverage run
n4ff4h Nov 1, 2026
9647285
D4: Stop the canvas and focus noise in unit tests
n4ff4h Nov 1, 2026
3b5afba
D5: Add keyboard tests for DateCalendar and tests for IconText
n4ff4h Nov 1, 2026
cc03f37
D6: Give lint suppressions a reason and extend the physical-utility rule
n4ff4h Nov 1, 2026
0f54e89
E1: Complete the installation page and give each entry one install list
n4ff4h Nov 1, 2026
754c7fe
E2: Fill the Props table gaps
n4ff4h Nov 1, 2026
5abe307
E3: Correct stale text across the docs
n4ff4h Nov 1, 2026
2f63f59
E4: Say what thin Accessibility sections render for assistive tech
n4ff4h Nov 1, 2026
5f2a4f1
Record the pinned pnpm in the lockfile
n4ff4h Nov 1, 2026
f3f853c
Update dependencies with known vulnerabilities
n4ff4h Nov 1, 2026
ac8de2f
Merge the CI lockfile and security updates into Part A
n4ff4h Nov 1, 2026
9c3a3ff
Merge the CI lockfile and security updates
n4ff4h Nov 1, 2026
ab0c1e6
Merge the CI lockfile and security updates
n4ff4h Nov 1, 2026
aba5b60
Merge the CI lockfile and security updates
n4ff4h Nov 1, 2026
561e134
Merge the CI lockfile and security updates
n4ff4h Nov 1, 2026
1895bd4
Remove the starter templates and their CI jobs
n4ff4h Nov 1, 2026
6c798f8
B5: Close the image dialog at the end of the thaana test
n4ff4h Nov 1, 2026
ff8af40
Merge the Part B test fix
n4ff4h Nov 1, 2026
983bfc4
Merge the Part B test fix
n4ff4h Nov 1, 2026
ccf655c
Merge the Part B test fix
n4ff4h Nov 1, 2026
83d20ae
Merge the Part B test fix
n4ff4h Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/class-names-and-rest-props.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

More components accept rest props and `ref` on their root and a `classNames` slot map, and `BackToTop`, `ConditionalLink` and `LinkButton` gain `asChild`.
4 changes: 2 additions & 2 deletions .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"fixed": [["@javaabu/onu", "@javaabu/onu-mcp"]],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["onu-web", "onu-template-laravel-inertia-react", "onu-template-nextjs"]
"ignore": ["onu-web"]
}
5 changes: 5 additions & 0 deletions .changeset/docs-pass.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

Docs: an installation page with requirements and per-entry peer dependencies, complete Props tables, and corrected stale text.
5 changes: 5 additions & 0 deletions .changeset/drop-unused-peers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

Removed four optional peers nothing imports: `@tiptap/extension-link`, `@tiptap/extension-drag-handle-react`, `@tiptap/extension-code-block-lowlight` and `lowlight`.
5 changes: 5 additions & 0 deletions .changeset/editor-dialog-thaana.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

The editors' image alt text field now follows the editor's `thaana` prop.
5 changes: 5 additions & 0 deletions .changeset/hard-coded-english.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

`DialogFooter`'s close button, the `useConfirm` `window.confirm` fallback and a `ValidationError` without a message no longer show hard-coded English.
5 changes: 5 additions & 0 deletions .changeset/labels-with-placeholders.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

The move, switch account and inline edit labels are now whole translated sentences with a placeholder, instead of two strings joined together.
5 changes: 5 additions & 0 deletions .changeset/locale-cleanup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

Remove unused locale keys, give Dhivehi separate words for clear and delete, and announce applied filters and cleared selections to screen readers.
5 changes: 5 additions & 0 deletions .changeset/logical-sides.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

`Tip`, `PopoverPanel` and `ActionMenu` take `side="top" | "bottom" | "start" | "end"`; `left` and `right` are gone.
5 changes: 5 additions & 0 deletions .changeset/navigation-menu-rtl-motion.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

`NavigationMenu` content slides in from the logical side, so its motion follows the reading direction in RTL.
5 changes: 5 additions & 0 deletions .changeset/on-value-change.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

Every component that reports a value now uses `onValueChange(value)`; `onChange` only ever means the native event. `FileInput` loses `onChange(files)` (use `onValueChange(entries)`), and `onReject` always takes an array.
5 changes: 5 additions & 0 deletions .changeset/overlay-token.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

New `--onu-overlay` token for the dim behind dialogs, sheets and drawers (`bg-overlay`). The app shell classes use the shell token utilities instead of hex fallbacks.
5 changes: 5 additions & 0 deletions .changeset/peer-form-and-query.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

`react-hook-form` and `@tanstack/react-query` are now peer dependencies. `getOnuQueryClient` is gone: the fallback client belongs to each `OnuProvider`, and `invalidateApiOptions` takes the client first.
5 changes: 5 additions & 0 deletions .changeset/primitive-a11y-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

Fix axe violations in three primitives: `Calendar` week numbers, the `role="list"` on `ItemGroup`, and `CommandSeparator` inside its listbox.
5 changes: 5 additions & 0 deletions .changeset/prop-names.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

The accessible name of a root region is `label` everywhere (`CommandPalette` and `OverlayMenu` `title`, `TopNav` `navLabel`, `Tabs` `listLabel`), and the minimum query length is `minChars` everywhere (`CommandPalette` `minQueryLength`, `PlaceSearchBox` `minLength`).
5 changes: 5 additions & 0 deletions .changeset/react-19-only.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

Onu now requires React 19; React 18 is no longer in the peer range.
5 changes: 5 additions & 0 deletions .changeset/remove-base-ui-combobox.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

Removed the unused `Combobox` primitive from `@javaabu/onu/primitives`, and with it the `@base-ui/react` dependency.
5 changes: 5 additions & 0 deletions .changeset/remove-templates-section.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

The Inertia and Next.js guide no longer links to starter templates, which are gone from the repository.
5 changes: 5 additions & 0 deletions .changeset/segmented-control-name.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

`SegmentedControl`'s `name` prop is now part of its type.
5 changes: 5 additions & 0 deletions .changeset/shared-helpers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

Shared helpers move to `src/lib` and `src/hooks` with one behaviour each: `toArray` and the `initials` media export are gone, `normalizeUrl` returns `string | null`, the editor's `Callout` node is now `CalloutNode`, `CommandPalette` debounces by 300 ms, and the auth forms use `PasswordInput`.
5 changes: 5 additions & 0 deletions .changeset/size-scale.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

`Tag`, `SkeletonText`, `Modal` and `UserAvatar` rename size `md` to `default`. `NumberInput` is now `h-8` like every other field, and `TextInput` gains the same `size` prop.
5 changes: 5 additions & 0 deletions .changeset/stable-first-render.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

`Countdown`, `RelativeDate`, `Timeline`, `PublishBox` and `SidebarMenuSkeleton` render the same markup on the server and the client's first render. `SidebarMenuSkeleton` takes an `index` to vary its width.
5 changes: 5 additions & 0 deletions .changeset/stable-labels.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

The vertical `Carousel` arrows point the right way in RTL, and `KanbanBoard`'s column count is real screen reader text instead of an `aria-label` on a `span`.
5 changes: 5 additions & 0 deletions .changeset/thaana-fonts-always.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

Faruma and MV Faseyha now load from `tailwind.css` and `styles.css`, so Thaana text works without the optional font pack.
5 changes: 5 additions & 0 deletions .changeset/toast-close-size.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": patch
---

The toast close button is now 24 px, and 44 px on touch screens.
5 changes: 5 additions & 0 deletions .changeset/tone-scale.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

One severity scale, `tone`: `neutral`, `info`, `success`, `warning`, `danger`. `Callout`, `AnnouncementBar` and `NotificationCenter` items rename `variant` to `tone`, `destructive` and `error` become `danger`, and `default` becomes `neutral` (also on `IconText`). `AnnouncementBar` gains `success` and `danger`. `Button` keeps `variant="destructive"`.
5 changes: 5 additions & 0 deletions .changeset/uncontrolled-partners.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@javaabu/onu": minor
---

`LanguageSwitcher` and `RepeatingGroup` gain `defaultValue`, `Callout`, `FilterPanel` and `Lightbox` gain `defaultOpen`, and `Lightbox` `open` and `onOpenChange` become optional with `index` controlled only when it is passed.
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ jobs:
fail_ci_if_error: false
- name: MCP server tests
run: pnpm --filter @javaabu/onu-mcp test
- name: Figma plugin tests
run: pnpm figma:test
- name: Build packages
run: pnpm build
- name: Size budgets
Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/e2e-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: E2E smoke

# The quick E2E tier: on a pull request that touches the library, the web app or the E2E
# tests, run the accessibility scans and the Thaana keyboard check in Chromium. No visual
# diff and no baseline download: the full five-browser and visual run stays in e2e.yml.
on:
pull_request:
paths:
- "packages/onu/**"
- "web/**"
- "e2e/**"

concurrency:
group: e2e-smoke-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
smoke:
name: Playwright smoke (chromium)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm exec playwright install --with-deps chromium
- run: pnpm build:web
- run: pnpm e2e:chromium e2e/a11y.spec.ts e2e/thaana.spec.ts
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report-smoke
path: playwright-report
retention-days: 7
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
exit 1
fi
done
node scripts/sync-plugin-version.mjs --check
- name: Check the npm token
run: |
if [ -z "$NPM_TOKEN" ]; then
Expand Down
100 changes: 0 additions & 100 deletions .github/workflows/templates.yml

This file was deleted.

8 changes: 0 additions & 8 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,4 @@ packages/onu/src/styles/tokens.css
REQUIREMENTS.md
docs
.claude
.next
next-env.d.ts
templates/laravel-inertia-react/vendor
templates/laravel-inertia-react/public
templates/laravel-inertia-react/storage
templates/laravel-inertia-react/bootstrap/cache
templates/laravel-inertia-react/composer.json
templates/laravel-inertia-react/composer.lock
figma/plugin/code.js
20 changes: 10 additions & 10 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ Onu (`@javaabu/onu`) is Javaabu's React UI library: shadcn/ui (Radix base) and T

## Layout

| Path | What |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `packages/onu` | The library. `src/components/<group>/<name>.tsx` + `.test.tsx`; heavy entries in `src/{charts,maps,editor,calendar,media}` |
| `packages/onu/src/ui` | shadcn/ui primitives, now Onu-owned code: edit in place, mark upstream changes with `// onu:` |
| `packages/onu-mcp` | MCP server that serves the docs to AI assistants |
| `web` | Docs and demo site: `src/showcase/<group>/<name>.demo.tsx`, `src/pages/<group>/<name>.page.tsx` |
| `docs` | Markdown docs, one page per component (`docs/<group>/<name>.md`) |
| `scripts/llms.mjs` | Builds `llms.txt`, `llms-full.txt` and `docs/*.md` for AI assistants from `docs/` |
| `templates`, `e2e`, `figma` | App templates, Playwright tests, Figma plugin |
| Path | What |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `packages/onu` | The library. `src/components/<group>/<name>.tsx` + `.test.tsx`; heavy entries in `src/{charts,maps,editor,calendar,media}` |
| `packages/onu/src/ui` | shadcn/ui primitives, now Onu-owned code: edit in place, mark upstream changes with `// onu:` |
| `packages/onu-mcp` | MCP server that serves the docs to AI assistants |
| `web` | Docs and demo site: `src/showcase/<group>/<name>.demo.tsx`, `src/pages/<group>/<name>.page.tsx` |
| `docs` | Markdown docs, one page per component (`docs/<group>/<name>.md`) |
| `scripts/llms.mjs` | Builds `llms.txt`, `llms-full.txt` and `docs/*.md` for AI assistants from `docs/` |
| `e2e`, `figma` | Playwright tests, Figma plugin |

## Commands

Expand All @@ -33,7 +33,7 @@ pnpm e2e:chromium # Playwright (a11y with axe, visual)

## Rules

- A component is done only with: light/dark, LTR/RTL, `dv` strings, `thaana` on free-text fields, tokens-only colours, `className`/`classNames`/`asChild`, axe-clean, unit tests, a demo, a docs page and a changeset (`.changeset/*.md`).
- A component is done only with: light/dark, LTR/RTL, `dv` strings, `thaana` on free-text fields, tokens-only colours, `className`/`classNames`, `asChild` where the component renders one element an app may need to replace (links, buttons, triggers), axe-clean, unit tests, a demo, a docs page and a changeset (`.changeset/*.md`).
- Logical Tailwind utilities only (`ms-`, `pe-`, `start-`, `text-start`); ESLint rejects `left`/`right` ones. Theme tokens only, never raw colours.
- Icons through `<Icon name="…">` with semantic names; never render Lucide components or import `src/icons/lucide-map` in a component.
- No hard-coded English: strings live in `src/locales/{en,dv}/<namespace>.ts`, and a module registers the English namespaces it uses with `registerEnglish(...)`.
Expand Down
Loading
Loading