@kouji-ui/core 0.5.1 → 0.6.1

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.
@@ -3613,6 +3613,18 @@ class KjRovingTabindexItemDirective {
3613
3613
  /** @internal */
3614
3614
  active = signal(false, /* @ts-ignore */
3615
3615
  ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
3616
+ constructor() {
3617
+ // Registration is by DI, NOT by a content query on the container: a styled
3618
+ // wrapper (`<kj-tab>`) renders its item inside its OWN view, and a content
3619
+ // query cannot cross that boundary. Querying left every item at
3620
+ // tabindex="-1" whenever the wrappers were used — i.e. in every app — so
3621
+ // the tab strip could not be reached by keyboard at all.
3622
+ const parent = inject(KJ_ROVING_TABINDEX, { optional: true });
3623
+ if (!parent)
3624
+ return;
3625
+ parent.register(this);
3626
+ inject(DestroyRef).onDestroy(() => parent.unregister(this));
3627
+ }
3616
3628
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjRovingTabindexItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3617
3629
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjRovingTabindexItemDirective, isStandalone: true, selector: "[kjRovingTabindexItem]", host: { properties: { "attr.tabindex": "active() ? \"0\" : \"-1\"" } }, ngImport: i0 });
3618
3630
  }
@@ -3625,7 +3637,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
3625
3637
  '[attr.tabindex]': 'active() ? "0" : "-1"',
3626
3638
  },
3627
3639
  }]
3628
- }] });
3640
+ }], ctorParameters: () => [] });
3629
3641
  /**
3630
3642
  * Implements the roving tabindex pattern for composite widgets such as toolbars and tab lists.
3631
3643
  * Only one item has `tabindex="0"` at a time; arrow keys move focus between items.
@@ -3643,9 +3655,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
3643
3655
  */
