@kolkrabbi/kol-shell 0.59.1 → 0.60.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/package.json +6 -6
- package/src/AppHub.jsx +1 -1
- package/src/AppStudio.jsx +1 -1
- package/src/CatalogPage.jsx +1 -1
- package/src/HubHome.jsx +2 -2
- package/src/HubSettings.jsx +1 -1
- package/src/Logomark.jsx +1 -1
- package/src/PageShell.jsx +1 -1
- package/src/PhoneNav.jsx +1 -1
- package/src/SettingsLinks.jsx +2 -2
- package/src/SettingsScaffold.jsx +1 -1
- package/src/SettingsShortcuts.jsx +1 -1
- package/src/TabStrip.jsx +1 -1
- package/src/TouchDeviceOverlay.jsx +7 -3
- package/src/WalkthroughPanel.jsx +3 -3
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "The application shell",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "./src/index.js",
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"react-dom": "^18.3.0 || ^19.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@kolkrabbi/kol-
|
|
24
|
-
"@kolkrabbi/kol-
|
|
25
|
-
"@kolkrabbi/kol-
|
|
26
|
-
"@kolkrabbi/kol-theme": "^0.
|
|
23
|
+
"@kolkrabbi/kol-component": "^0.237.0",
|
|
24
|
+
"@kolkrabbi/kol-icons": "^0.33.0",
|
|
25
|
+
"@kolkrabbi/kol-framework": "^0.48.0",
|
|
26
|
+
"@kolkrabbi/kol-theme": "^0.163.0"
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"src",
|
package/src/AppHub.jsx
CHANGED
|
@@ -7,7 +7,7 @@ import { ShortcutsOverlay } from '@kolkrabbi/kol-component'
|
|
|
7
7
|
/* taxonomy-ok: organism — nests AppShell / HubHome / HubSettings / ShortcutsOverlay (relative) */
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* AppHub — Shell + Hub in one call; the app passes its Tool as children (the app anatomy,
|
|
10
|
+
* AppHub — An app's shell and hub in one. Shell + Hub in one call; the app passes its Tool as children (the app anatomy,
|
|
11
11
|
* `docs/documentation/04-compositions/16-app-anatomy.md`, 2026-09-26).
|
|
12
12
|
*
|
|
13
13
|
* monitor, mirror and fxr each assembled this by hand: the same AppShell props, the same
|
package/src/AppStudio.jsx
CHANGED
|
@@ -6,7 +6,7 @@ import PageShell from './PageShell.jsx'
|
|
|
6
6
|
/* taxonomy-ok: organism — nests AppHub / CatalogPage / PageShell (relative) + kol-component's PageHeader */
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* AppStudio — the WORKSTATION: the Hub plus a fixed page set (apps review §6c-4, 2026-09-29).
|
|
9
|
+
* AppStudio — The studio workstation. the WORKSTATION: the Hub plus a fixed page set (apps review §6c-4, 2026-09-29).
|
|
10
10
|
*
|
|
11
11
|
* fxr, mirror and monitor each hand-build the same shape — a landing Catalog, a Library of what the
|
|
12
12
|
* tool makes, a page that composes a new one, the tool itself full-bleed, a page or two of their own,
|
package/src/CatalogPage.jsx
CHANGED
|
@@ -7,7 +7,7 @@ import WalkthroughPanel from './WalkthroughPanel.jsx'
|
|
|
7
7
|
/* taxonomy-ok: organism — nests PageShell / PageHeader / WalkthroughPanel (relative) + kol-component's ContentFilters + ContentCard / ContentRow */
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* CatalogPage — the app tier's Home / Library page, shipped once (ShellHomeSystem,
|
|
10
|
+
* CatalogPage — An app's home or library page. the app tier's Home / Library page, shipped once (ShellHomeSystem,
|
|
11
11
|
* kol-fxr 2026-08-27 — fxr's HomePage / LibraryPage and monitor's HomePage were
|
|
12
12
|
* the same page written three times): `PageHeader` → `ContentFilters` (title ·
|
|
13
13
|
* filter · search, the view strip in the header, LIST / GRID below the divider)
|
package/src/HubHome.jsx
CHANGED
|
@@ -5,7 +5,7 @@ import CatalogPage from './CatalogPage.jsx'
|
|
|
5
5
|
/* taxonomy-ok: organism — nests CatalogPage (relative) + kol-component's Button */
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* HubHome — the Hub's Home: a Catalog under the app's masthead (the Hub, 2026-09-26).
|
|
8
|
+
* HubHome — A hub's home page. the Hub's Home: a Catalog under the app's masthead (the Hub, 2026-09-26).
|
|
9
9
|
* monitor, mirror and fxr each wrote this page on `CatalogPage` with the same five
|
|
10
10
|
* decisions — the mono masthead, RECENT · SAVED, a walkthrough opened by a button,
|
|
11
11
|
* that button's Close label, a "Get started" last step — and the case of the view
|
|
@@ -71,7 +71,7 @@ export default function HubHome({
|
|
|
71
71
|
<>
|
|
72
72
|
{actions}
|
|
73
73
|
{steps.length > 0 && (
|
|
74
|
-
<Button
|
|
74
|
+
<Button tone="grey" size="md" onClick={() => setTouring((t) => !t)}>
|
|
75
75
|
{touring ? 'Close' : 'Walkthrough'}
|
|
76
76
|
</Button>
|
|
77
77
|
)}
|
package/src/HubSettings.jsx
CHANGED
|
@@ -7,7 +7,7 @@ import SettingsLinks, { SettingsColophon } from './SettingsLinks.jsx'
|
|
|
7
7
|
/* taxonomy-ok: organism — nests SettingsScaffold / SettingsShortcuts / SettingsLinks (relative) + kol-component's SettingsPanel / SettingsSections */
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* HubSettings — the Hub's Settings page (the Hub, 2026-09-26). monitor, mirror and fxr
|
|
10
|
+
* HubSettings — A hub's settings page. the Hub's Settings page (the Hub, 2026-09-26). monitor, mirror and fxr
|
|
11
11
|
* each put the same page on `SettingsScaffold`: SETTINGS · ABOUT · REPO with the same
|
|
12
12
|
* three subtitles, the same theme toggle in the masthead, About as the app's prose over
|
|
13
13
|
* the colophon, Repo as a link list, and the keyboard shortcuts from the one array the
|
package/src/Logomark.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect } from 'react'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Logomark — fetches and INLINES an SVG so currentColor theming works: an
|
|
4
|
+
* Logomark — An inlined SVG mark. fetches and INLINES an SVG so currentColor theming works: an
|
|
5
5
|
* <img> renders a currentColor mark black in dark mode (invisible). Ported
|
|
6
6
|
* verbatim from the kol-mirror cut (module-level cache; async resolve even on
|
|
7
7
|
* cache hit — sync setState in an effect cascades renders).
|
package/src/PageShell.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PageShell — the page scaffold every shell page re-declared by hand (6 pages
|
|
2
|
+
* PageShell — The page scaffold of an app. the page scaffold every shell page re-declared by hand (6 pages
|
|
3
3
|
* in monitor, 4 in mirror — the most-duplicated block in both repos).
|
|
4
4
|
*
|
|
5
5
|
* `mode="scroll"` (default): min-height 100vh, natural page scroll.
|
package/src/PhoneNav.jsx
CHANGED
|
@@ -4,7 +4,7 @@ import { Button, MobileTabBar } from '@kolkrabbi/kol-component'
|
|
|
4
4
|
/* taxonomy-ok: molecule — MobileTabBar + a More sheet of Buttons */
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* PhoneNav — the rail, on a phone, as a bottom bar (AppShell `touch="bar"`, apps review
|
|
7
|
+
* PhoneNav — The rail as a phone tab bar. the rail, on a phone, as a bottom bar (AppShell `touch="bar"`, apps review
|
|
8
8
|
* 2026-09-29). The user: *"what about when there are like 10 pages? … this seems like something
|
|
9
9
|
* shell or hub should account for and ship, but not have per app fixes."*
|
|
10
10
|
*
|
package/src/SettingsLinks.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SettingsLinks — the About / Repo link list every app hand-wrote (ShellHomeSystem,
|
|
2
|
+
* SettingsLinks — The links block of a settings page. the About / Repo link list every app hand-wrote (ShellHomeSystem,
|
|
3
3
|
* kol-fxr 2026-08-27): label `kol-helper-12 text-fg-32` at 72px, the URL as an
|
|
4
4
|
* external link `text-fg-64 hover:text-fg-96 hover:underline`.
|
|
5
5
|
*
|
|
@@ -18,7 +18,7 @@ export default function SettingsLinks({ links = [], className = '' }) {
|
|
|
18
18
|
)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/** SettingsColophon — the "Kolkrabbi Vinnustofa / 2026" foot under a settings scaffold. */
|
|
21
|
+
/** SettingsColophon — The foot of a settings page. the "Kolkrabbi Vinnustofa / 2026" foot under a settings scaffold. */
|
|
22
22
|
export function SettingsColophon({ name = 'Kolkrabbi Vinnustofa', year = new Date().getFullYear(), className = '' }) {
|
|
23
23
|
return (
|
|
24
24
|
<div className={className} style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
|
package/src/SettingsScaffold.jsx
CHANGED
|
@@ -4,7 +4,7 @@ import PageShell from './PageShell.jsx'
|
|
|
4
4
|
import { PageHeader } from '@kolkrabbi/kol-component'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* SettingsScaffold — the settings-page idiom both shells re-implemented inline:
|
|
7
|
+
* SettingsScaffold — The settings page scaffold. the settings-page idiom both shells re-implemented inline:
|
|
8
8
|
* fixed PageShell, a PageHeader masthead, one header row, then a scrolling body.
|
|
9
9
|
* Content is consumer-authored via `renderContent` — sections/rows are content,
|
|
10
10
|
* not markup.
|
|
@@ -7,7 +7,7 @@ import { SettingsRow } from '@kolkrabbi/kol-component'
|
|
|
7
7
|
* baseline row did. */
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* SettingsShortcuts — the keyboard-shortcuts block of a settings page
|
|
10
|
+
* SettingsShortcuts — The shortcuts block of a settings page. the keyboard-shortcuts block of a settings page
|
|
11
11
|
* (ShellHomeSystem, kol-fxr 2026-08-27): the same `[{ section, items: [{ id,
|
|
12
12
|
* label, combo }] }]` array `ShortcutsOverlay` takes, laid out UP TO six columns ×
|
|
13
13
|
* two sections per column, filled column-first (user, 2026-08-27) — each
|
package/src/TabStrip.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TabStrip — the flat text-tab idiom both shells use twice (ContentFilters
|
|
2
|
+
* TabStrip — A row of text tabs. the flat text-tab idiom both shells use twice (ContentFilters
|
|
3
3
|
* view-mode/layout spans, Settings tabs): `kol-helper-14`, active
|
|
4
4
|
* `text-fg-96`, rest `text-fg-32 hover:text-fg-48`.
|
|
5
5
|
*
|
|
@@ -17,20 +17,24 @@ export function useTouchPrimary() {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* TouchDeviceOverlay — "Desktop recommended", once, on a touch-primary device
|
|
20
|
+
* TouchDeviceOverlay — A desktop-recommended note on touch devices. "Desktop recommended", once, on a touch-primary device
|
|
21
21
|
* (kol-monitor's overlay, promoted 2026-08-27 — ShellHomeSystem; `AppShell
|
|
22
22
|
* touch="overlay"` mounts it). Dismissal is remembered in localStorage.
|
|
23
23
|
*
|
|
24
24
|
* @param {string} appName the sentence's subject ("Monitor is built for mouse and keyboard…")
|
|
25
25
|
* @param {string} message override the sentence whole
|
|
26
|
+
* @param {boolean} force show it whatever the pointer and whatever was dismissed — for a preview
|
|
27
|
+
* or a settings "show it again"; dismissing a forced note stores nothing
|
|
26
28
|
*/
|
|
27
|
-
export default function TouchDeviceOverlay({ appName = 'This app', message }) {
|
|
29
|
+
export default function TouchDeviceOverlay({ appName = 'This app', message, force = false }) {
|
|
28
30
|
const coarse = useTouchPrimary()
|
|
29
31
|
const [dismissed, setDismissed] = useState(() => {
|
|
30
32
|
try { return localStorage.getItem(STORAGE_KEY) === '1' } catch { return false }
|
|
31
33
|
})
|
|
32
|
-
|
|
34
|
+
const [closed, setClosed] = useState(false)
|
|
35
|
+
if (force ? closed : !coarse || dismissed) return null
|
|
33
36
|
const dismiss = () => {
|
|
37
|
+
if (force) { setClosed(true); return }
|
|
34
38
|
try { localStorage.setItem(STORAGE_KEY, '1') } catch { /* storage blocked */ }
|
|
35
39
|
setDismissed(true)
|
|
36
40
|
}
|
package/src/WalkthroughPanel.jsx
CHANGED
|
@@ -2,7 +2,7 @@ import { useState } from 'react'
|
|
|
2
2
|
import { Button } from '@kolkrabbi/kol-component'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* WalkthroughPanel — the absolutely-centred stepped intro card (both repos'
|
|
5
|
+
* WalkthroughPanel — A stepped intro card. the absolutely-centred stepped intro card (both repos'
|
|
6
6
|
* HomePage): chevron Buttons either side, text column + illustration pane.
|
|
7
7
|
*
|
|
8
8
|
* Steps are content: `[{ title, text: [..], illustration?, actions? }]` —
|
|
@@ -27,7 +27,7 @@ export default function WalkthroughPanel({ steps = [], iconComponent, onClose })
|
|
|
27
27
|
maxWidth: 960, width: '100%', zIndex: 10,
|
|
28
28
|
}}>
|
|
29
29
|
<Button
|
|
30
|
-
|
|
30
|
+
tone="grey"
|
|
31
31
|
size="md"
|
|
32
32
|
iconOnly="chevron-left"
|
|
33
33
|
iconComponent={iconComponent}
|
|
@@ -76,7 +76,7 @@ export default function WalkthroughPanel({ steps = [], iconComponent, onClose })
|
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
78
|
<Button
|
|
79
|
-
|
|
79
|
+
tone="grey"
|
|
80
80
|
size="md"
|
|
81
81
|
iconOnly="chevron-right"
|
|
82
82
|
iconComponent={iconComponent}
|