Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
3da8f19
Add design spec for the docs UI restyle
glebfox Oct 2, 2026
e266970
Apply review findings to the UI restyle spec
glebfox Oct 2, 2026
b62d490
Add implementation plan for the docs UI restyle
glebfox Oct 2, 2026
5d1453a
Pin the Antora UI bundle
glebfox Oct 2, 2026
3827a16
Apply review findings to the UI restyle plan
glebfox Oct 2, 2026
350244e
Add CSS check and UI audit tools
glebfox Oct 2, 2026
cfeb0c9
Vendor the default UI stylesheet with its custom properties
glebfox Oct 2, 2026
5e586df
Self-host Roboto and JetBrains Mono
glebfox Oct 2, 2026
b1c2600
Turn off code ligatures in the UI restyle plan
glebfox Oct 2, 2026
1f5e555
Move the UI colors to design tokens
glebfox Oct 2, 2026
bc03f8d
Keep the event banner styles above the navbar rules
glebfox Oct 2, 2026
6680729
Add Task 5 review follow-ups to the UI restyle plan
glebfox Oct 2, 2026
ade0aad
Restyle the header and the search field
glebfox Oct 2, 2026
948f116
Move the mask icons to tokens in the UI restyle plan
glebfox Oct 2, 2026
a0a12cd
Draw the mask icons from tokens
glebfox Oct 2, 2026
7a7b3b7
Record Task 6 review follow-ups in the UI restyle plan and spec
glebfox Oct 2, 2026
9f490a4
Add focus styles, skip link and keyboard access
glebfox Oct 3, 2026
15f1649
Fold the toolbar and nav accessibility gaps into Task 8 of the UI res…
glebfox Oct 3, 2026
0aa9ddc
Record Task 7 review follow-ups in the UI restyle plan
glebfox Oct 3, 2026
6807d4d
Keep the pagination cards free of the text link underline in the UI r…
glebfox Oct 3, 2026
f816b5b
Restyle the navigation, toolbar and table of contents
glebfox Oct 3, 2026
acc3d07
Record the Task 8 review fixes in the UI restyle plan and spec
glebfox Oct 3, 2026
c969f95
Fix expand all visibility, the nav gutter and the current page states
glebfox Oct 3, 2026
0773e7c
Restyle article typography, code blocks and admonitions
glebfox Oct 3, 2026
ecf015a
Keep code clear of the toolbox in the UI restyle spec
glebfox Oct 3, 2026
2ccd4dc
Size plain code blocks at 14px and drop a dead rule
glebfox Oct 3, 2026
323ffdf
Clear the code toolbox with a script in the UI restyle spec
glebfox Oct 3, 2026
dd3be69
Keep code lines clear of the toolbox
glebfox Oct 3, 2026
bcb1a35
Correct where the toolbox script loads in the UI restyle spec
glebfox Oct 3, 2026
056df36
Space the first section after the embedded TOC in the UI restyle spec
glebfox Oct 3, 2026
cc18ab5
Space the first section after the embedded TOC and harden the toolbox…
glebfox Oct 3, 2026
73487df
Limit the TOC section spacing to small screens
glebfox Oct 3, 2026
7a02625
Guard the desktop section spacing in Task 10 of the UI restyle plan
glebfox Oct 3, 2026
2fe3142
Restyle tables, blocks, pagination, feedback form and footer
glebfox Oct 3, 2026
ed12d63
Leave the footer print styles to upstream
glebfox Oct 3, 2026
43da855
Keep analytics out of the Task 11 screenshots in the UI restyle plan
glebfox Oct 3, 2026
6857644
Add the MPL header to the remaining upstream partials
glebfox Oct 3, 2026
633627d
Keep the Since badge at 0.75rem inside admonitions
glebfox Oct 3, 2026
7ef4539
Document the UI stylesheets and check them in CI
glebfox Oct 3, 2026
34a8134
Keep the author's case for code language labels in the UI restyle spec
glebfox Oct 3, 2026
b0b3b24
Correct the UI notes and scope the UI check workflow
glebfox Oct 3, 2026
bb701d9
Cover narrow-screen toggles and the full Tab walk in the UI restyle spec
glebfox Oct 3, 2026
45d6d00
Show the narrow-screen toggles in forced colors and walk every Tab stop
glebfox Oct 3, 2026
aa5866f
Fix fail-open checks in the UI tools
glebfox Oct 3, 2026
4a62d7c
Tidy the UI stylesheet comments, docs and duplicate rules
glebfox Oct 3, 2026
71c3870
Draw the AI Assistant link like the other header icons
glebfox Oct 3, 2026
3813ceb
Remove the UI restyle spec and plan
glebfox Oct 3, 2026
2c00083
Note the license of the UI bundle in ui/README.md
glebfox Oct 3, 2026
f868df7
Add design spec for the docs dark theme
glebfox Oct 3, 2026
2bee60f
Apply review findings to the dark theme spec
glebfox Oct 3, 2026
15226dc
Add implementation plan for the dark theme
glebfox Oct 3, 2026
08f8809
Apply review findings to the dark theme plan
glebfox Oct 3, 2026
c16059e
Let the UI audit mask elements in snapshots
glebfox Oct 3, 2026
2e0e7dd
Set the color theme before the stylesheets load
glebfox Oct 3, 2026
c1548e4
Check that the dark theme sets every semantic token
glebfox Oct 3, 2026
9e05552
Add the dark theme tokens
glebfox Oct 3, 2026
5ce956b
Add the color theme menu to the header
glebfox Oct 3, 2026
01bacc1
Make the theme menu audit exercise the capture-phase click
glebfox Oct 3, 2026
d6ba682
Draw the feedback icon from tokens and theme the feedback input
glebfox Oct 3, 2026
6561010
Put a light plate behind line diagrams drawn on transparency
glebfox Oct 3, 2026
e40a8d4
Document the dark theme and the theme menu
glebfox Oct 3, 2026
7b935af
Describe the dark block and its check precisely
glebfox Oct 3, 2026
eae0775
Close the theme menu on Tab and Shift+Tab
glebfox Oct 3, 2026
a770fc4
Keep focus in the theme menu when its padding is clicked
glebfox Oct 3, 2026
1a2a02e
Ignore Alt, Ctrl and Meta shortcuts in the theme menu
glebfox Oct 3, 2026
0e44111
Highlight the focused theme menu item only for keyboard focus
glebfox Oct 3, 2026
37e7a03
Reword the comments of the theme menu fixes
glebfox Oct 3, 2026
a0cedee
Tell authors to check new pages in both themes
glebfox Oct 3, 2026
aa887fb
Describe the theme storage, the contrast rule and the dark check prec…
glebfox Oct 3, 2026
14cf748
Remove the dark theme spec and plan
glebfox Oct 3, 2026
7e770f7
Raise the contrast of the feedback form placeholders
glebfox Oct 3, 2026
8567cab
Use Lucide's sun-moon icon for the System theme
glebfox Oct 3, 2026
5176076
Restyle the event banner as a tinted pill with a brand dot
glebfox Oct 5, 2026
70987ea
Say the UI is based on the Antora default UI in the footer
glebfox Oct 5, 2026
3219091
Hide the event banner below 1300px
glebfox Oct 5, 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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@
*.svg binary
*.webp binary
*.pdf binary
*.zip binary
*.woff2 binary
30 changes: 30 additions & 0 deletions .github/workflows/ui-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: UI check

