@kolkrabbi/kol-framework 0.45.0 → 0.47.0

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/kol-framework.css CHANGED
@@ -177,7 +177,7 @@ body {
177
177
  }
178
178
  /* A nested route GROUP's header (sidenav-nested-groups, kol-studio
179
179
  * 2026-08-26): a non-routing label sitting where a leaf sits, its rows one
180
- * step further in. Type and colour ride the element as utilities
180
+ * step further in. Type and color ride the element as utilities
181
181
  * (kol-helper-10; text-subtle, text-emphasis when a leaf beneath it is the
182
182
  * route); the box lives here. No text-transform — the retired fork's
183
183
  * `uppercase` does not return (type law: only the display voice carries one). */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-framework",
3
- "version": "0.45.0",
3
+ "version": "0.47.0",
4
4
  "description": "KOL app shell — sidenav, layout, theme toggle, footer, heroes + brand color layer. SideNav takes nav data as props so the tree stays app-local.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,8 +21,8 @@
21
21
  "react-router-dom": "^6.0.0 || ^7.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@kolkrabbi/kol-component": "^0.228.0",
25
- "@kolkrabbi/kol-icons": "^0.29.0"
24
+ "@kolkrabbi/kol-icons": "^0.30.0",
25
+ "@kolkrabbi/kol-component": "^0.230.0"
26
26
  },
27
27
  "files": [
28
28
  "src",
@@ -55,7 +55,7 @@ export const ShellTocCollapsedContext = createContext(null)
55
55
  * @param {ReactNode} footer below the outlet on the plane
56
56
  * @param {ReactNode} defaultTocContent the TOC rail's content when no page registers one
57
57
  * @param {object} sideNav every SideNav prop this layout does not own, spread onto the rail
58
- * @param {string} pageWash the plane's wash, a CSS colour (e.g. `'var(--kol-fg-02)'`)
58
+ * @param {string} pageWash the plane's wash, a CSS color (e.g. `'var(--kol-fg-02)'`)
59
59
  * @param {boolean} bare plane + outlet only (default false)
60
60
  */
61
61
  export default function PageLayout({ navTree = [], header, footer, defaultTocContent, sideNav, pageWash, bare = false }) {
@@ -36,6 +36,8 @@ import ThemeToggle from './ThemeToggle.jsx'
36
36
  * @param {ReactNode} actions Row-1 trailing slot before the theme toggle (e.g. a search-overlay trigger)
37
37
  * @param {boolean} showThemeToggle render the framework ThemeToggle (default true)
38
38
  * @param {Function} onMenuClick hamburger click; button renders only when set
39
+ * @param {boolean} menuBelowLg the hamburger shows only below `lg` (2026-09-30, the names audit — on a desktop the tab row's own
40
+ * rail toggles do its job, so it read as a duplicate; default false keeps every consumer as it was)
39
41
  * @param {Function} onNavToggle dock-left click → toggle left nav; button renders only when set (lg+)
40
42
  * @param {Function} onTocToggle dock-right click → toggle TOC rail; button renders only when set (lg+)
41
43
  * @param {boolean} navCollapsed tints the dock-left button
@@ -82,6 +84,7 @@ export default function ShellHeader({
82
84
  actions,
83
85
  showThemeToggle = true,
84
86
  onMenuClick,
87
+ menuBelowLg = false,
85
88
  onNavToggle,
86
89
  onTocToggle,
87
90
  navCollapsed,
@@ -136,7 +139,7 @@ export default function ShellHeader({
136
139
  </>
137
140
  )}
138
141
  {onMenuClick && (
139
- <Tooltip label="Open navigation menu">
142
+ <Tooltip label="Menu">
140
143
  {/* IconFrame, not Button (user ruling 2026-08-01). Header
141
144
  * chrome takes a click but must not light up; the frame has
142
145
  * no state rules at all, which is the property Button can
@@ -146,6 +149,7 @@ export default function ShellHeader({
146
149
  name="hamburger"
147
150
  variant="nav"
148
151
  size="md"
152
+ className={menuBelowLg ? 'lg:hidden' : ''}
149
153
  onClick={onMenuClick}
150
154
  aria-label="Open navigation menu"
151
155
  />
@@ -193,7 +197,7 @@ export default function ShellHeader({
193
197
  {(onNavToggle || onTocToggle) && (
194
198
  <div className="hidden lg:flex items-center gap-1 pb-2">
195
199
  {onNavToggle && (
196
- <Tooltip label="Toggle navigation sidebar">
200
+ <Tooltip label="Navigation">
197
201
  {/* The collapsed tint is a VARIANT SWAP, not a state:
198
202
  * `ghost` rests at oq-48, `nav` at oq-64, and both are
199
203
  * static classes with no rules to fire. That is the only
@@ -211,7 +215,7 @@ export default function ShellHeader({
211
215
  </Tooltip>
212
216
  )}
213
217
  {onTocToggle && (
214
- <Tooltip label="Toggle table of contents sidebar">
218
+ <Tooltip label="Contents">
215
219
  <IconFrame
216
220
  name="panel-right"
217
221
  variant={tocCollapsed ? 'ghost' : 'nav'}
package/src/SideNav.jsx CHANGED
@@ -398,7 +398,7 @@ function SideNavInner({
398
398
  * the aside's position/height/stack live in .kol-sidenav
399
399
  * (kol-framework.css). `sticky … h-dvh z-20` here outranked the 767px
400
400
  * drawer rule's `position: fixed`, so every consumer page opened one
401
- * viewport down on phones. Only colour utilities ride the element. */
401
+ * viewport down on phones. Only color utilities ride the element. */
402
402
  className={`kol-sidenav${background ? ' bg-surface-primary' : ''}${hairline ? ' border-r border-fg-08' : ''}${collapsed ? ' is-collapsed' : ''}${drawerOpen ? ' is-drawer-open' : ''}`}
403
403
  >
404
404
  {/* NO chip Button in either state (user build order 2026-08-09 — "MAKE
@@ -155,9 +155,11 @@ export default function ThemeToggle({
155
155
  const shared = {
156
156
  type: 'button',
157
157
  onClick,
158
- 'aria-label': `Switch to ${next} mode`,
158
+ 'aria-label': `Switch to ${next} mode${resetHint}`,
159
159
  }
160
- const tip = `Switch to ${next} mode${resetHint}`
160
+ /* ONE WORD (2026-09-30, open questions Round 1 Q4 — ruled many times); the alt-click hint
161
+ * stays in the aria-label and the S sheet, not the tooltip */
162
+ const tip = 'Theme'
161
163
  const wrap = (node) => (tooltip ? <Tooltip label={tip}>{node}</Tooltip> : node)
162
164
 
163
165
  /* ── DEPRECATED aliases — old chrome verbatim (0.6.x) ── */