@kouji-ui/core 0.9.0 → 0.9.2

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kouji-ui/core",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "description": "Headless Angular UI primitives — signal-driven directives with WCAG 2.1 AAA semantics, no CDK, and a handful of opt-in global stylesheets.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1215,7 +1215,10 @@ interface KjOverlayTriggerLike {
1215
1215
  * must not inherit the dialog's scroll lock, scrim or `alertdialog` role.
1216
1216
  * A panel whose controller is on its host chain (a builder-launched body,
1217
1217
  * or the root pattern where one directive provides controller and
1218
- * strategies for the whole subtree) reads them from that chain as before.
1218
+ * strategies for the whole subtree) reads them from that chain, minus any
1219
+ * strategy instance an enclosing overlay is already running: a select inside
1220
+ * a service-launched dialog finds the dialog's scrim, focus trap and scroll
1221
+ * lock up the chain, and must not adopt them.
1219
1222
  *
1220
1223
  * A portalled panel whose scope provides a backdrop strategy also gets a
1221
1224
  * real `<kj-backdrop>` scrim (created next to the panel, moved into the
@@ -1264,7 +1267,10 @@ declare class KjOverlayPanel {
1264
1267
  readonly kjFor: _angular_core.InputSignal<KjOverlayTriggerLike | null>;
1265
1268
  /** Whether the bound controller lives outside this panel's host chain — see the class docs. */
1266
1269
  private readonly scoped;
1267
- /** The tokens that apply to this panel. */
1270
+ /**
1271
+ * The tokens that apply to this panel. Inherited ones exclude strategies an
1272
+ * enclosing overlay already runs (see {@link withoutForeign}).
1273
+ */
1268
1274
  private readonly tokens;
1269
1275
  readonly role: _angular_core.Signal<KjPanelRole>;
1270
1276
  readonly isModal: _angular_core.Signal<boolean>;
@@ -1549,7 +1555,9 @@ declare function releaseInert(el: Element): void;
1549
1555
  * Makes everything behind a modal `panel` inert: every child of `<body>`
1550
1556
  * outside the overlay container (except script/style nodes and live
1551
1557
  * regions), plus every overlay wrapper opened before the panel's own — a
1552
- * dialog stacked on a dialog freezes the one below. A body child that
1558
+ * dialog stacked on a dialog freezes the one below. The container itself is
1559
+ * never inerted, even for a panel mounted outside it, so overlays the modal
1560
+ * opens afterwards (dropdowns, pickers) stay usable. A body child that
1553
1561
  * contains the panel (an inline-mounted modal) is left alone, because
1554
1562
  * inerting it would inert the panel itself.
1555
1563
  *
@@ -12386,11 +12394,20 @@ declare class KjTableKeyboardNav implements KjTableKeyboardNavContext {
12386
12394
  private readonly cells;
12387
12395
  /** Id of the cell the user focused last; survives the cell leaving the DOM. */
12388
12396
  private readonly activeId;
12397
+ /** Tab stop resolved after the last render (see {@link tabStopId}). */
12398
+ private readonly resolvedStopId;
12389
12399
  /**
12390
12400
  * Id of the cell that owns `tabindex="0"`: the last focused cell while it
12391
12401
  * is rendered, else the first rendered cell in DOM order.
12402
+ *
12403
+ * Every cell reads this, so it must not touch the `cells` query: each
12404
+ * stamped cell view dirties the query, and a per-cell read would re-collect
12405
+ * it and re-sort the DOM once per cell — O(n²) for an n-cell body. It is
12406
+ * resolved once per render instead, after the cells are in the DOM. Until
12407
+ * then (and on the server) no cell is a Tab stop.
12392
12408
  */
12393
12409
  readonly tabStopId: _angular_core.Signal<string | null>;
12410
+ constructor();
12394
12411
  /** Record `cellId` as the last focused cell. @param cellId TanStack `cell.id`. */
12395
12412
  setActive(cellId: string): void;
12396
12413
  onKeyDown(event: KeyboardEvent): void;