on:
pull_request:
paths:
- 'content/supplemental/**'
- 'tools/check-css.mjs'
- 'tools/check-css.test.mjs'
- '.github/workflows/ui-check.yml'

permissions:
contents: read

jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: '24'

- name: Test the stylesheet check
run: node --test tools/check-css.test.mjs

- name: Check the stylesheets
run: node tools/check-css.mjs
16 changes: 16 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,22 @@ See `CONTRIBUTING.md` for the full table. Bypass (rarely) with `git commit --no-

Screenshots are captured at **2x** and declared at half their pixel width (`image::foo.png[width="413"]` for an 826px-wide file), so they stay sharp on high-DPI displays. `tools/screenshot-2x.mjs` does this: it drives Playwright directly with `deviceScaleFactor: 2` and captures a single element, which the Playwright MCP tool cannot do — its resize action takes a width and a height only, so every capture it makes is 1x. Run it with `--url`, `--selector` and `--out`; it prints the resulting pixel size and the width to declare. See the comment at the top of the file for the rest of its options.

A diagram drawn with dark lines on a transparent background disappears in the dark theme. Give its image macro `role=light-background`, as in `image::transactions/transactions-1.png[,500,role=light-background]`, which puts a white plate behind it. Screenshots have their own background and need no role.

## UI: styles, tokens and the pinned bundle

The site uses the Antora default UI bundle pinned in `ui/ui-bundle.zip`. `ui/README.md` says which revision it is and how to update it. The styles are ours and live in `content/supplemental/css/`:

- `tokens.css` holds the design tokens in three tiers: palette, semantic roles, components. The dark theme is the `:root[data-theme="dark"]` block at the end of the file, inside `@media screen` so print stays light. It sets the tier 2 colors and shadow, and the tier 3 colors that must differ in the dark theme (header logo, code, admonitions). No other stylesheet has a rule under `data-theme="dark"`. The only custom properties declared elsewhere are the `--adm-*` aliases in the Admonitions section of `site.css`.
- `site.css` replaces the bundle stylesheet. Part 1 is the upstream `src/css` of the bundle's revision; change it only to port upstream changes, and override it in part 2 otherwise. Part 2 holds the Jmix styles, one section per component. A section that needs forced colors rules keeps them in its own `@media (forced-colors: active)` block.
- `search.css`, `dropdown-menu.css` and `feedback-form.css` style the search, the two header menus (version and color theme) and the feedback form.
- `content/supplemental/js/` holds the scripts that add to the bundle's `site.js`: `a11y.js` (ARIA state, copy button names, the skip link and keyboard access to search results), `code-toolbox.js` (starts a code block below the copy toolbox when the toolbox would cover its first line), `dropdown-menu.js` (the version menu), `theme-menu.js` (the color theme menu) and `feedback-form.js`.
- The color theme is the `data-theme` attribute (`light` or `dark`) on `<html>`, and `data-theme-preference` holds the reader's choice (`system`, `light` or `dark`). Only `light` and `dark` are saved, in `localStorage` under `jmix-docs-theme`; choosing System removes the key. An inline script at the start of `content/supplemental/partials/head-styles.hbs` sets both attributes and adds a `color-scheme` meta element before the stylesheets load, so the page never shows the wrong theme; keep it before the stylesheet links. `theme-menu.js` changes them later. The DocsBot chat widget that Google Tag Manager adds draws itself for a light page, so `site.css` keeps its host, `#docsbotai-root`, at `color-scheme: light`.

