Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
936d5f3
experimental theme: CSS names and value grammar from css-tree, fonts …
josephfarina Nov 11, 2026
5ebbf8b
experimental theme: catalog demos from component doc playgrounds; sha…
josephfarina Nov 11, 2026
1df54df
experimental theme: how reads part names from Core's catalog and uses…
josephfarina Nov 11, 2026
454a58f
experimental theme: colors, sixth pass: fonts by where they ship, eve…
josephfarina Nov 11, 2026
71c9897
experimental theme: colors, seventh pass: one value check for set and…
josephfarina Nov 12, 2026
0eff83a
experimental theme: how sets named CSS properties as named and keeps …
josephfarina Nov 11, 2026
29058e8
experimental theme: catalog demos from doc props on an older Core; pa…
josephfarina Nov 11, 2026
5b051f4
experimental theme: sixth pass (locks by process space and never from…
josephfarina Nov 12, 2026
cc673e4
experimental theme: seventh pass (wrong-shape settings recovered, rec…
josephfarina Nov 12, 2026
dcb8caf
experimental theme: colors, eighth pass: the color files are brought …
josephfarina Nov 12, 2026
38f909b
experimental theme: how keeps typed values without a colon and reads …
josephfarina Nov 12, 2026
824eeb8
experimental theme: preview10 (per-entry playgrounds, text cell comma…
josephfarina Nov 12, 2026
39b71ed
experimental theme: hunt8 (undo restores the corner radii a step was …
josephfarina Nov 12, 2026
0c32cce
chore: move the Core playground defaults to their own pull request (t…
josephfarina Nov 12, 2026
9a0be9d
experimental theme: colors, ninth pass: typed math, no CSS-wide keywo…
josephfarina Nov 12, 2026
1a2452a
experimental theme: colors, tenth pass: every CSS math function typed…
josephfarina Nov 12, 2026
07392c3
experimental theme: how completes border values, reads layer opacity …
josephfarina Nov 12, 2026
1f3a480
experimental theme: preview11 (route handlers and pages at the previe…
josephfarina Nov 12, 2026
9817a58
experimental theme: preview12 (pageExtensions refusal suggests commands)
josephfarina Nov 12, 2026
cc1e5c8
experimental theme: hunt9 (undo history kept through recovery, file-n…
josephfarina Nov 12, 2026
efc7314
docs(changeset): the corners note matches the monotonic scale
josephfarina Nov 12, 2026
87096ca
chore: credit the experimental theme pass-nine changeset
josephfarina Nov 12, 2026
2d2ecc0
experimental theme: review fixes (how never prints --like undefined, …
josephfarina Nov 12, 2026
205f779
experimental theme: hunt10 (disabled through aria-disabled, focus onl…
josephfarina Nov 12, 2026
d78c6e0
experimental theme: how reads number words, typed token names and sta…
josephfarina Nov 12, 2026
017e294
experimental theme: colors, eleventh pass: a dial in other letters is…
josephfarina Nov 12, 2026
1a8f474
experimental theme: preview13 (catch-all routes, no root layout, link…
josephfarina Nov 12, 2026
ab55741
test(cli): how answers disabled buttons with the aria-disabled state;…
josephfarina Nov 12, 2026
ccd3705
experimental theme: hunt11 (local forks keep the stable message, comp…
josephfarina Nov 12, 2026
9b75584
experimental theme: how scopes mode phrases and reads typed tokens on…
josephfarina Nov 12, 2026
fe24bb2
experimental theme: colors, twelfth pass: per-mode part colors split …
josephfarina Nov 12, 2026
8460dc5
experimental theme: preview14 (optional catch-all only, nested route-…
josephfarina Nov 12, 2026
0d32982
chore: credit the hunt11 changeset
josephfarina Nov 12, 2026
cb5451d
experimental theme: hunt12 (a build judged by content, not file times…
josephfarina Nov 12, 2026
768f94c
experimental theme: how gives listed parts the ask, reads undo wordin…
josephfarina Nov 12, 2026
3a7ac96
experimental theme: colors, thirteenth pass: every part of a font sho…
josephfarina Nov 12, 2026
d379320
experimental theme: preview15 (next.config read from its syntax tree)
josephfarina Nov 12, 2026
6e5db44
chore: credit the hunt12 changeset
josephfarina Nov 12, 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
7 changes: 7 additions & 0 deletions .changeset/experimental-theme-catalog-from-docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme`: the component catalog and the all-components sheet are now built from each component's doc playground. Overlays show open, and each component shows its variants, its checked and disabled states, and a heading's levels. The editor's own copies of these demos are gone. A playground default that lists several elements now renders, so the editor now knows the tokens that radio lists, steppers, carousels and similar components read.

@josephfarina
15 changes: 15 additions & 0 deletions .changeset/experimental-theme-colors10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: every CSS math function is read by its type, and fonts are judged against the theme build's own list.

- `pow()`, `sqrt()`, `hypot()`, `log()`, `exp()`, the trigonometric functions, `mod()`, `rem()`, `abs()`, `sign()` and `round()` are accepted where the type they give fits; `sqrt(4px)` and `mod(10px, 3s)` are refused.
- Which system fonts need no install comes from the list `astryx theme build` warns by, unchanged; the editor only knows which of them ship on one system.
- `font more` names the commands that work.
- Math inside a color is checked too (`rgb(calc(1px) 0 0)` is refused), and `color-mix()` needs a share of at least one color. `calc(1fr)` is refused, since math takes no `fr`.
- A token only widths and offsets read (`--border-width`, `--focus-outline-width`) refuses a percentage, which those properties drop.
- A font that ships on one system says which one (`"Segoe UI" ships only on Windows`), instead of calling it no system font.
- The check for a hand-edited settings module reads files with Windows line endings.

@josephfarina
12 changes: 12 additions & 0 deletions .changeset/experimental-theme-colors11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: every refusal on fonts and part colors names a command that works.

- A dial typed in other letters (`Font`, `FONT`) is answered as the dial.
- A CSS `font` shorthand on a part (`bold 16px/1.5 Georgia, serif`) is split into the longhands to set, one command each.
- A suggestion is never MDN's note in place of a value (`dependsOnUserAgent`).
- A bad color on a part's color property suggests a color that works.

@josephfarina
11 changes: 11 additions & 0 deletions .changeset/experimental-theme-colors12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: per-mode part colors with commas, both-mode values and every `color()` space.

- A part color set for one mode, then the other, keeps a color that holds commas (`rgb(0, 0, 255)`) whole, in either order.
- A value that already gives both modes (`light-dark(…)`) is refused with `--mode`; drop `--mode`.
- The color dials read every `color()` space CSS has: rec2020, a98-rgb, prophoto-rgb and xyz, as well as srgb and display-p3.

@josephfarina
10 changes: 10 additions & 0 deletions .changeset/experimental-theme-colors13.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: font shorthands on a part split whole, and color mixes read.

- A CSS `font` value on a part is split into every longhand it holds (`font-variant-caps small-caps`, `font-stretch condensed`, style, weight, size, line height, family). A lone keyword goes to its own longhand (`bold` is `font-weight bold`), never to `font-family`, and a system font keyword (`caption`) gets a family that works.
- A `color-mix()` of two fixed colors in srgb, srgb-linear, xyz, oklab or oklch is worked out to the color it gives, so a color dial takes it. A mix the editor cannot work out says so and asks for the mixed color.

@josephfarina
18 changes: 18 additions & 0 deletions .changeset/experimental-theme-colors6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: values the browser would drop are refused, and type and font settings do what they say.

- An installed `@fontsource/<font>` package always loads the font it names.
- Math inside `calc()` and the other math functions must be sound (`calc(1px banana)` is refused).
- A duration or easing token takes one value, never a list.
- A line height of `0` is accepted.
- An exact `--color-text-secondary` reaches the parts that lift secondary text, with or without a color dial.
- A font for the body alone keeps the headings' font.
- After `font <x> --on body`, later commands keep working.
- `more` or `less` past the last text-size step is refused, instead of going the other way.
- A dial whose tokens an exact setting holds says so.
- A token only the base theme's part styles read is no longer called unused.

@josephfarina
12 changes: 12 additions & 0 deletions .changeset/experimental-theme-colors7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: what `set` accepts always loads, and a theme keeps the colors it shows.

- A setting that the theme could not load is refused when you set it, such as a font with `!important` or a comment.
- A border or outline width below 0, a duration below 0, and an unquoted url with brackets are refused on a part.
- Switching a theme to light-only or dark-only lists the colors that visitors in the other mode lose.
- A change that leaves the colors, the mode and the base as they were keeps the shades the theme already shows, so a theme an earlier editor built keeps its colors, and undo brings them back. The next color change maps every color with the current rules.

@josephfarina
11 changes: 11 additions & 0 deletions .changeset/experimental-theme-colors8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: a theme an earlier editor built gets its colors right on the first change.

- The color files are brought up to date before the theme is built from them. A font or corner change on such a theme no longer moves its colors, and the next change no longer moves them back.
- `filter` and `backdrop-filter` take only values the browser reads; `filter banana` is refused.
- A font for code alone falls back to a monospace font.

@josephfarina
14 changes: 14 additions & 0 deletions .changeset/experimental-theme-colors9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor`: math, keywords and fonts checked the way the browser reads them.

- Math in `calc()` and the other math functions must add like types and give the type the value needs. `calc(4px + 2)`, `calc(10px / 2px)` and `padding calc(1s)` are refused.
- A token never takes a CSS-wide keyword (`--font-family-body inherit`): it would leave the token empty.
- A font that ships on one system only (Segoe UI, Consolas, Menlo, Helvetica Neue, Roboto) is named as such.
- `font` refuses `var()` and names the role's token that takes it. `font geist-sans` is the `geist` preset, and `text-size Medium` suggests `medium`.
- A hand edit to the generated settings module is built over from the settings, as the module says, instead of being kept by the next change.
- `how font` no longer says a body font moves the headings.

@josephfarina
15 changes: 15 additions & 0 deletions .changeset/experimental-theme-how-answers-10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: number words, typed token names and states worded as actions.

- Numbers written as words are read: "zero radius everywhere" is square, "twelve pixel corners" 12px, "a two pixel border" 2px, "forty pixels tall", "a quarter rem", "one and a half line height".
- "least", "minimum", "as little as possible" and "barely any" mean less; "maximum roundness" is a pill.
- A token typed by name with a value ("--focus-outline-width: 3px", "--color-background-card to #fafafa in light mode") is set exactly. A token name that does not exist is refused with the nearest names, never answered with another token.
- States worded as actions keep the state: hover, click and press (active), typing and tabbing to (focus), "after I check" (checked), "picked" (selected). "Tab to" no longer names the tab part, and a link's color in one state is set for that state.
- "Cards the same radius as buttons" gives cards the token buttons read; "buttons twice as round as inputs" changes buttons; "the same color as the danger color" uses that color's token.
- "Shouldn't links be underlined?" asks for the underline.
- A pasted `h1, h2, h3 { … }` includes h1.

@josephfarina
12 changes: 12 additions & 0 deletions .changeset/experimental-theme-how-answers-11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: a mode phrase scopes the ask, and typed tokens are read only when they are real.

- "In dark mode only, cards #111111" sets the cards in dark mode; the theme becomes dark-only only when the ask is about the theme's modes. A clause that only names a mode scopes every clause after it. "Daytime" is light mode; "at night", "night" and "OLED" are dark mode; "dark: …, light: …" sets each mode, and two values for different modes are not a contradiction.
- A token typed at the start of a question is set exactly; a flag-like word that is no token (`--like`, `--value`) is read as words, and a real token in a later clause ("and set --border-width 2px") joins the other changes. A quoted font stack keeps its quotes.
- "No more than 2px borders" and "at most 2px" are 2px, not none.
- "Error text" and "labels" with no part name give a lookup, never the whole theme's text.

@josephfarina
12 changes: 12 additions & 0 deletions .changeset/experimental-theme-how-answers-12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: lists of parts, undo wording and typed numbers beside direction words.

- Parts listed before the ask all take it: "cards and dialogs with no shadow", "tooltips and toasts black". "Less padding on cards but more on buttons" answers both, each its own way.
- "Every part bold except body text" makes the headings bold and leaves the body as it is.
- "Remove my accent override", "revert the cards to default", "I set the accent to red by mistake" and "put the card shadows back" take back what the theme sets with undo.
- A typed number beside a direction word is the value: "thicker focus outline, 4px" is 4px, "bigger tap targets, at least 44px" is a 44px minimum height, "8 or so px" is 8px.

@josephfarina
2 changes: 1 addition & 1 deletion .changeset/experimental-theme-how-answers-5.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
- Font names of several words are kept: shipped fonts by their full name (DM Sans, IBM Plex Sans, Geist Mono, JetBrains Mono), and other names as typed (Roboto Mono, Source Sans 3). "Sans-serif" is never read as serif.
- "Off-white" is #fafafa. "Headings too big" changes the heading scale. "#e5e5e5 not pure white" sets #e5e5e5.
- "1) … 2) …" markers and "Feedback round 2" are not values. `primary=#7c3aed radius=10 font=Geist` reads each pair. "Body text 16px" is the text size.
- A link's color is `--color-text-accent`, the token a link reads; the answer says it also colors other accent text, and that a link has no color of its own per state.
- A link's color is `--color-text-accent`, the token a link reads; the answer says it also colors other accent text.
- Parts: table cells, menu items, radio buttons, text areas, selects, skeletons and popovers. A variant word before a part ("success badge") adds `--when variant:success`. "Card and Dialog" answers both. "Match the header to the sidebar" changes the header. A shadow ask after "serif headings" is for the theme, and a tab's text color is on the tab.
- "What does spacing more do" is a lookup. Light and dark values in one question set each mode. "I hate the purple, make it orange" sets the accent.
- A typed text color that one mode's page would make unreadable is set for the other mode only, unless the question asks for every mode or sets the page too. A sequence never gives the page the color it gives the text.
Expand Down
19 changes: 19 additions & 0 deletions .changeset/experimental-theme-how-answers-7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: named CSS properties, typed values kept whole, and parts it cannot name.

- A CSS property named in the question is set as named, with its value checked against the property's grammar: `caret-color`, `outline-offset`, `text-shadow`, `accent-color`, `text-underline-offset`, `font-variant-numeric`, `text-wrap`, `transition`, `padding-block`, any property `set` accepts. It is never swapped for another property.
- Typed values are kept whole: `clamp()`, `calc()`, `color-mix()`, a four-value radius, `line-height: normal`. A font size of 0 is refused by name.
- "Modal" names the dialog again; "carrd" and "caard" are corrected to card, and "lines" is no longer corrected to "links".
- A typed color is the target: "too bright, use #b91c1c" sets #b91c1c.
- Gray stops are read ("gray-50", "zinc-900", "slate 100", "neutral-200"); "subtle gray" is a light gray; "charcoal text instead of black" sets a charcoal.
- Fonts any machine has (Arial, Menlo, Times New Roman, Helvetica Neue, SF Pro) and typed names (Plus Jakarta Sans, Noto Sans, Fira Code) are set as named; "the default Mac font" is the system font.
- "menu", "select", "list", "divider" and "footer" name their parts, and so do "combobox" (the complex selector) and "accordion" (the collapsible). A part word how cannot name ("image") gets the closest parts and a lookup, never a whole-theme change.
- "too shadowy" is softer. "On focus" reaches the next clause; "night mode" is dark mode; "dark by default" is a dark-only theme; "lift it with a bigger shadow" is the hover shadow only; "ON: CARD" names the part; "the cards and the dialogs both" answers both.
- A picture whose name has spaces, as macOS names screenshots, is read as a picture.
- Questions about the tool get the command that answers them: help, "list every dial", "which token sets the page background?", "explain text-size", "how do I see my changes", "difference between corners and border-radius".
- The corners lookup's example is a token whose change shows.

@josephfarina
16 changes: 16 additions & 0 deletions .changeset/experimental-theme-how-answers-8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: typed values win without a colon, and words read the right way round.

- A percent inside a gradient or after a color is never an opacity; "50% opacity" still is. A typed gradient with stops ("#2563eb 0% to #9333ea 100%") is kept.
- A typed value after a property word is used whole, colon or not: gradients, `opacity 0.5`, `border 0`, `border color transparent`, `light-dark()`, `var()`, `margin 16px`, `filter: blur(2px)`, `backdrop-filter blur(8px)`, two-layer shadows. A property name never picks a part ("backdrop-filter" is not the backdrop). A value the property cannot take ("padding NaNpx") is refused by name, and so is a font size of 0.
- `drop-shadow()` is kept as typed.
- "halve", "half", "cut in half" and "x0.8" mean less; "twice" and "double" mean more. "0.5 rem", "1.5 em", "14 px" are one length.
- "reset", "revert", "back to default", "what it was", "clear the override" with a setting take it back with `undo <theme> <setting>`, or say the theme does not set it.
- "lighten up" is lighter, "tighten" is tighter tracking, "knock the contrast down" is less contrast, "open up the leading" is line height, and "the gray text fails contrast, darken it" darkens the secondary text. A clause that only describes the problem ("the hierarchy is flat") is not a change; "or maybe not. actually yes" keeps the ask.
- "heading color" is the text color. Accordions, comboboxes and notifications name their parts; a part list with no match lists the parts of components that use the word. "error toasts" adds `--when type:error`, "read-only" is the readonly state, and "loading" or "unchecked" say the part has no such state.
- CSS named colors such as tomato are read.

@josephfarina
19 changes: 19 additions & 0 deletions .changeset/experimental-theme-how-answers-9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: complete border values, layer opacity, and the right kind of change.

- A border or outline value is complete or goes to the right longhand: "card border 2px" sets `border-width` (a border with no line style draws nothing), "border width 2px" and "border bottom width 2px" set those properties, "border 0 0 2px" keeps all four widths, a width with a color gets a solid line, and "text-decoration #2563eb" sets `text-decoration-color`. "border width" never sets the part's width.
- "shadow opacity 0.2" sets the shadow's alpha, and "background opacity" or "border opacity" make that layer see-through, never the whole part.
- Font names win over dial words: "Space Grotesk headings" and "headings in Space Mono" set the font.
- Negation is kept: "should not shrink when pressed" is no scale, "but not bold" is a regular weight, and "why are my headings not bold" asks for bold.
- The right kind of change: "thinner body text" is a lighter weight; "faster hover transitions" sets `transition-duration`; "turn off all animations" and "transition duration 300ms everywhere" set the shared duration tokens; a part with no motion of its own, or no fill (the spinner), says so; "dim the white text" dims it; "a border instead of a shadow" removes the shadow and adds the border; "button press scale 0.98" scales on press.
- Point sizes are read (11pt is 15px), and a rem text size is read in pixels.
- A heading's color, which comes from its prop, is set with `--color-text-primary --on heading`; "headings red" is the text color.
- The divider is a part: its thickness and color are `--border-width` and `--color-border` on the divider.
- "go back to the neutral theme" takes back every setting, one undo each.
- Small caps, tabular numbers, balanced heading lines, "I can barely see the borders" and "hover does nothing visible" are read; tool questions about using, renaming, versions, files and hand edits get the command that answers them.
- A fully see-through picture is refused: it has no visible colors.

@josephfarina
7 changes: 7 additions & 0 deletions .changeset/experimental-theme-how-catalog-parts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme editor how`: a question names a part by any theming target name in Core's catalog ("drawer", "date range input"), read from Core instead of a list of its own; phrases, groups and variant words stay as overrides. Near misses are corrected with the CLI's shared edit distance.

@josephfarina
13 changes: 13 additions & 0 deletions .changeset/experimental-theme-hunt10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme`: the tenth pass of fixes.

- `--state disabled` styles a disabled button, link or tab the way Core marks it (`aria-disabled` as well as `:disabled`). A focus or active state on a part that never takes it is refused.
- A spacing step on a group member set alone starts from the group's value. Refusals keep every scope flag they can (`--when`, `--state`, `--only`). A tab inside a value is white space.
- Undoing an exact property names the dial that applies after it. A `font var(...)` refusal suggests only a command that works. A name Windows reserves (`con`, `nul`, `com1`) is refused, with one that works.
- `compile` of an editor theme finds the theme from the file, from any folder, and never mistakes a `src/themes/<name>` folder for one. A damaged settings file is refused as a normal error. Its suggestions run as printed in JSON too.
- The refusal for list, add, use, remove and eject on an editor theme says how to use its module, and not to edit the generated themes module.

@josephfarina
13 changes: 13 additions & 0 deletions .changeset/experimental-theme-hunt11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme`: the eleventh pass of fixes.

- A local theme with the same name as an editor theme keeps the stable message. Compile guards only the editor's own files, also through a linked folder. The refusal for an editor theme shows a merge snippet that runs, with its stylesheet.
- A list where one theme goes names each theme. `corners more` at pill and `less` at square write nothing. A corner word on `buttons` or `surfaces` names the corners dial.
- A bad property value suggests a value the property takes (`no-wrap` → `nowrap`), in the same scope.
- `--state disabled` is refused on a part that is never marked disabled. `focus-within` is refused where nothing inside takes focus. `how <part>` lists only states `set` takes there.
- Option errors suggest a help command that runs as printed in JSON too.

@josephfarina
7 changes: 7 additions & 0 deletions .changeset/experimental-theme-hunt12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/cli': patch
---

[experimental] `astryx experimental theme`: a build is judged by its content, never by file times, so a settings module saved again (a format-on-save, a checkout) no longer fails `compile --check`. `--state disabled` on a tab styles it the way Core marks it.

@josephfarina
Loading
Loading