@kolkrabbi/kol-shell 0.43.0 → 0.44.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 +3 -3
- package/src/CatalogPage.jsx +12 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "KOL application shell — fixed 48px NavRail + AppShell layout root, PageShell/PageHeader scaffolds, ContentFilters catalog organism, GridCard, SettingsScaffold, WalkthroughPanel, ShortcutsOverlay. App chrome (kol-framework owns site chrome). Nav items, content, shortcuts and settings are consumer-injected. Sits above @kolkrabbi/kol-{theme,component,framework}.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"peerDependencies": {
|
|
15
15
|
"@kolkrabbi/kol-component": ">=0.174.0",
|
|
16
16
|
"@kolkrabbi/kol-icons": ">=0.16.0",
|
|
17
|
-
"@kolkrabbi/kol-theme": ">=0.
|
|
17
|
+
"@kolkrabbi/kol-theme": ">=0.136.0",
|
|
18
18
|
"gsap": "^3.13.0",
|
|
19
19
|
"react": "^18.3.0 || ^19.0.0",
|
|
20
20
|
"react-dom": "^18.3.0 || ^19.0.0"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@kolkrabbi/kol-component": "^0.176.0",
|
|
24
24
|
"@kolkrabbi/kol-framework": "^0.41.0",
|
|
25
25
|
"@kolkrabbi/kol-icons": "^0.25.0",
|
|
26
|
-
"@kolkrabbi/kol-theme": "^0.
|
|
26
|
+
"@kolkrabbi/kol-theme": "^0.136.0"
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"src",
|
package/src/CatalogPage.jsx
CHANGED
|
@@ -48,6 +48,8 @@ import WalkthroughPanel from './WalkthroughPanel.jsx'
|
|
|
48
48
|
* @param {'bleed'|'capped'} width the page's TIER, forwarded to PageShell (two-page-scaffolds-one-job, 2026-09-03):
|
|
49
49
|
* `bleed` (default) fills the window — the app tier; `capped` centres on the
|
|
50
50
|
* framework container — the site tier, so a brand book adopting this page keeps its geometry
|
|
51
|
+
* @param {ReactNode} trailingActions the header's RIGHT slot (ContentFilters' — MediaLibrary's SELECT / FLAT); never empty beside the divider
|
|
52
|
+
* @param {number} minColumn the grid track's floor in px (default 160); a shelf of three decks passes 280 — the six-track ceiling still applies
|
|
51
53
|
* @param {ElementType} iconComponent icon renderer seam for ContentFilters
|
|
52
54
|
* @param {boolean} showCountOnlyWhenFiltering (default true)
|
|
53
55
|
* @param {Object} filtersProps spread onto ContentFilters last — e.g. `{ mutuallyExclusiveFilters: ['category', 'u_label'] }`
|
|
@@ -87,6 +89,13 @@ export default function CatalogPage({
|
|
|
87
89
|
defaultLayout = 'grid',
|
|
88
90
|
walkthrough,
|
|
89
91
|
actions,
|
|
92
|
+
/* the header's RIGHT slot — where MediaLibrary puts SELECT / FLAT. CatalogPage
|
|
93
|
+
shipped with no way to fill it, so every catalog page rendered an empty slot
|
|
94
|
+
beside the divider (kol-client-olina 2026-09-03, on /slide-deck). */
|
|
95
|
+
trailingActions,
|
|
96
|
+
/* the grid track's floor. 160 is a 26-tile catalog's; a shelf of three decks
|
|
97
|
+
wants ~280 so the cards read at all. A ceiling of 6 tracks still applies. */
|
|
98
|
+
minColumn = 160,
|
|
90
99
|
iconComponent,
|
|
91
100
|
showCountOnlyWhenFiltering = true,
|
|
92
101
|
filtersProps,
|
|
@@ -109,6 +118,7 @@ export default function CatalogPage({
|
|
|
109
118
|
showCountOnlyWhenFiltering={showCountOnlyWhenFiltering}
|
|
110
119
|
iconComponent={iconComponent}
|
|
111
120
|
viewModeOptions={views}
|
|
121
|
+
trailingActions={trailingActions}
|
|
112
122
|
viewMode={view}
|
|
113
123
|
onViewModeChange={onViewChange}
|
|
114
124
|
defaultViewMode={defaultView}
|
|
@@ -131,13 +141,13 @@ export default function CatalogPage({
|
|
|
131
141
|
* six-column ruling — below the ceiling the hide-set is
|
|
132
142
|
* desktop-only geometry. */
|
|
133
143
|
return (
|
|
134
|
-
<div style={{ display: 'grid', gridTemplateColumns: layout === 'list' ? 'repeat(auto-fill, minmax(min(100%, max(240px, calc((100% - 3 * 8px) / 4))), 1fr))' :
|
|
144
|
+
<div style={{ display: 'grid', gridTemplateColumns: layout === 'list' ? 'repeat(auto-fill, minmax(min(100%, max(240px, calc((100% - 3 * 8px) / 4))), 1fr))' : `repeat(auto-fill, minmax(min(100%, max(${minColumn}px, calc((100% - 5 * 24px) / 6))), 1fr))`, gap: layout === 'list' ? 8 : 24 }}>
|
|
135
145
|
{rows.map((item, i) => {
|
|
136
146
|
if (hidden.has(i)) return null
|
|
137
147
|
const c = cards[i]
|
|
138
148
|
const key = c.key ?? item.key ?? item.id ?? item.name ?? i
|
|
139
149
|
return layout === 'list'
|
|
140
|
-
? <ContentRow key={key} variant="catalog" title={c.title} detail={c.detail} actions={c.actions} onClick={c.onClick} href={c.href} onNavigate={c.onNavigate} />
|
|
150
|
+
? <ContentRow key={key} variant="catalog" media={c.media} ratio={c.ratio} title={c.title} detail={c.detail} actions={c.actions} onClick={c.onClick} href={c.href} onNavigate={c.onNavigate} />
|
|
141
151
|
: <ContentCard key={key} variant="catalog" fit={c.fit ?? 'cover'} ratio={c.ratio} title={c.title} detail={c.detail} media={c.media} actions={c.actions} onClick={c.onClick} href={c.href} onNavigate={c.onNavigate} expanded={c.expanded} expandedContent={c.expandedContent} />
|
|
142
152
|
})}
|
|
143
153
|
</div>
|