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
9 changes: 5 additions & 4 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ tone_instructions: >-
a public contract.

reviews:
# Assertive = wide net. Humans and Claude filter the output; CodeRabbit
# is the layer that must not stay quiet.
# Keep detailed reviews while suppressing routine PR commentary.
profile: assertive
# Formally request changes on findings; auto-approve once all CodeRabbit
# comments are resolved and checks pass. Merging still requires a human.
request_changes_workflow: true
high_level_summary: true
review_status: true
high_level_summary: false
review_status: false
in_progress_fortune: false
poem: false

# Review only owned sources. Build output, vendored trees, and
# byte-identical conformance copies are noise; their origins (scss/,
Expand Down
12 changes: 6 additions & 6 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
interval: "monthly"
open-pull-requests-limit: 1
groups:
npm-dependencies:
patterns:
Expand All @@ -17,8 +17,8 @@ updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
interval: "monthly"
open-pull-requests-limit: 1
groups:
pip-dependencies:
patterns:
Expand All @@ -27,8 +27,8 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
interval: "monthly"
open-pull-requests-limit: 1
groups:
github-actions:
patterns:
Expand Down
2 changes: 1 addition & 1 deletion ASSET_LICENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ product, site, template, library, training dataset, or marketing asset without
prior written permission from WPMoo.

Third-party assets remain under their own licenses. See the
[version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.0.0/THIRD_PARTY_NOTICES.md).
[version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.1.0/THIRD_PARTY_NOTICES.md).
Those notices are repository-only and are intentionally not shipped in the npm
package.
10 changes: 4 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,9 @@ calm.

## Status And Support

The current development snapshot is `1.1.0-dev.1`. It adds a shared Table of
Contents component and is not published to npm; use the locally packed tarball
when evaluating this snapshot.

