@kolkrabbi/kol-component 0.233.0 → 0.235.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/atoms/ActionButton.jsx +1 -1
- package/src/atoms/AnimatedTitle.jsx +1 -1
- package/src/atoms/AudioPlayer.jsx +1 -1
- package/src/atoms/Avatar.jsx +1 -1
- package/src/atoms/Badge.jsx +1 -1
- package/src/atoms/Figure.jsx +1 -1
- package/src/atoms/FileIcon.jsx +1 -1
- package/src/atoms/Kbd.jsx +1 -1
- package/src/atoms/Pill.jsx +1 -1
- package/src/atoms/Tag.jsx +12 -1
- package/src/atoms/Textarea.jsx +2 -2
- package/src/atoms/ToggleSwitch.jsx +1 -1
- package/src/atoms/XYPad.jsx +1 -1
- package/src/hooks/useDragResize.js +16 -4
- package/src/molecules/AlignmentGrid.jsx +1 -1
- package/src/molecules/AudioSheet.jsx +1 -1
- package/src/molecules/CodeBlock.jsx +1 -1
- package/src/molecules/ColorRamp.jsx +1 -1
- package/src/molecules/ContentItem.jsx +1 -1
- package/src/molecules/ContentRow.jsx +1 -1
- package/src/molecules/CopyButton.jsx +1 -1
- package/src/molecules/DocFrontmatter.jsx +1 -1
- package/src/molecules/DocPage.jsx +1 -1
- package/src/molecules/DocsToc.jsx +1 -1
- package/src/molecules/Dropdown.jsx +1 -1
- package/src/molecules/DropdownTagFilter.jsx +1 -0
- package/src/molecules/EmptyState.jsx +1 -1
- package/src/molecules/FieldRow.jsx +1 -1
- package/src/molecules/ImageBlock.jsx +1 -1
- package/src/molecules/KindPreview.jsx +1 -1
- package/src/molecules/MediaTile.jsx +1 -1
- package/src/molecules/MenuPopover.jsx +1 -1
- package/src/molecules/OptionRow.jsx +1 -1
- package/src/molecules/PageHeader.jsx +1 -1
- package/src/molecules/PlaybackBar.jsx +1 -1
- package/src/molecules/ProfileCard.jsx +1 -1
- package/src/molecules/QuantityInput.jsx +1 -1
- package/src/molecules/QuickLookFrame.jsx +1 -1
- package/src/molecules/RowMenuButton.jsx +1 -1
- package/src/molecules/SectionText.jsx +1 -1
- package/src/molecules/ShapeDropdown.jsx +1 -1
- package/src/molecules/ShellDrawer.jsx +1 -1
- package/src/molecules/SortControls.jsx +1 -1
- package/src/molecules/SpecList.jsx +1 -1
- package/src/molecules/SplitToolButton.jsx +2 -2
- package/src/molecules/Stepper.jsx +1 -1
- package/src/molecules/SwatchControls.jsx +2 -2
- package/src/molecules/TabsRow.jsx +1 -1
- package/src/molecules/TiltBento.jsx +1 -1
- package/src/molecules/VideoBlock.jsx +1 -1
- package/src/molecules/VideoSheet.jsx +1 -1
- package/src/organisms/Canvas.jsx +3 -3
- package/src/organisms/ColumnBrowser.jsx +1 -1
- package/src/organisms/ContentCollection.jsx +1 -1
- package/src/organisms/CurveEditor.jsx +1 -1
- package/src/organisms/DocumentEditor.jsx +1 -1
- package/src/organisms/FeaturedCarousel.jsx +1 -1
- package/src/organisms/FramedMediaBand.jsx +1 -1
- package/src/organisms/GalleryCarousel.jsx +1 -1
- package/src/organisms/KeyframeEditor.jsx +1 -1
- package/src/organisms/LayerStack.jsx +2 -2
- package/src/organisms/MediaLibrary.jsx +2 -2
- package/src/organisms/MediaLibraryExplorer.jsx +1 -1
- package/src/organisms/MediaLibraryPages.jsx +1 -1
- package/src/organisms/MediaTileGallery.jsx +1 -1
- package/src/organisms/RecordManager.jsx +1 -1
- package/src/organisms/SectionCards.jsx +1 -1
- package/src/organisms/SectionCta.jsx +1 -1
- package/src/organisms/SectionFaq.jsx +1 -1
- package/src/organisms/SectionHero.jsx +1 -1
- package/src/organisms/SectionNewsletter.jsx +1 -1
- package/src/organisms/SectionSplit.jsx +1 -1
- package/src/organisms/SettingsPanel.jsx +8 -8
- package/src/organisms/ShellSearchOverlay.jsx +26 -16
- package/src/organisms/ShortcutsOverlay.jsx +1 -1
- package/src/organisms/SpectrumControls.jsx +4 -4
- package/src/organisms/SpectrumGrid.jsx +1 -1
- package/src/organisms/Table.jsx +4 -2
- package/src/organisms/ToolPalette.jsx +1 -1
- package/src/utilities/AsciiCursor.jsx +1 -1
- package/src/utilities/AssetGrid.jsx +1 -1
- package/src/utilities/ButtonGroup.jsx +1 -1
- package/src/utilities/CropOverlay.jsx +1 -1
- package/src/utilities/CurveOverlay.jsx +1 -1
- package/src/utilities/ErrorBoundary.jsx +1 -1
- package/src/utilities/ExitPreview.jsx +1 -1
- package/src/utilities/FullscreenOverlay.jsx +1 -1
- package/src/utilities/OverlayGlassPanel.jsx +1 -1
- package/src/utilities/Popover.jsx +1 -1
- package/src/utilities/ProsePreview.jsx +1 -1
- package/src/utilities/TiltCard.jsx +1 -1
- package/src/utilities/TransparentX.jsx +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-component",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.235.0",
|
|
4
|
+
"description": "The core component library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./src/index.js",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"react-dom": "^18.3.0 || ^19.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@kolkrabbi/kol-icons": "^0.
|
|
40
|
+
"@kolkrabbi/kol-icons": "^0.32.0"
|
|
41
41
|
},
|
|
42
42
|
"files": [
|
|
43
43
|
"src",
|
|
@@ -6,7 +6,7 @@ import { glyphSize } from '../hooks/glyphLadders.js'
|
|
|
6
6
|
import { Tooltip } from '../utilities/Popover.jsx'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* ActionButton — an icon control that CONFIRMS what it did (2026-08-15 user
|
|
9
|
+
* ActionButton — An icon button that confirms what it did. an icon control that CONFIRMS what it did (2026-08-15 user
|
|
10
10
|
* ruling: *"where is the 'code copied' or whatever message"*).
|
|
11
11
|
*
|
|
12
12
|
* The confirm-flip existed exactly once, welded to the clipboard inside
|
|
@@ -6,7 +6,7 @@ import usePrefersReducedMotion from '../hooks/usePrefersReducedMotion.js'
|
|
|
6
6
|
gsap.registerPlugin(ScrollTrigger)
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* AnimatedTitle — scroll-triggered heading that reveals its words one by
|
|
9
|
+
* AnimatedTitle — A heading whose words fly in on scroll. scroll-triggered heading that reveals its words one by
|
|
10
10
|
* one as it scrolls into view: each word starts far off-screen right,
|
|
11
11
|
* rotated in 3D, and flies into place with a fast stagger (GSAP +
|
|
12
12
|
* ScrollTrigger; plays entering the viewport, reverses scrolling back
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AudioPlayer — the interactive audio atom: one native <audio> with the UA's
|
|
2
|
+
* AudioPlayer — A native audio player with a label. the interactive audio atom: one native <audio> with the UA's
|
|
3
3
|
* own control strip, and an optional label line above it.
|
|
4
4
|
*
|
|
5
5
|
* WHY IT EXISTS. Audio was the one media kind the design system had nothing for,
|
package/src/atoms/Avatar.jsx
CHANGED
|
@@ -8,7 +8,7 @@ const SIZE_MAP = {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Avatar — the initials disc, or a photo at the same geometry.
|
|
11
|
+
* Avatar — Initials or a photo in a disc. the initials disc, or a photo at the same geometry.
|
|
12
12
|
*
|
|
13
13
|
* `src` was added when the ArticleHeader reconciliation (2026-08-15) found the
|
|
14
14
|
* consumer hand-rolling `<img className="w-12 h-12 rounded-full object-cover">`
|
package/src/atoms/Badge.jsx
CHANGED
package/src/atoms/Figure.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Figure — the shared caption'd media shell for long-form prose: optional
|
|
2
|
+
* Figure — Captioned media for long-form prose. the shared caption'd media shell for long-form prose: optional
|
|
3
3
|
* label above, an aspect-locked bordered frame around `children`, optional
|
|
4
4
|
* figcaption below. ImageBlock and VideoBlock (and the portable-text image
|
|
5
5
|
* renderer) all compose this one shell.
|
package/src/atoms/FileIcon.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Icon } from '@kolkrabbi/kol-icons'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* FileIcon — the file as a page: folded corner, the kind's glyph, the extension under it.
|
|
4
|
+
* FileIcon — A file drawn as a page. the file as a page: folded corner, the kind's glyph, the extension under it.
|
|
5
5
|
* Finder's generic document icon (user 2026-09-23: *"a generic preview for that like wav and
|
|
6
6
|
* the type below that finder has"*). What a file shows when it has nothing of its own to draw:
|
|
7
7
|
* audio without cover art, an empty file, a kind no renderer handles.
|
package/src/atoms/Kbd.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Kbd — a key cap: one key or chord (↵, ⌘K, Esc) shown as an affordance.
|
|
2
|
+
* Kbd — A key cap for a shortcut. a key cap: one key or chord (↵, ⌘K, Esc) shown as an affordance.
|
|
3
3
|
* Replaces the two hand-rolled <kbd> chips (SearchInput's shortcut hint and
|
|
4
4
|
* the palette footer) that had drifted apart (2026-09-30). A plate, so it
|
|
5
5
|
* takes oq — never fg (icons-use-oq law).
|
package/src/atoms/Pill.jsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pill — the STATIC chip: a label, category, or status word. Not clickable.
|
|
2
|
+
* Pill — A static label chip. the STATIC chip: a label, category, or status word. Not clickable.
|
|
3
3
|
*
|
|
4
4
|
* The chip family, so the right one gets reached for (documented at source,
|
|
5
5
|
* 2026-07-30):
|
package/src/atoms/Tag.jsx
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Icon } from '@kolkrabbi/kol-icons'
|
|
2
2
|
|
|
3
3
|
const ICON_SIZES = { xs: 8, sm: 10, md: 12, lg: 14 }
|
|
4
|
+
const PALETTE = new Set(['blue', 'teal', 'green', 'yellow', 'red', 'orange', 'purple'])
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
|
-
* Tag — the INTERACTIVE chip: filterable, selectable, removable.
|
|
7
|
+
* Tag — An interactive chip to filter or select. the INTERACTIVE chip: filterable, selectable, removable.
|
|
7
8
|
*
|
|
8
9
|
* The chip family (documented at source, 2026-07-30):
|
|
9
10
|
* Pill — static label. No states, no handlers. Reach for this for decoration.
|
|
@@ -53,9 +54,17 @@ export default function Tag({
|
|
|
53
54
|
icon,
|
|
54
55
|
onRemove,
|
|
55
56
|
onClick,
|
|
57
|
+
color,
|
|
56
58
|
className = '',
|
|
59
|
+
style,
|
|
57
60
|
...props
|
|
58
61
|
}) {
|
|
62
|
+
/* COLOR (the showcase review W17, 2026-09-30 — user: "do we hate color? there is no tag colors, no
|
|
63
|
+
* active error warning nothing"). A palette key (blue · teal · green · yellow · red · orange · purple,
|
|
64
|
+
* what kol-markdown's getTagColor returns). It sets one hue the variant's fill and ink mix from, so
|
|
65
|
+
* hover and active stay the variant's own; `dark` and unknown keys stay neutral. Status is Badge's
|
|
66
|
+
* job (success · warning · error · info), not a Tag color. */
|
|
67
|
+
const hue = PALETTE.has(color) ? `var(--kol-palette-${color})` : null
|
|
59
68
|
const isInteractive = !!(onClick || onRemove)
|
|
60
69
|
const Element = isInteractive ? 'button' : 'span'
|
|
61
70
|
const iconSize = ICON_SIZES[size] || 12
|
|
@@ -84,6 +93,7 @@ export default function Tag({
|
|
|
84
93
|
VARIANTS[variant] ?? VARIANTS.primary,
|
|
85
94
|
`kol-tag--${size}`,
|
|
86
95
|
active ? 'is-active' : '',
|
|
96
|
+
hue ? 'kol-tag--hue' : '',
|
|
87
97
|
className
|
|
88
98
|
].filter(Boolean).join(' ')
|
|
89
99
|
|
|
@@ -97,6 +107,7 @@ export default function Tag({
|
|
|
97
107
|
{...props}
|
|
98
108
|
type={isInteractive ? 'button' : undefined}
|
|
99
109
|
className={classes}
|
|
110
|
+
style={hue ? { ...style, '--kol-tag-hue': hue } : style}
|
|
100
111
|
onClick={onClick}
|
|
101
112
|
>
|
|
102
113
|
{icon && <Icon name={icon} size={iconSize} />}
|
package/src/atoms/Textarea.jsx
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Icon } from '@kolkrabbi/kol-icons'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Textarea — multi-line text atom built on the .kol-control shell with the
|
|
5
|
+
* Textarea — Multi-line text input. multi-line text atom built on the .kol-control shell with the
|
|
6
6
|
* `--textarea` modifier (display: block).
|
|
7
7
|
*
|
|
8
8
|
* variant="filled" (default) — persistent solid bg
|
|
@@ -14,7 +14,7 @@ import { Icon } from '@kolkrabbi/kol-icons'
|
|
|
14
14
|
* Default rows = 3 (kept short — long content gets scrollbars instead of
|
|
15
15
|
* dominating the panel). Resize is real (2026-07-08): native resize is
|
|
16
16
|
* OFF (Firefox's built-in grip cannot be hidden any other way) and the
|
|
17
|
-
* kol-icon-set-
|
|
17
|
+
* kol-icon-set-interface `resize-grip` icon IS the drag handle — corner drag,
|
|
18
18
|
* min 120×40. One grip, every browser.
|
|
19
19
|
*
|
|
20
20
|
* The X-drag is container-clamped (2026-08-12, TextareaResizeClamp): the
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* ToggleSwitch — bare by default (2026-07-08 chrome law rewrite).
|
|
4
|
+
* ToggleSwitch — An on/off switch. bare by default (2026-07-08 chrome law rewrite).
|
|
5
5
|
*
|
|
6
6
|
* variant="bare" (default) — label + track, no box
|
|
7
7
|
* variant="primary" — filled shell (surface-secondary), button geometry
|
package/src/atoms/XYPad.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRef } from 'react'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* XYPad — a two-axis control pad: drag one puck to vary two values at once.
|
|
4
|
+
* XYPad — Drag one puck to set two values. a two-axis control pad: drag one puck to vary two values at once.
|
|
5
5
|
*
|
|
6
6
|
* Lifted verbatim from kol-fxr's editor (`compose/inspectors/XYPad.jsx`,
|
|
7
7
|
* `editor-panels-the-held-specs` A6, 2026-09-03 — the row the filer marked
|
|
@@ -135,9 +135,20 @@ const readBack = (n) => {
|
|
|
135
135
|
*
|
|
136
136
|
* STATE is untouched: collapsed/expanded still persists via
|
|
137
137
|
* `stateKey`, unconditionally, as it always did. The ticket says the
|
|
138
|
-
* two are separate questions and only asks about the width.
|
|
138
|
+
* two are separate questions and only asks about the width.
|
|
139
|
+
* variant — how the handle DRAWS and what a click does (2026-10-01, user: *"we should make another
|
|
140
|
+
* drag to resize variant: on hover this pointer, and either hover or click to highlight
|
|
141
|
+
* the border, with double click expanding (like if sidebar with icons)"*):
|
|
142
|
+
* 'pill' (default) — the short pill that wakes as the pointer nears; a CLICK toggles.
|
|
143
|
+
* 'line' — the whole edge lights up on hover and while dragging; a click does
|
|
144
|
+
* nothing and a DOUBLE-CLICK toggles expand ↔ collapse (the two
|
|
145
|
+
* cannot share one gesture — see "double-click reset is gone" above,
|
|
146
|
+
* which is why this is a variant and not an addition). */
|
|
139
147
|
export default function useDragResize(ref, options = {}) {
|
|
140
|
-
const { token = 'kol-sidenav', side = 'left', defaultCollapsed = false, persistWidth = false } = options
|
|
148
|
+
const { token = 'kol-sidenav', side = 'left', defaultCollapsed = false, persistWidth = false, variant = 'pill' } = options
|
|
149
|
+
const line = variant === 'line'
|
|
150
|
+
const lineRef = useRef(line)
|
|
151
|
+
lineRef.current = line
|
|
141
152
|
/* -1 on a right-hand rail: the same rightward pointer travel that widens a
|
|
142
153
|
* left rail must NARROW a right one, because its handle faces the canvas. */
|
|
143
154
|
const dir = side === 'right' ? -1 : 1
|
|
@@ -221,7 +232,7 @@ export default function useDragResize(ref, options = {}) {
|
|
|
221
232
|
root().removeAttribute(names.draggingAttr)
|
|
222
233
|
document.body.style.cursor = ''
|
|
223
234
|
document.body.style.userSelect = ''
|
|
224
|
-
if (!moved) { toggleCollapsed(); return } // a click, not a drag
|
|
235
|
+
if (!moved) { if (!lineRef.current) toggleCollapsed(); return } // a click, not a drag — `line` toggles on double-click
|
|
225
236
|
/* Snap-to-default: release near the stylesheet default clears the
|
|
226
237
|
* override entirely. */
|
|
227
238
|
const { collapsed: c, widthPx: w } = readBack(names)
|
|
@@ -304,7 +315,8 @@ export default function useDragResize(ref, options = {}) {
|
|
|
304
315
|
/* the pill is drawn by `.kol-rail-grab` (kol-animation.css) — the hook
|
|
305
316
|
* only supplies `is-near` and `--kol-rail-grab-y`. A consumer's own
|
|
306
317
|
* className, spread after this, still wins. */
|
|
307
|
-
className: 'kol-rail-grab',
|
|
318
|
+
className: line ? 'kol-rail-grab kol-rail-grab--line' : 'kol-rail-grab',
|
|
319
|
+
...(line ? { onDoubleClick: toggleCollapsed } : {}),
|
|
308
320
|
role: 'separator',
|
|
309
321
|
'aria-orientation': 'vertical',
|
|
310
322
|
'aria-label': 'Resize navigation',
|
|
@@ -3,7 +3,7 @@ import SegmentedToggle from '../atoms/SegmentedToggle.jsx'
|
|
|
3
3
|
import { glyphSize } from '../hooks/glyphLadders.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* AlignmentGrid — the align control: TWO three-way strips, X and Y.
|
|
6
|
+
* AlignmentGrid — Align on X and Y. the align control: TWO three-way strips, X and Y.
|
|
7
7
|
*
|
|
8
8
|
* Rebuilt on `SegmentedToggle` 2026-09-03 (`editor-chrome-review`, the user's
|
|
9
9
|
* own pass over the running editor: *"alignment isnt using segmentedtoggle?"*).
|
|
@@ -18,7 +18,7 @@ function useCover(src) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* AudioSheet — audio in the Quick Look window, Finder's layout (user 2026-09-23, the reference
|
|
21
|
+
* AudioSheet — Audio in the preview window. audio in the Quick Look window, Finder's layout (user 2026-09-23, the reference
|
|
22
22
|
* shot): the artwork square left, `Time: mm:ss` beside it, the QuickTime bar docked in the
|
|
23
23
|
* window's footer. Artwork = the file's embedded ID3 `APIC` cover (`readCover`); no cover →
|
|
24
24
|
* `FileIcon`, the same page the tile shows. The `cover` / `sheet` variants are gone — there is
|
|
@@ -3,7 +3,7 @@ import { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism'
|
|
|
3
3
|
import CopyButton from './CopyButton.jsx'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* CodeBlock — REPLICATED from the elder reference
|
|
6
|
+
* CodeBlock — Highlighted code with a copy button. REPLICATED from the elder reference
|
|
7
7
|
* (kol-website/packages/ui/src/molecules/CodeBlock.jsx, 2026-07-28 user
|
|
8
8
|
* mandate): react-syntax-highlighter (Prism) with the oneDark theme flattened
|
|
9
9
|
* onto KOL chrome — transparent bg, 14px/1.6 mono, no text-shadow — a single
|
|
@@ -3,7 +3,7 @@ import ColorSwatch from '../atoms/ColorSwatch.jsx'
|
|
|
3
3
|
import { resolveCssVar, isLight } from '../hooks/cssVar.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* ColorRamp — one specimen row of color chips for a token-doc page. A label
|
|
6
|
+
* ColorRamp — One row of color chips. one specimen row of color chips for a token-doc page. A label
|
|
7
7
|
* (+ optional note) above a run of ColorSwatch chips, each captioned with its
|
|
8
8
|
* name and resolved value. Merges the former Ramp (static hex) + ColorRamp
|
|
9
9
|
* (live CSS var) widgets into one component with two mutually-exclusive inputs:
|
|
@@ -2,7 +2,7 @@ import ContentCard from './ContentCard.jsx'
|
|
|
2
2
|
import ContentRow from './ContentRow.jsx'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* ContentItem — the form switch the estate hand-wrote nine times
|
|
5
|
+
* ContentItem — A card or a row by layout. the form switch the estate hand-wrote nine times
|
|
6
6
|
* (`layout === 'list' ? row : card`). One prop picks the form; everything
|
|
7
7
|
* else passes through to ContentCard / ContentRow unchanged, so a listing
|
|
8
8
|
* under a LIST/GRID toggle is one component with one prop flipped.
|
|
@@ -2,7 +2,7 @@ import ContentMedia from './ContentMedia.jsx'
|
|
|
2
2
|
import ContentText from './ContentText.jsx'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* ContentRow — the row form of the content-card system: leading thumb (where
|
|
5
|
+
* ContentRow — The row form of a content card. the row form of the content-card system: leading thumb (where
|
|
6
6
|
* the variant has one) beside the ruled text. Box values — thumb size, gap,
|
|
7
7
|
* padding, frame — default per variant to the RULED structures from the live
|
|
8
8
|
* review (06-content-card-system.md §2 boxes): default is a bare table-like
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ActionButton from '../atoms/ActionButton.jsx'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* CopyButton — THE copy-to-clipboard control (2026-08-09 user ruling): the
|
|
4
|
+
* CopyButton — Copy text to the clipboard. THE copy-to-clipboard control (2026-08-09 user ruling): the
|
|
5
5
|
* 32×32 icon button — `copy` glyph flipping to `check` for 2s on copied,
|
|
6
6
|
* no text label. This is the button CodeBlock carried privately since the
|
|
7
7
|
* 2026-07-28 elder replication, promoted to the one shared atom; the old
|
|
@@ -50,7 +50,7 @@ const orderFields = (metadata) => {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
* DocFrontmatter — the frontmatter block above a markdown document's prose: the
|
|
53
|
+
* DocFrontmatter — A document's frontmatter block. the frontmatter block above a markdown document's prose: the
|
|
54
54
|
* `FRONTMATTER` eyebrow, icon + label keys, mono values, tags as `Tag` chips,
|
|
55
55
|
* arrays stacked, a hairline below. A member of `DocPage`.
|
|
56
56
|
*
|
|
@@ -3,7 +3,7 @@ import DocFrontmatter from './DocFrontmatter.jsx'
|
|
|
3
3
|
/* taxonomy-ok: molecule — nests DocFrontmatter (relative). */
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* DocPage — ONE plate for every document (DocPageAndKindShowcase, kol-r2b2
|
|
6
|
+
* DocPage — A page for any text document. ONE plate for every document (DocPageAndKindShowcase, kol-r2b2
|
|
7
7
|
* 2026-08-27, user ruling): markdown · text · code · JSON · YAML render on the
|
|
8
8
|
* same page. Where it sits decides its presentation, in kol-theme (≥0.75.0):
|
|
9
9
|
*
|
|
@@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef } from 'react'
|
|
|
2
2
|
import useScrollSpy from '../hooks/useScrollSpy.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* DocsToc — on-page table of contents for long docs pages: a flat list of
|
|
5
|
+
* DocsToc — A page's table of contents. on-page table of contents for long docs pages: a flat list of
|
|
6
6
|
* anchor links that highlights the heading currently in view. The scroll
|
|
7
7
|
* spy is useScrollSpy (IntersectionObserver + edge lock); this component
|
|
8
8
|
* only renders the nav and maps the active id onto the links.
|
|
@@ -6,7 +6,7 @@ import { PopoverPanel, usePopover } from '../utilities/Popover.jsx'
|
|
|
6
6
|
import { glyphSize, indicatorSize } from '../hooks/glyphLadders.js'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Dropdown — trigger IS button chrome (2026-07-08 chrome law).
|
|
9
|
+
* Dropdown — Pick one value from a list. trigger IS button chrome (2026-07-08 chrome law).
|
|
10
10
|
*
|
|
11
11
|
* The trigger emits `kol-btn kol-btn-{variant} kol-btn-{size}` so it renders
|
|
12
12
|
* pixel-identical to a Button of the same variant/size — fills, hover,
|
|
@@ -7,6 +7,7 @@ const SIZE_MAP = {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
+
* @deprecated 2026-10-01 — use SettingsMulti (a many-of-N `Dropdown`). Drops when nobody imports it (04-retirements.md).
|
|
10
11
|
* Dropdown Tag Filter
|
|
11
12
|
* Multi-select dropdown where all items start selected
|
|
12
13
|
* Click to deselect, with "Deselect All" option
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EmptyState — a stacked "nothing here yet / nothing selected" text block
|
|
2
|
+
* EmptyState — What a panel shows when it has nothing. a stacked "nothing here yet / nothing selected" text block
|
|
3
3
|
* for inspectors, empty rails and unshipped panels. Ported from the brand
|
|
4
4
|
* editor's inspector Placeholder (renamed: AssetPlaceholder already owns
|
|
5
5
|
* the placeholder name). All lines render as authored — no auto casing
|
|
@@ -6,7 +6,7 @@ import Dropdown from './Dropdown'
|
|
|
6
6
|
import OptionRow from './OptionRow.jsx'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* FieldRow — one labeled field row in a record surface (lobby: RecordManager).
|
|
9
|
+
* FieldRow — One labelled field in a record. one labeled field row in a record surface (lobby: RecordManager).
|
|
10
10
|
* Label column left, control right; `type` picks the control:
|
|
11
11
|
*
|
|
12
12
|
* text → Input, with an optional hint line under it (the slug's derived URL)
|
|
@@ -2,7 +2,7 @@ import Figure from '../atoms/Figure.jsx'
|
|
|
2
2
|
import Image from '../atoms/Image.jsx'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* ImageBlock — a captioned prose image: the DS Figure shell (optional label,
|
|
5
|
+
* ImageBlock — A captioned image for prose. a captioned prose image: the DS Figure shell (optional label,
|
|
6
6
|
* aspect-locked bordered frame, optional figcaption) wrapping a cover-fit DS
|
|
7
7
|
* Image. The long-form counterpart to VideoBlock — both compose the same
|
|
8
8
|
* Figure atom, so the frame chrome lives in one place.
|
|
@@ -13,7 +13,7 @@ import DocPage from './DocPage.jsx'
|
|
|
13
13
|
/* taxonomy-ok: molecule — nests the DS media atoms + CodeBlock (relative). */
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* KindPreview — a preview for any kind of file: kol-r2b2's `KindPreview.jsx`,
|
|
16
|
+
* KindPreview — A preview for any kind of file. a preview for any kind of file: kol-r2b2's `KindPreview.jsx`,
|
|
17
17
|
* promoted 2026-08-27 (SettingsPanelChromeAndColumnPreview). Before it, anything
|
|
18
18
|
* that was not an image or a video showed a grey box with the word "text".
|
|
19
19
|
* HLS → `HlsVideo` (inert — the DS's background-video atom, preview only),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import RowMenuButton from './RowMenuButton.jsx'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* MediaTile — one file in the grid view, Finder's icon view (user 2026-09-23: *"skip the container
|
|
5
|
+
* MediaTile — One file in the grid view. one file in the grid view, Finder's icon view (user 2026-09-23: *"skip the container
|
|
6
6
|
* card, just show the title and preview, give it hilight focus state … we are fighting the card
|
|
7
7
|
* component"*). The grid borrowed `ContentCard` from the content-filters set — a card with a date,
|
|
8
8
|
* a size and two buttons — so the one view of files that should read like the other two carried
|
|
@@ -2,7 +2,7 @@ import { MenuItem as MenuTrigger } from './MenuItem.jsx'
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @deprecated 2026-07-02 — alias of MenuItem (menu-family unify). Drops when nobody imports it (04-retirements.md).
|
|
5
|
-
* MenuPopover — DEPRECATED alias of MenuItem (2026-07-02 menu-family
|
|
5
|
+
* MenuPopover — Old name for MenuItem. DEPRECATED alias of MenuItem (2026-07-02 menu-family
|
|
6
6
|
* unification).
|
|
7
7
|
*
|
|
8
8
|
* The two triggers had an identical API (label, children incl. ({ close })
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* OptionRow — one row in a list you move through: the palette's results, a browser's rows, a
|
|
2
|
+
* OptionRow — One row in a list you move through. one row in a list you move through: the palette's results, a browser's rows, a
|
|
3
3
|
* dropdown's options. Lifted out of ShellSearchOverlay (2026-09-30), where it was hand-rolled next to
|
|
4
4
|
* DropdownTagFilter's, FieldRow's and ColumnBrowser's own — four rows for one job.
|
|
5
5
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import SectionText from './SectionText.jsx'
|
|
2
2
|
import { TITLE_ROLES, useMasthead } from '../utilities/masthead.js'
|
|
3
3
|
/**
|
|
4
|
-
* PageHeader — the page's masthead: an optional eyebrow, the title, and a
|
|
4
|
+
* PageHeader — The page masthead. the page's masthead: an optional eyebrow, the title, and a
|
|
5
5
|
* sub-line.
|
|
6
6
|
*
|
|
7
7
|
* LIVES IN kol-component SINCE 2026-09-03 (page-header-one-masthead,
|
|
@@ -11,7 +11,7 @@ export const clock = (s) => `${String(Math.floor((s || 0) / 60)).padStart(2, '0'
|
|
|
11
11
|
const RATES = [1, 1.5, 2]
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* PlaybackBar — the QuickTime bar, ruled against the reference (PlaybackBarAndAudioSheet,
|
|
14
|
+
* PlaybackBar — Play and scrub media. the QuickTime bar, ruled against the reference (PlaybackBarAndAudioSheet,
|
|
15
15
|
* kol-r2b2 2026-08-27; supersedes 0.107.0's strip): a frosted strip over media —
|
|
16
16
|
* `bg-fg-ab-48 backdrop-blur-xl`, **radius 12** (`rounded-xl`, the user's
|
|
17
17
|
* ruling on this surface — the 4px container law stands elsewhere), `h-16 px-8
|
|
@@ -9,7 +9,7 @@ import { surfaceClass } from '../utilities/sectionSurface.js'
|
|
|
9
9
|
* check can't see). */
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* ProfileCard — the digital namecard (ProfileCard, kol-website 2026-09-01;
|
|
12
|
+
* ProfileCard — A digital name card. the digital namecard (ProfileCard, kol-website 2026-09-01;
|
|
13
13
|
* carried class-for-class from `apps/web/src/components/ui/ProfileCard.jsx`):
|
|
14
14
|
* a square photo with a disclosure control inset on it, and a SHELF that opens
|
|
15
15
|
* under it (vertical) or beside it (horizontal) — logo, name, mailto, a rack of
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* QuantityInput — a compact integer quantity picker with two control layouts.
|
|
4
|
+
* QuantityInput — Pick a whole-number quantity. a compact integer quantity picker with two control layouts.
|
|
5
5
|
*
|
|
6
6
|
* controls="chevron" (default) — value with a stacked up/down chevron pair
|
|
7
7
|
* on the right, inside a full-width field.
|
|
@@ -5,7 +5,7 @@ import CloseButton from '../atoms/CloseButton.jsx'
|
|
|
5
5
|
/* taxonomy-ok: molecule — nests Button (atom) + CloseButton (utility). */
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* QuickLookFrame — the Finder Quick Look window (user 2026-09-23: *"put them in a container LIKE
|
|
8
|
+
* QuickLookFrame — The preview window. the Finder Quick Look window (user 2026-09-23: *"put them in a container LIKE
|
|
9
9
|
* FINDER … it just makes everything in the design easier to manage if its wrapped together"*).
|
|
10
10
|
* Every kind sat loose on the scrim with its own chrome — a caption line under a picture, a bar
|
|
11
11
|
* floating over a video, a see-through page — so no two kinds looked like one feature. One
|
|
@@ -3,7 +3,7 @@ import Button from '../atoms/Button.jsx'
|
|
|
3
3
|
import useCoarsePointer from '../hooks/useCoarsePointer.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* RowMenuButton — the `···` that stands in for right-click on a touch device (media D-touch,
|
|
6
|
+
* RowMenuButton — A row's menu on touch devices. the `···` that stands in for right-click on a touch device (media D-touch,
|
|
7
7
|
* 2026-09-23). A finger has no right button, and a held press (`useLongPress`) is invisible until
|
|
8
8
|
* you know it, so on `pointer: coarse` a row or tile that has a context menu wears this. It calls
|
|
9
9
|
* the SAME handler right-click calls, with the tap as the event, so the payload, the selection
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SectionText — the ruled text block of the SECTION family (SectionSet,
|
|
2
|
+
* SectionText — The label, headline and body block. the ruled text block of the SECTION family (SectionSet,
|
|
3
3
|
* kol-website 2026-08-26): label · headline · body · actions, every slot
|
|
4
4
|
* opt-in — an omitted slot renders nothing. The section-tier twin of
|
|
5
5
|
* ContentText: the card family solved "every organism types its own kicker /
|
|
@@ -5,7 +5,7 @@ import { PopoverPanel, usePopover, Tooltip } from '../utilities/Popover.jsx'
|
|
|
5
5
|
import { MenuDropdownItem } from './MenuItem.jsx'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* ShapeDropdown — split icon-button + variant-menu molecule (the tool-palette
|
|
8
|
+
* ShapeDropdown — A tool button with a shape menu. split icon-button + variant-menu molecule (the tool-palette
|
|
9
9
|
* idiom: Select · Text · [Shape ▾] · Pattern). The main button reflects the
|
|
10
10
|
* current variant and fires `onAction` with its id; the chevron half opens a
|
|
11
11
|
* menu of all variants — picking one fires `onChange` and closes.
|
|
@@ -12,7 +12,7 @@ const FOCUSABLE =
|
|
|
12
12
|
'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* ShellDrawer — THE edge drawer: a portalled panel that slides in from the
|
|
15
|
+
* ShellDrawer — A panel that slides in from an edge. THE edge drawer: a portalled panel that slides in from the
|
|
16
16
|
* left, right or BOTTOM viewport edge over a dimming backdrop. Distinct from Modal
|
|
17
17
|
* (centered prompt/confirm) and FullscreenOverlay (fills the whole viewport,
|
|
18
18
|
* not an edge sheet). Escape, backdrop click and the built-in close button
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import SortHeader from '../atoms/SortHeader.jsx'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* SortControls — the sortable-header group (ContentFiltersCollection, kol-r2b2
|
|
4
|
+
* SortControls — A row of sortable headers. the sortable-header group (ContentFiltersCollection, kol-r2b2
|
|
5
5
|
* 2026-08-27): `flex items-center gap-4` of SortHeaders. Click an inactive field
|
|
6
6
|
* → it becomes the sort, ASCENDING; click the active field → the direction
|
|
7
7
|
* flips. `onSort(field)` fires once per click — the consumer writes ONE state
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Divider from '../atoms/Divider.jsx'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* SpecList — compact definition list of [label | value] rows: label left and
|
|
4
|
+
* SpecList — Label and value rows. compact definition list of [label | value] rows: label left and
|
|
5
5
|
* muted, value right-aligned one tone brighter, Divider-separated between
|
|
6
6
|
* rows (never after the last). Data-agnostic "key facts" strip — the caller
|
|
7
7
|
* formats values before passing (e.g. "Limited (30)", "A3, A2, A1").
|
|
@@ -4,7 +4,7 @@ import { PopoverPanel, usePopover, Tooltip } from '../utilities/Popover.jsx'
|
|
|
4
4
|
import { glyphSize } from '../hooks/glyphLadders.js'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* SplitToolButton — single-trigger split tool button + variant menu (the
|
|
7
|
+
* SplitToolButton — A tool button with a variant menu. single-trigger split tool button + variant menu (the
|
|
8
8
|
* tool-palette idiom: Select · Text · [Shape ◢] · Pattern). A pinned-square
|
|
9
9
|
* quiet/pressed trigger shows the current variant while the group is `active`
|
|
10
10
|
* (else the `lastPicked` variant) plus a corner fold indicator; ONE click both
|
|
@@ -65,7 +65,7 @@ import { glyphSize } from '../hooks/glyphLadders.js'
|
|
|
65
65
|
* @param {string} props.className - Additional classes on the trigger
|
|
66
66
|
*/
|
|
67
67
|
|
|
68
|
-
/* Corner fold marker — `fold-indicator`, promoted into kol-icon-set-
|
|
68
|
+
/* Corner fold marker — `fold-indicator`, promoted into kol-icon-set-interface
|
|
69
69
|
* 2026-09-03 from kol-fxr's own drawing (editor-set-is-behind-its-source); the
|
|
70
70
|
* comment that stood here said it did not exist yet and should be promoted, so
|
|
71
71
|
* this is that. Lives inside the button so it dims with kol-btn-quiet and
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Stepper — number input + chevron buttons, built on the .kol-control shell.
|
|
2
|
+
* Stepper — A number input with step buttons. number input + chevron buttons, built on the .kol-control shell.
|
|
3
3
|
*
|
|
4
4
|
* size="xs" / "sm" (default) / "md" / "lg" — matched padding + type class.
|
|
5
5
|
* Chevron scale follows the size: 6 / 8 / 10 / 12 px each, stacked. xs is the
|
|
@@ -92,7 +92,7 @@ export function SwatchStack({
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* EyedropPick — eyedropper icon button + a sample chip of the sampled color.
|
|
95
|
+
* EyedropPick — Sample a color from the screen. eyedropper icon button + a sample chip of the sampled color.
|
|
96
96
|
* The button is hidden when the browser EyeDropper API is unavailable (no
|
|
97
97
|
* affordance for an action that can't run); when supported but unusable pass
|
|
98
98
|
* `disabled` to dim it. `onPick` is the app seam where EyeDropper + canvas
|
|
@@ -173,7 +173,7 @@ function NoneMarker({ onClear }) {
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
/**
|
|
176
|
-
* SwatchControls —
|
|
176
|
+
* SwatchControls — Fill and stroke swatches with an eyedropper. The composed colour-panel top row: SwatchStack (fill /
|
|
177
177
|
* stroke paint chips + swap + none) alongside EyedropPick (eyedropper +
|
|
178
178
|
* sample chip). Fully controlled and store-free; the app owns the swap, clear,
|
|
179
179
|
* and pick handlers.
|
|
@@ -5,7 +5,7 @@ import { Icon } from '@kolkrabbi/kol-icons'
|
|
|
5
5
|
/* taxonomy-ok: nests kol-icons's Icon */
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* TabsRow — labeled underline tab strip: text tabs where the active tab gets
|
|
8
|
+
* TabsRow — Text tabs with an underline. labeled underline tab strip: text tabs where the active tab gets
|
|
9
9
|
* a 2px bottom underline and emphasis color; inactive tabs are muted and
|
|
10
10
|
* brighten on hover. Optional leading close button and trailing minimise
|
|
11
11
|
* chevron render only when their handlers are passed — no outer chrome, the
|
|
@@ -64,7 +64,7 @@ function Media({ src, poster, className }) {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
|
-
* TiltBento — media hover-card for grid/bento walls, the Tilt family's composed
|
|
67
|
+
* TiltBento — A tilting media card for bento walls. media hover-card for grid/bento walls, the Tilt family's composed
|
|
68
68
|
* tile (was `BentoCard` until 2026-08-27, user ruling: the three tilting things
|
|
69
69
|
* in the estate are ONE prefix family — `TiltCard` the bare frame, `TiltBento`
|
|
70
70
|
* this tile, `useTilt` the one hook; `BentoCard` is the alias on the retirement
|
|
@@ -15,7 +15,7 @@ export function getEmbedUrl(url) {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* VideoBlock — a captioned prose video: the DS Figure shell (optional label,
|
|
18
|
+
* VideoBlock — A captioned video for prose. a captioned prose video: the DS Figure shell (optional label,
|
|
19
19
|
* aspect-locked bordered frame, optional figcaption) wrapping either an
|
|
20
20
|
* <iframe> embed (YouTube/Vimeo, auto-parsed from `url`) or a native <video>
|
|
21
21
|
* file player. Embed wins when `url` parses; otherwise the `file` player runs.
|
|
@@ -5,7 +5,7 @@ import QuickLookFrame from './QuickLookFrame.jsx'
|
|
|
5
5
|
/* taxonomy-ok: molecule — nests PlaybackBar + QuickLookFrame (relative). */
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* VideoSheet — video in the Quick Look window: the frame at the video's own aspect ratio, the
|
|
8
|
+
* VideoSheet — A video in the preview window. video in the Quick Look window: the frame at the video's own aspect ratio, the
|
|
9
9
|
* QuickTime bar docked in the window's footer (2026-09-23 — it floated over the picture, which
|
|
10
10
|
* made video the one kind whose controls sat on the media). No native controls; click on the
|
|
11
11
|
* video toggles play; no autoplay (user 2026-09-23 — Quick Look opens paused), `playsInline`, `preload="metadata"`.
|