Outside `tokens.css`, write colors as `var(--…)`. Keywords such as `transparent`, `currentColor` and `inherit`, `color-mix()` over keywords and tokens, and the CSS system colors in forced colors blocks are the only exceptions. `node tools/check-css.mjs` rejects other color literals and reports custom properties that are used but never declared. It also makes sure the dark block sets every `--color-*` and `--shadow-*` token of the light block, and only tokens that the light block declares. CI runs it, with its tests (`node --test tools/check-css.test.mjs`), on pull requests that change `content/supplemental/` or the check.

After a UI change, build the site and run `node tools/ui-audit.mjs`. It checks keyboard focus, contrast and the expected styles in both themes, the skip link, accessible names, keyboard access to search results, fonts, forced colors mode, and the color theme: that it is set before the first stylesheet, and how the theme menu behaves. It needs Playwright with Chromium, which is not a dependency of this repository. Run `npx playwright@latest install chromium` once. The built pages load the production analytics container, so check them only through the audit or a Playwright script that blocks external hosts. Do not open them in a browser pane or capture them with `tools/screenshot-2x.mjs`, because neither blocks the container.

## Conventions

- In multi-locale examples use German (`de`) as the secondary locale.
Expand Down
8 changes: 8 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,14 @@ pngquant --quality=65-85 --strip --force --ext .png path/to/screenshot.png

Typical reduction for UI screenshots: 70-80% size, no visible quality loss.

### Images in the dark theme

Screenshots keep their own light background in the dark theme, but a diagram drawn with dark lines on a transparent background disappears. Add `role=light-background` to the image macro of such a diagram, for example `image::transactions/transactions-1.png[,500,role=light-background]`, or export it with a white background. Check new pages in both themes by choosing Light and Dark in the theme menu in the header.

## Changing the UI

