kerfjs 5.0.0-beta.29 → 5.0.0-beta.30
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/CHANGELOG.md +91 -0
- package/ai/cursorrules +3 -1
- package/ai/manifest.json +9 -7
- package/ai/skill.md +3 -1
- package/dist/{chunk-V757BT6U.js → chunk-DLY444MN.js} +2 -2
- package/dist/{chunk-V757BT6U.js.map → chunk-DLY444MN.js.map} +1 -1
- package/dist/{chunk-QFUNWHKH.js → chunk-JRKE6XEK.js} +2 -2
- package/dist/{chunk-QFUNWHKH.js.map → chunk-JRKE6XEK.js.map} +1 -1
- package/dist/html.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/jsx-runtime.d.ts +12 -5
- package/dist/jsx-runtime.js +1 -1
- package/dist/list.js +1 -1
- package/dist/overlay.js +2 -2
- package/dist/remount.js +1 -1
- package/dist/router.js +1 -1
- package/dist/scope.js +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,102 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
- Added `wa-dialog.hide-actions` support to `@kerfjs/ui/webawesome.css`, hiding
|
|
4
|
+
Web Awesome's directly exported `header-actions` shadow part for dialogs that
|
|
5
|
+
provide their own dismissal affordance.
|
|
6
|
+
|
|
3
7
|
All notable changes to **kerf** are documented in this file.
|
|
4
8
|
|
|
5
9
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
10
|
|
|
7
11
|
## [Unreleased]
|
|
8
12
|
|
|
13
|
+
- Added catalog-driven CSS value diagnostics across `eslint-plugin-kerfjs`,
|
|
14
|
+
`kerf-ui-analyze`, and `kerf-ui-doctor`. Stable `KUI-L013`–`KUI-L017`
|
|
15
|
+
findings now identify raw or unknown values, wrong-dimension helpers,
|
|
16
|
+
incomplete expressions, declaration-list escapes, and review-worthy
|
|
17
|
+
off-scale spacing from first- or third-party component catalogs.
|
|
18
|
+
- Extended the property-specific `@kerfjs/ui/css-values` contracts: `List.flex`
|
|
19
|
+
now uses finite keywords or `flex()`, `Skeleton` dimensions use `CssSize` and
|
|
20
|
+
`CssLength`, and `SelectChoice.color` uses `uiColor()` or `colorVar()`.
|
|
21
|
+
Removed the unrestricted `style` escape hatches from `ListItem` and
|
|
22
|
+
`ListActionRow` before the 5.0 stable release; use `className`, public tokens,
|
|
23
|
+
and cataloged props instead.
|
|
24
|
+
- Added typed, CSS-free `@kerfjs/ui/css-values` builders and branded complete
|
|
25
|
+
versus expression length types. `List.gap` now accepts direct spacing-token
|
|
26
|
+
shorthands or complete `CssLength` values and rejects unrestricted CSS strings.
|
|
27
|
+
- Added the public recursive `JSXChildren` type from both `kerfjs` and
|
|
28
|
+
`kerfjs/jsx-runtime`, giving third-party function components a canonical
|
|
29
|
+
declaration for nullable, signal-backed, and arbitrarily nested readonly
|
|
30
|
+
child content that matches the runtime.
|
|
31
|
+
- Added the public recursive `KerfUiContent` type across semantic UI content
|
|
32
|
+
zones, so nullable conditionals and mutable or readonly nested component
|
|
33
|
+
arrays compose directly without a `Fragment` while raw strings, numbers, and
|
|
34
|
+
signals remain rejected outside explicit text positions.
|
|
35
|
+
- Fixed bottom `Workbench` drawers overshooting and snapping during collapse
|
|
36
|
+
transitions by anchoring fixed-height content to the shell's stable bottom
|
|
37
|
+
edge.
|
|
38
|
+
- Fixed bottom `CollapsiblePanel` drawers overshooting their open position and
|
|
39
|
+
snapping back by anchoring fixed-height content to the panel's stable bottom
|
|
40
|
+
edge throughout the transform transition.
|
|
41
|
+
- Formalized named `SafeHtml` prop slots as explicit `zone.jsx.prop` bindings
|
|
42
|
+
in the UI composition catalog and generalized `ui-composition` linting beyond
|
|
43
|
+
Toolbar, including statically visible `children`, cardinality, aliases,
|
|
44
|
+
namespaces, arrays, fragments, and branches.
|
|
45
|
+
- Added `ToolbarControlGroup.avatarImage`, painting contained avatar imagery on
|
|
46
|
+
a lone group or on the pressed highlight when the group has multiple buttons.
|
|
47
|
+
- Split the AppTab and TabBar catalog routes into focused component specimens,
|
|
48
|
+
and moved their controlled selection, tabpanel, overflow, add/close, and
|
|
49
|
+
reorder lifecycle into a separate application-tabs composition demo.
|
|
50
|
+
- Fixed `wireNavStack` focus ownership across controlled navigation: pushes
|
|
51
|
+
focus the new top view, pops restore its remembered descendant, and removed
|
|
52
|
+
targets fall back through `data-nav-focus`, the first enabled control, and
|
|
53
|
+
the view container.
|
|
54
|
+
- Fixed compact mixed-content `ToolbarControlGroup` dropdown triggers being
|
|
55
|
+
forced into an icon-only width, which painted the label across its separator
|
|
56
|
+
and the Web Awesome caret outside the group.
|
|
57
|
+
- Made `ListItem` clip label, status, and dormant trailing painting to its
|
|
58
|
+
rounded row boundary so compact and constrained rows cannot visibly overflow;
|
|
59
|
+
described rows now grow enough to keep their owned two-line label readable.
|
|
60
|
+
- Fixed compact toolbar `Select` focus to follow its owning group's pill or
|
|
61
|
+
rounded geometry and restored consistent spacing between popup icons and labels.
|
|
62
|
+
- Fixed the compact-toolbar recipe's independent overflow action to use the
|
|
63
|
+
same full-height pill geometry as its adjacent toolbar controls.
|
|
64
|
+
- Fixed the catalog footer's `Components` relationship selector to fit its icon
|
|
65
|
+
and plural label and give popup headings/items consistent border clearance.
|
|
66
|
+
- Fixed a collapsible `TokenSearchField` inside a rounded
|
|
67
|
+
`ToolbarControlGroup` retaining its independent pill radius instead of using
|
|
68
|
+
the group's shared concentric highlight radius.
|
|
69
|
+
- Updated the header-composition catalog demo's supporting copy to use the
|
|
70
|
+
horizontal `ListInsetText` geometry, aligning it with the value-table content
|
|
71
|
+
edge across responsive, RTL, and zoomed layouts.
|
|
72
|
+
- Updated the `Pane` catalog demo's secondary header copy to use
|
|
73
|
+
`ListInsetText`, aligning it with the standard pane content gutter at wide and
|
|
74
|
+
narrow sizes instead of maintaining demo-only padding.
|
|
75
|
+
- Completed `NavStack` navigation transitions by cross-fading top and bottom
|
|
76
|
+
chrome alongside content slides, added per-view bottom toolbars with a
|
|
77
|
+
persistent fallback, and replaced the static focused demo with a working
|
|
78
|
+
push/pop flow.
|
|
79
|
+
- Replaced the static compact `SplitView` detail specimen with a controlled,
|
|
80
|
+
interactive list-to-detail drill-down whose Back action restores the list;
|
|
81
|
+
the roomy example now demonstrates controlled selection as well.
|
|
82
|
+
- Documented and demonstrated list-first dialog bodies: use `List` with
|
|
83
|
+
`bodyInset="none"`, and wrap bare dialog copy in `ListInsetText` so content
|
|
84
|
+
shares the standard list gutter without double-insetting.
|
|
85
|
+
- Fixed `@kerfjs/ui`'s collapsible `TokenSearchField` keep-open ownership in
|
|
86
|
+
WebKit: when `focusout.relatedTarget` is missing during pointer activation of
|
|
87
|
+
an external `data-token-search-keep-open` surface, the helper now uses the
|
|
88
|
+
actual pointer target instead of collapsing and removing the target before
|
|
89
|
+
its click handler runs.
|
|
90
|
+
- Added a first-class vibrant `pop` semantic color for attractive non-status
|
|
91
|
+
emphasis, with complete light/dark/increased-contrast token roles and typed
|
|
92
|
+
StateBanner, ListHeader indicator, and ToolbarControlGroup selected tones.
|
|
93
|
+
- Fixed managed `TokenSearchField` Clear focus before the next input task, so
|
|
94
|
+
immediate typing stays in the replacement editor instead of triggering page
|
|
95
|
+
shortcuts; genuine later focus handoffs and selections remain untouched.
|
|
96
|
+
- Fixed `@kerfjs/ui/tab-scaffold` bottom-tab labels being vertically clipped by
|
|
97
|
+
flex shrinkage while retaining horizontal ellipsis for long labels.
|
|
98
|
+
- Made inset selection and hover highlights follow their owning control's pill
|
|
99
|
+
or rounded shape, with concentric inner radii derived from the full inset.
|
|
9
100
|
- Fixed animated `ResizableRegion` overlays so remembered desktop dimensions
|
|
10
101
|
cannot make their content overflow the responsive panel cap on narrow screens.
|
|
11
102
|
- Added configuration-first application-panel policies across `ResizableRegion`,
|
package/ai/cursorrules
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- kerf-skill-version: 1.
|
|
1
|
+
<!-- kerf-skill-version: 1.21.0 -->
|
|
2
2
|
|
|
3
3
|
# kerf.cursorrules — rules for building apps with kerf
|
|
4
4
|
|
|
@@ -87,6 +87,7 @@ import {
|
|
|
87
87
|
isSafeHtml,
|
|
88
88
|
raw,
|
|
89
89
|
Fragment,
|
|
90
|
+
type JSXChildren,
|
|
90
91
|
} from "kerfjs";
|
|
91
92
|
|
|
92
93
|
// Optional, only when you need granular collection updates:
|
|
@@ -114,6 +115,7 @@ if (import.meta.env.DEV) await import("kerfjs/dev");
|
|
|
114
115
|
| `attr(name)` | dynamic factory — `attr<N,V=string>(name)` returns `(value: V) => { readonly [name]: V }`; both generics off → N inferred, V defaults to string; specify both to constrain values |
|
|
115
116
|
| `toElement(jsx)` | parse JSX into a DOM node (SVG-aware). Single-root → `Element`; multi-root (`<><svg/> label</>`, two icons side by side) → `DocumentFragment` that `appendChild`/`replaceChildren`/`append` inlines into the parent. |
|
|
116
117
|
| `raw(html)` | inject pre-escaped HTML |
|
|
118
|
+
| `JSXChildren` | recursive type for general-purpose component `children`: SafeHtml, primitives, read-only signals, nullish/boolean empty values, and readonly arrays at any depth. Use a narrower union for semantically restricted slots |
|
|
117
119
|
| `arraySignal(initial?)` | granular keyed-list signal at `kerfjs/array-signal` subpath; `each()` reconciles in O(patches) |
|
|
118
120
|
| `` html`…` `` | tagged template at `kerfjs/html` subpath — JSX-identical runtime semantics with NO build step (CDN/importmap projects). Real HTML attribute names (`class`, not `className`); holes only in text positions or as a COMPLETE attribute value (`attr=${v}` / `attr="${v}"`) |
|
|
119
121
|
|
package/ai/manifest.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"kerfjsVersion": "5.0.0-beta.
|
|
2
|
+
"kerfjsVersion": "5.0.0-beta.30",
|
|
3
3
|
"files": [
|
|
4
4
|
{
|
|
5
5
|
"name": "skill",
|
|
6
6
|
"source": "kerf.claude-skill.md",
|
|
7
7
|
"bundle": "ai/skill.md",
|
|
8
8
|
"dest": ".claude/skills/kerf-app/SKILL.md",
|
|
9
|
-
"version": "1.
|
|
10
|
-
"sha256": "
|
|
9
|
+
"version": "1.23.0",
|
|
10
|
+
"sha256": "28b82b4d31b98814c8fbbe1cb0bcf716192deb494c020b9af41a30830e6a0007",
|
|
11
11
|
"history": {
|
|
12
12
|
"1.0.0": "bef982cb743fd4c73e666ee5cf774112e57c93ebb13b24bbacbf08577db0930a",
|
|
13
13
|
"1.1.0": "f2aadb21e33dd389028951ae1ecbd9f8ba68648b3c5beba43fb4dfa2ab29f195",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"1.19.0": "bbbe87446cc4e1be250d27152adfd385431f4498cde320534f65f10f853ab7f9",
|
|
37
37
|
"1.20.0": "aa88ccdbf969624bbc6cefadba76ada1f090fae436597a7bab564e24c467287f",
|
|
38
38
|
"1.21.0": "265b747eeb9c3d445c60d66a1109eec42705075b7cd154d107bd79d543c1e7e5",
|
|
39
|
-
"1.22.0": "dc99b0ca5e911be11cbfa2ae515c0e161a414a5185895069535c41ba56664e70"
|
|
39
|
+
"1.22.0": "dc99b0ca5e911be11cbfa2ae515c0e161a414a5185895069535c41ba56664e70",
|
|
40
|
+
"1.23.0": "28b82b4d31b98814c8fbbe1cb0bcf716192deb494c020b9af41a30830e6a0007"
|
|
40
41
|
}
|
|
41
42
|
},
|
|
42
43
|
{
|
|
@@ -44,8 +45,8 @@
|
|
|
44
45
|
"source": "kerf.cursorrules",
|
|
45
46
|
"bundle": "ai/cursorrules",
|
|
46
47
|
"dest": ".cursorrules",
|
|
47
|
-
"version": "1.
|
|
48
|
-
"sha256": "
|
|
48
|
+
"version": "1.21.0",
|
|
49
|
+
"sha256": "a1b663b44650b1a04f89c60b26b002322fc6789650291477e14e13329c3ce25f",
|
|
49
50
|
"history": {
|
|
50
51
|
"1.0.0": "98f7faff2b7585ef9cc511add42ea5d9bf0cbae8307b066af090e9281136d2ab",
|
|
51
52
|
"1.1.0": "a2ec8c221dc694c98b81009cd2d99f9159a45fda94585de2f54471b227099eda",
|
|
@@ -72,7 +73,8 @@
|
|
|
72
73
|
"1.17.0": "6ad51fb0eec468f584346d1d7b4d1c2eca2cb52b04891b38ba44e93b57eb9e1c",
|
|
73
74
|
"1.18.0": "de3eea1bc181da629694d19a0817d252a868e4704437fbdd9e923856b8a0890a",
|
|
74
75
|
"1.19.0": "c5b91e449f6feccaa36a04cb7f8550d3e414eb2795ea6c5dccdf6071206b3261",
|
|
75
|
-
"1.20.0": "5e7b8d8ddc41f60220961417c9ae01c193fae045378a10a3e9c96a0e3cf10a03"
|
|
76
|
+
"1.20.0": "5e7b8d8ddc41f60220961417c9ae01c193fae045378a10a3e9c96a0e3cf10a03",
|
|
77
|
+
"1.21.0": "a1b663b44650b1a04f89c60b26b002322fc6789650291477e14e13329c3ce25f"
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
]
|
package/ai/skill.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kerf-app
|
|
3
3
|
description: Build UIs in the kerf reactive framework and its @kerfjs/ui component package (https://github.com/brianwestphal/kerf). Use this skill whenever the user is writing or modifying code that imports `kerfjs` or `@kerfjs/ui`, asks to add a feature to a kerf app, or asks "how do I do X in kerf?". Use it proactively the moment you spot a kerf import in the file you're editing.
|
|
4
|
-
kerf-skill-version: 1.
|
|
4
|
+
kerf-skill-version: 1.23.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Building apps with kerf
|
|
@@ -93,6 +93,7 @@ import {
|
|
|
93
93
|
isSafeHtml,
|
|
94
94
|
raw,
|
|
95
95
|
Fragment,
|
|
96
|
+
type JSXChildren,
|
|
96
97
|
} from "kerfjs";
|
|
97
98
|
|
|
98
99
|
// Optional, only when you need granular collection updates:
|
|
@@ -120,6 +121,7 @@ if (import.meta.env.DEV) await import("kerfjs/dev");
|
|
|
120
121
|
| `attr(name)` | dynamic factory — `attr<N,V=string>(name)` returns `(value: V) => { readonly [name]: V }`; both generics off → N inferred, V defaults to string; specify both to constrain values |
|
|
121
122
|
| `toElement(jsx)` | parse JSX into a DOM node (SVG-aware). Single-root → `Element`; multi-root (`<><svg/> label</>`, two icons side by side) → `DocumentFragment` that `appendChild`/`replaceChildren`/`append` inlines into the parent. |
|
|
122
123
|
| `raw(html)` | inject pre-escaped HTML |
|
|
124
|
+
| `JSXChildren` | recursive type for general-purpose component `children`: SafeHtml, primitives, read-only signals, nullish/boolean empty values, and readonly arrays at any depth. Use a narrower union for semantically restricted slots |
|
|
123
125
|
| `arraySignal(initial?)` | granular keyed-list signal (subpath `kerfjs/array-signal`); `each()` reconciles in O(patches) |
|
|
124
126
|
| `` html`…` `` | tagged template (subpath `kerfjs/html`) — JSX-identical runtime semantics with NO build step, for CDN/importmap projects. Real HTML attribute names (`class`, not `className`); holes only in text positions or as a COMPLETE attribute value (`attr=${v}` / `attr="${v}"`) |
|
|
125
127
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { itemVersion } from './chunk-5WRGJZV6.js';
|
|
2
2
|
import { parseRowTemplate, rowContractError, parseSingleRow, collectTemplateChildren } from './chunk-WKIPLNVO.js';
|
|
3
|
-
import { captureRowBindings, listSafeHtml, boundTextNodeOf, syncFormProp, newBindingContext, disposeRowBindings, wireBindings, isSafeHtml, _setBindingContext, TEXT_MARKER_PREFIX, ROW_TEXT_PREFIX, wireRowBindings, carryOrRewireRowBindings, granularListSafeHtml } from './chunk-
|
|
3
|
+
import { captureRowBindings, listSafeHtml, boundTextNodeOf, syncFormProp, newBindingContext, disposeRowBindings, wireBindings, isSafeHtml, _setBindingContext, TEXT_MARKER_PREFIX, ROW_TEXT_PREFIX, wireRowBindings, carryOrRewireRowBindings, granularListSafeHtml } from './chunk-JRKE6XEK.js';
|
|
4
4
|
import { effect } from './chunk-Y2FOYPBV.js';
|
|
5
5
|
import { LIST_MARKER_PREFIX, flattenWithoutListItems, collectLists, flatten } from './chunk-BDX3R4OM.js';
|
|
6
6
|
import { devHooks } from './chunk-CEQMZYLR.js';
|
|
@@ -1497,4 +1497,4 @@ function collectComments(node, out) {
|
|
|
1497
1497
|
|
|
1498
1498
|
export { captureFocus, each, morph, mount, moveNode, restoreFocus };
|
|
1499
1499
|
|
|
1500
|
-
//# sourceMappingURL=chunk-
|
|
1500
|
+
//# sourceMappingURL=chunk-DLY444MN.js.map
|