kerfjs 5.0.0-beta.102 → 5.0.0-beta.104

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 CHANGED
@@ -8,6 +8,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
 
9
9
  ### Added
10
10
 
11
+ - **Action `Chip`.** `Chip` takes an `action` (with the existing `itemId`), and its whole body then renders as a native `<button type="button" data-action data-item-id>` for an application's delegated handler, such as a filter token in a search syntax help popover that inserts itself into the query. The button keeps Chip geometry and adds hover, press, `:focus-visible`, and `disabled` states; an optional `actionLabel` names it when the visible label alone is unclear. A compact, rounded action chip in a wrapping `Row` inside a compact `ValueTable` cell keeps the row height of the compact `Badge` it replaces, even with Web Awesome's native button styles loaded. `action` cannot be combined with `href` or `removeAction`, at the type level or at runtime, because nested interactive content is invalid. The Chip catalog shows a search filter table, and the new Chip design templates cover tags and action chips.
12
+
11
13
  - **`@kerfjs/ui/overlay-sheet.css`.** An opt-in stylesheet for core `kerfjs/overlay` dialogs presented with `presentation: 'bottom-sheet'`, matching `DialogSurface`'s sheet:
12
14
  - the bottom edge, full width up to 560px and centered beyond;
13
15
  - square bottom corners under the dialog radius;
@@ -32,6 +34,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
32
34
 
33
35
  ### Fixed
34
36
 
37
+ - A `@kerfjs/ui` `Toolbar` with a single zone now gives that zone its whole content box. A leading-only toolbar kept the empty trailing track and its 8px column gap, so leading content set to fill the row (a flex `Row` of controls) stopped 8px short of the inline-end inset; a trailing-only toolbar had the same gap on the leading side. A lone leading, center, or trailing zone now spans every column track. Covered in Chromium, Firefox, and WebKit.
38
+ - Typing in a model-managed `@kerfjs/ui` `TokenSearchField` no longer re-runs the host `mount()` render on every keystroke. The field read the model's per-keystroke `state` during render, so an app that renders it from one large mount re-rendered and morphed the whole app per key. It now subscribes only to the new `model.structure` signal, which changes when a token is committed, removed, or reordered, when the text becomes empty or non-empty, or when the editor revision changes; the live text stays owned by the editor and `wireTokenSearchFields`. `model.suggestions` now publishes only when the suggestion list's content changes, and a model action that changes state publishes its state, result, and suggestions as one batch. Hosts that read `model.state.value` in their own render still subscribe per keystroke by choice: read `model.state.peek()` there, or bind `model.result` (or a `computed`) as a fine-grained text or attribute hole. An app that coalesced the field's per-keystroke projection to work around this can remove it.
35
39
  - A `kerfjs/overlay` `initialFocus` that targets a custom element that cannot take focus yet no longer aborts the open. Before, a Web Awesome `wa-button` whose `focus()` throws before it has rendered made `overlay()` (and `confirm()`, `prompt()`, `form()`, `choice()`) roll back and rethrow. Now focus holds on the overlay itself, then moves to the element once it is defined and rendered, unless the overlay has closed or the user has moved focus in the meantime. The same applies to `initialFocus: true` when the first tab stop is such an element. Covered in Chromium, Firefox, and WebKit.
36
40
  - `wireNavStack` keeps fallback focus on a pushed view with nothing focusable (an inert loading placeholder, say) across re-renders. The temporary `tabindex="-1"` it adds to the view was morphed away by the next render, which made the view unfocusable and dropped focus to the page body. It is now restored while the view holds that focus, and focus moves to the view's first focus target once content with one arrives under the same key. Focus the person moved elsewhere is left alone.
37
41
  - Clearing a collapsible `TokenSearchField` with its ✕ button while focus is outside the field now collapses the emptied field and leaves focus where it was. Previously the clear re-expanded the field and claimed the caret, so it stayed open until it was focused and blurred again. A clear started from inside the field still returns the caret to the editor; that is now decided by where focus was when ✕ was pressed, which also covers WebKit, where the press drops focus to the page before the click.
package/ai/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "kerfjsVersion": "5.0.0-beta.102",
2
+ "kerfjsVersion": "5.0.0-beta.104",
3
3
  "files": [
4
4
  {
5
5
  "name": "skill",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kerfjs",
3
- "version": "5.0.0-beta.102",
3
+ "version": "5.0.0-beta.104",
4
4
  "description": "Tiny reactive UI framework — fine-grained signals + DOM morphing + JSX. Apply the smallest possible cut to update your DOM.",
5
5
  "type": "module",
6
6
  "sideEffects": [