@kolkrabbi/kol-component 0.104.1 → 0.104.3
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 +1 -1
- package/src/organisms/ContentFilters.jsx +19 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-component",
|
|
3
|
-
"version": "0.104.
|
|
3
|
+
"version": "0.104.3",
|
|
4
4
|
"description": "KOL design-system components — atoms through organisms, emitting canonical kol-* classes. Pairs with @kolkrabbi/kol-theme for styling.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,10 +40,11 @@ import IconFrame from '../atoms/IconFrame.jsx'
|
|
|
40
40
|
* Look seams — all default to the shipped values, pass nothing and nothing changes:
|
|
41
41
|
* @param {string} props.titleClassName — header title type/ink
|
|
42
42
|
* @param {boolean} props.titleUppercase — cases the title (default false)
|
|
43
|
-
* @param {string} props.labelClassName — filter-group label type/ink
|
|
43
|
+
* @param {string} props.labelClassName — filter-group label type/ink (default `kol-eyebrow text-fg-96`)
|
|
44
44
|
* @param {boolean} props.labelUppercase — cases the group label (default true)
|
|
45
|
-
* groups: `{ label, key, values, stack?, className?, wrapClassName? }` —
|
|
46
|
-
*
|
|
45
|
+
* groups: `{ label, key, values, stack?, className?, wrapClassName? }` — THE FIRST GROUP HUGS ITS CHIPS, EVERY
|
|
46
|
+
* GROUP AFTER IT FLOWS (user law 2026-08-27, by position, never by chip count); `stack` is the explicit
|
|
47
|
+
* override; `className` / `wrapClassName` are per-group seams
|
|
47
48
|
* @param {string} props.tagVariant — filter chip variant ('primary' grey fill)
|
|
48
49
|
* @param {string} props.tagSize — filter chip size
|
|
49
50
|
* @param {string} props.tagActiveClassName — chip ink, selected
|
|
@@ -104,7 +105,10 @@ const ContentFilters = ({
|
|
|
104
105
|
* titles wrap can move to `kol-mono-14` without losing the casing. */
|
|
105
106
|
titleClassName = 'kol-helper-14',
|
|
106
107
|
titleUppercase = true,
|
|
107
|
-
|
|
108
|
+
/* the category label is the EYEBROW role (ContentFiltersEqualColumns, what stood —
|
|
109
|
+
* kol-fxr 2026-08-27: every section / category label in the app tier is
|
|
110
|
+
* kol-eyebrow; the role carries the uppercase) */
|
|
111
|
+
labelClassName = 'kol-eyebrow text-fg-96',
|
|
108
112
|
labelUppercase = true,
|
|
109
113
|
tagVariant = 'primary',
|
|
110
114
|
tagSize = 'sm',
|
|
@@ -242,13 +246,15 @@ const ContentFilters = ({
|
|
|
242
246
|
</div>
|
|
243
247
|
) : null
|
|
244
248
|
|
|
245
|
-
const renderFilterGroup = (group) => {
|
|
246
|
-
/*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
|
|
249
|
+
const renderFilterGroup = (group, index = 0) => {
|
|
250
|
+
/* THE LAW (user ruling 2026-08-27, said "for the 10th time" — ContentFiltersFirstGroupHugs):
|
|
251
|
+
* THE FIRST FILTER GROUP HUGS ITS CHIPS — IT IS NARROW. EVERY GROUP AFTER IT
|
|
252
|
+
* FLOWS ACROSS THE REST OF THE ROW. By POSITION, never by chip count. The
|
|
253
|
+
* reference is kol-website /prints: CATEGORY hugs at the left, YEAR flows
|
|
254
|
+
* beside it. Not equal columns (0.104.1, a misread — reverted), not "short
|
|
255
|
+
* groups stack" (0.101, one page's ruling — reverted). `stack` stays the
|
|
256
|
+
* explicit override; kol-fxr pins `stack: i === 0`. */
|
|
257
|
+
const stacked = group.stack ?? index === 0
|
|
252
258
|
return (
|
|
253
259
|
<div key={group.key} className={`flex flex-col gap-3 ${stacked ? 'shrink-0' : 'min-w-0 flex-1'} ${group.className ?? ''}`.trim()}>
|
|
254
260
|
{/* THE CATEGORY LABEL IS THE ACTIVE INK — `kol-helper-12` at `text-fg-96`,
|
|
@@ -261,7 +267,7 @@ const ContentFilters = ({
|
|
|
261
267
|
* never what anyone looked at. No inline letter-spacing: the helper ramp
|
|
262
268
|
* carries its own, and the override the fork added was not in the
|
|
263
269
|
* rendered path either. */}
|
|
264
|
-
<h4 className={labelClassName} style={labelUppercase ? { textTransform: 'uppercase' } : undefined}>
|
|
270
|
+
<h4 className={labelClassName} style={labelUppercase && !/\bkol-eyebrow\b/.test(labelClassName) ? { textTransform: 'uppercase' } : undefined}>
|
|
265
271
|
{group.label}
|
|
266
272
|
</h4>
|
|
267
273
|
{/* the fluid group keeps 48px of room on its right (it ran flush to the
|
|
@@ -442,7 +448,7 @@ const ContentFilters = ({
|
|
|
442
448
|
<div className="flex items-start justify-between gap-16">
|
|
443
449
|
<div className="flex min-w-0 flex-1 items-start gap-16">
|
|
444
450
|
{leadingActions}
|
|
445
|
-
{isExpanded && filterGroups.map((group) => renderFilterGroup(group))}
|
|
451
|
+
{isExpanded && filterGroups.map((group, i) => renderFilterGroup(group, i))}
|
|
446
452
|
{isExpanded && activeFilters.size > 0 && (
|
|
447
453
|
<button
|
|
448
454
|
type="button"
|