3644
3656
  class KjRovingTabindex {
3645
3657
  host = inject((ElementRef));
3646
- items = contentChildren(KjRovingTabindexItemDirective, { ...(ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {}), descendants: true });
3658
+ registered = signal([], /* @ts-ignore */
3659
+ ...(ngDevMode ? [{ debugName: "registered" }] : /* istanbul ignore next */ []));
3660
+ /** Items in DOM order — registration order follows creation, which a
3661
+ * re-order (`@for` with a changing track) does not preserve. */
3662
+ items = computed(() => [...this.registered()].sort((a, b) => a.el.nativeElement.compareDocumentPosition(b.el.nativeElement) &
3663
+ Node.DOCUMENT_POSITION_FOLLOWING
3664
+ ? -1
3665
+ : 1), /* @ts-ignore */
3666
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
3647
3667
  activeIndex = signal(0, /* @ts-ignore */
3648
3668
  ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
3669
+ /** @internal */
3670
+ register(item) {
3671
+ this.registered.update((all) => [...all, item]);
3672
+ }
3673
+ /** @internal */
3674
+ unregister(item) {
3675
+ this.registered.update((all) => all.filter((i) => i !== item));
3676
+ }
3649
3677
  /**
3650
3678
  * Restricts arrow-key navigation to a single axis.
3651
3679
  * - `'horizontal'`: only ArrowLeft / ArrowRight move focus.
@@ -3726,7 +3754,7 @@ class KjRovingTabindex {
3726
3754
  all[next].el.nativeElement.focus();
3727
3755
  }
3728
3756
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjRovingTabindex, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3729
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.5", type: KjRovingTabindex, isStandalone: true, selector: "[kjRovingTabindex]", inputs: { kjRovingOrientation: { classPropertyName: "kjRovingOrientation", publicName: "kjRovingOrientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)", "focusin": "onFocusIn($event)" } }, providers: [{ provide: KJ_ROVING_TABINDEX, useExisting: forwardRef(() => KjRovingTabindex) }], queries: [{ propertyName: "items", predicate: KjRovingTabindexItemDirective, descendants: true, isSignal: true }], ngImport: i0 });
3757
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjRovingTabindex, isStandalone: true, selector: "[kjRovingTabindex]", inputs: { kjRovingOrientation: { classPropertyName: "kjRovingOrientation", publicName: "kjRovingOrientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)", "focusin": "onFocusIn($event)" } }, providers: [{ provide: KJ_ROVING_TABINDEX, useExisting: forwardRef(() => KjRovingTabindex) }], ngImport: i0 });
3730
3758
  }
3731
3759
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjRovingTabindex, decorators: [{
3732
3760
  type: Directive,
@@ -3739,9 +3767,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
3739
3767
  '(focusin)': 'onFocusIn($event)',
3740
3768
  },
3741
3769
  }]
3742
- }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KjRovingTabindexItemDirective), { ...{
3743
- descendants: true,
3744
- }, isSignal: true }] }], kjRovingOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjRovingOrientation", required: false }] }] } });
3770
+ }], ctorParameters: () => [], propDecorators: { kjRovingOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjRovingOrientation", required: false }] }] } });
3745
3771
 
3746
3772
  /**
3747
3773
  * Visually hides an element while keeping it accessible to screen readers.
@@ -4404,24 +4430,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
4404
4430
  const KJ_VARIANT_PRESET = new InjectionToken('kj.variant.preset', {
4405
4431
  factory: () => ({ values: ['default'], default: 'default' }),
4406
4432
  });
4433
+ /**
4434
+ * Optional reactive fallback consulted by `KjVariant` when its input is not
4435
+ * set, *before* falling back to `KJ_VARIANT_PRESET.default`. Compound
4436
+ * parents (button group, pagination root) bridge their cascaded variant into
4437
+ * this token so children inherit it. Resolution order:
4438
+ *
4439
+ * explicit input > fallback context > preset (config) default
4440
+ *
4441
+ * A `null` provider value (or no provider) means "no fallback".
4442
+ *
4443
+ * @internal
4444
+ */
4445
+ const KJ_VARIANT_FALLBACK = new InjectionToken('kj.variant.fallback');
4407
4446
  /**
4408
4447
  * Internal preset directive composed via `hostDirectives` by every stylistic
4409
4448
  * component to expose a configurable `variant` input that reflects to a
4410
4449
  * `data-variant` host attribute. App code does not import this directly.
4411
4450
  *
4451
+ * The reflected value resolves as: explicit `kjVariant` input, else the
4452
+ * `KJ_VARIANT_FALLBACK` context (when a compound parent provides one), else
4453
+ * `KJ_VARIANT_PRESET.default` (the `provideKj*`-configurable default).
4454
+ *
4412
4455
  * @internal
4413
4456
  */
4414
4457
  class KjVariant {
4415
4458
  preset = inject(KJ_VARIANT_PRESET);
4459
+ fallback = inject(KJ_VARIANT_FALLBACK, { optional: true });
4416
4460
  // Explicit field annotation pins the ng-packagr-emitted .d.ts shape —
4417
4461
  // without it ng-packagr collapses the write type to `string` (dropping the
4418
4462
  // `| undefined` flow-through), which trips the docs extractor and any
4419
4463
  // consumer trying to bind a `string | undefined` source.
4420
- kjVariant = input(this.preset.default, { ...(ngDevMode ? { debugName: "kjVariant" } : /* istanbul ignore next */ {}), transform: (v) => v || this.preset.default });
4464
+ // The input intentionally stays `undefined` when unset (empty string
4465
+ // included) so `resolvedVariant` can tell "not set" apart from an explicit
4466
+ // choice and consult the fallback chain.
4467
+ kjVariant = input(undefined, { ...(ngDevMode ? { debugName: "kjVariant" } : /* istanbul ignore next */ {}), transform: (v) => v || undefined });
4468
+ /**
4469
+ * The variant actually reflected to `data-variant`:
4470
+ * explicit input > fallback context > preset default.
4471
+ */
4472
+ resolvedVariant = computed(() => this.kjVariant() || this.fallback?.() || this.preset.default, /* @ts-ignore */
4473
+ ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
4421
4474
  constructor() {
4422
4475
  if (isDevMode()) {
4423
4476
  effect(() => {
4424
- const v = this.kjVariant();
4477
+ const v = this.resolvedVariant();
4425
4478
  if (!this.preset.values.includes(v)) {
4426
4479
  console.warn(`[kj] unknown variant "${v}". Allowed values: ${this.preset.values.join(', ')}.`);
4427
4480
  }
@@ -4429,14 +4482,14 @@ class KjVariant {
4429
4482
  }
4430
4483
  }
4431
4484
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjVariant, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4432
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjVariant, isStandalone: true, selector: "[kjVariant]", inputs: { kjVariant: { classPropertyName: "kjVariant", publicName: "kjVariant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-variant": "kjVariant()" } }, ngImport: i0 });
4485
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjVariant, isStandalone: true, selector: "[kjVariant]", inputs: { kjVariant: { classPropertyName: "kjVariant", publicName: "kjVariant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-variant": "resolvedVariant()" } }, ngImport: i0 });
4433
4486
  }
4434
4487
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjVariant, decorators: [{
4435
4488
  type: Directive,
4436
4489
  args: [{
4437
4490
  selector: '[kjVariant]',
4438
4491
  standalone: true,
4439
- host: { '[attr.data-variant]': 'kjVariant()' },
4492
+ host: { '[attr.data-variant]': 'resolvedVariant()' },
4440
4493
  }]
4441
4494
  }], ctorParameters: () => [], propDecorators: { kjVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjVariant", required: false }] }] } });
4442
4495
 
@@ -4451,21 +4504,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
4451
4504
  const KJ_SIZE_PRESET = new InjectionToken('kj.size.preset', {
4452
4505
  factory: () => ({ values: ['md'], default: 'md' }),
4453
4506
  });
4507
+ /**
4508
+ * Optional reactive fallback consulted by `KjSize` when its input is not
4509
+ * set, *before* falling back to `KJ_SIZE_PRESET.default`. Compound parents
4510
+ * (button group, pagination root) bridge their cascaded size into this token
4511
+ * so children inherit it. Resolution order:
4512
+ *
4513
+ * explicit input > fallback context > preset (config) default
4514
+ *
4515
+ * A `null` provider value (or no provider) means "no fallback".
4516
+ *
4517
+ * @internal
4518
+ */
4519
+ const KJ_SIZE_FALLBACK = new InjectionToken('kj.size.fallback');
4454
4520
  /**
4455
4521
  * Internal preset directive composed via `hostDirectives` by every stylistic
4456
4522
  * component to expose a configurable `size` input that reflects to a
4457
4523
  * `data-size` host attribute. App code does not import this directly.
4458
4524
  *
4525
+ * The reflected value resolves as: explicit `kjSize` input, else the
4526
+ * `KJ_SIZE_FALLBACK` context (when a compound parent provides one), else
4527
+ * `KJ_SIZE_PRESET.default` (the `provideKj*`-configurable default).
4528
+ *
4459
4529
  * @internal
4460
4530
  */
4461
4531
  class KjSize {
4462
4532
  preset = inject(KJ_SIZE_PRESET);
4463
- // See `KjVariant.kjVariant` for why the field type is annotated explicitly.
4464
- kjSize = input(this.preset.default, { ...(ngDevMode ? { debugName: "kjSize" } : /* istanbul ignore next */ {}), transform: (v) => v || this.preset.default });
4533
+ fallback = inject(KJ_SIZE_FALLBACK, { optional: true });
4534
+ // See `KjVariant.kjVariant` for why the field type is annotated explicitly
4535
+ // and why unset (empty string included) stays `undefined`.
4536
+ kjSize = input(undefined, { ...(ngDevMode ? { debugName: "kjSize" } : /* istanbul ignore next */ {}), transform: (v) => v || undefined });
4537
+ /**
4538
+ * The size actually reflected to `data-size`:
4539
+ * explicit input > fallback context > preset default.
4540
+ */
4541
+ resolvedSize = computed(() => this.kjSize() || this.fallback?.() || this.preset.default, /* @ts-ignore */
4542
+ ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
4465
4543
  constructor() {
4466
4544
  if (isDevMode()) {
4467
4545
  effect(() => {
4468
- const v = this.kjSize();
4546
+ const v = this.resolvedSize();
4469
4547
  if (!this.preset.values.includes(v)) {
4470
4548
  console.warn(`[kj] unknown size "${v}". Allowed values: ${this.preset.values.join(', ')}.`);
4471
4549
  }
@@ -4473,14 +4551,14 @@ class KjSize {
4473
4551
  }
4474
4552
  }
4475
4553
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjSize, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4476
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjSize, isStandalone: true, selector: "[kjSize]", inputs: { kjSize: { classPropertyName: "kjSize", publicName: "kjSize", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "kjSize()" } }, ngImport: i0 });
4554
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjSize, isStandalone: true, selector: "[kjSize]", inputs: { kjSize: { classPropertyName: "kjSize", publicName: "kjSize", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "resolvedSize()" } }, ngImport: i0 });
4477
4555
  }
4478
4556
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjSize, decorators: [{
4479
4557
  type: Directive,
4480
4558
  args: [{
4481
4559
  selector: '[kjSize]',
4482
4560
  standalone: true,
4483
- host: { '[attr.data-size]': 'kjSize()' },
4561
+ host: { '[attr.data-size]': 'resolvedSize()' },
4484
4562
  }]
4485
4563
  }], ctorParameters: () => [], propDecorators: { kjSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjSize", required: false }] }] } });
4486
4564
 
@@ -4510,6 +4588,9 @@ function bindPresets(configToken) {
4510
4588
  ];
4511
4589
  }
4512
4590
 
4591
+ /** Injection token for `KjButtonGroupContext`. */
4592
+ const KJ_BUTTON_GROUP = new InjectionToken('KjButtonGroup');
4593
+
4513
4594
  /**
4514
4595
  * Default Button presets shipped by kouji-ui. Exported so consumers can spread
4515
4596
  * them when extending: `[...KJ_BUTTON_DEFAULTS.variants, 'brand']`.
@@ -4609,6 +4690,13 @@ function provideKjButton(config) {
4609
4690
  */
4610
4691
  class KjButton {
4611
4692
  el = inject(ElementRef);
4693
+ /**
4694
+ * Enclosing button group context, when the button sits inside a
4695
+ * `[kjButtonGroup]`. Its `disabled` flag is OR-ed into
4696
+ * {@link effectiveDisabled} (per the `KJ_BUTTON_GROUP` contract); its
4697
+ * variant/size cascade through the preset fallback providers above.
4698
+ */
4699
+ group = inject(KJ_BUTTON_GROUP, { optional: true, skipSelf: true });
4612
4700
  /** Disables the button. Reflects `aria-disabled` and `data-disabled`. */
4613
4701
  kjDisabled = input(false, /* @ts-ignore */
4614
4702
  ...(ngDevMode ? [{ debugName: "kjDisabled" }] : /* istanbul ignore next */ []));
@@ -4635,7 +4723,7 @@ class KjButton {
4635
4723
  */
4636
4724
  kjPressed = model(undefined, /* @ts-ignore */
4637
4725
  ...(ngDevMode ? [{ debugName: "kjPressed" }] : /* istanbul ignore next */ []));
4638
- effectiveDisabled = computed(() => this.kjDisabled() || this.kjLoading(), /* @ts-ignore */
4726
+ effectiveDisabled = computed(() => this.kjDisabled() || this.kjLoading() || !!this.group?.disabled(), /* @ts-ignore */
4639
4727
  ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
4640
4728
  pressedAttr = computed(() => {
4641
4729
  const p = this.kjPressed();
@@ -4661,7 +4749,29 @@ class KjButton {
4661
4749
  });
4662
4750
  }
4663
4751
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4664
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjButton, isStandalone: true, selector: "[kjButton]", inputs: { kjDisabled: { classPropertyName: "kjDisabled", publicName: "kjDisabled", isSignal: true, isRequired: false, transformFunction: null }, kjLoading: { classPropertyName: "kjLoading", publicName: "kjLoading", isSignal: true, isRequired: false, transformFunction: null }, kjFullWidth: { classPropertyName: "kjFullWidth", publicName: "kjFullWidth", isSignal: true, isRequired: false, transformFunction: null }, kjPressed: { classPropertyName: "kjPressed", publicName: "kjPressed", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { kjPressed: "kjPressedChange" }, host: { properties: { "attr.aria-disabled": "effectiveDisabled() ? \"true\" : null", "attr.data-disabled": "effectiveDisabled() ? \"\" : null", "attr.aria-busy": "kjLoading() ? \"true\" : null", "attr.aria-pressed": "pressedAttr()", "attr.data-full": "kjFullWidth() ? \"true\" : null" } }, providers: [...bindPresets(KJ_BUTTON_CONFIG)], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
4752
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjButton, isStandalone: true, selector: "[kjButton]", inputs: { kjDisabled: { classPropertyName: "kjDisabled", publicName: "kjDisabled", isSignal: true, isRequired: false, transformFunction: null }, kjLoading: { classPropertyName: "kjLoading", publicName: "kjLoading", isSignal: true, isRequired: false, transformFunction: null }, kjFullWidth: { classPropertyName: "kjFullWidth", publicName: "kjFullWidth", isSignal: true, isRequired: false, transformFunction: null }, kjPressed: { classPropertyName: "kjPressed", publicName: "kjPressed", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { kjPressed: "kjPressedChange" }, host: { properties: { "attr.aria-disabled": "effectiveDisabled() ? \"true\" : null", "attr.data-disabled": "effectiveDisabled() ? \"\" : null", "attr.aria-busy": "kjLoading() ? \"true\" : null", "attr.aria-pressed": "pressedAttr()", "attr.data-full": "kjFullWidth() ? \"true\" : null" } }, providers: [
4753
+ ...bindPresets(KJ_BUTTON_CONFIG),
4754
+ // Bridge the enclosing button group's cascaded variant/size (if any) into
4755
+ // the preset fallback chain, so a child that does not set its own
4756
+ // variant/size inherits the group's. Resolution order (in KjVariant /
4757
+ // KjSize): explicit input > group context > provideKjButton default >
4758
+ // library default. `skipSelf` keeps a button that is itself a group host
4759
+ // from reading its own context.
4760
+ {
4761
+ provide: KJ_VARIANT_FALLBACK,
4762
+ useFactory: () => {
4763
+ const group = inject(KJ_BUTTON_GROUP, { optional: true, skipSelf: true });
4764
+ return group ? group.variant : null;
4765
+ },
4766
+ },
4767
+ {
4768
+ provide: KJ_SIZE_FALLBACK,
4769
+ useFactory: () => {
4770
+ const group = inject(KJ_BUTTON_GROUP, { optional: true, skipSelf: true });
4771
+ return group ? group.size : null;
4772
+ },
4773
+ },
4774
+ ], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
4665
4775
  }
4666
4776
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjButton, decorators: [{
4667
4777
  type: Directive,
@@ -4673,7 +4783,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
4673
4783
  { directive: KjSize, inputs: ['kjSize'] },
4674
4784
  KjFocusRing,
4675
4785
  ],
4676
- providers: [...bindPresets(KJ_BUTTON_CONFIG)],
4786
+ providers: [
4787
+ ...bindPresets(KJ_BUTTON_CONFIG),
4788
+ // Bridge the enclosing button group's cascaded variant/size (if any) into
4789
+ // the preset fallback chain, so a child that does not set its own
4790
+ // variant/size inherits the group's. Resolution order (in KjVariant /
4791
+ // KjSize): explicit input > group context > provideKjButton default >
4792
+ // library default. `skipSelf` keeps a button that is itself a group host
4793
+ // from reading its own context.
4794
+ {
4795
+ provide: KJ_VARIANT_FALLBACK,
4796
+ useFactory: () => {
4797
+ const group = inject(KJ_BUTTON_GROUP, { optional: true, skipSelf: true });
4798
+ return group ? group.variant : null;
4799
+ },
4800
+ },
4801
+ {
4802
+ provide: KJ_SIZE_FALLBACK,
4803
+ useFactory: () => {
4804
+ const group = inject(KJ_BUTTON_GROUP, { optional: true, skipSelf: true });
4805
+ return group ? group.size : null;
4806
+ },
4807
+ },
4808
+ ],
4677
4809
  host: {
4678
4810
  '[attr.aria-disabled]': 'effectiveDisabled() ? "true" : null',
4679
4811
  '[attr.data-disabled]': 'effectiveDisabled() ? "" : null',
@@ -4684,9 +4816,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
4684
4816
  }]
4685
4817
  }], ctorParameters: () => [], propDecorators: { kjDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjDisabled", required: false }] }], kjLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjLoading", required: false }] }], kjFullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjFullWidth", required: false }] }], kjPressed: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjPressed", required: false }] }, { type: i0.Output, args: ["kjPressedChange"] }] } });