UI styles live in `content/supplemental/css/`. Use the custom properties from `tokens.css` for colors; `node tools/check-css.mjs` rejects color literals in the other files. A new `--color-*` or `--shadow-*` token needs a value in the dark block of `tokens.css` too; the check reports it when it is missing. Build the site and run `node tools/ui-audit.mjs` before you open a pull request; it needs Playwright with Chromium (`npx playwright@latest install chromium`). The default UI bundle is pinned; see `ui/README.md` before you replace it.

## Repository history

This repository was created in May 2026 with a fresh history; previous history (including pre-cleanup image revisions) is preserved in the archived repo at [TBD: link to old repo]. Refer there for `git blame` and commit history older than the initial commit.
3 changes: 1 addition & 2 deletions antora-playbook.ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ content:
start_path: doc
ui:
bundle:
url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
snapshot: true
url: ./ui/ui-bundle.zip
supplemental_files: ./content/supplemental
asciidoc:
extensions:
Expand Down
3 changes: 1 addition & 2 deletions antora-playbook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ content:
start_path: doc
ui:
bundle:
url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
snapshot: true
url: ./ui/ui-bundle.zip
supplemental_files: ./content/supplemental
asciidoc:
extensions:
Expand Down
2 changes: 1 addition & 1 deletion content/modules/bpm/pages/bpmn/bpmn-events.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ image::bpmn-events/end-event-not-mandatory.png[,250]

Don’t try to bring all flows to the single end event – it only makes your diagram messy.

image::bpmn-events/end-events-examples.png[,500]
image::bpmn-events/end-events-examples.png[,500,role=light-background]

Multiple end events allow to analyze how processes ended.

Expand Down
2 changes: 1 addition & 1 deletion content/modules/bpm/pages/bpmn/bpmn-service-task.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ If more than one service tasks within a process refer to the same Java Delegate
for each will be created a separate instance.
All process instances share the corresponding class instance for the task.

image::bpmn-service-task/java-delegate-instantiating.png[,600]
image::bpmn-service-task/java-delegate-instantiating.png[,600,role=light-background]

This means that the class must not use any member variables and must be thread-safe, as it can be executed simultaneously from different threads.
This also may affect xref:field-injections[Fields injection].
Expand Down
4 changes: 2 additions & 2 deletions content/modules/bpm/pages/bpmn/transactions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ the engine performs a depth-first search through the process graph
and will return once it has reached <<waiting-states,waiting states>> on every branch of execution.
This is illustrated in the following picture:

image::transactions/transactions-1.png[,500]
image::transactions/transactions-1.png[,500,role=light-background]

We see a segment of a BPMN process with a user task, a service task and a timer event.
Completing the user task and validating the address is part of the same unit of work,
Expand Down Expand Up @@ -52,7 +52,7 @@ in order to be able to scope logical units of work.
This is where *asynchronous continuations* come into play.
Consider the following process (fragment):

image::bpm:/transactions/transactions-2.png[,800]
image::bpm:/transactions/transactions-2.png[,800,role=light-background]

In the next case, we are completing the user task, generating an invoice and then sending that invoice to the customer.
This time the generation of the invoice is not part of the same unit of work,
Expand Down
2 changes: 1 addition & 1 deletion content/modules/bpm/pages/dmn-1-3.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ image::dmn/add-input.png[,900]

A business rule is one or more logical conditions based on input parameters, connected by the logical operator 'AND'.

image::dmn/business-rule-full.png[,900]
image::dmn/business-rule-full.png[,900,role=light-background]

For example, color == "red" AND size > 10.

Expand Down
2 changes: 1 addition & 1 deletion content/modules/bpm/pages/process-artifacts.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ At runtime, for specific branches (or paths) of the process, <<executions,execut
Finally,
the process instance can either be transformed into a xref:bpm:history.adoc#historic-process-instances[historic process instance] or deleted.

image::modeling-and-execution/process-artifacts.png[,900]
image::modeling-and-execution/process-artifacts.png[,900,role=light-background]

Below is a detailed description of the mentioned artifacts:

Expand Down
2 changes: 1 addition & 1 deletion content/modules/flow-ui/pages/views/view-events.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ image::views/close-standard-view.svg[align="center"]

The following diagram shows the process of opening a xref:views/view-classes.adoc#standard-detail-view[detail view]:

image::views/open-detail-view.svg[align="center"]
image::views/open-detail-view.svg[align="center",role=light-background]

[[closing-entity-detail-view]]
=== Closing Entity Detail View
Expand Down
Loading
Loading