The stable public-contract release is `1.0.0`. Component certification remains
The stable public-contract release is `1.1.0`. It adds a shared Table of
Contents component, description-only Alerts and compatible navigation fixes
while preserving the 1.0.0 package contract. Component certification remains
`preview`, with its documented manual and browser/device limits. Public exports, package boundaries, browser support, and release evidence live in [Support & Evidence](https://ui.wpmoo.org/support/).
Complete release notes are on
[GitHub Releases](https://github.com/wpmoo-org/ui/releases).
Expand All @@ -224,4 +222,4 @@ The published `LICENSE` also retains the full MIT notices for bundled
Chart.js and `@kurkle/color`.
Asset terms live in [ASSET_LICENSE.md](ASSET_LICENSE.md); dependency notices
live in the
[version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.0.0/THIRD_PARTY_NOTICES.md).
[version-pinned third-party notices](https://github.com/wpmoo-org/ui/blob/v1.1.0/THIRD_PARTY_NOTICES.md).
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ DataTable, Date Picker, Slider, and Sidebar.

## Supported Versions

Security review covers the current `1.0.0` stable line. Older
Security review covers the current `1.1.0` stable line. Older
tags remain available for source inspection, but fixes are prepared against the
current development branch.

Expand Down
11 changes: 7 additions & 4 deletions SUPPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ Moo UI Core is an open-source Bootstrap component system. This document defines
the public support boundary for the Core package. It does not cover separate
platform integrations or commercial products.

Moo UI `1.0.0` freezes the documented public package contract. Package stability
Moo UI `1.1.0` extends the frozen `1.0.0` public package contract with the
shared Table of Contents component and compatible additions. Package stability
and component certification are independent: the certification manifest remains
`preview`. Production certification is introduced incrementally; a component's
presence in the catalog does not by itself mean that it has completed
Expand Down Expand Up @@ -193,10 +194,12 @@ conformance pass for that host. The runner needs Python 3 and Playwright
only; no Moo UI build tooling is involved.

The archive is reproducible byte-for-byte from the repository source at any
time. The current Moo UI 1.1.0-dev.1 source carries kit contract version 1.0;
its development archive hashes to SHA-256
time. The current Moo UI 1.1.0 source carries kit contract version 1.0;
its archive hashes to SHA-256
`e4ab6c256ce4e2e1a3a82a42fdfbbf90f5c5871c14d4853fce928546a8cafbac`.
The 1.1.0-dev.1 source archive hashes to SHA-256
`ec92be81e205dd9602213a4a4fbabb91075b87ef227f4ac0ca5e189b92a8a3ba`.
This development archive is not a published release artifact. The Moo UI 1.0.0
The Moo UI 1.0.0
archive also carries contract version 1.0 and hashes to SHA-256
`3bda0e10fe23e6f157f5e7bd3c09af0efd05c5827fe65615ef2017b7da6929f1`.
Published artifacts are listed on the GitHub Releases page:
Expand Down
23 changes: 19 additions & 4 deletions build.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"combobox.js",
"context-menu.js",
"slider.js",
"toc.js",
"table-of-contents.js",
)
BUNDLED_JS_MODULES = (
Expand Down Expand Up @@ -860,15 +861,22 @@ def catalog_toc_items(value: object) -> list[dict[str, str]]:
return items


PUBLIC_PAGE_ROUTES = {"components/table-of-contents.html": "components/toc.html"}
PUBLIC_PRETTY_ROUTES = {
source.removesuffix(".html") + "/": target.removesuffix(".html") + "/"
for source, target in PUBLIC_PAGE_ROUTES.items()
}


def pretty_url(path: object) -> str:
value = str(path).strip()
if value in {"", "index.html", "./"}:
return "./"
if value.endswith("/index.html"):
return value[: -len("index.html")]
if value.endswith(".html"):
return value[: -len(".html")] + "/"
return value
value = value[: -len("index.html")]
elif value.endswith(".html"):
value = value[: -len(".html")] + "/"
return PUBLIC_PRETTY_ROUTES.get(value, value)


def site_href(path: object, root_path: str = "") -> str:
Expand All @@ -886,6 +894,7 @@ def canonical_url(path: object) -> str:


def pretty_output_path(path: Path) -> Path:
path = Path(PUBLIC_PAGE_ROUTES.get(path.as_posix(), path.as_posix()))
if path.name == "index.html" or path.suffix != ".html":
return path
return path.with_suffix("") / "index.html"
Expand Down Expand Up @@ -2661,6 +2670,12 @@ def render_pages(
asset_version=version,
)
output_file.write_text(rendered, encoding="utf-8")
if logical_relative.as_posix() in PUBLIC_PAGE_ROUTES:
# Preserve native fragments on old bookmarks; its canonical link
# and every catalog navigation link use the preferred route.
legacy_file = SITE_DIST / logical_relative.with_suffix("") / "index.html"
legacy_file.parent.mkdir(parents=True, exist_ok=True)
legacy_file.write_text(rendered, encoding="utf-8")


@contextlib.contextmanager
Expand Down
3 changes: 2 additions & 1 deletion certification.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"schemaVersion": "0.1",
"status": "preview",
"coreVersion": "1.1.0-dev.1",
"coreVersion": "1.1.0",
"bootstrap": {
"canonicalVersion": "5.3.3",
"targetRange": ">=5.3.0 <5.4",
Expand All @@ -28,6 +28,7 @@
"./context-menu.js",
"./datatable.js",
"./slider.js",
"./toc.js",
"./table-of-contents.js",
"./sheet.js",
"./chart.js",
Expand Down
2 changes: 1 addition & 1 deletion conformance/fixtures/assets/moo.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Moo UI v1.1.0-dev.1 (https://wpmoo.org/)
* Moo UI v1.1.0 (https://wpmoo.org/)
* Copyright 2026 WPMoo Authors
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
*
Expand Down
2 changes: 1 addition & 1 deletion conformance/fixtures/assets/sidebar.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Moo UI sidebar.js v1.1.0-dev.1 (https://wpmoo.org/)
* Moo UI sidebar.js v1.1.0 (https://wpmoo.org/)
* Copyright 2026 WPMoo Authors
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
*/
Expand Down
2 changes: 1 addition & 1 deletion conformance/fixtures/assets/state.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Moo UI state.js v1.1.0-dev.1 (https://wpmoo.org/)
* Moo UI state.js v1.1.0 (https://wpmoo.org/)
* Copyright 2026 WPMoo Authors
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
*/
Expand Down
10 changes: 5 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wpmoo/ui",
"version": "1.1.0-dev.1",
"version": "1.1.0",
"description": "Bootstrap markup. shadcn feel. A frontend-framework-free component system for server-rendered apps.",
"license": "MIT",
"author": "WPMoo (https://wpmoo.org)",
Expand Down Expand Up @@ -38,6 +38,7 @@
"./context-menu.js": "./dist/js/context-menu.js",
"./datatable.js": "./dist/js/datatable.js",
"./slider.js": "./dist/js/slider.js",
"./toc.js": "./dist/js/toc.js",
"./table-of-contents.js": "./dist/js/table-of-contents.js",
"./sheet.js": "./dist/js/sheet.js",
"./chart.js": "./dist/js/chart.js",
Expand Down Expand Up @@ -66,6 +67,7 @@
"dist/js/context-menu.js",
"dist/js/datatable.js",
"dist/js/slider.js",
"dist/js/toc.js",
"dist/js/table-of-contents.js",
"dist/js/sheet.js",
"dist/js/chart.js",
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Jinja2==3.1.6
libsass==0.23.0
tinycss2==1.5.1
coverage==7.16.1
coverage==7.16.2
playwright==1.63.0
jsonschema==4.26.0
1 change: 1 addition & 0 deletions scripts/record-boundary-baseline.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"dist/js/sidebar.js",
"dist/js/slider.js",
"dist/js/sheet.js",
"dist/js/toc.js",
"dist/js/table-of-contents.js",
"dist/js/moo-ui.js",
"dist/js/moo-ui.min.js",
Expand Down
1 change: 1 addition & 0 deletions scripts/verify_package_contents.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"dist/js/context-menu.js",
"dist/js/datatable.js",
"dist/js/slider.js",
"dist/js/toc.js",
"dist/js/table-of-contents.js",
"dist/js/sheet.js",
"dist/js/moo-ui.js",
Expand Down
2 changes: 1 addition & 1 deletion scss/mixins/_banner.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Moo UI v1.1.0-dev.1 (https://wpmoo.org/)
* Moo UI v1.1.0 (https://wpmoo.org/)
* Copyright 2026 WPMoo Authors
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
*
Expand Down
20 changes: 8 additions & 12 deletions site/public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> Bootstrap markup. shadcn feel.

Moo UI 1.0.0 is the stable public-contract release of a Bootstrap 5.3-native component system with a restrained,
Moo UI 1.1.0 is the stable public-contract release of a Bootstrap 5.3-native component system with a restrained,
shadcn-inspired visual language for server-rendered and Bootstrap-native apps.
It is CSS-first, not JavaScript-free: Bootstrap owns native plugin behavior,
while Moo UI adds optional, explicit ESM only for documented gaps.
Expand All @@ -14,8 +14,7 @@ implementation.

## Version And Support

- stable package: `@wpmoo/ui@1.0.0`
- Unpublished development snapshot: `@wpmoo/ui@1.1.0-dev.1` (local tarball only)
- stable package: `@wpmoo/ui@1.1.0`
- Bootstrap peer range: `>=5.3.0 <5.4`
- Tested Bootstrap versions in the manifest: `5.3.0`, `5.3.3`, `5.3.8`
- License: MIT for source code
Expand All @@ -38,6 +37,7 @@ not independent or accredited certification.
- `@wpmoo/ui/context-menu.js`: optional Context Menu ESM lifecycle
- `@wpmoo/ui/datatable.js`: optional DataTable ESM lifecycle
- `@wpmoo/ui/sidebar.js`: optional Sidebar ESM lifecycle
- `@wpmoo/ui/toc.js`: optional TableOfContents lifecycle and current-section tracking (`table-of-contents.js` remains a compatibility entrypoint)
- `@wpmoo/ui/chart.js`: optional Chart ESM lifecycle (Chart.js 4.5.1 bundled)
- `@wpmoo/ui/chart.min.js`: minified Chart bundle (artifact variant of chart.js)
- `@wpmoo/ui/datepicker.js`: optional Datepicker ESM lifecycle (self-contained, no third-party runtime)
Expand All @@ -54,17 +54,13 @@ not independent or accredited certification.
- `@wpmoo/ui/certification.json`: versioned support and evidence manifest
- `@wpmoo/ui/package.json`: package metadata

The development snapshot additionally exports `@wpmoo/ui/table-of-contents.js`
for explicit TableOfContents lifecycle and includes it in the aggregate ESM.
This additive module is not available from the stable 1.0.0 CDN links below.

The npm package does not publish catalog templates, preview artwork, catalog
JavaScript, or site assets. It ships Sass source files for the documented Sass
entrypoints; undocumented internal partial paths are not separate public APIs.

## Installation Facts

- Stable version-pinned CDN full stylesheet: `https://unpkg.com/@wpmoo/ui@1.0.0/dist/assets/css/moo-ui.css`
- Stable version-pinned CDN full stylesheet: `https://unpkg.com/@wpmoo/ui@1.1.0/dist/assets/css/moo-ui.css`

Full replacement:

Expand Down Expand Up @@ -115,7 +111,7 @@ explicitly. Importing `combobox.js`, `context-menu.js`, `datatable.js`,
runtime
- Sheet server-open marker: explicit `initSheets(root)` after Bootstrap Offcanvas
is available on the document's window
- Table of Contents (development snapshot): native fragment links and a
- Table of Contents: native fragment links and a
Bootstrap dropdown, with optional Moo UI ESM for current-section tracking
and explicit `refresh()` / `dispose()` lifecycle

Expand Down Expand Up @@ -173,7 +169,7 @@ explicitly. Importing `combobox.js`, `context-menu.js`, `datatable.js`,
- [Spinner](https://ui.wpmoo.org/components/spinner/)
- [Switch](https://ui.wpmoo.org/components/switch/)
- [Table](https://ui.wpmoo.org/components/table/)
- [Table of Contents](https://ui.wpmoo.org/components/table-of-contents/)
- [Table of Contents](https://ui.wpmoo.org/components/toc/)
- [Tabs](https://ui.wpmoo.org/components/tabs/)
- [Textarea](https://ui.wpmoo.org/components/textarea/)
- [Toast](https://ui.wpmoo.org/components/toast/)
Expand All @@ -192,8 +188,8 @@ explicitly. Importing `combobox.js`, `context-menu.js`, `datatable.js`,

- Preserve Bootstrap behavior before adding custom behavior.
- Use Moo UI ESM only for Combobox, Context Menu, DataTable, Sidebar, Chart,
Datepicker, Slider, Sheet initialization, Table of Contents in the development
snapshot, or the documented aggregate `moo-ui.js` entrypoint.
Datepicker, Slider, Sheet initialization, Table of Contents, or the documented
aggregate `moo-ui.js` entrypoint.
- Do not invent public Sass APIs, undocumented JavaScript entrypoints, or
certification claims.
- Treat shadcn/ui as visual direction only; examples and implementation should
Expand Down
2 changes: 1 addition & 1 deletion site/src/js/catalog/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ export function initCatalog(root = document) {
disposers,
root,
FEATURE_SELECTORS.tableOfContents,
() => import("../../../../src/js/components/table-of-contents.js"),
() => import("../../../../src/js/components/toc.js"),
({ default: TableOfContents }) => {
const instances = Array.from(root.querySelectorAll("[data-toc]"))
.map((element) => TableOfContents.getOrCreateInstance(element));
Expand Down
1 change: 1 addition & 0 deletions site/src/js/catalog/toc.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export function initToc(root = document) {
const targets = [
...root.querySelectorAll(".moo-doc-toc [data-toc] .nav-link"),
...root.querySelectorAll('#catalog-toc-compact a[href^="#"]'),
...root.querySelectorAll('#toc-demo-page [data-toc] a[href^="#"]'),
]
.map((link) => {
const hash = link.getAttribute("href");
Expand Down
Loading
Loading