4686
4818
 
4687
- /** Injection token for `KjButtonGroupContext`. */
4688
- const KJ_BUTTON_GROUP = new InjectionToken('KjButtonGroup');
4689
-
4690
4819
  /**
4691
4820
  * Coordinates a visually-joined cluster of `KjButton` children. Owns the
4692
4821
  * group's layout role (`role="group"`), orientation, and the per-group
@@ -18897,6 +19026,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
18897
19026
  }]
18898
19027
  }], ctorParameters: () => [], propDecorators: { kjPanelValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjPanelValue", required: true }] }] } });
18899
19028
 
19029
+ /**
19030
+ * Default Tabs presets shipped by kouji-ui. Exported so consumers can spread
19031
+ * them when extending: `[...KJ_TABS_DEFAULTS.variants, 'underline-top']`.
19032
+ *
19033
+ * Two shapes ship: `default` (an underline strip — tabs sitting flat on a
19034
+ * surface, active one marked by a bar on the strip's edge) and `pills` (a
19035
+ * recessed tray of chips). Both are driven entirely by `--kj-tab-*` custom
19036
+ * properties, so a registered extra variant only needs a CSS rule keyed on
19037
+ * `.kj-tabs[data-variant="…"]` — no component change.
19038
+ */
19039
+ const KJ_TABS_DEFAULTS = {
19040
+ variants: ['default', 'pills'],
19041
+ defaults: { variant: 'default' },
19042
+ };
19043
+ /**
19044
+ * DI token for the active Tabs presets. Default factory yields
19045
+ * `KJ_TABS_DEFAULTS`. Override via `provideKjTabs(…)` at the application scope
19046
+ * (e.g. `bootstrapApplication`'s `providers` or a route config) or at the
19047
+ * component scope (a component's own `providers: […]`).
19048
+ */
19049
+ const KJ_TABS_CONFIG = new InjectionToken('kj.tabs.config', {
19050
+ factory: () => KJ_TABS_DEFAULTS,
19051
+ });
19052
+ /**
19053
+ * Configures the Tabs presets for the enclosing injector. Replaces (does not
19054
+ * merge) `variants`; spread `KJ_TABS_DEFAULTS.variants` to extend.
19055
+ *
19056
+ * Returns a `Provider[]` so it can be spread into either an environment
19057
+ * `providers` (`bootstrapApplication`, route config) or a component-level
19058
+ * `providers` array.
19059
+ *
19060
+ * @example
19061
+ * ```ts
19062
+ * provideKjTabs({
19063
+ * variants: [...KJ_TABS_DEFAULTS.variants, 'document'],
19064
+ * defaults: { variant: 'default' },
19065
+ * })
19066
+ * ```
19067
+ */
19068
+ function provideKjTabs(config) {
19069
+ return [
19070
+ {
19071
+ provide: KJ_TABS_CONFIG,
19072
+ useValue: { ...KJ_TABS_DEFAULTS, ...config },
19073
+ },
19074
+ ];
19075
+ }
19076
+
18900
19077
  /** Injection token for the root accordion directive. */
