explico 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,23 @@ under **Breaking** below; a PATCH never breaks.
14
14
 
15
15
  ## [Unreleased]
16
16
 
17
+ ## [0.11.1] - 2026-09-28
18
+
19
+ ### Fixed
20
+
21
+ - **A side panel's labels wrap instead of scrolling sideways.** A chapter,
22
+ lesson or heading longer than the navigation or the "On this page" panel
23
+ is wide goes onto more lines, at any width, including one the reader
24
+ dragged a panel down to; a word longer than the panel hyphenates where the
25
+ language allows, else breaks. A resized panel used to keep each label on
26
+ one line and scroll sideways (`white-space: nowrap` on
27
+ `html[data-navigation-resized]` / `html[data-contents-resized]`), and the
28
+ "On this page" column kept a width taken from the navigation's
29
+ (`--sl-sidebar-width`), running past a narrowed panel's edge; it now fills
30
+ its panel. `.sidebar-pane` clips sideways (`overflow-x: hidden`), where a
31
+ compact chapter's invisible resting tooltip reached past it; a showing
32
+ tooltip is `position: fixed` and is never cut.
33
+
17
34
  ## [0.11.0] - 2026-09-28
18
35
 
19
36
  ### Breaking
@@ -2126,7 +2143,8 @@ under **Breaking** below; a PATCH never breaks.
2126
2143
  system with its completeness gate, the curriculum-graph validator, the
2127
2144
  Astro/Starlight UI, the LMS / session / analytics seams, and the `content` CLI.
2128
2145
 
2129
- [Unreleased]: https://github.com/danieltuzes/explico/compare/v0.11.0...HEAD
2146
+ [Unreleased]: https://github.com/danieltuzes/explico/compare/v0.11.1...HEAD
2147
+ [0.11.1]: https://github.com/danieltuzes/explico/compare/v0.11.0...v0.11.1
2130
2148
  [0.11.0]: https://github.com/danieltuzes/explico/compare/v0.10.0...v0.11.0
2131
2149
  [0.10.0]: https://github.com/danieltuzes/explico/compare/v0.9.0...v0.10.0
2132
2150
  [0.9.0]: https://github.com/danieltuzes/explico/compare/v0.8.0...v0.9.0
@@ -105,7 +105,9 @@ applies every intervening section in order.
105
105
  the `migrating.md` section.
106
106
  6. Run `pnpm build && pnpm test`, then inspect `pnpm pack --dry-run` and confirm
107
107
  that `docs/authoring/migrating.md` and `docs/authoring/agents.md` are listed.
108
- 7. Commit, then `git tag vx.y.z`.
108
+ 7. Commit, then tag it annotated: `git tag -a vx.y.z -m "explico x.y.z"`. With
109
+ `push.followTags` on, a plain `git push` sends an annotated tag with its
110
+ commit; a lightweight tag never travels that way.
109
111
 
110
112
  ## When you change the engine
111
113
 
@@ -33,6 +33,62 @@ required config block throws with the section of this file to read.
33
33
 
34
34
  ---
35
35
 
36
+ ## 0.11.0 → 0.11.1
37
+
38
+ **No course changes required.** This release has one fix, in the engine's
39
+ stylesheet. A label in the navigation or the "On this page" panel that does
40
+ not fit now wraps onto more lines instead of scrolling sideways, and that
41
+ includes a panel the reader resized. No authoring rule, `CourseConfig` field,
42
+ Astro wiring, course script or CLI command changes. The manifest schema stays
43
+ v24.
44
+
45
+ ### 1. Update the dependency
46
+
47
+ ```bash
48
+ pnpm add -D explico@0.11.1
49
+ ```
50
+
51
+ **Coming from 0.8.0:** follow the "Coming from 0.8.0" note of "0.10.0 →
52
+ 0.11.0" below, and install 0.11.1 wherever it says to install 0.11.0.
53
+
54
+ ### 2. Only if your course CSS or browser tests reach into the side panels
55
+
56
+ ```bash
57
+ rg -n 'data-(navigation|contents)-resized|\.sidebar-pane|\.right-sidebar|layout-(navigation|page-sidebar)-content' src content tests
58
+ ```
59
+
60
+ No hit means nothing to do. Otherwise:
61
+
62
+ - **A resized panel's labels** have `white-space: normal` (it was `nowrap`),
63
+ and the panel never scrolls sideways. A test that asserted `nowrap`, or
64
+ `scrollWidth > clientWidth` after narrowing a panel, now asserts that the
65
+ labels wrap and stay inside the panel.
66
+ - **`.sidebar-pane`** has `overflow-x: hidden` at every width. The resized
67
+ "On this page" panel no longer sets `overflow-x: auto` or
68
+ `scrollbar-width: thin`, so it hides its scrollbar, as Starlight does by
69
+ default.
70
+ - **In a resized "On this page" panel**, the column
71
+ (`.right-sidebar-panel .sl-container`) fills the panel. Its width used to
72
+ come from the navigation's `--sl-sidebar-width`. The default,
73
+ shrink-to-fit rail is unchanged.
74
+ - **Word breaking.** Both panels' labels take `overflow-wrap: break-word`
75
+ and `hyphens: auto`, which replaces Starlight's `overflow-wrap: anywhere`
76
+ on the contents links. To break words differently, set these properties
77
+ on `.layout-navigation-content`, `.layout-page-sidebar-content` and
78
+ `.layout-page-sidebar-content a` in the course CSS.
79
+ - **Screenshots** of a narrowed panel need re-recording.
80
+
81
+ ### 3. Verify
82
+
83
+ ```bash
84
+ pnpm validate:content # run twice: the first run regenerates build/resolution/*
85
+ pnpm content check --changed
86
+ astro check
87
+ astro build
88
+ ```
89
+
90
+ Then run the course's browser tests, if it has any.
91
+
36
92
  ## 0.10.0 → 0.11.0
