@kouji-ui/components 0.5.0 → 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.
@@ -6160,7 +6160,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
6160
6160
  */
6161
6161
  class KjFieldComponent {
6162
6162
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6163
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjFieldComponent, isStandalone: true, selector: "kj-field", host: { classAttribute: "kj-field" }, hostDirectives: [{ directive: i1.KjField, inputs: ["kjFieldOrientation", "kjFieldOrientation", "kjRequired", "kjRequired", "kjDisabled", "kjDisabled", "kjInvalid", "kjInvalid", "kjFieldId", "kjFieldId", "kjFieldLabelId", "kjFieldLabelId"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjFieldComponent, isStandalone: true, selector: "kj-field", host: { classAttribute: "kj-field" }, hostDirectives: [{ directive: i1.KjField, inputs: ["kjFieldOrientation", "kjFieldOrientation", "kjRequired", "kjRequired", "kjDisabled", "kjDisabled", "kjInvalid", "kjInvalid", "kjFieldId", "kjFieldId", "kjFieldLabelId", "kjFieldLabelId"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6164
6164
  }
6165
6165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldComponent, decorators: [{
6166
6166
  type: Component,
@@ -6178,7 +6178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
6178
6178
  },
6179
6179
  ], template: `<ng-content />`, encapsulation: ViewEncapsulation.None, host: {
6180
6180
  class: 'kj-field',
6181
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6181
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6182
6182
  }] });
6183
6183
  /**
6184
6184
  * Styled wrapper around `KjFieldLabel`.
@@ -6193,7 +6193,7 @@ class KjFieldLabelComponent {
6193
6193
  the field's controlId signal — the static analyzer can't see that. -->
6194
6194
  <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->
6195
6195
  <label kjFieldLabel class="kj-field-label"><ng-content /></label>
6196
- `, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldLabel, selector: "[kjFieldLabel]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6196
+ `, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldLabel, selector: "[kjFieldLabel]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6197
6197
  }
6198
6198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldLabelComponent, decorators: [{
6199
6199
  type: Component,
@@ -6204,7 +6204,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
6204
6204
  <label kjFieldLabel class="kj-field-label"><ng-content /></label>
6205
6205
  `, encapsulation: ViewEncapsulation.None, host: {
6206
6206
  style: 'display: contents;',
6207
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6207
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6208
6208
  }] });
6209
6209
  /**
6210
6210
  * Styled wrapper around `KjFieldHelp`.
@@ -6214,30 +6214,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
6214
6214
  */
6215
6215
  class KjFieldHelpComponent {
6216
6216
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldHelpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6217
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjFieldHelpComponent, isStandalone: true, selector: "kj-field-help", host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `<span kjFieldHelp class="kj-field-help"><ng-content /></span>`, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldHelp, selector: "[kjFieldHelp]", inputs: ["kjFieldHelpId"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6217
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjFieldHelpComponent, isStandalone: true, selector: "kj-field-help", host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `<span kjFieldHelp class="kj-field-help"><ng-content /></span>`, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldHelp, selector: "[kjFieldHelp]", inputs: ["kjFieldHelpId"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6218
6218
  }
6219
6219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldHelpComponent, decorators: [{
6220
6220
  type: Component,
6221
6221
  args: [{ selector: 'kj-field-help', standalone: true, imports: [KjFieldHelp], template: `<span kjFieldHelp class="kj-field-help"><ng-content /></span>`, encapsulation: ViewEncapsulation.None, host: {
6222
6222
  style: 'display: contents;',
6223
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6223
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6224
6224
  }] });
6225
6225
  /**
6226
6226
  * Styled wrapper around `KjFieldError`.
6227
+ *
6228
+ * With `kjReserve`, the error line keeps its box while the field is valid
6229
+ * (invisible, one text line tall) so errors appearing / disappearing never
6230
+ * shift the form layout.
6231
+ *
6232
+ * @example
6233
+ * ```html
6234
+ * <kj-field-error kjReserve>Please enter a valid email.</kj-field-error>
6235
+ * ```
6227
6236
  * @doc-category Library/Data input
6228
6237
  * @doc
6229
6238
  * @doc-name field
6230
6239
  */
6231
6240
  class KjFieldErrorComponent {
6241
+ /** Keep the error line's box while valid, so showing it never moves the layout. */
6242
+ kjReserve = input(false, { ...(ngDevMode ? { debugName: "kjReserve" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6232
6243
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6233
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: KjFieldErrorComponent, isStandalone: true, selector: "kj-field-error", host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `<span kjFieldError class="kj-field-error"><ng-content /></span>`, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldError, selector: "[kjFieldError]", inputs: ["kjFieldErrorId"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6244
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: KjFieldErrorComponent, isStandalone: true, selector: "kj-field-error", inputs: { kjReserve: { classPropertyName: "kjReserve", publicName: "kjReserve", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "display: contents;" }, ngImport: i0, template: `<span kjFieldError [kjFieldErrorReserve]="kjReserve()" class="kj-field-error"><ng-content /></span>`, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldError, selector: "[kjFieldError]", inputs: ["kjFieldErrorId", "kjFieldErrorReserve"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6234
6245
  }
6235
6246
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldErrorComponent, decorators: [{
6236
6247
  type: Component,
6237
- args: [{ selector: 'kj-field-error', standalone: true, imports: [KjFieldError], template: `<span kjFieldError class="kj-field-error"><ng-content /></span>`, encapsulation: ViewEncapsulation.None, host: {
6248
+ args: [{ selector: 'kj-field-error', standalone: true, imports: [KjFieldError], template: `<span kjFieldError [kjFieldErrorReserve]="kjReserve()" class="kj-field-error"><ng-content /></span>`, encapsulation: ViewEncapsulation.None, host: {
6238
6249
  style: 'display: contents;',
6239
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6240
- }] });
6250
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6251
+ }], propDecorators: { kjReserve: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjReserve", required: false }] }] } });
6241
6252
  /**
6242
6253
  * Styled wrapper around `KjFieldGroup`. Lays out an input with optional
6243
6254
  * leading / trailing addons (icons, units, action buttons) as a single
@@ -6271,7 +6282,7 @@ class KjFieldGroupComponent {
6271
6282
  <ng-content select="[suffix]" />
6272
6283
  </span>
6273
6284
  </div>
6274
- `, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldGroup, selector: "[kjFieldGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6285
+ `, isInline: true, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"], dependencies: [{ kind: "directive", type: KjFieldGroup, selector: "[kjFieldGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6275
6286
  }
6276
6287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjFieldGroupComponent, decorators: [{
6277
6288
  type: Component,
@@ -6289,7 +6300,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
6289
6300
  </div>
6290
6301
  `, encapsulation: ViewEncapsulation.None, host: {
6291
6302
  style: 'display: contents;',
6292
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6303
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@layer kj.component{kj-field.kj-field{--kj-field-gap: var(--kj-space-xs);--kj-field-label-fg: var(--kj-fg-default);--kj-field-label-font: var(--kj-font-sans);--kj-field-label-font-size: var(--kj-text-sm);--kj-field-label-weight: 500;--kj-field-help-fg: var(--kj-fg-muted);--kj-field-help-font-size: var(--kj-text-xs);--kj-field-error-fg: var(--kj-fg-danger);--kj-field-error-font-size: var(--kj-text-xs);--kj-field-required-fg: var(--kj-fg-danger);--kj-field-disabled-opacity: .55;display:flex;flex-direction:column;gap:var(--kj-field-gap);width:100%}kj-field.kj-field[data-orientation=horizontal]{flex-direction:row;align-items:center;gap:var(--kj-space-md)}kj-field.kj-field[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-label{color:var(--kj-field-label-fg);font:var(--kj-field-label-weight) var(--kj-field-label-font-size) / 1.4 var(--kj-field-label-font)}.kj-field-label[data-required]:after{content:\" *\";color:var(--kj-field-required-fg)}.kj-field-label[data-invalid]{color:var(--kj-field-error-fg)}.kj-field-help{color:var(--kj-field-help-fg);font:var(--kj-field-help-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error{color:var(--kj-field-error-fg);font:var(--kj-field-error-font-size) / 1.4 var(--kj-font-sans)}.kj-field-error[data-reserve]{display:block;min-height:calc(var(--kj-field-error-font-size) * 1.4)}.kj-field-error[data-hidden]{visibility:hidden}.kj-field-group{--kj-field-group-bg: var(--kj-bg-field);--kj-field-group-fg: var(--kj-fg-default);--kj-field-group-border-color: var(--kj-border-default);--kj-field-group-radius: var(--kj-radius-field);--kj-field-group-addon-fg: var(--kj-fg-muted);--kj-field-group-addon-bg: var(--kj-bg-surface);--kj-field-group-padding-x: var(--kj-space-md);display:inline-flex;align-items:stretch;width:100%;background:var(--kj-field-group-bg);color:var(--kj-field-group-fg);border:var(--kj-border) solid var(--kj-field-group-border-color);border-radius:var(--kj-field-group-radius);overflow:hidden;transition:var(--kj-transition)}.kj-field-group:focus-within{border-color:var(--kj-border-focus, var(--kj-bg-primary));outline:2px solid var(--kj-bg-primary);outline-offset:-2px}.kj-field-group[data-invalid]{border-color:var(--kj-border-danger, var(--kj-fg-danger))}.kj-field-group[data-disabled]{opacity:var(--kj-field-disabled-opacity);cursor:not-allowed}.kj-field-group__prefix,.kj-field-group__suffix{display:inline-flex;align-items:center;padding:0 var(--kj-field-group-padding-x);color:var(--kj-field-group-addon-fg);background:var(--kj-field-group-addon-bg);font:var(--kj-text-sm) / 1 var(--kj-font-sans);white-space:nowrap}.kj-field-group__prefix:empty,.kj-field-group__suffix:empty{display:none}.kj-field-group__control{display:inline-flex;flex:1 1 auto;min-width:0}.kj-field-group__control>.kj-input,.kj-field-group__control>input,.kj-field-group__control>kj-input,.kj-field-group__control>kj-input>.kj-input{border:0;border-radius:0;width:100%}.kj-field-group__control>.kj-input:focus-visible,.kj-field-group__control>input:focus-visible{outline:none}}\n"] }]
6293
6304
  }] });
6294
6305
 
6295
6306
  /**
@@ -9623,7 +9634,7 @@ class KjInputMaskValidationExample {
9623
9634
  </kj-field-error>
9624
9635
  }
9625
9636
  </kj-field>
9626
- `, isInline: true, styles: [":host{display:block;max-width:400px}input[kjInputMask]{color:var(--kj-fg-default);border:1px solid var(--kj-border-default);border-radius:var(--kj-radius-field, .375rem);padding:var(--kj-space-sm) var(--kj-space-md);font:var(--kj-text-sm) / 1.4 var(--kj-font-sans);font-variant-numeric:tabular-nums;width:100%}input[kjInputMask]:focus-visible{outline:2px solid var(--kj-fg-primary);outline-offset:2px;border-color:var(--kj-fg-primary)}input[kjInputMask][aria-invalid=true]{border-color:var(--kj-fg-danger, #ef4444)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: KjInputMask, selector: "input[kjInputMask]", inputs: ["kjMask", "kjMaskTokens", "kjMaskMode", "kjSlotChar", "kjDisabled", "kjAutoClear", "kjFormatHint"], outputs: ["kjComplete"], exportAs: ["kjInputMask"] }, { kind: "component", type: KjFieldComponent, selector: "kj-field" }, { kind: "component", type: KjFieldLabelComponent, selector: "kj-field-label" }, { kind: "component", type: KjFieldHelpComponent, selector: "kj-field-help" }, { kind: "component", type: KjFieldErrorComponent, selector: "kj-field-error" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
9637
+ `, isInline: true, styles: [":host{display:block;max-width:400px}input[kjInputMask]{color:var(--kj-fg-default);border:1px solid var(--kj-border-default);border-radius:var(--kj-radius-field, .375rem);padding:var(--kj-space-sm) var(--kj-space-md);font:var(--kj-text-sm) / 1.4 var(--kj-font-sans);font-variant-numeric:tabular-nums;width:100%}input[kjInputMask]:focus-visible{outline:2px solid var(--kj-fg-primary);outline-offset:2px;border-color:var(--kj-fg-primary)}input[kjInputMask][aria-invalid=true]{border-color:var(--kj-fg-danger, #ef4444)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: KjInputMask, selector: "input[kjInputMask]", inputs: ["kjMask", "kjMaskTokens", "kjMaskMode", "kjSlotChar", "kjDisabled", "kjAutoClear", "kjFormatHint"], outputs: ["kjComplete"], exportAs: ["kjInputMask"] }, { kind: "component", type: KjFieldComponent, selector: "kj-field" }, { kind: "component", type: KjFieldLabelComponent, selector: "kj-field-label" }, { kind: "component", type: KjFieldHelpComponent, selector: "kj-field-help" }, { kind: "component", type: KjFieldErrorComponent, selector: "kj-field-error", inputs: ["kjReserve"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
9627
9638
  }
9628
9639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjInputMaskValidationExample, decorators: [{
9629
9640
  type: Component,
@@ -14753,6 +14764,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
14753
14764
  args: [{ selector: 'ng-template[kjCellTemplate]', standalone: true }]
14754
14765
  }], propDecorators: { kjCellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjCellTemplate", required: true }] }] } });
14755
14766
 
14767
+ /**
14768
+ * Registers the empty-state template for a `<kj-table>` — rendered when the
14769
+ * table resolves to zero rows and is neither loading nor errored.
14770
+ *
14771
+ * Prefer this over the `[kjEmpty]` content slot: the template is instantiated
14772
+ * only while the state is active, so avatars, buttons and injected services in
14773
+ * the empty state cost nothing on a populated table.
14774
+ *
14775
+ * ```html
14776
+ * <kj-table [kjData]="rows()" [kjColumns]="cols">
14777
+ * <ng-template kjEmptyTemplate>
14778
+ * <p>No users found.</p>
14779
+ * <kj-button kjSize="sm" (click)="add()">Add user</kj-button>
14780
+ * </ng-template>
14781
+ * </kj-table>
14782
+ * ```
14783
+ *
14784
+ * @doc-category Library/Data display
14785
+ * @doc
14786
+ * @doc-name table
14787
+ */
14788
+ class KjTableEmptyTemplate {
14789
+ /** @internal */
14790
+ template = inject(TemplateRef);
14791
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableEmptyTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
14792
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjTableEmptyTemplate, isStandalone: true, selector: "ng-template[kjEmptyTemplate]", ngImport: i0 });
14793
+ }
14794
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableEmptyTemplate, decorators: [{
14795
+ type: Directive,
14796
+ args: [{ selector: 'ng-template[kjEmptyTemplate]', standalone: true }]
14797
+ }] });
14798
+ /**
14799
+ * Registers the loading template for a `<kj-table>` — rendered while the
14800
+ * resource is in flight or `[kjLoading]` is set, replacing the built-in
14801
+ * "Loading…" text with a project-specific spinner or skeleton.
14802
+ *
14803
+ * On a *reload* (rows already on screen) the table shows its slim progress
14804
+ * stripe instead and this template stays hidden, so the stale rows remain
14805
+ * readable.
14806
+ *
14807
+ * ```html
14808
+ * <kj-table [kjResource]="res" [kjColumns]="cols">
14809
+ * <ng-template kjLoadingTemplate>
14810
+ * <my-spinner />
14811
+ * </ng-template>
14812
+ * </kj-table>
14813
+ * ```
14814
+ *
14815
+ * @doc-category Library/Data display
14816
+ * @doc
14817
+ * @doc-name table
14818
+ */
14819
+ class KjTableLoadingTemplate {
14820
+ /** @internal */
14821
+ template = inject(TemplateRef);
14822
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableLoadingTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
14823
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjTableLoadingTemplate, isStandalone: true, selector: "ng-template[kjLoadingTemplate]", ngImport: i0 });
14824
+ }
14825
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableLoadingTemplate, decorators: [{
14826
+ type: Directive,
14827
+ args: [{ selector: 'ng-template[kjLoadingTemplate]', standalone: true }]
14828
+ }] });
14829
+ /**
14830
+ * Registers the error template for a `<kj-table>` — rendered when the bound
14831
+ * `[kjResource]` rejects. Pair it with `reload()` for a retry affordance.
14832
+ *
14833
+ * ```html
14834
+ * <kj-table [kjResource]="res" [kjColumns]="cols">
14835
+ * <ng-template kjErrorTemplate>
14836
+ * <p>Failed to load.</p>
14837
+ * <kj-button kjSize="sm" (click)="res.reload()">Try again</kj-button>
14838
+ * </ng-template>
14839
+ * </kj-table>
14840
+ * ```
14841
+ *
14842
+ * @doc-category Library/Data display
14843
+ * @doc
14844
+ * @doc-name table
14845
+ */
14846
+ class KjTableErrorTemplate {
14847
+ /** @internal */
14848
+ template = inject(TemplateRef);
14849
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableErrorTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
14850
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: KjTableErrorTemplate, isStandalone: true, selector: "ng-template[kjErrorTemplate]", ngImport: i0 });
14851
+ }
14852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableErrorTemplate, decorators: [{
14853
+ type: Directive,
14854
+ args: [{ selector: 'ng-template[kjErrorTemplate]', standalone: true }]
14855
+ }] });
14856
+
14756
14857
  /**
14757
14858
  * Inline text cell editor for `<kj-table>`. Renders the styled
14758
14859
  * `<kj-input>` component (which wraps the headless `kjInput` directive and
@@ -16203,7 +16304,10 @@ const BUILTIN_FILTERS = {
16203
16304
  * the toolbar's export menu.
16204
16305
  * @doc-file table.export.example.ts
16205
16306
  * @doc-example Empty and error [full]
16206
- * Project `[kjEmpty]` / `[kjError]` slots to override the defaults.
16307
+ * Override the defaults with `<ng-template kjEmptyTemplate>` /
16308
+ * `kjErrorTemplate` / `kjLoadingTemplate` (lazy — instantiated only while
16309
+ * that state is active). The older `[kjEmpty]` / `[kjError]` / `[kjLoading]`
16310
+ * projection slots still work and act as the fallback.
16207
16311
  * @doc-file table.empty-and-error.example.ts
16208
16312
  * @doc-example Keyboard [full]
16209
16313
  * Arrow / Home / End / Ctrl+Home/End / PageUp/Down / F2 / Enter / Esc /
@@ -16285,6 +16389,25 @@ class KjTableComponent {
16285
16389
  /** Custom cell templates declared as `ng-template[kjCellTemplate]` content. */
16286
16390
  cellTemplates = contentChildren(KjCellTemplateDirective, /* @ts-ignore */
16287
16391
  ...(ngDevMode ? [{ debugName: "cellTemplates" }] : /* istanbul ignore next */ []));
16392
+ // ── State templates ─────────────────────────────────────────────────────
16393
+ // Declared as `ng-template[kj{Empty,Loading,Error}Template]` content. When
16394
+ // present they win over the `[kjEmpty]` / `[kjLoading]` / `[kjError]`
16395
+ // projection slots, which stay supported for simple static markup.
16396
+ emptyTemplate = contentChild(KjTableEmptyTemplate, /* @ts-ignore */
16397
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
16398
+ loadingTemplate = contentChild(KjTableLoadingTemplate, /* @ts-ignore */
16399
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
16400
+ errorTemplate = contentChild(KjTableErrorTemplate, /* @ts-ignore */
16401
+ ...(ngDevMode ? [{ debugName: "errorTemplate" }] : /* istanbul ignore next */ []));
16402
+ /** Empty-state template, or `null` to fall back to the `[kjEmpty]` slot. */
16403
+ emptyTpl = computed(() => this.emptyTemplate()?.template ?? null, /* @ts-ignore */
16404
+ ...(ngDevMode ? [{ debugName: "emptyTpl" }] : /* istanbul ignore next */ []));
16405
+ /** Loading template, or `null` to fall back to the `[kjLoading]` slot. */
16406
+ loadingTpl = computed(() => this.loadingTemplate()?.template ?? null, /* @ts-ignore */
16407
+ ...(ngDevMode ? [{ debugName: "loadingTpl" }] : /* istanbul ignore next */ []));
16408
+ /** Error template, or `null` to fall back to the `[kjError]` slot. */
16409
+ errorTpl = computed(() => this.errorTemplate()?.template ?? null, /* @ts-ignore */
16410
+ ...(ngDevMode ? [{ debugName: "errorTpl" }] : /* istanbul ignore next */ []));
16288
16411
  /** Resolve the registered template for a cell's column, if any. */
16289
16412
  cellTpl(cell) {
16290
16413
  for (const t of this.cellTemplates()) {
@@ -16716,7 +16839,7 @@ class KjTableComponent {
16716
16839
  this.editingCell.set(null);
16717
16840
  }
16718
16841
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16719
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: KjTableComponent, isStandalone: true, selector: "kj-table", inputs: { kjResource: { classPropertyName: "kjResource", publicName: "kjResource", isSignal: true, isRequired: false, transformFunction: null }, kjDensity: { classPropertyName: "kjDensity", publicName: "kjDensity", isSignal: true, isRequired: false, transformFunction: null }, kjVariant: { classPropertyName: "kjVariant", publicName: "kjVariant", isSignal: true, isRequired: false, transformFunction: null }, kjLoading: { classPropertyName: "kjLoading", publicName: "kjLoading", isSignal: true, isRequired: false, transformFunction: null }, kjSelection: { classPropertyName: "kjSelection", publicName: "kjSelection", isSignal: true, isRequired: false, transformFunction: null }, kjSelectionMode: { classPropertyName: "kjSelectionMode", publicName: "kjSelectionMode", isSignal: true, isRequired: false, transformFunction: null }, kjShowSelectionColumn: { classPropertyName: "kjShowSelectionColumn", publicName: "kjShowSelectionColumn", isSignal: true, isRequired: false, transformFunction: null }, kjStorageKey: { classPropertyName: "kjStorageKey", publicName: "kjStorageKey", isSignal: true, isRequired: false, transformFunction: null }, kjStorageAdapter: { classPropertyName: "kjStorageAdapter", publicName: "kjStorageAdapter", isSignal: true, isRequired: false, transformFunction: null }, kjVirtual: { classPropertyName: "kjVirtual", publicName: "kjVirtual", isSignal: true, isRequired: false, transformFunction: null }, kjEstimatedRowSize: { classPropertyName: "kjEstimatedRowSize", publicName: "kjEstimatedRowSize", isSignal: true, isRequired: false, transformFunction: null }, kjEnableFilters: { classPropertyName: "kjEnableFilters", publicName: "kjEnableFilters", isSignal: true, isRequired: false, transformFunction: null }, kjEnableResize: { classPropertyName: "kjEnableResize", publicName: "kjEnableResize", isSignal: true, isRequired: false, transformFunction: null }, kjEnableRowPinning: { classPropertyName: "kjEnableRowPinning", publicName: "kjEnableRowPinning", isSignal: true, isRequired: false, transformFunction: null }, kjEditOnDoubleClick: { classPropertyName: "kjEditOnDoubleClick", publicName: "kjEditOnDoubleClick", isSignal: true, isRequired: false, transformFunction: null }, kjPageSize: { classPropertyName: "kjPageSize", publicName: "kjPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { kjSelection: "kjSelectionChange", cellEdit: "cellEdit", stateChange: "stateChange", rowClick: "rowClick", rowDoubleClick: "rowDoubleClick" }, host: { properties: { "attr.data-density": "t.state.density()", "attr.data-variant": "kjVariant()", "attr.data-loading": "isLoading() ? \"\" : null", "attr.data-error": "hasError() ? \"\" : null" } }, queries: [{ propertyName: "kjRowExpansionTpl", first: true, predicate: ["kjRowExpansion"], descendants: true, isSignal: true }, { propertyName: "cellTemplates", predicate: KjCellTemplateDirective, isSignal: true }], hostDirectives: [{ directive: i1.KjTable, inputs: ["kjTable", "kjColumns", "kjTableData", "kjData", "kjGetRowId", "kjGetRowId"] }], ngImport: i0, template: `
16842
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: KjTableComponent, isStandalone: true, selector: "kj-table", inputs: { kjResource: { classPropertyName: "kjResource", publicName: "kjResource", isSignal: true, isRequired: false, transformFunction: null }, kjDensity: { classPropertyName: "kjDensity", publicName: "kjDensity", isSignal: true, isRequired: false, transformFunction: null }, kjVariant: { classPropertyName: "kjVariant", publicName: "kjVariant", isSignal: true, isRequired: false, transformFunction: null }, kjLoading: { classPropertyName: "kjLoading", publicName: "kjLoading", isSignal: true, isRequired: false, transformFunction: null }, kjSelection: { classPropertyName: "kjSelection", publicName: "kjSelection", isSignal: true, isRequired: false, transformFunction: null }, kjSelectionMode: { classPropertyName: "kjSelectionMode", publicName: "kjSelectionMode", isSignal: true, isRequired: false, transformFunction: null }, kjShowSelectionColumn: { classPropertyName: "kjShowSelectionColumn", publicName: "kjShowSelectionColumn", isSignal: true, isRequired: false, transformFunction: null }, kjStorageKey: { classPropertyName: "kjStorageKey", publicName: "kjStorageKey", isSignal: true, isRequired: false, transformFunction: null }, kjStorageAdapter: { classPropertyName: "kjStorageAdapter", publicName: "kjStorageAdapter", isSignal: true, isRequired: false, transformFunction: null }, kjVirtual: { classPropertyName: "kjVirtual", publicName: "kjVirtual", isSignal: true, isRequired: false, transformFunction: null }, kjEstimatedRowSize: { classPropertyName: "kjEstimatedRowSize", publicName: "kjEstimatedRowSize", isSignal: true, isRequired: false, transformFunction: null }, kjEnableFilters: { classPropertyName: "kjEnableFilters", publicName: "kjEnableFilters", isSignal: true, isRequired: false, transformFunction: null }, kjEnableResize: { classPropertyName: "kjEnableResize", publicName: "kjEnableResize", isSignal: true, isRequired: false, transformFunction: null }, kjEnableRowPinning: { classPropertyName: "kjEnableRowPinning", publicName: "kjEnableRowPinning", isSignal: true, isRequired: false, transformFunction: null }, kjEditOnDoubleClick: { classPropertyName: "kjEditOnDoubleClick", publicName: "kjEditOnDoubleClick", isSignal: true, isRequired: false, transformFunction: null }, kjPageSize: { classPropertyName: "kjPageSize", publicName: "kjPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { kjSelection: "kjSelectionChange", cellEdit: "cellEdit", stateChange: "stateChange", rowClick: "rowClick", rowDoubleClick: "rowDoubleClick" }, host: { properties: { "attr.data-density": "t.state.density()", "attr.data-variant": "kjVariant()", "attr.data-loading": "isLoading() ? \"\" : null", "attr.data-error": "hasError() ? \"\" : null", "attr.data-empty": "showEmpty() ? \"\" : null" } }, queries: [{ propertyName: "kjRowExpansionTpl", first: true, predicate: ["kjRowExpansion"], descendants: true, isSignal: true }, { propertyName: "cellTemplates", predicate: KjCellTemplateDirective, isSignal: true }, { propertyName: "emptyTemplate", first: true, predicate: KjTableEmptyTemplate, descendants: true, isSignal: true }, { propertyName: "loadingTemplate", first: true, predicate: KjTableLoadingTemplate, descendants: true, isSignal: true }, { propertyName: "errorTemplate", first: true, predicate: KjTableErrorTemplate, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.KjTable, inputs: ["kjTable", "kjColumns", "kjTableData", "kjData", "kjGetRowId", "kjGetRowId"] }], ngImport: i0, template: `
16720
16843
  <div class="kj-table-wrapper">
16721
16844
  <!-- Toolbar projection: matches either an explicit [kjToolbar] marker
16722
16845
  OR the styled <kj-table-toolbar> element directly, so users don't
@@ -17030,12 +17153,20 @@ class KjTableComponent {
17030
17153
 
17031
17154
  @if (showEmpty()) {
17032
17155
  <div class="kj-table-empty" role="status">
17033
- <ng-content select="[kjEmpty]" />
17156
+ @if (emptyTpl(); as tpl) {
17157
+ <ng-container [ngTemplateOutlet]="tpl" />
17158
+ } @else {
17159
+ <ng-content select="[kjEmpty]" />
17160
+ }
17034
17161
  </div>
17035
17162
  }
17036
17163
  @if (hasError()) {
17037
17164
  <div class="kj-table-error" role="alert">
17038
- <ng-content select="[kjError]" />
17165
+ @if (errorTpl(); as tpl) {
17166
+ <ng-container [ngTemplateOutlet]="tpl" />
17167
+ } @else {
17168
+ <ng-content select="[kjError]" />
17169
+ }
17039
17170
  </div>
17040
17171
  }
17041
17172
  @if (isLoading()) {
@@ -17043,15 +17174,19 @@ class KjTableComponent {
17043
17174
  aria-live="polite"
17044
17175
  aria-busy="true"
17045
17176
  [attr.data-has-rows]="effectiveData().length > 0 ? '' : null">
17046
- <ng-content select="[kjLoading]">
17047
- <span class="kj-table-loading-fallback">Loading…</span>
17048
- </ng-content>
17177
+ @if (loadingTpl(); as tpl) {
17178
+ <ng-container [ngTemplateOutlet]="tpl" />
17179
+ } @else {
17180
+ <ng-content select="[kjLoading]">
17181
+ <span class="kj-table-loading-fallback">Loading…</span>
17182
+ </ng-content>
17183
+ }
17049
17184
  </div>
17050
17185
  }
17051
17186
 
17052
17187
  <ng-content />
17053
17188
  </div>
17054
- `, isInline: true, styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0;font-family:var(--kj-font-sans);font-size:var(--kj-text-sm);--kj-table-row-height: 2.25rem}:host([data-density=\"compact\"]){--kj-table-row-height: 1.75rem}:host([data-density=\"comfortable\"]){--kj-table-row-height: 2.75rem}.kj-table-wrapper{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;min-width:0;position:relative}.kj-table-body{position:relative;overflow:auto;display:block;flex:1 1 auto;min-height:0;min-width:0}.kj-table-body thead th{position:sticky;top:0;z-index:2;background:var(--kj-table-header-bg, var(--kj-bg-surface))}.kj-table-body thead th[data-pin]{z-index:3}.kj-table-body>table{min-width:100%}:host th,:host td{height:var(--kj-table-row-height)}:host table{width:100%;border-collapse:collapse;background:var(--kj-bg-surface);color:var(--kj-fg-default)}:host th,:host td{text-align:left;padding:var(--kj-base-space-sm) var(--kj-base-space-md);border-bottom:1px solid var(--kj-border-default);position:relative}:host th{font-weight:600;background:var(--kj-bg-elevated)}:host th[aria-sort]{-webkit-user-select:none;user-select:none}.kj-table-sort-indicator{display:inline-flex;align-items:center;margin-inline-start:var(--kj-base-space-xs, .25rem);color:var(--kj-fg-subtle, var(--kj-fg-muted));transition:color var(--kj-transition);vertical-align:middle}:host th[data-sort=asc] .kj-table-sort-indicator,:host th[data-sort=desc] .kj-table-sort-indicator{color:var(--kj-fg-primary)}:host th[aria-sort]:hover .kj-table-sort-indicator,:host th[aria-sort]:focus-visible .kj-table-sort-indicator{color:var(--kj-fg-default)}:host([data-density=\"compact\"]) th,:host([data-density=\"compact\"]) td{padding:var(--kj-base-space-xs) var(--kj-base-space-sm)}:host([data-density=\"comfortable\"]) th,:host([data-density=\"comfortable\"]) td{padding:var(--kj-base-space-md) var(--kj-base-space-lg)}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td{background:var(--kj-bg-elevated)}:host([data-variant=\"clean\"]) th,:host([data-variant=\"clean\"]) td{border-bottom-color:transparent}:host td:focus-visible,:host th:focus-visible{outline:2px solid var(--kj-border-focus);outline-offset:-2px}:host td.kj-table-cell--editing{position:relative}:host td .kj-table-cell-ghost{visibility:hidden;white-space:pre;display:inline-block;pointer-events:none}:host td.kj-table-cell--editing ::ng-deep kj-text-editor,:host td.kj-table-cell--editing ::ng-deep kj-number-editor,:host td.kj-table-cell--editing ::ng-deep kj-select-editor,:host td.kj-table-cell--editing ::ng-deep kj-date-editor,:host td.kj-table-cell--editing ::ng-deep kj-boolean-editor{position:absolute!important;inset:0!important;display:flex!important;align-items:center!important;padding:inherit!important;background:var(--kj-bg-surface);z-index:1}:host td.kj-table-cell--editing ::ng-deep kj-input,:host td.kj-table-cell--editing ::ng-deep kj-number-input,:host td.kj-table-cell--editing ::ng-deep kj-select{display:flex!important;width:100%!important;min-width:0!important;box-sizing:border-box}:host td.kj-table-cell--editing ::ng-deep input,:host td.kj-table-cell--editing ::ng-deep .kj-select-trigger{width:100%!important;min-width:0!important;box-sizing:border-box}:host td .kj-table-editor-anchor{display:none}:host tr[data-selected] td{background:color-mix(in oklab,var(--kj-bg-primary, var(--kj-bg-accent, currentColor)) 12%,var(--kj-bg-surface))}:host tr[data-selected] td:first-child{box-shadow:inset 3px 0 0 0 var(--kj-bg-primary, var(--kj-fg-primary))}:host td[data-pin=left],:host th[data-pin=left]{position:sticky;left:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=right],:host th[data-pin=right]{position:sticky;right:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=left]:not(:has(+td[data-pin=left])),:host th[data-pin=left]:not(:has(+th[data-pin=left])){border-right:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:4px 0 6px -4px #00000040}:host tr>:not([data-pin=right])+td[data-pin=right],:host tr>:not([data-pin=right])+th[data-pin=right]{border-left:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:-4px 0 6px -4px #00000040}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td[data-pin]{background:var(--kj-bg-elevated)}.kj-table-resize-handle{position:absolute;top:25%;right:0;width:6px;height:50%;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:transparent;border-right:2px solid var(--kj-border-strong, var(--kj-border-default));transition:border-color var(--kj-transition),background var(--kj-transition),width var(--kj-transition)}.kj-table-resize-handle:hover,.kj-table-resize-handle:focus-visible{border-right-color:var(--kj-border-focus);background:color-mix(in srgb,var(--kj-border-focus) 20%,transparent);width:8px;outline:none}:host th[data-resizing] .kj-table-resize-handle{top:0;height:9999px;width:0;background:transparent;border-right:2px solid var(--kj-border-focus, var(--kj-bg-primary));transform:translate(var(--kj-resize-delta, 0px));pointer-events:none;z-index:3;transition:none}:host th.kj-table-select-cell,:host td.kj-table-select-cell{width:2.5rem;padding-inline:var(--kj-base-space-sm);text-align:center;vertical-align:middle}.kj-table-select-cell kj-checkbox{display:inline-flex;align-items:center;justify-content:center}.kj-table-filter-row>th{font-weight:400;background:var(--kj-bg-surface);border-top:1px solid var(--kj-border-muted, var(--kj-border-default))}.kj-table-filter-cell{padding-top:var(--kj-base-space-xs);padding-bottom:var(--kj-base-space-xs);vertical-align:middle}.kj-table-filter-cell .kj-table-filter-anchor+*,.kj-table-filter-cell kj-input,.kj-table-filter-cell kj-number-input,.kj-table-filter-cell kj-date-picker,.kj-table-filter-cell kj-select{width:100%}.kj-table-filter-anchor{display:block;width:100%}:host .kj-table-editor-anchor .kj-input,:host .kj-table-editor-anchor .kj-select{--kj-input-height: 1.75rem;--kj-input-font-size: var(--kj-text-xs);--kj-input-padding-x: var(--kj-base-space-sm);--kj-input-padding-y: 0;--kj-input-radius: var(--kj-radius-selector)}.kj-table-empty,.kj-table-error,.kj-table-loading{display:flex;align-items:center;justify-content:center;padding:var(--kj-base-space-lg);color:var(--kj-fg-muted)}.kj-table-loading{position:absolute;inset:0;background:color-mix(in srgb,var(--kj-bg-surface) 70%,transparent);pointer-events:none}.kj-table-loading[data-has-rows]{inset:0 0 auto;height:2px;background:var(--kj-bg-primary);padding:0;animation:kj-table-loading-pulse 1.4s ease-in-out infinite}.kj-table-loading[data-has-rows] .kj-table-loading-fallback,.kj-table-loading[data-has-rows] ::ng-deep [kjLoading]{display:none}@keyframes kj-table-loading-pulse{0%,to{opacity:.55}50%{opacity:1}}.kj-table-error{color:var(--kj-fg-error, var(--kj-fg-default))}.kj-table-loading-fallback{font-size:var(--kj-text-sm)}.kj-table-expansion-row>td{background:var(--kj-bg-elevated)}.kj-table-tbody-pinned[data-pin=top]>tr>td{background:var(--kj-bg-elevated);border-bottom:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 4px 6px -4px #00000040;position:sticky;top:0;z-index:2}.kj-table-tbody-pinned[data-pin=bottom]>tr>td{background:var(--kj-bg-elevated);border-top:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 -4px 6px -4px #00000040;position:sticky;bottom:0;z-index:2}.kj-table-group-toggle{display:inline-flex;align-items:center;gap:var(--kj-base-space-xs, .25rem);background:transparent;border:0;padding:0;font:inherit;color:inherit;cursor:pointer}.kj-table-group-toggle__chevron{display:inline-block;width:.75rem;font-family:var(--kj-font-mono);color:var(--kj-fg-muted);transition:transform var(--kj-transition)}.kj-table-group-toggle[aria-expanded=true] .kj-table-group-toggle__chevron{transform:rotate(90deg)}.kj-table-group-toggle__count{margin-inline-start:var(--kj-base-space-xs, .25rem);font-size:.75em;color:var(--kj-fg-muted);font-variant-numeric:tabular-nums}:host tbody tr[data-row-grouped] td{background:var(--kj-bg-elevated);font-weight:600}\n"], dependencies: [{ kind: "directive", type: KjTableHeader, selector: "[kjTableHeader]", inputs: ["kjHeader"] }, { kind: "directive", type: KjTableRow, selector: "[kjTableRow]", inputs: ["kjRow"] }, { kind: "directive", type: KjTableCell, selector: "[kjTableCell]", inputs: ["kjCell"] }, { kind: "directive", type: KjTableKeyboardNav, selector: "[kjTableKeyboardNav]" }, { kind: "directive", type: KjTableVirtual, selector: "[kjTableVirtual]", inputs: ["kjCount", "kjEstimateSize", "kjOverscan"], exportAs: ["kjTableVirtual"] }, { kind: "directive", type: KjIconDirective, selector: "span[kjIcon], i[kjIcon]", inputs: ["kjIcon", "kjIconLabel", "kjIconColor", "kjIconSize"] }, { kind: "component", type: KjCheckboxComponent, selector: "kj-checkbox", inputs: ["checked", "disabled", "indeterminate", "size"], outputs: ["checkedChange"] }, { kind: "directive", type: KjCellEditorOutlet, selector: "[kjCellEditorOutlet]", inputs: ["kjEditor", "kjValue", "kjMeta"], outputs: ["commit", "editCancel"] }, { kind: "directive", type: KjFilterCellOutlet, selector: "[kjFilterCell]", inputs: ["kjColumn", "kjFilter"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17189
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0;font-family:var(--kj-font-sans);font-size:var(--kj-text-sm);--kj-table-row-height: 2.25rem}:host([data-density=\"compact\"]){--kj-table-row-height: 1.75rem}:host([data-density=\"comfortable\"]){--kj-table-row-height: 2.75rem}.kj-table-wrapper{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;min-width:0;position:relative}.kj-table-body{position:relative;overflow:auto;display:block;flex:1 1 auto;min-height:0;min-width:0}.kj-table-body thead th{position:sticky;top:0;z-index:2;background:var(--kj-table-header-bg, var(--kj-bg-surface))}.kj-table-body thead th[data-pin]{z-index:3}.kj-table-body>table{min-width:100%}:host th,:host td{height:var(--kj-table-row-height)}:host table{width:100%;border-collapse:collapse;background:var(--kj-bg-surface);color:var(--kj-fg-default)}:host th,:host td{text-align:left;padding:var(--kj-base-space-sm) var(--kj-base-space-md);border-bottom:1px solid var(--kj-border-default);position:relative}:host th{font-weight:600;background:var(--kj-bg-elevated)}:host th[aria-sort]{-webkit-user-select:none;user-select:none}.kj-table-sort-indicator{display:inline-flex;align-items:center;margin-inline-start:var(--kj-base-space-xs, .25rem);color:var(--kj-fg-subtle, var(--kj-fg-muted));transition:color var(--kj-transition);vertical-align:middle}:host th[data-sort=asc] .kj-table-sort-indicator,:host th[data-sort=desc] .kj-table-sort-indicator{color:var(--kj-fg-primary)}:host th[aria-sort]:hover .kj-table-sort-indicator,:host th[aria-sort]:focus-visible .kj-table-sort-indicator{color:var(--kj-fg-default)}:host([data-density=\"compact\"]) th,:host([data-density=\"compact\"]) td{padding:var(--kj-base-space-xs) var(--kj-base-space-sm)}:host([data-density=\"comfortable\"]) th,:host([data-density=\"comfortable\"]) td{padding:var(--kj-base-space-md) var(--kj-base-space-lg)}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td{background:var(--kj-bg-elevated)}:host([data-variant=\"clean\"]) th,:host([data-variant=\"clean\"]) td{border-bottom-color:transparent}:host td:focus-visible,:host th:focus-visible{outline:2px solid var(--kj-border-focus);outline-offset:-2px}:host td.kj-table-cell--editing{position:relative}:host td .kj-table-cell-ghost{visibility:hidden;white-space:pre;display:inline-block;pointer-events:none}:host td.kj-table-cell--editing ::ng-deep kj-text-editor,:host td.kj-table-cell--editing ::ng-deep kj-number-editor,:host td.kj-table-cell--editing ::ng-deep kj-select-editor,:host td.kj-table-cell--editing ::ng-deep kj-date-editor,:host td.kj-table-cell--editing ::ng-deep kj-boolean-editor{position:absolute!important;inset:0!important;display:flex!important;align-items:center!important;padding:inherit!important;background:var(--kj-bg-surface);z-index:1}:host td.kj-table-cell--editing ::ng-deep kj-input,:host td.kj-table-cell--editing ::ng-deep kj-number-input,:host td.kj-table-cell--editing ::ng-deep kj-select{display:flex!important;width:100%!important;min-width:0!important;box-sizing:border-box}:host td.kj-table-cell--editing ::ng-deep input,:host td.kj-table-cell--editing ::ng-deep .kj-select-trigger{width:100%!important;min-width:0!important;box-sizing:border-box}:host td .kj-table-editor-anchor{display:none}:host tr[data-selected] td{background:color-mix(in oklab,var(--kj-bg-primary, var(--kj-bg-accent, currentColor)) 12%,var(--kj-bg-surface))}:host tr[data-selected] td:first-child{box-shadow:inset 3px 0 0 0 var(--kj-bg-primary, var(--kj-fg-primary))}:host td[data-pin=left],:host th[data-pin=left]{position:sticky;left:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=right],:host th[data-pin=right]{position:sticky;right:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=left]:not(:has(+td[data-pin=left])),:host th[data-pin=left]:not(:has(+th[data-pin=left])){border-right:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:4px 0 6px -4px #00000040}:host tr>:not([data-pin=right])+td[data-pin=right],:host tr>:not([data-pin=right])+th[data-pin=right]{border-left:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:-4px 0 6px -4px #00000040}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td[data-pin]{background:var(--kj-bg-elevated)}.kj-table-resize-handle{position:absolute;top:25%;right:0;width:6px;height:50%;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:transparent;border-right:2px solid var(--kj-border-strong, var(--kj-border-default));transition:border-color var(--kj-transition),background var(--kj-transition),width var(--kj-transition)}.kj-table-resize-handle:hover,.kj-table-resize-handle:focus-visible{border-right-color:var(--kj-border-focus);background:color-mix(in srgb,var(--kj-border-focus) 20%,transparent);width:8px;outline:none}:host th[data-resizing] .kj-table-resize-handle{top:0;height:9999px;width:0;background:transparent;border-right:2px solid var(--kj-border-focus, var(--kj-bg-primary));transform:translate(var(--kj-resize-delta, 0px));pointer-events:none;z-index:3;transition:none}:host th.kj-table-select-cell,:host td.kj-table-select-cell{width:2.5rem;padding-inline:var(--kj-base-space-sm);text-align:center;vertical-align:middle}.kj-table-select-cell kj-checkbox{display:inline-flex;align-items:center;justify-content:center}.kj-table-filter-row>th{font-weight:400;background:var(--kj-bg-surface);border-top:1px solid var(--kj-border-muted, var(--kj-border-default))}.kj-table-filter-cell{padding-top:var(--kj-base-space-xs);padding-bottom:var(--kj-base-space-xs);vertical-align:middle}.kj-table-filter-cell .kj-table-filter-anchor+*,.kj-table-filter-cell kj-input,.kj-table-filter-cell kj-number-input,.kj-table-filter-cell kj-date-picker,.kj-table-filter-cell kj-select{width:100%}.kj-table-filter-anchor{display:block;width:100%}:host .kj-table-editor-anchor .kj-input,:host .kj-table-editor-anchor .kj-select{--kj-input-height: 1.75rem;--kj-input-font-size: var(--kj-text-xs);--kj-input-padding-x: var(--kj-base-space-sm);--kj-input-padding-y: 0;--kj-input-radius: var(--kj-radius-selector)}.kj-table-empty,.kj-table-error,.kj-table-loading{display:flex;align-items:center;justify-content:center;padding:var(--kj-base-space-lg);color:var(--kj-fg-muted)}:host([data-empty]) .kj-table-body,:host([data-error]) .kj-table-body{flex:0 1 auto}.kj-table-empty,.kj-table-error{flex:1 1 auto;min-height:0}.kj-table-loading{position:absolute;inset:0;background:color-mix(in srgb,var(--kj-bg-surface) 70%,transparent);pointer-events:none}.kj-table-loading[data-has-rows]{inset:0 0 auto;height:2px;background:var(--kj-bg-primary);padding:0;animation:kj-table-loading-pulse 1.4s ease-in-out infinite}.kj-table-loading[data-has-rows] .kj-table-loading-fallback,.kj-table-loading[data-has-rows] ::ng-deep [kjLoading]{display:none}@keyframes kj-table-loading-pulse{0%,to{opacity:.55}50%{opacity:1}}.kj-table-error{color:var(--kj-fg-error, var(--kj-fg-default))}.kj-table-loading-fallback{font-size:var(--kj-text-sm)}.kj-table-expansion-row>td{background:var(--kj-bg-elevated)}.kj-table-tbody-pinned[data-pin=top]>tr>td{background:var(--kj-bg-elevated);border-bottom:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 4px 6px -4px #00000040;position:sticky;top:0;z-index:2}.kj-table-tbody-pinned[data-pin=bottom]>tr>td{background:var(--kj-bg-elevated);border-top:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 -4px 6px -4px #00000040;position:sticky;bottom:0;z-index:2}.kj-table-group-toggle{display:inline-flex;align-items:center;gap:var(--kj-base-space-xs, .25rem);background:transparent;border:0;padding:0;font:inherit;color:inherit;cursor:pointer}.kj-table-group-toggle__chevron{display:inline-block;width:.75rem;font-family:var(--kj-font-mono);color:var(--kj-fg-muted);transition:transform var(--kj-transition)}.kj-table-group-toggle[aria-expanded=true] .kj-table-group-toggle__chevron{transform:rotate(90deg)}.kj-table-group-toggle__count{margin-inline-start:var(--kj-base-space-xs, .25rem);font-size:.75em;color:var(--kj-fg-muted);font-variant-numeric:tabular-nums}:host tbody tr[data-row-grouped] td{background:var(--kj-bg-elevated);font-weight:600}\n"], dependencies: [{ kind: "directive", type: KjTableHeader, selector: "[kjTableHeader]", inputs: ["kjHeader"] }, { kind: "directive", type: KjTableRow, selector: "[kjTableRow]", inputs: ["kjRow"] }, { kind: "directive", type: KjTableCell, selector: "[kjTableCell]", inputs: ["kjCell"] }, { kind: "directive", type: KjTableKeyboardNav, selector: "[kjTableKeyboardNav]" }, { kind: "directive", type: KjTableVirtual, selector: "[kjTableVirtual]", inputs: ["kjCount", "kjEstimateSize", "kjOverscan"], exportAs: ["kjTableVirtual"] }, { kind: "directive", type: KjIconDirective, selector: "span[kjIcon], i[kjIcon]", inputs: ["kjIcon", "kjIconLabel", "kjIconColor", "kjIconSize"] }, { kind: "component", type: KjCheckboxComponent, selector: "kj-checkbox", inputs: ["checked", "disabled", "indeterminate", "size"], outputs: ["checkedChange"] }, { kind: "directive", type: KjCellEditorOutlet, selector: "[kjCellEditorOutlet]", inputs: ["kjEditor", "kjValue", "kjMeta"], outputs: ["commit", "editCancel"] }, { kind: "directive", type: KjFilterCellOutlet, selector: "[kjFilterCell]", inputs: ["kjColumn", "kjFilter"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17055
17190
  }
17056
17191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: KjTableComponent, decorators: [{
17057
17192
  type: Component,
@@ -17080,6 +17215,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
17080
17215
  '[attr.data-variant]': 'kjVariant()',
17081
17216
  '[attr.data-loading]': 'isLoading() ? "" : null',
17082
17217
  '[attr.data-error]': 'hasError() ? "" : null',
17218
+ // Drives the "state pane owns the leftover height" layout in table.css —
17219
+ // without it the body keeps `flex: 1` and shoves the empty pane to the
17220
+ // bottom of a height-constrained table instead of centering it.
17221
+ '[attr.data-empty]': 'showEmpty() ? "" : null',
17083
17222
  }, template: `
17084
17223
  <div class="kj-table-wrapper">
17085
17224
  <!-- Toolbar projection: matches either an explicit [kjToolbar] marker
@@ -17394,12 +17533,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
17394
17533
 
17395
17534
  @if (showEmpty()) {
17396
17535
  <div class="kj-table-empty" role="status">
17397
- <ng-content select="[kjEmpty]" />
17536
+ @if (emptyTpl(); as tpl) {
17537
+ <ng-container [ngTemplateOutlet]="tpl" />
17538
+ } @else {
17539
+ <ng-content select="[kjEmpty]" />
17540
+ }
17398
17541
  </div>
17399
17542
  }
17400
17543
  @if (hasError()) {
17401
17544
  <div class="kj-table-error" role="alert">
17402
- <ng-content select="[kjError]" />
17545
+ @if (errorTpl(); as tpl) {
17546
+ <ng-container [ngTemplateOutlet]="tpl" />
17547
+ } @else {
17548
+ <ng-content select="[kjError]" />
17549
+ }
17403
17550
  </div>
17404
17551
  }
17405
17552
  @if (isLoading()) {
@@ -17407,16 +17554,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
17407
17554
  aria-live="polite"
17408
17555
  aria-busy="true"
17409
17556
  [attr.data-has-rows]="effectiveData().length > 0 ? '' : null">
17410
- <ng-content select="[kjLoading]">
17411
- <span class="kj-table-loading-fallback">Loading…</span>
17412
- </ng-content>
17557
+ @if (loadingTpl(); as tpl) {
17558
+ <ng-container [ngTemplateOutlet]="tpl" />
17559
+ } @else {
17560
+ <ng-content select="[kjLoading]">
17561
+ <span class="kj-table-loading-fallback">Loading…</span>
17562
+ </ng-content>
17563
+ }
17413
17564
  </div>
17414
17565
  }
17415
17566
 
17416
17567
  <ng-content />
17417
17568
  </div>
17418
- `, encapsulation: ViewEncapsulation.Emulated, styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0;font-family:var(--kj-font-sans);font-size:var(--kj-text-sm);--kj-table-row-height: 2.25rem}:host([data-density=\"compact\"]){--kj-table-row-height: 1.75rem}:host([data-density=\"comfortable\"]){--kj-table-row-height: 2.75rem}.kj-table-wrapper{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;min-width:0;position:relative}.kj-table-body{position:relative;overflow:auto;display:block;flex:1 1 auto;min-height:0;min-width:0}.kj-table-body thead th{position:sticky;top:0;z-index:2;background:var(--kj-table-header-bg, var(--kj-bg-surface))}.kj-table-body thead th[data-pin]{z-index:3}.kj-table-body>table{min-width:100%}:host th,:host td{height:var(--kj-table-row-height)}:host table{width:100%;border-collapse:collapse;background:var(--kj-bg-surface);color:var(--kj-fg-default)}:host th,:host td{text-align:left;padding:var(--kj-base-space-sm) var(--kj-base-space-md);border-bottom:1px solid var(--kj-border-default);position:relative}:host th{font-weight:600;background:var(--kj-bg-elevated)}:host th[aria-sort]{-webkit-user-select:none;user-select:none}.kj-table-sort-indicator{display:inline-flex;align-items:center;margin-inline-start:var(--kj-base-space-xs, .25rem);color:var(--kj-fg-subtle, var(--kj-fg-muted));transition:color var(--kj-transition);vertical-align:middle}:host th[data-sort=asc] .kj-table-sort-indicator,:host th[data-sort=desc] .kj-table-sort-indicator{color:var(--kj-fg-primary)}:host th[aria-sort]:hover .kj-table-sort-indicator,:host th[aria-sort]:focus-visible .kj-table-sort-indicator{color:var(--kj-fg-default)}:host([data-density=\"compact\"]) th,:host([data-density=\"compact\"]) td{padding:var(--kj-base-space-xs) var(--kj-base-space-sm)}:host([data-density=\"comfortable\"]) th,:host([data-density=\"comfortable\"]) td{padding:var(--kj-base-space-md) var(--kj-base-space-lg)}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td{background:var(--kj-bg-elevated)}:host([data-variant=\"clean\"]) th,:host([data-variant=\"clean\"]) td{border-bottom-color:transparent}:host td:focus-visible,:host th:focus-visible{outline:2px solid var(--kj-border-focus);outline-offset:-2px}:host td.kj-table-cell--editing{position:relative}:host td .kj-table-cell-ghost{visibility:hidden;white-space:pre;display:inline-block;pointer-events:none}:host td.kj-table-cell--editing ::ng-deep kj-text-editor,:host td.kj-table-cell--editing ::ng-deep kj-number-editor,:host td.kj-table-cell--editing ::ng-deep kj-select-editor,:host td.kj-table-cell--editing ::ng-deep kj-date-editor,:host td.kj-table-cell--editing ::ng-deep kj-boolean-editor{position:absolute!important;inset:0!important;display:flex!important;align-items:center!important;padding:inherit!important;background:var(--kj-bg-surface);z-index:1}:host td.kj-table-cell--editing ::ng-deep kj-input,:host td.kj-table-cell--editing ::ng-deep kj-number-input,:host td.kj-table-cell--editing ::ng-deep kj-select{display:flex!important;width:100%!important;min-width:0!important;box-sizing:border-box}:host td.kj-table-cell--editing ::ng-deep input,:host td.kj-table-cell--editing ::ng-deep .kj-select-trigger{width:100%!important;min-width:0!important;box-sizing:border-box}:host td .kj-table-editor-anchor{display:none}:host tr[data-selected] td{background:color-mix(in oklab,var(--kj-bg-primary, var(--kj-bg-accent, currentColor)) 12%,var(--kj-bg-surface))}:host tr[data-selected] td:first-child{box-shadow:inset 3px 0 0 0 var(--kj-bg-primary, var(--kj-fg-primary))}:host td[data-pin=left],:host th[data-pin=left]{position:sticky;left:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=right],:host th[data-pin=right]{position:sticky;right:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=left]:not(:has(+td[data-pin=left])),:host th[data-pin=left]:not(:has(+th[data-pin=left])){border-right:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:4px 0 6px -4px #00000040}:host tr>:not([data-pin=right])+td[data-pin=right],:host tr>:not([data-pin=right])+th[data-pin=right]{border-left:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:-4px 0 6px -4px #00000040}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td[data-pin]{background:var(--kj-bg-elevated)}.kj-table-resize-handle{position:absolute;top:25%;right:0;width:6px;height:50%;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:transparent;border-right:2px solid var(--kj-border-strong, var(--kj-border-default));transition:border-color var(--kj-transition),background var(--kj-transition),width var(--kj-transition)}.kj-table-resize-handle:hover,.kj-table-resize-handle:focus-visible{border-right-color:var(--kj-border-focus);background:color-mix(in srgb,var(--kj-border-focus) 20%,transparent);width:8px;outline:none}:host th[data-resizing] .kj-table-resize-handle{top:0;height:9999px;width:0;background:transparent;border-right:2px solid var(--kj-border-focus, var(--kj-bg-primary));transform:translate(var(--kj-resize-delta, 0px));pointer-events:none;z-index:3;transition:none}:host th.kj-table-select-cell,:host td.kj-table-select-cell{width:2.5rem;padding-inline:var(--kj-base-space-sm);text-align:center;vertical-align:middle}.kj-table-select-cell kj-checkbox{display:inline-flex;align-items:center;justify-content:center}.kj-table-filter-row>th{font-weight:400;background:var(--kj-bg-surface);border-top:1px solid var(--kj-border-muted, var(--kj-border-default))}.kj-table-filter-cell{padding-top:var(--kj-base-space-xs);padding-bottom:var(--kj-base-space-xs);vertical-align:middle}.kj-table-filter-cell .kj-table-filter-anchor+*,.kj-table-filter-cell kj-input,.kj-table-filter-cell kj-number-input,.kj-table-filter-cell kj-date-picker,.kj-table-filter-cell kj-select{width:100%}.kj-table-filter-anchor{display:block;width:100%}:host .kj-table-editor-anchor .kj-input,:host .kj-table-editor-anchor .kj-select{--kj-input-height: 1.75rem;--kj-input-font-size: var(--kj-text-xs);--kj-input-padding-x: var(--kj-base-space-sm);--kj-input-padding-y: 0;--kj-input-radius: var(--kj-radius-selector)}.kj-table-empty,.kj-table-error,.kj-table-loading{display:flex;align-items:center;justify-content:center;padding:var(--kj-base-space-lg);color:var(--kj-fg-muted)}.kj-table-loading{position:absolute;inset:0;background:color-mix(in srgb,var(--kj-bg-surface) 70%,transparent);pointer-events:none}.kj-table-loading[data-has-rows]{inset:0 0 auto;height:2px;background:var(--kj-bg-primary);padding:0;animation:kj-table-loading-pulse 1.4s ease-in-out infinite}.kj-table-loading[data-has-rows] .kj-table-loading-fallback,.kj-table-loading[data-has-rows] ::ng-deep [kjLoading]{display:none}@keyframes kj-table-loading-pulse{0%,to{opacity:.55}50%{opacity:1}}.kj-table-error{color:var(--kj-fg-error, var(--kj-fg-default))}.kj-table-loading-fallback{font-size:var(--kj-text-sm)}.kj-table-expansion-row>td{background:var(--kj-bg-elevated)}.kj-table-tbody-pinned[data-pin=top]>tr>td{background:var(--kj-bg-elevated);border-bottom:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 4px 6px -4px #00000040;position:sticky;top:0;z-index:2}.kj-table-tbody-pinned[data-pin=bottom]>tr>td{background:var(--kj-bg-elevated);border-top:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 -4px 6px -4px #00000040;position:sticky;bottom:0;z-index:2}.kj-table-group-toggle{display:inline-flex;align-items:center;gap:var(--kj-base-space-xs, .25rem);background:transparent;border:0;padding:0;font:inherit;color:inherit;cursor:pointer}.kj-table-group-toggle__chevron{display:inline-block;width:.75rem;font-family:var(--kj-font-mono);color:var(--kj-fg-muted);transition:transform var(--kj-transition)}.kj-table-group-toggle[aria-expanded=true] .kj-table-group-toggle__chevron{transform:rotate(90deg)}.kj-table-group-toggle__count{margin-inline-start:var(--kj-base-space-xs, .25rem);font-size:.75em;color:var(--kj-fg-muted);font-variant-numeric:tabular-nums}:host tbody tr[data-row-grouped] td{background:var(--kj-bg-elevated);font-weight:600}\n"] }]
17419
- }], ctorParameters: () => [], propDecorators: { kjResource: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjResource", required: false }] }], kjDensity: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjDensity", required: false }] }], kjVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjVariant", required: false }] }], kjLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjLoading", required: false }] }], kjSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjSelection", required: false }] }, { type: i0.Output, args: ["kjSelectionChange"] }], kjSelectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjSelectionMode", required: false }] }], kjShowSelectionColumn: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjShowSelectionColumn", required: false }] }], kjStorageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjStorageKey", required: false }] }], kjStorageAdapter: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjStorageAdapter", required: false }] }], kjVirtual: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjVirtual", required: false }] }], kjEstimatedRowSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEstimatedRowSize", required: false }] }], kjEnableFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnableFilters", required: false }] }], kjEnableResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnableResize", required: false }] }], kjEnableRowPinning: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnableRowPinning", required: false }] }], kjEditOnDoubleClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEditOnDoubleClick", required: false }] }], kjPageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjPageSize", required: false }] }], kjRowExpansionTpl: [{ type: i0.ContentChild, args: ['kjRowExpansion', { isSignal: true }] }], cellTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KjCellTemplateDirective), { isSignal: true }] }], cellEdit: [{ type: i0.Output, args: ["cellEdit"] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDoubleClick: [{ type: i0.Output, args: ["rowDoubleClick"] }] } });
17569
+ `, encapsulation: ViewEncapsulation.Emulated, styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0;font-family:var(--kj-font-sans);font-size:var(--kj-text-sm);--kj-table-row-height: 2.25rem}:host([data-density=\"compact\"]){--kj-table-row-height: 1.75rem}:host([data-density=\"comfortable\"]){--kj-table-row-height: 2.75rem}.kj-table-wrapper{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;min-width:0;position:relative}.kj-table-body{position:relative;overflow:auto;display:block;flex:1 1 auto;min-height:0;min-width:0}.kj-table-body thead th{position:sticky;top:0;z-index:2;background:var(--kj-table-header-bg, var(--kj-bg-surface))}.kj-table-body thead th[data-pin]{z-index:3}.kj-table-body>table{min-width:100%}:host th,:host td{height:var(--kj-table-row-height)}:host table{width:100%;border-collapse:collapse;background:var(--kj-bg-surface);color:var(--kj-fg-default)}:host th,:host td{text-align:left;padding:var(--kj-base-space-sm) var(--kj-base-space-md);border-bottom:1px solid var(--kj-border-default);position:relative}:host th{font-weight:600;background:var(--kj-bg-elevated)}:host th[aria-sort]{-webkit-user-select:none;user-select:none}.kj-table-sort-indicator{display:inline-flex;align-items:center;margin-inline-start:var(--kj-base-space-xs, .25rem);color:var(--kj-fg-subtle, var(--kj-fg-muted));transition:color var(--kj-transition);vertical-align:middle}:host th[data-sort=asc] .kj-table-sort-indicator,:host th[data-sort=desc] .kj-table-sort-indicator{color:var(--kj-fg-primary)}:host th[aria-sort]:hover .kj-table-sort-indicator,:host th[aria-sort]:focus-visible .kj-table-sort-indicator{color:var(--kj-fg-default)}:host([data-density=\"compact\"]) th,:host([data-density=\"compact\"]) td{padding:var(--kj-base-space-xs) var(--kj-base-space-sm)}:host([data-density=\"comfortable\"]) th,:host([data-density=\"comfortable\"]) td{padding:var(--kj-base-space-md) var(--kj-base-space-lg)}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td{background:var(--kj-bg-elevated)}:host([data-variant=\"clean\"]) th,:host([data-variant=\"clean\"]) td{border-bottom-color:transparent}:host td:focus-visible,:host th:focus-visible{outline:2px solid var(--kj-border-focus);outline-offset:-2px}:host td.kj-table-cell--editing{position:relative}:host td .kj-table-cell-ghost{visibility:hidden;white-space:pre;display:inline-block;pointer-events:none}:host td.kj-table-cell--editing ::ng-deep kj-text-editor,:host td.kj-table-cell--editing ::ng-deep kj-number-editor,:host td.kj-table-cell--editing ::ng-deep kj-select-editor,:host td.kj-table-cell--editing ::ng-deep kj-date-editor,:host td.kj-table-cell--editing ::ng-deep kj-boolean-editor{position:absolute!important;inset:0!important;display:flex!important;align-items:center!important;padding:inherit!important;background:var(--kj-bg-surface);z-index:1}:host td.kj-table-cell--editing ::ng-deep kj-input,:host td.kj-table-cell--editing ::ng-deep kj-number-input,:host td.kj-table-cell--editing ::ng-deep kj-select{display:flex!important;width:100%!important;min-width:0!important;box-sizing:border-box}:host td.kj-table-cell--editing ::ng-deep input,:host td.kj-table-cell--editing ::ng-deep .kj-select-trigger{width:100%!important;min-width:0!important;box-sizing:border-box}:host td .kj-table-editor-anchor{display:none}:host tr[data-selected] td{background:color-mix(in oklab,var(--kj-bg-primary, var(--kj-bg-accent, currentColor)) 12%,var(--kj-bg-surface))}:host tr[data-selected] td:first-child{box-shadow:inset 3px 0 0 0 var(--kj-bg-primary, var(--kj-fg-primary))}:host td[data-pin=left],:host th[data-pin=left]{position:sticky;left:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=right],:host th[data-pin=right]{position:sticky;right:0;z-index:1;background:var(--kj-bg-surface)}:host td[data-pin=left]:not(:has(+td[data-pin=left])),:host th[data-pin=left]:not(:has(+th[data-pin=left])){border-right:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:4px 0 6px -4px #00000040}:host tr>:not([data-pin=right])+td[data-pin=right],:host tr>:not([data-pin=right])+th[data-pin=right]{border-left:1px solid var(--kj-border-strong, var(--kj-border-default));box-shadow:-4px 0 6px -4px #00000040}:host([data-variant=\"striped\"]) tbody tr:nth-child(2n) td[data-pin]{background:var(--kj-bg-elevated)}.kj-table-resize-handle{position:absolute;top:25%;right:0;width:6px;height:50%;cursor:col-resize;-webkit-user-select:none;user-select:none;touch-action:none;background:transparent;border-right:2px solid var(--kj-border-strong, var(--kj-border-default));transition:border-color var(--kj-transition),background var(--kj-transition),width var(--kj-transition)}.kj-table-resize-handle:hover,.kj-table-resize-handle:focus-visible{border-right-color:var(--kj-border-focus);background:color-mix(in srgb,var(--kj-border-focus) 20%,transparent);width:8px;outline:none}:host th[data-resizing] .kj-table-resize-handle{top:0;height:9999px;width:0;background:transparent;border-right:2px solid var(--kj-border-focus, var(--kj-bg-primary));transform:translate(var(--kj-resize-delta, 0px));pointer-events:none;z-index:3;transition:none}:host th.kj-table-select-cell,:host td.kj-table-select-cell{width:2.5rem;padding-inline:var(--kj-base-space-sm);text-align:center;vertical-align:middle}.kj-table-select-cell kj-checkbox{display:inline-flex;align-items:center;justify-content:center}.kj-table-filter-row>th{font-weight:400;background:var(--kj-bg-surface);border-top:1px solid var(--kj-border-muted, var(--kj-border-default))}.kj-table-filter-cell{padding-top:var(--kj-base-space-xs);padding-bottom:var(--kj-base-space-xs);vertical-align:middle}.kj-table-filter-cell .kj-table-filter-anchor+*,.kj-table-filter-cell kj-input,.kj-table-filter-cell kj-number-input,.kj-table-filter-cell kj-date-picker,.kj-table-filter-cell kj-select{width:100%}.kj-table-filter-anchor{display:block;width:100%}:host .kj-table-editor-anchor .kj-input,:host .kj-table-editor-anchor .kj-select{--kj-input-height: 1.75rem;--kj-input-font-size: var(--kj-text-xs);--kj-input-padding-x: var(--kj-base-space-sm);--kj-input-padding-y: 0;--kj-input-radius: var(--kj-radius-selector)}.kj-table-empty,.kj-table-error,.kj-table-loading{display:flex;align-items:center;justify-content:center;padding:var(--kj-base-space-lg);color:var(--kj-fg-muted)}:host([data-empty]) .kj-table-body,:host([data-error]) .kj-table-body{flex:0 1 auto}.kj-table-empty,.kj-table-error{flex:1 1 auto;min-height:0}.kj-table-loading{position:absolute;inset:0;background:color-mix(in srgb,var(--kj-bg-surface) 70%,transparent);pointer-events:none}.kj-table-loading[data-has-rows]{inset:0 0 auto;height:2px;background:var(--kj-bg-primary);padding:0;animation:kj-table-loading-pulse 1.4s ease-in-out infinite}.kj-table-loading[data-has-rows] .kj-table-loading-fallback,.kj-table-loading[data-has-rows] ::ng-deep [kjLoading]{display:none}@keyframes kj-table-loading-pulse{0%,to{opacity:.55}50%{opacity:1}}.kj-table-error{color:var(--kj-fg-error, var(--kj-fg-default))}.kj-table-loading-fallback{font-size:var(--kj-text-sm)}.kj-table-expansion-row>td{background:var(--kj-bg-elevated)}.kj-table-tbody-pinned[data-pin=top]>tr>td{background:var(--kj-bg-elevated);border-bottom:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 4px 6px -4px #00000040;position:sticky;top:0;z-index:2}.kj-table-tbody-pinned[data-pin=bottom]>tr>td{background:var(--kj-bg-elevated);border-top:2px solid var(--kj-border-primary, var(--kj-border-strong, var(--kj-border-default)));box-shadow:0 -4px 6px -4px #00000040;position:sticky;bottom:0;z-index:2}.kj-table-group-toggle{display:inline-flex;align-items:center;gap:var(--kj-base-space-xs, .25rem);background:transparent;border:0;padding:0;font:inherit;color:inherit;cursor:pointer}.kj-table-group-toggle__chevron{display:inline-block;width:.75rem;font-family:var(--kj-font-mono);color:var(--kj-fg-muted);transition:transform var(--kj-transition)}.kj-table-group-toggle[aria-expanded=true] .kj-table-group-toggle__chevron{transform:rotate(90deg)}.kj-table-group-toggle__count{margin-inline-start:var(--kj-base-space-xs, .25rem);font-size:.75em;color:var(--kj-fg-muted);font-variant-numeric:tabular-nums}:host tbody tr[data-row-grouped] td{background:var(--kj-bg-elevated);font-weight:600}\n"] }]
17570
+ }], ctorParameters: () => [], propDecorators: { kjResource: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjResource", required: false }] }], kjDensity: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjDensity", required: false }] }], kjVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjVariant", required: false }] }], kjLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjLoading", required: false }] }], kjSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjSelection", required: false }] }, { type: i0.Output, args: ["kjSelectionChange"] }], kjSelectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjSelectionMode", required: false }] }], kjShowSelectionColumn: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjShowSelectionColumn", required: false }] }], kjStorageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjStorageKey", required: false }] }], kjStorageAdapter: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjStorageAdapter", required: false }] }], kjVirtual: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjVirtual", required: false }] }], kjEstimatedRowSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEstimatedRowSize", required: false }] }], kjEnableFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnableFilters", required: false }] }], kjEnableResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnableResize", required: false }] }], kjEnableRowPinning: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEnableRowPinning", required: false }] }], kjEditOnDoubleClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjEditOnDoubleClick", required: false }] }], kjPageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "kjPageSize", required: false }] }], kjRowExpansionTpl: [{ type: i0.ContentChild, args: ['kjRowExpansion', { isSignal: true }] }], cellTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KjCellTemplateDirective), { isSignal: true }] }], emptyTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KjTableEmptyTemplate), { isSignal: true }] }], loadingTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KjTableLoadingTemplate), { isSignal: true }] }], errorTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KjTableErrorTemplate), { isSignal: true }] }], cellEdit: [{ type: i0.Output, args: ["cellEdit"] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDoubleClick: [{ type: i0.Output, args: ["rowDoubleClick"] }] } });
17420
17571
  // ── helpers ───────────────────────────────────────────────────────────────
