@kouji-ui/core 0.11.1 → 0.13.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kouji-ui/core",
3
- "version": "0.11.1",
3
+ "version": "0.13.0",
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": {
@@ -2527,6 +2527,12 @@ declare class KjListNavigator {
2527
2527
  readonly kjPageSize: _angular_core.InputSignal<number>;
2528
2528
  /** Activate item on pointer hover. Default: `false`. */
2529
2529
  readonly kjActivateOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
2530
+ /**
2531
+ * Publish `aria-activedescendant` on this host in `'activedescendant'`
2532
+ * mode. Turn off when another element keeps DOM focus and publishes
2533
+ * `activeId` itself (a search field above the list). Default: `true`.
2534
+ */
2535
+ readonly kjHostActiveDescendant: _angular_core.InputSignalWithTransform<boolean, unknown>;
2530
2536
  /**
2531
2537
  * Focus model. `'activedescendant'` (default) keeps DOM focus on the
2532
2538
  * navigator host and signals the active option via
@@ -2630,7 +2636,7 @@ declare class KjListNavigator {
2630
2636
  /** @internal Keydown handler bound via host binding. */
2631
2637
  _onKeydown(e: KeyboardEvent): void;
2632
2638
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjListNavigator, never>;
2633
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KjListNavigator, "[kjListNavigator]", ["kjListNavigator"], { "kjOrientation": { "alias": "kjOrientation"; "required": false; "isSignal": true; }; "kjWrap": { "alias": "kjWrap"; "required": false; "isSignal": true; }; "kjPageSize": { "alias": "kjPageSize"; "required": false; "isSignal": true; }; "kjActivateOnHover": { "alias": "kjActivateOnHover"; "required": false; "isSignal": true; }; "kjFocusMode": { "alias": "kjFocusMode"; "required": false; "isSignal": true; }; }, { "kjActiveChange": "kjActiveChange"; }, never, never, true, never>;
2639
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KjListNavigator, "[kjListNavigator]", ["kjListNavigator"], { "kjOrientation": { "alias": "kjOrientation"; "required": false; "isSignal": true; }; "kjWrap": { "alias": "kjWrap"; "required": false; "isSignal": true; }; "kjPageSize": { "alias": "kjPageSize"; "required": false; "isSignal": true; }; "kjActivateOnHover": { "alias": "kjActivateOnHover"; "required": false; "isSignal": true; }; "kjHostActiveDescendant": { "alias": "kjHostActiveDescendant"; "required": false; "isSignal": true; }; "kjFocusMode": { "alias": "kjFocusMode"; "required": false; "isSignal": true; }; }, { "kjActiveChange": "kjActiveChange"; }, never, never, true, never>;
2634
2640
  }
2635
2641
 
2636
2642
  /**
@@ -14453,6 +14459,8 @@ declare class KjSelect implements KjListNavigatorConfig {
14453
14459
  readonly _multiple: WritableSignal<boolean>;
14454
14460
  /** Whether multi-select is enabled. */
14455
14461
  readonly multiple: Signal<boolean>;
14462
+ /** @internal — written by `KjSelectContent`'s `kjSearchable` input. */
14463
+ readonly _searchable: WritableSignal<boolean>;
14456
14464
  /** @internal — set by `KjSelectTrigger` at construction time. */
14457
14465
  readonly _triggerEl: WritableSignal<ElementRef<HTMLElement> | null>;
14458
14466
  /**
@@ -14477,7 +14485,21 @@ declare class KjSelect implements KjListNavigatorConfig {
14477
14485
  * inside a palette, a menu inside a select) answer to that composite,
14478
14486
  * not to this one.
14479
14487
  */
14488
+ private readonly _viewItems;
14489
+ private readonly viewItems;
14490
+ /**
14491
+ * @internal Register rows a wrapper stamps in its OWN view
14492
+ * (`<kj-select [kjOptions]>`). A content query never crosses into a
14493
+ * component's view, so those rows join `items()` only through here.
14494
+ */
14495
+ _setViewItems(items: Signal<readonly KjListItem<unknown>[]> | null): void;
14480
14496
  readonly items: Signal<readonly KjListItem<unknown>[]>;
14497
+ /**
14498
+ * Implements `KjListNavigatorConfig.visibleItems`: the items a wrapper has
14499
+ * not hidden through `KjListItem.setVisible` (a search filter, a folded
14500
+ * group). The navigator and type-ahead walk only these.
14501
+ */
14502
+ readonly visibleItems: Signal<KjListItem<unknown>[]>;
14481
14503
  /** Implements `KjListNavigatorConfig.mode`. */
14482
14504
  readonly mode: Signal<KjListSelectionMode>;
14483
14505
  /** Implements `KjListNavigatorConfig.compareBy`. */
@@ -14515,7 +14537,7 @@ declare class KjSelect implements KjListNavigatorConfig {
14515
14537
  declare class KjSelectTrigger {
14516
14538
  /** @internal — same instance as the one provided on KjSelect root. */
14517
14539
  readonly controller: KjOverlayController;
14518
- private readonly select;
14540
+ protected readonly select: _kouji_ui_core.KjSelect | null;
14519
14541
  /** Whether the listbox supports multiple selection (absorbs `multi-select`). Defaults to `false`. */
14520
14542
  readonly kjMultiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
14521
14543
  /**
@@ -14611,9 +14633,15 @@ declare class KjSelectContent {
14611
14633
  readonly kjAlign: _angular_core.InputSignal<KjAlign>;
14612
14634
  /** Pixel offset between trigger and panel. */
14613
14635
  readonly kjOffset: _angular_core.InputSignalWithTransform<number, unknown>;
14636
+ /**
14637
+ * The panel holds a search field above an inner listbox the consumer
14638
+ * renders: the panel becomes `role="dialog"` and the trigger advertises
14639
+ * `aria-haspopup="dialog"`. Defaults to `false`.
14640
+ */
14641
+ readonly kjSearchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
14614
14642
  constructor();
14615
14643
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjSelectContent, never>;
14616
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjSelectContent, "kj-select-content", never, { "kjSide": { "alias": "kjSide"; "required": false; "isSignal": true; }; "kjAlign": { "alias": "kjAlign"; "required": false; "isSignal": true; }; "kjOffset": { "alias": "kjOffset"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof KjOverlayPanel; inputs: { "kjFor": "kjFor"; }; outputs: {}; }, { directive: typeof KjListNavigator; inputs: {}; outputs: {}; }, { directive: typeof KjListPanelFocus; inputs: {}; outputs: {}; }]>;
14644
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjSelectContent, "kj-select-content", never, { "kjSide": { "alias": "kjSide"; "required": false; "isSignal": true; }; "kjAlign": { "alias": "kjAlign"; "required": false; "isSignal": true; }; "kjOffset": { "alias": "kjOffset"; "required": false; "isSignal": true; }; "kjSearchable": { "alias": "kjSearchable"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof KjOverlayPanel; inputs: { "kjFor": "kjFor"; }; outputs: {}; }, { directive: typeof KjListNavigator; inputs: { "kjFocusMode": "kjFocusMode"; "kjHostActiveDescendant": "kjHostActiveDescendant"; }; outputs: {}; }, { directive: typeof KjListPanelFocus; inputs: {}; outputs: {}; }]>;
14617
14645
  }
14618
14646
 
14619
14647
  /**