18901
19078
  const KJ_ACCORDION = new InjectionToken('KjAccordion');
18902
19079
  /** Injection token for an individual accordion item directive. */
@@ -28232,11 +28409,12 @@ class KjPagination {
28232
28409
  * their own. Forwarded to each child's `KjVariant` host directive via
28233
28410
  * the `KJ_PAGINATION` context.
28234
28411
  */
28235
- kjVariant = input(this.config.defaults.variant, /* @ts-ignore */
28236
- ...(ngDevMode ? [{ debugName: "kjVariant" }] : /* istanbul ignore next */ []));
28412
+ // Undefined-tolerant: wrapper components bind `undefined` when the
28413
+ // consumer did not set a value, which must fall back to the configured
28414
+ // default rather than clearing the cascade.
28415
+ kjVariant = input(this.config.defaults.variant, { ...(ngDevMode ? { debugName: "kjVariant" } : /* istanbul ignore next */ {}), transform: (v) => v || this.config.defaults.variant });
28237
28416
  /** Cascaded size for child items / boundary controls. */
28238
- kjSize = input(this.config.defaults.size, /* @ts-ignore */
28239
- ...(ngDevMode ? [{ debugName: "kjSize" }] : /* istanbul ignore next */ []));
28417
+ kjSize = input(this.config.defaults.size, { ...(ngDevMode ? { debugName: "kjSize" } : /* istanbul ignore next */ {}), transform: (v) => v || this.config.defaults.size });
28240
28418
  /**
28241
28419
  * Page-change output. Mirrors `kjPage` writes; emitted whenever the
28242
28420
  * model value settles after a clamp / boundary navigation / item click.
@@ -28477,7 +28655,13 @@ class KjPaginationItem {
28477
28655
  this.pagination.goToPage(this.kjPage());
28478
28656
  }
28479
28657
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28480
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjPaginationItem, isStandalone: true, selector: "[kjPaginationItem]", inputs: { kjPage: { classPropertyName: "kjPage", publicName: "kjPage", isSignal: true, isRequired: true, transformFunction: null }, kjDisabled: { classPropertyName: "kjDisabled", publicName: "kjDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-current": "isCurrent() ? \"page\" : null", "attr.data-current": "isCurrent() ? \"true\" : \"false\"", "attr.aria-disabled": "kjDisabled() ? \"true\" : null", "attr.data-disabled": "kjDisabled() ? \"\" : null", "attr.aria-label": "ariaLabel()" } }, hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28658
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.5", type: KjPaginationItem, isStandalone: true, selector: "[kjPaginationItem]", inputs: { kjPage: { classPropertyName: "kjPage", publicName: "kjPage", isSignal: true, isRequired: true, transformFunction: null }, kjDisabled: { classPropertyName: "kjDisabled", publicName: "kjDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-current": "isCurrent() ? \"page\" : null", "attr.data-current": "isCurrent() ? \"true\" : \"false\"", "attr.aria-disabled": "kjDisabled() ? \"true\" : null", "attr.data-disabled": "kjDisabled() ? \"\" : null", "attr.aria-label": "ariaLabel()" } }, providers: [
28659
+ // Bridge the pagination root's cascaded variant/size into the preset
28660
+ // fallback chain: explicit input > root cascade > provideKjPagination
28661
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28662
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28663
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28664
+ ], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28481
28665
  }
28482
28666
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationItem, decorators: [{
28483
28667
  type: Directive,
@@ -28489,6 +28673,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
28489
28673
  { directive: KjSize, inputs: ['kjSize'] },
28490
28674
  KjFocusRing,
28491
28675
  ],
28676
+ providers: [
28677
+ // Bridge the pagination root's cascaded variant/size into the preset
28678
+ // fallback chain: explicit input > root cascade > provideKjPagination
28679
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28680
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28681
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28682
+ ],
28492
28683
  host: {
28493
28684
  '[attr.aria-current]': 'isCurrent() ? "page" : null',
28494
28685
  '[attr.data-current]': 'isCurrent() ? "true" : "false"',
@@ -28560,7 +28751,13 @@ class KjPaginationPrevious {
28560
28751
  this.pagination.goToPrevious();
28561
28752
  }
28562
28753
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationPrevious, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28563
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationPrevious, isStandalone: true, selector: "[kjPaginationPrevious]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.previousLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"previous\"" } }, hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28754
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationPrevious, isStandalone: true, selector: "[kjPaginationPrevious]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.previousLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"previous\"" } }, providers: [
28755
+ // Bridge the pagination root's cascaded variant/size into the preset
28756
+ // fallback chain: explicit input > root cascade > provideKjPagination
28757
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28758
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28759
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28760
+ ], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28564
28761
  }
28565
28762
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationPrevious, decorators: [{
28566
28763
  type: Directive,
@@ -28572,6 +28769,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
28572
28769
  { directive: KjSize, inputs: ['kjSize'] },
28573
28770
  KjFocusRing,
28574
28771
  ],
28772
+ providers: [
28773
+ // Bridge the pagination root's cascaded variant/size into the preset
28774
+ // fallback chain: explicit input > root cascade > provideKjPagination
28775
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28776
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28777
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28778
+ ],
28575
28779
  host: {
28576
28780
  '[attr.aria-label]': 'config.previousLabel',
28577
28781
  '[attr.aria-disabled]': 'isDisabled() ? "true" : null',
@@ -28639,7 +28843,13 @@ class KjPaginationNext {
28639
28843
  this.pagination.goToNext();
28640
28844
  }
28641
28845
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationNext, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28642
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationNext, isStandalone: true, selector: "[kjPaginationNext]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.nextLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"next\"" } }, hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28846
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationNext, isStandalone: true, selector: "[kjPaginationNext]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.nextLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"next\"" } }, providers: [
28847
+ // Bridge the pagination root's cascaded variant/size into the preset
28848
+ // fallback chain: explicit input > root cascade > provideKjPagination
28849
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28850
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28851
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28852
+ ], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28643
28853
  }
28644
28854
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationNext, decorators: [{
28645
28855
  type: Directive,
@@ -28651,6 +28861,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
28651
28861
  { directive: KjSize, inputs: ['kjSize'] },
28652
28862
  KjFocusRing,
28653
28863
  ],
28864
+ providers: [
28865
+ // Bridge the pagination root's cascaded variant/size into the preset
28866
+ // fallback chain: explicit input > root cascade > provideKjPagination
28867
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28868
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28869
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28870
+ ],
28654
28871
  host: {
28655
28872
  '[attr.aria-label]': 'config.nextLabel',
28656
28873
  '[attr.aria-disabled]': 'isDisabled() ? "true" : null',
@@ -28716,7 +28933,13 @@ class KjPaginationFirst {
28716
28933
  this.pagination.goToFirst();
28717
28934
  }
28718
28935
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationFirst, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28719
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationFirst, isStandalone: true, selector: "[kjPaginationFirst]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.firstLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"first\"" } }, hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28936
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationFirst, isStandalone: true, selector: "[kjPaginationFirst]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.firstLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"first\"" } }, providers: [
28937
+ // Bridge the pagination root's cascaded variant/size into the preset
28938
+ // fallback chain: explicit input > root cascade > provideKjPagination
28939
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28940
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28941
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28942
+ ], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28720
28943
  }
28721
28944
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationFirst, decorators: [{
28722
28945
  type: Directive,
@@ -28728,6 +28951,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
28728
28951
  { directive: KjSize, inputs: ['kjSize'] },
28729
28952
  KjFocusRing,
28730
28953
  ],
28954
+ providers: [
28955
+ // Bridge the pagination root's cascaded variant/size into the preset
28956
+ // fallback chain: explicit input > root cascade > provideKjPagination
28957
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
28958
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
28959
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
28960
+ ],
28731
28961
  host: {
28732
28962
  '[attr.aria-label]': 'config.firstLabel',
28733
28963
  '[attr.aria-disabled]': 'isDisabled() ? "true" : null',
@@ -28794,7 +29024,13 @@ class KjPaginationLast {
28794
29024
  this.pagination.goToLast();
28795
29025
  }
28796
29026
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationLast, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28797
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationLast, isStandalone: true, selector: "[kjPaginationLast]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.lastLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"last\"" } }, hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
29027
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjPaginationLast, isStandalone: true, selector: "[kjPaginationLast]", host: { listeners: { "click": "onClick($event)" }, properties: { "attr.aria-label": "config.lastLabel", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "\"0\"", "attr.data-pagination-action": "\"last\"" } }, providers: [
29028
+ // Bridge the pagination root's cascaded variant/size into the preset
29029
+ // fallback chain: explicit input > root cascade > provideKjPagination
29030
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
29031
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
29032
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
29033
+ ], hostDirectives: [{ directive: KjVariant, inputs: ["kjVariant", "kjVariant"] }, { directive: KjSize, inputs: ["kjSize", "kjSize"] }, { directive: KjFocusRing }], ngImport: i0 });
28798
29034
  }
28799
29035
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjPaginationLast, decorators: [{
28800
29036
  type: Directive,
@@ -28806,6 +29042,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
28806
29042
  { directive: KjSize, inputs: ['kjSize'] },
28807
29043
  KjFocusRing,
28808
29044
  ],
29045
+ providers: [
29046
+ // Bridge the pagination root's cascaded variant/size into the preset
29047
+ // fallback chain: explicit input > root cascade > provideKjPagination
29048
+ // default. See KJ_VARIANT_FALLBACK / KJ_SIZE_FALLBACK.
29049
+ { provide: KJ_VARIANT_FALLBACK, useFactory: () => inject(KJ_PAGINATION).variant },
29050
+ { provide: KJ_SIZE_FALLBACK, useFactory: () => inject(KJ_PAGINATION).size },
29051
+ ],
28809
29052
  host: {
28810
29053
  '[attr.aria-label]': 'config.lastLabel',
28811
29054
  '[attr.aria-disabled]': 'isDisabled() ? "true" : null',
@@ -29799,5 +30042,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
29799
30042
  * Generated bundle index. Do not edit.
29800
30043
  */
29801
30044
 
29802
- export { DRAWER_DATA, DRAWER_DRAG, DRAWER_SIDE, EN_CATALOG, FR_CATALOG, KJ_ACCORDION, KJ_ACCORDION_ITEM, KJ_ALERT, KJ_ALERT_CONFIG, KJ_ALERT_DEFAULTS, KJ_AVATAR, KJ_AVATAR_GROUP, KJ_BREADCRUMB, KJ_BREADCRUMB_CONFIG, KJ_BREADCRUMB_DEFAULTS, KJ_BUTTON_CONFIG, KJ_BUTTON_DEFAULTS, KJ_BUTTON_GROUP, KJ_CALENDAR, KJ_CAROUSEL, KJ_CAROUSEL_INDICATORS, KJ_CAROUSEL_SLIDE, KJ_CASCADE_SELECT, KJ_CHAT, KJ_CHAT_BUBBLE_CONFIG, KJ_CHAT_BUBBLE_DEFAULTS, KJ_CHAT_LOG, KJ_COLOR_PICKER, KJ_CONFIRM_POPUP, KJ_DATE_PICKER, KJ_DATE_RANGE_PRESETS, KJ_DROPDOWN_MENU, KJ_ECHARTS, KJ_FIELD, KJ_FILE_UPLOAD, KJ_FILE_UPLOAD_DEFAULT_MESSAGES, KJ_FILE_UPLOAD_ITEM, KJ_FORM, KJ_FORM_FIELD, KJ_ICON_CSS_PATH, KJ_ICON_ENTRIES, KJ_ICON_LOADER, KJ_ICON_REGISTRY, KJ_ICON_RESOLVER, KJ_INPUT_GROUP, KJ_INPUT_MASK_PRESETS, KJ_INPUT_MASK_TOKENS, KJ_INPUT_OTP, KJ_KBD_SIZE_PRESET, KJ_LINK_CONFIG, KJ_LINK_DEFAULTS, KJ_LIST, KJ_LIST_FOCUS_MODE, KJ_LIST_NAVIGATOR_CONFIG, KJ_LIST_ROW, KJ_LOCALE_CONFIG, KJ_MENUBAR, KJ_MONACO_CONFIG, KJ_MONACO_LANGUAGE_LOADERS, KJ_NUMBER_INPUT, KJ_OVERLAY_BACKDROP_STRATEGY, KJ_OVERLAY_BADGE, KJ_OVERLAY_FOCUS_TRAP_STRATEGY, KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY, KJ_OVERLAY_MOUNT_STRATEGY, KJ_OVERLAY_PANEL_ROLE, KJ_OVERLAY_POSITION_STRATEGY, KJ_OVERLAY_SCROLL_LOCK_STRATEGY, KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, KJ_PAGINATION, KJ_PAGINATION_CONFIG, KJ_PAGINATION_DEFAULTS, KJ_PASSWORD_INPUT, KJ_PROGRESS_BAR, KJ_PROGRESS_BAR_CONFIG, KJ_PROGRESS_BAR_DEFAULTS, KJ_PROSE_CSS_PATH, KJ_RADIO_GROUP, KJ_RICH_TEXT, KJ_RICH_TEXT_EXTENSIONS, KJ_RICH_TEXT_FEATURES, KJ_RICH_TEXT_NODE, KJ_ROVING_TABINDEX, KJ_RTE_OVERLAY_DATA, KJ_SELECT, KJ_SIZE_PRESET, KJ_SLIDER, KJ_SPEED_DIAL, KJ_SPINNER_CONFIG, KJ_SPINNER_DEFAULTS, KJ_STEP, KJ_STEPPER, KJ_TABLE, KJ_TABLE_STORAGE, KJ_TABS, KJ_TAG, KJ_TAG_CONFIG, KJ_TAG_DEFAULTS, KJ_TAG_LIST, KJ_TEXTAREA_CONFIG, KJ_TEXTAREA_DEFAULTS, KJ_TIME_PICKER, KJ_TOAST_LIST_STRATEGY, KJ_TOAST_SONNER_STRATEGY, KJ_TOAST_STRATEGY, KJ_TRANSLATION_CATALOGS, KJ_TREE_SELECT, KJ_VARIANT_PRESET, KjAccordion, KjAccordionContent, KjAccordionItem, KjAccordionTrigger, KjAlert, KjAlertActions, KjAlertDescription, KjAlertDismiss, KjAlertIcon, KjAlertTitle, KjAriaDescribedBy, KjAriaLabelledBy, KjAvatar, KjAvatarFallback, KjAvatarGroup, KjAvatarImage, KjBackdrop, KjBadge, KjBlockquote, KjBreadcrumb, KjBreadcrumbCurrent, KjBreadcrumbEllipsis, KjBreadcrumbItem, KjBreadcrumbLink, KjBreadcrumbList, KjBreadcrumbSeparator, KjButton, KjButtonGroup, KjCalendar, KjCalendarDay, KjCalendarGrid, KjCalendarHeader, KjCarousel, KjCarouselAutoplay, KjCarouselIndicator, KjCarouselIndicators, KjCarouselNext, KjCarouselPauseToggle, KjCarouselPrevious, KjCarouselSlide, KjCarouselViewport, KjCascadeSelect, KjCascadeSelectOption, KjCascadeSelectPanel, KjCascadeSelectSubPanel, KjCascadeSelectTrigger, KjChart, KjChartTableFallback, KjChat, KjChatAnnouncer, KjChatAvatar, KjChatBubble, KjChatFooter, KjChatHeader, KjChatLog, KjChatStore, KjCheckbox, KjCode, KjColorPicker, KjColorPickerAlphaSlider, KjColorPickerArea, KjColorPickerHueSlider, KjColorPickerInput, KjColorPickerPanel, KjColorPickerTrigger, KjCombobox, KjComboboxInput, KjComboboxListbox, KjComboboxOption, KjCommandEmpty, KjCommandGroup, KjCommandInput, KjCommandItem, KjCommandList, KjCommandPalette, KjCommandPaletteDialog, KjCommandPaletteTrigger, KjCommandSeparator, KjConfirmPopup, KjConfirmPopupAction, KjConfirmPopupCancel, KjConfirmPopupContent, KjConfirmPopupMessage, KjConfirmPopupTrigger, KjDatePicker, KjDatePickerCalendar, KjDatePickerTrigger, KjDateRangePresetOption, KjDateRangePresets, KjDialog$1 as KjDialog, KjDialogRef, KjDialog as KjDialogService, KjDirectionality, KjDisabled, KjDivider, KjDrawer, KjDrawerRef, KjDrawerService, KjDropdownMenu, KjDropdownMenuContent, KjDropdownMenuGroup, KjDropdownMenuItem, KjDropdownMenuLabel, KjDropdownMenuSeparator, KjDropdownMenuTrigger, KjEditor, KjEditorLoader, KjField, KjFieldError, KjFieldGroup, KjFieldHelp, KjFieldLabel, KjFileUpload, KjFileUploadDropzone, KjFileUploadItem, KjFileUploadList, KjFileUploadTrigger, KjFilterableList, KjFocusRing, KjFocusTrap, KjForm, KjFormControl, KjFormError, KjFormErrorSummary, KjFormField, KjFormLabel, KjIconDirective, KjId, KjInput, KjInputGroup, KjInputGroupAddon, KjInputMask, KjInputOtp, KjInputOtpCell, KjKbd, KjLead, KjLink, KjList, KjListGroup, KjListGroupLabel, KjListItem, KjListNavigator, KjListRow, KjListSeparator, KjLiveRegion, KjLocale, KjMenubar, KjMenubarItem, KjMotion, KjMuted, KjNumberInput, KjNumberInputGroup, KjNumberStepper, KjOption, KjOverlayBadge, KjOverlayBadgeContent, KjOverlayBuilder, KjOverlayController, KjOverlayHandle, KjOverlayPanel, KjOverlayStack, KjOverlayTrigger, KjOverlayWrapper, KjPagination, KjPaginationEllipsis, KjPaginationFirst, KjPaginationInfo, KjPaginationItem, KjPaginationLast, KjPaginationNext, KjPaginationPrevious, KjPasswordCapsLockWarning, KjPasswordInput, KjPasswordInputScope, KjPasswordStrength, KjPasswordToggle, KjPopoverArrow, KjPopoverClose, KjPopoverContent, KjPopoverTitle, KjPopoverTrigger, KjProgressBar, KjProgressBarFill, KjRadio, KjRadioGroup, KjReducedMotion, KjRichTextEditor, KjRichTextExtensionDirective, KjRovingTabindex, KjRovingTabindexItemDirective, KjSelect, KjSelectContent, KjSelectTrigger, KjSelectionModel, KjSheet, KjSheetRef, KjSheetService, KjSize, KjSkeleton, KjSkipLink, KjSlider, KjSliderRange, KjSliderThumb, KjSliderTrack, KjSpeedDial, KjSpeedDialAction, KjSpeedDialActions, KjSpeedDialTrigger, KjSpinner, KjStep, KjStepContent, KjStepLabel, KjStepper, KjStepperNext, KjStepperPrevious, KjStepperReset, KjTab, KjTabList, KjTabPanel, KjTable, KjTableCell, KjTableFilterOutlet, KjTableHeader, KjTableKeyboardNav, KjTableRow, KjTabs, KjTag, KjTagList, KjTagRemove, KjTextarea, KjTimePicker, KjTimePickerHours, KjTimePickerMeridiem, KjTimePickerMinutes, KjTimePickerSeconds, KjToast, KjToastClose, KjToastPanel, KjToastRef, KjToastService, KjToastViewport, KjToggle, KjTooltipArrow, KjTooltipContent, KjTooltipGroup, KjTooltipTrigger, KjTranslate, KjTranslateService, KjTreeSelect, KjTreeSelectContent, KjTreeSelectNode, KjTreeSelectToggle, KjTreeSelectTrigger, KjTruncate, KjTypeAhead, KjVariant, KjVisuallyHidden, MaskEngine, SHEET_ARIA_LABEL, SHEET_DATA, SHEET_DETENT, SHEET_DISMISSIBLE, addDays, addMonths, addYears, anchoredTo, assertive, bindPresets, blurredBackdrop, bodyPortal, buildMonthMatrix, coalesceAnnouncement, compareDay, compileMask, corner, createKjDecoratorNode, createKjImageNode, cssClip, defaultDateRangePresets, defaultMaskTokens, defaultPasswordScorer, edgeSheet, endOfMonth, firstDayOfWeek, formatDateLong, formatDateShort, formatMonthYear, getIconMode, htmlOverflow, inContainer, inMemoryAdapter, inPlace, inPlaceSibling, inertBased, injectFilterableList, injectKjFilterParams, injectKjIconResolver, injectListItem, injectRichTextNode, injectRteOverlayData, injectSelectionModel, isInRange, isKjFilterModel, isSameDay, isSameMonth, kjColumn, kjColumnGroup, kjContainsFilter, kjDateFilterFn, kjFileMatchesAccept, kjFuzzyFilter, kjHsvToHsl, kjHsvToRgb, kjMultiFilterFn, kjNumberFilterFn, kjParseHex, kjRgbToHex, kjRgbToHsv, kjSetFilterFn, kjStartsWithFilter, kjSubstringFilter, kjTableResource, kjTextFilterFn, localStorageAdapter, matchSlashCommands, nextCascadeId, nextChatMessageId, nextDropdownMenuLabelId, nextPopoverTitleId, noBackdrop, noScrollLock, noTrap, normalizeLanguage, onClick, onContextMenu, onFocus, onFocusOrInput, onHotkey, onHover, parseDate, parseSlash, pointAt, polite, programmatic, provideECharts, provideIconLoader, provideIconResolver, provideIcons, provideKjAlert, provideKjBreadcrumb, provideKjButton, provideKjChatBubble, provideKjDocumentDirection, provideKjFilterParams, provideKjInputMaskTokens, provideKjLink, provideKjLocale, provideKjPagination, provideKjProgressBar, provideKjRichText, provideKjSpinner, provideKjTableStorage, provideKjTag, provideKjTextarea, provideKjToastListStrategy, provideKjToastSonnerStrategy, provideKjToastStrategy, provideKjTranslations, provideMonaco, provideMonacoLanguages, resolveChartPalette, resolveDateRangePreset, sessionStorageAdapter, silent, solidBackdrop, startOfDay, startOfMonth, stripDiacritics, tabCycle, toDeepSignal, viewportCentered, weekdayLongNames, weekdayShortNames };
30045
+ export { DRAWER_DATA, DRAWER_DRAG, DRAWER_SIDE, EN_CATALOG, FR_CATALOG, KJ_ACCORDION, KJ_ACCORDION_ITEM, KJ_ALERT, KJ_ALERT_CONFIG, KJ_ALERT_DEFAULTS, KJ_AVATAR, KJ_AVATAR_GROUP, KJ_BREADCRUMB, KJ_BREADCRUMB_CONFIG, KJ_BREADCRUMB_DEFAULTS, KJ_BUTTON_CONFIG, KJ_BUTTON_DEFAULTS, KJ_BUTTON_GROUP, KJ_CALENDAR, KJ_CAROUSEL, KJ_CAROUSEL_INDICATORS, KJ_CAROUSEL_SLIDE, KJ_CASCADE_SELECT, KJ_CHAT, KJ_CHAT_BUBBLE_CONFIG, KJ_CHAT_BUBBLE_DEFAULTS, KJ_CHAT_LOG, KJ_COLOR_PICKER, KJ_CONFIRM_POPUP, KJ_DATE_PICKER, KJ_DATE_RANGE_PRESETS, KJ_DROPDOWN_MENU, KJ_ECHARTS, KJ_FIELD, KJ_FILE_UPLOAD, KJ_FILE_UPLOAD_DEFAULT_MESSAGES, KJ_FILE_UPLOAD_ITEM, KJ_FORM, KJ_FORM_FIELD, KJ_ICON_CSS_PATH, KJ_ICON_ENTRIES, KJ_ICON_LOADER, KJ_ICON_REGISTRY, KJ_ICON_RESOLVER, KJ_INPUT_GROUP, KJ_INPUT_MASK_PRESETS, KJ_INPUT_MASK_TOKENS, KJ_INPUT_OTP, KJ_KBD_SIZE_PRESET, KJ_LINK_CONFIG, KJ_LINK_DEFAULTS, KJ_LIST, KJ_LIST_FOCUS_MODE, KJ_LIST_NAVIGATOR_CONFIG, KJ_LIST_ROW, KJ_LOCALE_CONFIG, KJ_MENUBAR, KJ_MONACO_CONFIG, KJ_MONACO_LANGUAGE_LOADERS, KJ_NUMBER_INPUT, KJ_OVERLAY_BACKDROP_STRATEGY, KJ_OVERLAY_BADGE, KJ_OVERLAY_FOCUS_TRAP_STRATEGY, KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY, KJ_OVERLAY_MOUNT_STRATEGY, KJ_OVERLAY_PANEL_ROLE, KJ_OVERLAY_POSITION_STRATEGY, KJ_OVERLAY_SCROLL_LOCK_STRATEGY, KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, KJ_PAGINATION, KJ_PAGINATION_CONFIG, KJ_PAGINATION_DEFAULTS, KJ_PASSWORD_INPUT, KJ_PROGRESS_BAR, KJ_PROGRESS_BAR_CONFIG, KJ_PROGRESS_BAR_DEFAULTS, KJ_PROSE_CSS_PATH, KJ_RADIO_GROUP, KJ_RICH_TEXT, KJ_RICH_TEXT_EXTENSIONS, KJ_RICH_TEXT_FEATURES, KJ_RICH_TEXT_NODE, KJ_ROVING_TABINDEX, KJ_RTE_OVERLAY_DATA, KJ_SELECT, KJ_SIZE_FALLBACK, KJ_SIZE_PRESET, KJ_SLIDER, KJ_SPEED_DIAL, KJ_SPINNER_CONFIG, KJ_SPINNER_DEFAULTS, KJ_STEP, KJ_STEPPER, KJ_TABLE, KJ_TABLE_STORAGE, KJ_TABS, KJ_TABS_CONFIG, KJ_TABS_DEFAULTS, KJ_TAG, KJ_TAG_CONFIG, KJ_TAG_DEFAULTS, KJ_TAG_LIST, KJ_TEXTAREA_CONFIG, KJ_TEXTAREA_DEFAULTS, KJ_TIME_PICKER, KJ_TOAST_LIST_STRATEGY, KJ_TOAST_SONNER_STRATEGY, KJ_TOAST_STRATEGY, KJ_TRANSLATION_CATALOGS, KJ_TREE_SELECT, KJ_VARIANT_FALLBACK, KJ_VARIANT_PRESET, KjAccordion, KjAccordionContent, KjAccordionItem, KjAccordionTrigger, KjAlert, KjAlertActions, KjAlertDescription, KjAlertDismiss, KjAlertIcon, KjAlertTitle, KjAriaDescribedBy, KjAriaLabelledBy, KjAvatar, KjAvatarFallback, KjAvatarGroup, KjAvatarImage, KjBackdrop, KjBadge, KjBlockquote, KjBreadcrumb, KjBreadcrumbCurrent, KjBreadcrumbEllipsis, KjBreadcrumbItem, KjBreadcrumbLink, KjBreadcrumbList, KjBreadcrumbSeparator, KjButton, KjButtonGroup, KjCalendar, KjCalendarDay, KjCalendarGrid, KjCalendarHeader, KjCarousel, KjCarouselAutoplay, KjCarouselIndicator, KjCarouselIndicators, KjCarouselNext, KjCarouselPauseToggle, KjCarouselPrevious, KjCarouselSlide, KjCarouselViewport, KjCascadeSelect, KjCascadeSelectOption, KjCascadeSelectPanel, KjCascadeSelectSubPanel, KjCascadeSelectTrigger, KjChart, KjChartTableFallback, KjChat, KjChatAnnouncer, KjChatAvatar, KjChatBubble, KjChatFooter, KjChatHeader, KjChatLog, KjChatStore, KjCheckbox, KjCode, KjColorPicker, KjColorPickerAlphaSlider, KjColorPickerArea, KjColorPickerHueSlider, KjColorPickerInput, KjColorPickerPanel, KjColorPickerTrigger, KjCombobox, KjComboboxInput, KjComboboxListbox, KjComboboxOption, KjCommandEmpty, KjCommandGroup, KjCommandInput, KjCommandItem, KjCommandList, KjCommandPalette, KjCommandPaletteDialog, KjCommandPaletteTrigger, KjCommandSeparator, KjConfirmPopup, KjConfirmPopupAction, KjConfirmPopupCancel, KjConfirmPopupContent, KjConfirmPopupMessage, KjConfirmPopupTrigger, KjDatePicker, KjDatePickerCalendar, KjDatePickerTrigger, KjDateRangePresetOption, KjDateRangePresets, KjDialog$1 as KjDialog, KjDialogRef, KjDialog as KjDialogService, KjDirectionality, KjDisabled, KjDivider, KjDrawer, KjDrawerRef, KjDrawerService, KjDropdownMenu, KjDropdownMenuContent, KjDropdownMenuGroup, KjDropdownMenuItem, KjDropdownMenuLabel, KjDropdownMenuSeparator, KjDropdownMenuTrigger, KjEditor, KjEditorLoader, KjField, KjFieldError, KjFieldGroup, KjFieldHelp, KjFieldLabel, KjFileUpload, KjFileUploadDropzone, KjFileUploadItem, KjFileUploadList, KjFileUploadTrigger, KjFilterableList, KjFocusRing, KjFocusTrap, KjForm, KjFormControl, KjFormError, KjFormErrorSummary, KjFormField, KjFormLabel, KjIconDirective, KjId, KjInput, KjInputGroup, KjInputGroupAddon, KjInputMask, KjInputOtp, KjInputOtpCell, KjKbd, KjLead, KjLink, KjList, KjListGroup, KjListGroupLabel, KjListItem, KjListNavigator, KjListRow, KjListSeparator, KjLiveRegion, KjLocale, KjMenubar, KjMenubarItem, KjMotion, KjMuted, KjNumberInput, KjNumberInputGroup, KjNumberStepper, KjOption, KjOverlayBadge, KjOverlayBadgeContent, KjOverlayBuilder, KjOverlayController, KjOverlayHandle, KjOverlayPanel, KjOverlayStack, KjOverlayTrigger, KjOverlayWrapper, KjPagination, KjPaginationEllipsis, KjPaginationFirst, KjPaginationInfo, KjPaginationItem, KjPaginationLast, KjPaginationNext, KjPaginationPrevious, KjPasswordCapsLockWarning, KjPasswordInput, KjPasswordInputScope, KjPasswordStrength, KjPasswordToggle, KjPopoverArrow, KjPopoverClose, KjPopoverContent, KjPopoverTitle, KjPopoverTrigger, KjProgressBar, KjProgressBarFill, KjRadio, KjRadioGroup, KjReducedMotion, KjRichTextEditor, KjRichTextExtensionDirective, KjRovingTabindex, KjRovingTabindexItemDirective, KjSelect, KjSelectContent, KjSelectTrigger, KjSelectionModel, KjSheet, KjSheetRef, KjSheetService, KjSize, KjSkeleton, KjSkipLink, KjSlider, KjSliderRange, KjSliderThumb, KjSliderTrack, KjSpeedDial, KjSpeedDialAction, KjSpeedDialActions, KjSpeedDialTrigger, KjSpinner, KjStep, KjStepContent, KjStepLabel, KjStepper, KjStepperNext, KjStepperPrevious, KjStepperReset, KjTab, KjTabList, KjTabPanel, KjTable, KjTableCell, KjTableFilterOutlet, KjTableHeader, KjTableKeyboardNav, KjTableRow, KjTabs, KjTag, KjTagList, KjTagRemove, KjTextarea, KjTimePicker, KjTimePickerHours, KjTimePickerMeridiem, KjTimePickerMinutes, KjTimePickerSeconds, KjToast, KjToastClose, KjToastPanel, KjToastRef, KjToastService, KjToastViewport, KjToggle, KjTooltipArrow, KjTooltipContent, KjTooltipGroup, KjTooltipTrigger, KjTranslate, KjTranslateService, KjTreeSelect, KjTreeSelectContent, KjTreeSelectNode, KjTreeSelectToggle, KjTreeSelectTrigger, KjTruncate, KjTypeAhead, KjVariant, KjVisuallyHidden, MaskEngine, SHEET_ARIA_LABEL, SHEET_DATA, SHEET_DETENT, SHEET_DISMISSIBLE, addDays, addMonths, addYears, anchoredTo, assertive, bindPresets, blurredBackdrop, bodyPortal, buildMonthMatrix, coalesceAnnouncement, compareDay, compileMask, corner, createKjDecoratorNode, createKjImageNode, cssClip, defaultDateRangePresets, defaultMaskTokens, defaultPasswordScorer, edgeSheet, endOfMonth, firstDayOfWeek, formatDateLong, formatDateShort, formatMonthYear, getIconMode, htmlOverflow, inContainer, inMemoryAdapter, inPlace, inPlaceSibling, inertBased, injectFilterableList, injectKjFilterParams, injectKjIconResolver, injectListItem, injectRichTextNode, injectRteOverlayData, injectSelectionModel, isInRange, isKjFilterModel, isSameDay, isSameMonth, kjColumn, kjColumnGroup, kjContainsFilter, kjDateFilterFn, kjFileMatchesAccept, kjFuzzyFilter, kjHsvToHsl, kjHsvToRgb, kjMultiFilterFn, kjNumberFilterFn, kjParseHex, kjRgbToHex, kjRgbToHsv, kjSetFilterFn, kjStartsWithFilter, kjSubstringFilter, kjTableResource, kjTextFilterFn, localStorageAdapter, matchSlashCommands, nextCascadeId, nextChatMessageId, nextDropdownMenuLabelId, nextPopoverTitleId, noBackdrop, noScrollLock, noTrap, normalizeLanguage, onClick, onContextMenu, onFocus, onFocusOrInput, onHotkey, onHover, parseDate, parseSlash, pointAt, polite, programmatic, provideECharts, provideIconLoader, provideIconResolver, provideIcons, provideKjAlert, provideKjBreadcrumb, provideKjButton, provideKjChatBubble, provideKjDocumentDirection, provideKjFilterParams, provideKjInputMaskTokens, provideKjLink, provideKjLocale, provideKjPagination, provideKjProgressBar, provideKjRichText, provideKjSpinner, provideKjTableStorage, provideKjTabs, provideKjTag, provideKjTextarea, provideKjToastListStrategy, provideKjToastSonnerStrategy, provideKjToastStrategy, provideKjTranslations, provideMonaco, provideMonacoLanguages, resolveChartPalette, resolveDateRangePreset, sessionStorageAdapter, silent, solidBackdrop, startOfDay, startOfMonth, stripDiacritics, tabCycle, toDeepSignal, viewportCentered, weekdayLongNames, weekdayShortNames };
29803
30046
  //# sourceMappingURL=kouji-ui-core.mjs.map