37
93
 
38
94
  **Course changes are required.** Figures and diagrams no longer compact.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "explico",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "Build-time engine for prerequisite-aware, notation-rigorous course content: one validated content model, a semantic notation/citation/equation system with a completeness gate, and a deterministic JSON manifest.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -1043,28 +1043,24 @@ details.layout-part-has-open > summary > .group-label {
1043
1043
  display: none;
1044
1044
  }
1045
1045
 
1046
- /* A panel the reader narrowed past its own labels scrolls sideways rather
1047
- than wrapping every chapter title into a column of single words. */
1048
- html[data-navigation-resized] .layout-navigation-content :is(a, summary) {
1049
- white-space: nowrap;
1050
- }
1051
-
1052
- html[data-navigation-resized] .sidebar-pane {
1053
- overflow-x: auto;
1054
- }
1055
-
1056
- /* A compact chapter's tooltip is a child of one of those links, and it is
1057
- the one label that must still wrap — it is sized by its own max-width,
1058
- not by the panel, so inheriting `nowrap` would run its text straight out
1059
- of its own background. */
1060
- html[data-navigation-resized]
1061
- .layout-compact-sidebar
1062
- details[data-compact]
1063
- > ul:not(.top-level)
1064
- > li
1065
- > a
1066
- > span {
1067
- white-space: normal;
1046
+ /* A label that does not fit wraps onto more lines, and the side panels
1047
+ never scroll sideways: a word longer than the panel is wide is
1048
+ hyphenated where the language allows, else broken. Starlight's
1049
+ `overflow-wrap: anywhere` on the contents links broke words at any
1050
+ letter before hyphenation got a chance. */
1051
+ .layout-navigation-content,
1052
+ .layout-page-sidebar-content,
1053
+ .layout-page-sidebar-content a {
1054
+ overflow-wrap: break-word;
1055
+ hyphens: auto;
1056
+ }
1057
+
1058
+ /* With every label wrapping, what still reaches past the navigation's
1059
+ edge is a compact chapter's resting tooltip (absolutely placed, and
1060
+ invisible): it would only add a sideways scrollbar. A showing tooltip is
1061
+ `position: fixed` (below), so this clip never cuts it. */
1062
+ .sidebar-pane {
1063
+ overflow-x: hidden;
1068
1064
  }
1069
1065
 
1070
1066
  html[data-navigation-hidden] {
@@ -1249,15 +1245,15 @@ details.layout-part-has-open > summary > .group-label {
1249
1245
  max-width: none;
1250
1246
  }
1251
1247
 
1252
- /* Starlight hides this panel's scrollbar (`scrollbar-width: none`), which
1253
- would quietly cut a heading the reader narrowed the panel past. */
1254
- html[data-contents-resized]:not([data-page-sidebar-hidden]) .right-sidebar {
1255
- overflow-x: auto;
1256
- scrollbar-width: thin;
1257
- }
1258
-
1259
- html[data-contents-resized] .layout-page-sidebar-content :is(a, h2) {
1260
- white-space: nowrap;
1248
+ /* Starlight sizes the column inside from the navigation's width
1249
+ (`--sl-sidebar-width`), not from this panel: in a panel the reader set,
1250
+ it fills the panel, so its headings wrap at the panel's edge instead of
1251
+ running past it. */
1252
+ html[data-contents-resized]:not([data-page-sidebar-hidden])
1253
+ .right-sidebar-panel
1254
+ .sl-container {
1255
+ width: auto;
1256
+ max-width: none;
1261
1257
  }
1262
1258
 
1263
1259
  html[data-page-sidebar-hidden] {