17421
17572
  function cellMeta(col) {
17422
17573
  return col.columnDef.meta?.kj;
@@ -20506,5 +20657,5 @@ const KJ_COMPONENTS_VERSION = '0.0.1';
20506
20657
  * Generated bundle index. Do not edit.
20507
20658
  */
20508
20659
 
20509
- export { KJ_COMPONENTS_VERSION, KJ_EDITOR_CONTRACT, KJ_FILTER_CONTEXT, KjAccordionComponent, KjAccordionContentComponent, KjAccordionItemComponent, KjAccordionTriggerComponent, KjActionSheet, KjActionSheetComponent, KjActionSheetRef, KjActionSheetService, KjAlertActionsComponent, KjAlertComponent, KjAlertDescriptionComponent, KjAlertDismissComponent, KjAlertIconComponent, KjAlertTitleComponent, KjAvatarComponent, KjAvatarGroupComponent, KjBadgeComponent, KjBooleanEditor, KjBreadcrumbComponent, KjBreadcrumbCurrentComponent, KjBreadcrumbEllipsisComponent, KjBreadcrumbItemComponent, KjBreadcrumbLinkComponent, KjBreadcrumbListComponent, KjBreadcrumbSeparatorComponent, KjBulkAction, KjButtonComponent, KjButtonGroupComponent, KjCalendarComponent, KjCardComponent, KjCardContentComponent, KjCardCoverComponent, KjCardFooterComponent, KjCardHeaderComponent, KjCardSubtitleComponent, KjCardTitleComponent, KjCarouselAutoplayComponent, KjCarouselComponent, KjCarouselIndicatorsComponent, KjCarouselNextComponent, KjCarouselPauseComponent, KjCarouselPreviousComponent, KjCarouselSlideComponent, KjCarouselViewportComponent, KjCascadeOptionComponent, KjCascadeSelectComponent, KjCascadeSubPanelComponent, KjCellEditorOutlet, KjCellTemplateDirective, KjChartComponent, KjChatAvatarComponent, KjChatBubbleComponent, KjChatComponent, KjChatFooterComponent, KjChatHeaderComponent, KjChatLogComponent, KjChatMessage, KjChatThread, KjCheckboxComponent, KjColorPickerComponent, KjComboboxComponent, KjComboboxEmptyComponent, KjComboboxLoadingComponent, KjComboboxOptionComponent, KjCommandEmptyComponent, KjCommandGroupComponent, KjCommandInputComponent, KjCommandItemComponent, KjCommandPaletteComponent, KjCommandPaletteFooter, KjCommandPaletteItemTemplate, KjCommandSeparatorComponent, KjConfirmPopupActionComponent, KjConfirmPopupActionsComponent, KjConfirmPopupCancelComponent, KjConfirmPopupComponent, KjConfirmPopupContentComponent, KjConfirmPopupMessageComponent, KjConfirmPopupTriggerComponent, KjDateEditor, KjDateFilter, KjDatePickerComponent, KjDateRangePresetsComponent, KjDatetimePickerComponent, KjDialogComponent, KjDirectionToggle, KjDividerComponent, KjDrawerComponent, KjDropdownMenuComponent, KjEditorComponent, KjEmptyStateActionsComponent, KjEmptyStateComponent, KjEmptyStateDescriptionComponent, KjEmptyStateIconComponent, KjEmptyStateTitleComponent, KjFieldComponent, KjFieldErrorComponent, KjFieldGroupComponent, KjFieldHelpComponent, KjFieldLabelComponent, KjFileUploadComponent, KjFilterCellOutlet, KjFormActionsComponent, KjFormComponent, KjFormSummaryComponent, KjIconGalleryExample, KjIconUsageExample, KjInputComponent, KjInputGroupAddonComponent, KjInputGroupComponent, KjInputMaskComponent, KjInputMaskCreditCardExample, KjInputMaskCustomTokensExample, KjInputMaskDateExample, KjInputMaskExample, KjInputMaskUsageExample, KjInputMaskValidationExample, KjInputOtpComponent, KjKbdComponent, KjLinkComponent, KjListComponent, KjListItemComponent, KjMenubarComponent, KjMenubarItemComponent, KjNumberEditor, KjNumberFilter, KjNumberInputComponent, KjOptionComponent, KjOverlayBadgeComponent, KjOverlayBadgeContentComponent, KjPaginationComponent, KjPaginationDefaultComponent, KjPaginationEllipsisComponent, KjPaginationFirstComponent, KjPaginationInfoComponent, KjPaginationItemComponent, KjPaginationLastComponent, KjPaginationNextComponent, KjPaginationPreviousComponent, KjPasswordInputComponent, KjPopoverComponent, KjProgressBarComponent, KjPromptInput, KjRadioComponent, KjRadioGroupComponent, KjRichTextEditorComponent, KjSelectComponent, KjSelectEditor, KjSelectFilter, KjSheetComponent, KjSkeletonComponent, KjSkipLinkComponent, KjSliderComponent, KjSpeedDialActionComponent, KjSpeedDialActionsComponent, KjSpeedDialComponent, KjSpeedDialTriggerComponent, KjSpinnerComponent, KjStepComponent, KjStepContentComponent, KjStepLabelComponent, KjStepperComponent, KjStepperNextComponent, KjStepperPreviousComponent, KjStepperResetComponent, KjTabComponent, KjTabListComponent, KjTabPanelComponent, KjTableComponent, KjTablePaginationComponent, KjTableSidePanelComponent, KjTableSidePanelContent, KjTableStatusBarComponent, KjTableToolbarComponent, KjTableVirtual, KjTabsComponent, KjTagComponent, KjTagListComponent, KjTagRemoveComponent, KjTextEditor, KjTextFilter, KjTextareaComponent, KjTimePickerComponent, KjToastCloseComponent, KjToastComponent, KjToastViewportComponent, KjToastWrapperComponent, KjToggleComponent, KjTooltipComponent, KjTreeSelectComponent, KjTreeSelectNodeComponent, LUCIDE_ICON_NAMES, bold, bulletList, codeBlock, copyToClipboard, defaultFeatures, downloadString, exportCsv, exportJson, heading, history, image, inlineCode, italic, link, markdownShortcuts, orderedList, provideLucideIcons, quote, renderMarkdown, strike, toTsv, underline };
20660
+ export { KJ_COMPONENTS_VERSION, KJ_EDITOR_CONTRACT, KJ_FILTER_CONTEXT, KjAccordionComponent, KjAccordionContentComponent, KjAccordionItemComponent, KjAccordionTriggerComponent, KjActionSheet, KjActionSheetComponent, KjActionSheetRef, KjActionSheetService, KjAlertActionsComponent, KjAlertComponent, KjAlertDescriptionComponent, KjAlertDismissComponent, KjAlertIconComponent, KjAlertTitleComponent, KjAvatarComponent, KjAvatarGroupComponent, KjBadgeComponent, KjBooleanEditor, KjBreadcrumbComponent, KjBreadcrumbCurrentComponent, KjBreadcrumbEllipsisComponent, KjBreadcrumbItemComponent, KjBreadcrumbLinkComponent, KjBreadcrumbListComponent, KjBreadcrumbSeparatorComponent, KjBulkAction, KjButtonComponent, KjButtonGroupComponent, KjCalendarComponent, KjCardComponent, KjCardContentComponent, KjCardCoverComponent, KjCardFooterComponent, KjCardHeaderComponent, KjCardSubtitleComponent, KjCardTitleComponent, KjCarouselAutoplayComponent, KjCarouselComponent, KjCarouselIndicatorsComponent, KjCarouselNextComponent, KjCarouselPauseComponent, KjCarouselPreviousComponent, KjCarouselSlideComponent, KjCarouselViewportComponent, KjCascadeOptionComponent, KjCascadeSelectComponent, KjCascadeSubPanelComponent, KjCellEditorOutlet, KjCellTemplateDirective, KjChartComponent, KjChatAvatarComponent, KjChatBubbleComponent, KjChatComponent, KjChatFooterComponent, KjChatHeaderComponent, KjChatLogComponent, KjChatMessage, KjChatThread, KjCheckboxComponent, KjColorPickerComponent, KjComboboxComponent, KjComboboxEmptyComponent, KjComboboxLoadingComponent, KjComboboxOptionComponent, KjCommandEmptyComponent, KjCommandGroupComponent, KjCommandInputComponent, KjCommandItemComponent, KjCommandPaletteComponent, KjCommandPaletteFooter, KjCommandPaletteItemTemplate, KjCommandSeparatorComponent, KjConfirmPopupActionComponent, KjConfirmPopupActionsComponent, KjConfirmPopupCancelComponent, KjConfirmPopupComponent, KjConfirmPopupContentComponent, KjConfirmPopupMessageComponent, KjConfirmPopupTriggerComponent, KjDateEditor, KjDateFilter, KjDatePickerComponent, KjDateRangePresetsComponent, KjDatetimePickerComponent, KjDialogComponent, KjDirectionToggle, KjDividerComponent, KjDrawerComponent, KjDropdownMenuComponent, KjEditorComponent, KjEmptyStateActionsComponent, KjEmptyStateComponent, KjEmptyStateDescriptionComponent, KjEmptyStateIconComponent, KjEmptyStateTitleComponent, KjFieldComponent, KjFieldErrorComponent, KjFieldGroupComponent, KjFieldHelpComponent, KjFieldLabelComponent, KjFileUploadComponent, KjFilterCellOutlet, KjFormActionsComponent, KjFormComponent, KjFormSummaryComponent, KjIconGalleryExample, KjIconUsageExample, KjInputComponent, KjInputGroupAddonComponent, KjInputGroupComponent, KjInputMaskComponent, KjInputMaskCreditCardExample, KjInputMaskCustomTokensExample, KjInputMaskDateExample, KjInputMaskExample, KjInputMaskUsageExample, KjInputMaskValidationExample, KjInputOtpComponent, KjKbdComponent, KjLinkComponent, KjListComponent, KjListItemComponent, KjMenubarComponent, KjMenubarItemComponent, KjNumberEditor, KjNumberFilter, KjNumberInputComponent, KjOptionComponent, KjOverlayBadgeComponent, KjOverlayBadgeContentComponent, KjPaginationComponent, KjPaginationDefaultComponent, KjPaginationEllipsisComponent, KjPaginationFirstComponent, KjPaginationInfoComponent, KjPaginationItemComponent, KjPaginationLastComponent, KjPaginationNextComponent, KjPaginationPreviousComponent, KjPasswordInputComponent, KjPopoverComponent, KjProgressBarComponent, KjPromptInput, KjRadioComponent, KjRadioGroupComponent, KjRichTextEditorComponent, KjSelectComponent, KjSelectEditor, KjSelectFilter, KjSheetComponent, KjSkeletonComponent, KjSkipLinkComponent, KjSliderComponent, KjSpeedDialActionComponent, KjSpeedDialActionsComponent, KjSpeedDialComponent, KjSpeedDialTriggerComponent, KjSpinnerComponent, KjStepComponent, KjStepContentComponent, KjStepLabelComponent, KjStepperComponent, KjStepperNextComponent, KjStepperPreviousComponent, KjStepperResetComponent, KjTabComponent, KjTabListComponent, KjTabPanelComponent, KjTableComponent, KjTableEmptyTemplate, KjTableErrorTemplate, KjTableLoadingTemplate, KjTablePaginationComponent, KjTableSidePanelComponent, KjTableSidePanelContent, KjTableStatusBarComponent, KjTableToolbarComponent, KjTableVirtual, KjTabsComponent, KjTagComponent, KjTagListComponent, KjTagRemoveComponent, KjTextEditor, KjTextFilter, KjTextareaComponent, KjTimePickerComponent, KjToastCloseComponent, KjToastComponent, KjToastViewportComponent, KjToastWrapperComponent, KjToggleComponent, KjTooltipComponent, KjTreeSelectComponent, KjTreeSelectNodeComponent, LUCIDE_ICON_NAMES, bold, bulletList, codeBlock, copyToClipboard, defaultFeatures, downloadString, exportCsv, exportJson, heading, history, image, inlineCode, italic, link, markdownShortcuts, orderedList, provideLucideIcons, quote, renderMarkdown, strike, toTsv, underline };
20510
20661
  //# sourceMappingURL=kouji-ui-components.mjs.map