@mk-kit/ui 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -376,7 +376,7 @@ class MkListItem {
376
376
  }
377
377
  }
378
378
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkListItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
379
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MkListItem, isStandalone: true, selector: "mk-list-item", inputs: { interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activated: "activated" }, host: { attributes: { "role": "listitem" }, listeners: { "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "class.mk-list-item--interactive": "interactive()", "class.mk-list-item--selected": "selected()", "class.mk-list-item--disabled": "disabled()", "attr.tabindex": "interactive() && !disabled() ? 0 : null", "attr.aria-selected": "interactive() ? selected() : null", "attr.aria-disabled": "disabled() ? 'true' : null" }, classAttribute: "mk-list-item" }, ngImport: i0, template: "<span class=\"mk-list-item__leading\"><ng-content select=\"[mkListLeading]\" /></span>\n<span class=\"mk-list-item__content\"><ng-content /></span>\n<span class=\"mk-list-item__trailing\"><ng-content select=\"[mkListTrailing]\" /></span>\n", styles: [":host{display:flex;align-items:center;gap:var(--mk-space-3);padding:var(--mk-space-3) var(--mk-space-4);min-height:2.75rem;border-top:var(--mk-border-width) solid var(--mk-list-item-border, transparent);color:var(--mk-text);transition:background-color var(--mk-duration-fast) var(--mk-ease-standard),color var(--mk-duration-fast) var(--mk-ease-standard)}:host(:first-child){border-top-color:transparent}.mk-list-item__leading,.mk-list-item__trailing{display:inline-flex;align-items:center;flex:0 0 auto;color:var(--mk-text-muted)}.mk-list-item__leading:empty,.mk-list-item__trailing:empty{display:none}.mk-list-item__content{flex:1 1 auto;min-width:0;line-height:var(--mk-line-height-snug)}.mk-list-item__trailing{margin-inline-start:auto}:host(.mk-list-item--interactive){cursor:pointer;-webkit-user-select:none;user-select:none}:host(.mk-list-item--interactive:hover){background-color:var(--mk-neutral-subtle)}:host(.mk-list-item--interactive:focus-visible){outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring);outline-offset:calc(-1 * var(--mk-focus-ring-width))}:host(.mk-list-item--selected){background-color:var(--mk-selected-bg);color:var(--mk-selected-text)}:host(.mk-list-item--disabled){cursor:not-allowed;opacity:.55;pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
379
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MkListItem, isStandalone: true, selector: "mk-list-item", inputs: { interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activated: "activated" }, host: { attributes: { "role": "listitem" }, listeners: { "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "class.mk-list-item--interactive": "interactive()", "class.mk-list-item--selected": "selected()", "class.mk-list-item--disabled": "disabled()", "attr.tabindex": "interactive() && !disabled() ? 0 : null", "attr.aria-current": "interactive() && selected() ? 'true' : null", "attr.aria-disabled": "disabled() ? 'true' : null" }, classAttribute: "mk-list-item" }, ngImport: i0, template: "<span class=\"mk-list-item__leading\"><ng-content select=\"[mkListLeading]\" /></span>\n<span class=\"mk-list-item__content\"><ng-content /></span>\n<span class=\"mk-list-item__trailing\"><ng-content select=\"[mkListTrailing]\" /></span>\n", styles: [":host{display:flex;align-items:center;gap:var(--mk-space-3);padding:var(--mk-space-3) var(--mk-space-4);min-height:2.75rem;border-top:var(--mk-border-width) solid var(--mk-list-item-border, transparent);color:var(--mk-text);transition:background-color var(--mk-duration-fast) var(--mk-ease-standard),color var(--mk-duration-fast) var(--mk-ease-standard)}:host(:first-child){border-top-color:transparent}.mk-list-item__leading,.mk-list-item__trailing{display:inline-flex;align-items:center;flex:0 0 auto;color:var(--mk-text-muted)}.mk-list-item__leading:empty,.mk-list-item__trailing:empty{display:none}.mk-list-item__content{flex:1 1 auto;min-width:0;line-height:var(--mk-line-height-snug)}.mk-list-item__trailing{margin-inline-start:auto}:host(.mk-list-item--interactive){cursor:pointer;-webkit-user-select:none;user-select:none}:host(.mk-list-item--interactive:hover){background-color:var(--mk-neutral-subtle)}:host(.mk-list-item--interactive:focus-visible){outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring);outline-offset:calc(-1 * var(--mk-focus-ring-width))}:host(.mk-list-item--selected){background-color:var(--mk-selected-bg);color:var(--mk-selected-text)}:host(.mk-list-item--disabled){cursor:not-allowed;opacity:.55;pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
380
380
  }
381
381
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkListItem, decorators: [{
382
382
  type: Component,
@@ -387,7 +387,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
387
387
  '[class.mk-list-item--selected]': 'selected()',
388
388
  '[class.mk-list-item--disabled]': 'disabled()',
389
389
  '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',
390
- '[attr.aria-selected]': 'interactive() ? selected() : null',
390
+ // `aria-selected` is not permitted on `listitem`; `aria-current` is the
391
+ // ARIA way to mark the current row of a plain list.
392
+ '[attr.aria-current]': "interactive() && selected() ? 'true' : null",
391
393
  '[attr.aria-disabled]': "disabled() ? 'true' : null",
392
394
  '(click)': 'onClick()',
393
395
  '(keydown)': 'onKeydown($event)',
@@ -3383,6 +3385,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
3383
3385
  }, template: "@if (isDone() && finishedText()) {\n <span class=\"mk-countdown__done\">{{ finishedText() }}</span>\n} @else {\n @if (showDays()) {\n <span class=\"mk-countdown__segment\">\n <span class=\"mk-countdown__value\">{{ format(parts().days) }}</span>\n @if (showLabels()) {\n <span class=\"mk-countdown__label\">{{ i18n.countdownDays }}</span>\n }\n </span>\n <span class=\"mk-countdown__sep\" aria-hidden=\"true\">:</span>\n }\n <span class=\"mk-countdown__segment\">\n <span class=\"mk-countdown__value\">{{ format(parts().hours) }}</span>\n @if (showLabels()) {\n <span class=\"mk-countdown__label\">{{ i18n.countdownHours }}</span>\n }\n </span>\n <span class=\"mk-countdown__sep\" aria-hidden=\"true\">:</span>\n <span class=\"mk-countdown__segment\">\n <span class=\"mk-countdown__value\">{{ format(parts().minutes) }}</span>\n @if (showLabels()) {\n <span class=\"mk-countdown__label\">{{ i18n.countdownMinutes }}</span>\n }\n </span>\n <span class=\"mk-countdown__sep\" aria-hidden=\"true\">:</span>\n <span class=\"mk-countdown__segment\">\n <span class=\"mk-countdown__value\">{{ format(parts().seconds) }}</span>\n @if (showLabels()) {\n <span class=\"mk-countdown__label\">{{ i18n.countdownSeconds }}</span>\n }\n </span>\n}\n\n<!-- Minute-granular so the polite region doesn't re-announce every second. -->\n<span class=\"mk-countdown__sr\" aria-live=\"polite\" aria-atomic=\"true\">{{ liveText() }}</span>\n", styles: [":host{display:inline-flex;align-items:flex-start;gap:var(--mk-space-2);color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-countdown__segment{display:inline-flex;flex-direction:column;align-items:center;gap:var(--mk-space-1)}.mk-countdown__value{font-size:var(--mk-font-size-2xl);font-variant-numeric:tabular-nums;line-height:1}.mk-countdown__label{color:var(--mk-text-muted);font-size:var(--mk-font-size-xs);text-transform:uppercase;letter-spacing:.05em}.mk-countdown__sep{color:var(--mk-text-muted);font-size:var(--mk-font-size-2xl);line-height:1}.mk-countdown__done{font-size:var(--mk-font-size-lg)}.mk-countdown__sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}\n"] }]
3384
3386
  }], ctorParameters: () => [], propDecorators: { to: [{ type: i0.Input, args: [{ isSignal: true, alias: "to", required: false }] }], showDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDays", required: false }] }], showLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabels", required: false }] }], pad: [{ type: i0.Input, args: [{ isSignal: true, alias: "pad", required: false }] }], finishedText: [{ type: i0.Input, args: [{ isSignal: true, alias: "finishedText", required: false }] }], finished: [{ type: i0.Output, args: ["finished"] }] } });
3385
3387
 
3388
+ /**
3389
+ * A single term/detail row of {@link MkDescriptionList}: `term` becomes the
3390
+ * `<dt>`, the projected content the `<dd>`. The row itself renders nothing —
3391
+ * the list reads its rows and writes `<dt>`/`<dd>` as direct children of the
3392
+ * `<dl>`, which is what HTML and assistive tech require (a wrapper element
3393
+ * between `<dl>` and `<dt>` fails axe `definition-list` / `dlitem`).
3394
+ */
3395
+ class MkDescItem {
3396
+ /** The term (label) shown in the `<dt>`. */
3397
+ term = input('', /* @ts-ignore */
3398
+ ...(ngDevMode ? [{ debugName: "term" }] : /* istanbul ignore next */ []));
3399
+ /** The row's detail content, rendered by the list inside its `<dd>`. @internal */
3400
+ content = viewChild.required('content', /* @ts-ignore */
3401
+ ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
3402
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDescItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
3403
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: MkDescItem, isStandalone: true, selector: "mk-desc-item", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mk-desc-item" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: `<ng-template #content><ng-content /></ng-template>`, isInline: true, styles: [":host{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3404
+ }
3405
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDescItem, decorators: [{
3406
+ type: Component,
3407
+ args: [{ selector: 'mk-desc-item', changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-template #content><ng-content /></ng-template>`, host: { class: 'mk-desc-item' }, styles: [":host{display:none}\n"] }]
3408
+ }], propDecorators: { term: [{ type: i0.Input, args: [{ isSignal: true, alias: "term", required: false }] }], content: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
3386
3409
  /**
3387
3410
  * DescriptionList — a semantic `<dl>` of term/detail pairs for entity-detail and
3388
3411
  * metadata panels. Project {@link MkDescItem} rows; values may be rich content
@@ -3395,6 +3418,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
3395
3418
  * <mk-desc-item term="Owner">Ada Lovelace</mk-desc-item>
3396
3419
  * </mk-description-list>
3397
3420
  * ```
3421
+ *
3422
+ * Only `mk-desc-item` children are rendered; the `<dl>` always contains plain
3423
+ * `<dt>`/`<dd>` pairs.
3398
3424
  */
3399
3425
  class MkDescriptionList {
3400
3426
  /** `grid` aligns terms in a column; `stacked` puts each term above its value. */
@@ -3402,43 +3428,37 @@ class MkDescriptionList {
3402
3428
  ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
3403
3429
  /** Draw a divider between rows. */
3404
3430
  divided = input(false, { ...(ngDevMode ? { debugName: "divided" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3431
+ items = contentChildren(MkDescItem, /* @ts-ignore */
3432
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
3405
3433
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDescriptionList, deps: [], target: i0.ɵɵFactoryTarget.Component });
3406
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MkDescriptionList, isStandalone: true, selector: "mk-description-list", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, divided: { classPropertyName: "divided", publicName: "divided", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mk-description-list" }, ngImport: i0, template: `<dl
3434
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkDescriptionList, isStandalone: true, selector: "mk-description-list", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, divided: { classPropertyName: "divided", publicName: "divided", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mk-description-list" }, queries: [{ propertyName: "items", predicate: MkDescItem, isSignal: true }], ngImport: i0, template: `<dl
3407
3435
  class="mk-description-list__dl"
3408
3436
  [attr.data-layout]="layout()"
3409
3437
  [class.mk-description-list__dl--divided]="divided()"
3410
3438
  >
3411
- <ng-content />
3412
- </dl>`, isInline: true, styles: [":host{display:block;font-family:var(--mk-font-sans)}.mk-description-list__dl{margin:0}.mk-description-list__dl[data-layout=grid]{display:grid;grid-template-columns:minmax(6rem,max-content) 1fr;gap:var(--mk-space-2) var(--mk-space-4);align-items:baseline}.mk-description-list__dl[data-layout=stacked]{display:flex;flex-direction:column;gap:var(--mk-space-3)}.mk-description-list__dl[data-layout=stacked] .mk-description-list__details{margin-top:var(--mk-space-1)}.mk-description-list__term{margin:0;font-size:var(--mk-font-size-sm);font-weight:var(--mk-font-weight-medium);color:var(--mk-text-muted)}.mk-description-list__details{margin:0;font-size:var(--mk-font-size-md);color:var(--mk-text);min-width:0;overflow-wrap:break-word}.mk-description-list__dl--divided[data-layout=grid] .mk-description-list__term,.mk-description-list__dl--divided[data-layout=grid] .mk-description-list__details{padding-bottom:var(--mk-space-2);border-bottom:var(--mk-border-width) solid var(--mk-border-subtle)}.mk-description-list__dl--divided[data-layout=stacked] .mk-description-list__details{padding-bottom:var(--mk-space-3);border-bottom:var(--mk-border-width) solid var(--mk-border-subtle)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3439
+ @for (item of items(); track item) {
3440
+ <dt class="mk-description-list__term">{{ item.term() }}</dt>
3441
+ <dd class="mk-description-list__details">
3442
+ <ng-container *ngTemplateOutlet="item.content()" />
3443
+ </dd>
3444
+ }
3445
+ </dl>`, isInline: true, styles: [":host{display:block;font-family:var(--mk-font-sans)}.mk-description-list__dl{margin:0}.mk-description-list__dl[data-layout=grid]{display:grid;grid-template-columns:minmax(6rem,max-content) 1fr;gap:var(--mk-space-2) var(--mk-space-4);align-items:baseline}.mk-description-list__dl[data-layout=stacked]{display:flex;flex-direction:column;gap:var(--mk-space-3)}.mk-description-list__dl[data-layout=stacked] .mk-description-list__details{margin-top:var(--mk-space-1)}.mk-description-list__term{margin:0;font-size:var(--mk-font-size-sm);font-weight:var(--mk-font-weight-medium);color:var(--mk-text-muted)}.mk-description-list__details{margin:0;font-size:var(--mk-font-size-md);color:var(--mk-text);min-width:0;overflow-wrap:break-word}.mk-description-list__dl--divided[data-layout=grid] .mk-description-list__term,.mk-description-list__dl--divided[data-layout=grid] .mk-description-list__details{padding-bottom:var(--mk-space-2);border-bottom:var(--mk-border-width) solid var(--mk-border-subtle)}.mk-description-list__dl--divided[data-layout=stacked] .mk-description-list__details{padding-bottom:var(--mk-space-3);border-bottom:var(--mk-border-width) solid var(--mk-border-subtle)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3413
3446
  }
3414
3447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDescriptionList, decorators: [{
3415
3448
  type: Component,
3416
- args: [{ selector: 'mk-description-list', changeDetection: ChangeDetectionStrategy.OnPush, template: `<dl
3449
+ args: [{ selector: 'mk-description-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], template: `<dl
3417
3450
  class="mk-description-list__dl"
3418
3451
  [attr.data-layout]="layout()"
3419
3452
  [class.mk-description-list__dl--divided]="divided()"
3420
3453
  >
3421
- <ng-content />
3454
+ @for (item of items(); track item) {
3455
+ <dt class="mk-description-list__term">{{ item.term() }}</dt>
3456
+ <dd class="mk-description-list__details">
3457
+ <ng-container *ngTemplateOutlet="item.content()" />
3458
+ </dd>
3459
+ }
3422
3460
  </dl>`, host: { class: 'mk-description-list' }, styles: [":host{display:block;font-family:var(--mk-font-sans)}.mk-description-list__dl{margin:0}.mk-description-list__dl[data-layout=grid]{display:grid;grid-template-columns:minmax(6rem,max-content) 1fr;gap:var(--mk-space-2) var(--mk-space-4);align-items:baseline}.mk-description-list__dl[data-layout=stacked]{display:flex;flex-direction:column;gap:var(--mk-space-3)}.mk-description-list__dl[data-layout=stacked] .mk-description-list__details{margin-top:var(--mk-space-1)}.mk-description-list__term{margin:0;font-size:var(--mk-font-size-sm);font-weight:var(--mk-font-weight-medium);color:var(--mk-text-muted)}.mk-description-list__details{margin:0;font-size:var(--mk-font-size-md);color:var(--mk-text);min-width:0;overflow-wrap:break-word}.mk-description-list__dl--divided[data-layout=grid] .mk-description-list__term,.mk-description-list__dl--divided[data-layout=grid] .mk-description-list__details{padding-bottom:var(--mk-space-2);border-bottom:var(--mk-border-width) solid var(--mk-border-subtle)}.mk-description-list__dl--divided[data-layout=stacked] .mk-description-list__details{padding-bottom:var(--mk-space-3);border-bottom:var(--mk-border-width) solid var(--mk-border-subtle)}\n"] }]
3423
- }], propDecorators: { layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], divided: [{ type: i0.Input, args: [{ isSignal: true, alias: "divided", required: false }] }] } });
3424
- /**
3425
- * A single term/detail row inside {@link MkDescriptionList}. Renders a `<dt>`
3426
- * (the `term`) and a `<dd>` (the projected value). The host is `display:contents`
3427
- * so the `<dt>`/`<dd>` participate directly in the list's grid.
3428
- */
3429
- class MkDescItem {
3430
- /** The term (label) shown in the `<dt>`. */
3431
- term = input('', /* @ts-ignore */
3432
- ...(ngDevMode ? [{ debugName: "term" }] : /* istanbul ignore next */ []));
3433
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDescItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
3434
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: MkDescItem, isStandalone: true, selector: "mk-desc-item", inputs: { term: { classPropertyName: "term", publicName: "term", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mk-desc-item" }, ngImport: i0, template: `<dt class="mk-description-list__term">{{ term() }}</dt>
3435
- <dd class="mk-description-list__details"><ng-content /></dd>`, isInline: true, styles: [":host{display:contents}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3436
- }
3437
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDescItem, decorators: [{
3438
- type: Component,
3439
- args: [{ selector: 'mk-desc-item', changeDetection: ChangeDetectionStrategy.OnPush, template: `<dt class="mk-description-list__term">{{ term() }}</dt>
3440
- <dd class="mk-description-list__details"><ng-content /></dd>`, host: { class: 'mk-desc-item' }, styles: [":host{display:contents}\n"] }]
3441
- }], propDecorators: { term: [{ type: i0.Input, args: [{ isSignal: true, alias: "term", required: false }] }] } });
3461
+ }], propDecorators: { layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], divided: [{ type: i0.Input, args: [{ isSignal: true, alias: "divided", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MkDescItem), { isSignal: true }] }] } });
3442
3462
 
3443
3463
  /**
3444
3464
  * Code — a read-only, themed code block with syntax highlighting, an optional
@@ -3572,11 +3592,11 @@ class MkVirtualScroll {
3572
3592
  this.scrollTop.set(event.target.scrollTop);
3573
3593
  }
3574
3594
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkVirtualScroll, deps: [], target: i0.ɵɵFactoryTarget.Component });
3575
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkVirtualScroll, isStandalone: true, selector: "mk-virtual-scroll", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mk-virtual-scroll" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "viewportRef", first: true, predicate: ["viewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #viewport class=\"mk-virtual-scroll__viewport\" (scroll)=\"onScroll($event)\">\n <div class=\"mk-virtual-scroll__spacer\" [style.height.px]=\"totalHeight()\">\n <div\n class=\"mk-virtual-scroll__content\"\n [style.transform]=\"'translateY(' + offset() + 'px)'\"\n >\n @for (row of visibleItems(); track row.index) {\n <div class=\"mk-virtual-scroll__item\" [style.height.px]=\"itemHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"template() ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row.item, index: row.index }\"\n />\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.mk-virtual-scroll__viewport{height:100%;overflow-y:auto;overflow-x:hidden;position:relative;contain:strict}.mk-virtual-scroll__spacer{position:relative;width:100%}.mk-virtual-scroll__content{position:absolute;top:0;left:0;right:0;will-change:transform}.mk-virtual-scroll__item{box-sizing:border-box;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3595
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkVirtualScroll, isStandalone: true, selector: "mk-virtual-scroll", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "mk-virtual-scroll" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "viewportRef", first: true, predicate: ["viewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #viewport class=\"mk-virtual-scroll__viewport\" tabindex=\"0\" (scroll)=\"onScroll($event)\">\n <div class=\"mk-virtual-scroll__spacer\" [style.height.px]=\"totalHeight()\">\n <div\n class=\"mk-virtual-scroll__content\"\n [style.transform]=\"'translateY(' + offset() + 'px)'\"\n >\n @for (row of visibleItems(); track row.index) {\n <div class=\"mk-virtual-scroll__item\" [style.height.px]=\"itemHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"template() ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row.item, index: row.index }\"\n />\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.mk-virtual-scroll__viewport{height:100%;overflow-y:auto;overflow-x:hidden;position:relative;contain:strict}.mk-virtual-scroll__spacer{position:relative;width:100%}.mk-virtual-scroll__content{position:absolute;top:0;left:0;right:0;will-change:transform}.mk-virtual-scroll__item{box-sizing:border-box;overflow:hidden}.mk-virtual-scroll__viewport:focus-visible{outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring-color);outline-offset:calc(-1 * var(--mk-focus-ring-width))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3576
3596
  }
3577
3597
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkVirtualScroll, decorators: [{
3578
3598
  type: Component,
3579
- args: [{ selector: 'mk-virtual-scroll', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], host: { class: 'mk-virtual-scroll' }, template: "<div #viewport class=\"mk-virtual-scroll__viewport\" (scroll)=\"onScroll($event)\">\n <div class=\"mk-virtual-scroll__spacer\" [style.height.px]=\"totalHeight()\">\n <div\n class=\"mk-virtual-scroll__content\"\n [style.transform]=\"'translateY(' + offset() + 'px)'\"\n >\n @for (row of visibleItems(); track row.index) {\n <div class=\"mk-virtual-scroll__item\" [style.height.px]=\"itemHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"template() ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row.item, index: row.index }\"\n />\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.mk-virtual-scroll__viewport{height:100%;overflow-y:auto;overflow-x:hidden;position:relative;contain:strict}.mk-virtual-scroll__spacer{position:relative;width:100%}.mk-virtual-scroll__content{position:absolute;top:0;left:0;right:0;will-change:transform}.mk-virtual-scroll__item{box-sizing:border-box;overflow:hidden}\n"] }]
3599
+ args: [{ selector: 'mk-virtual-scroll', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], host: { class: 'mk-virtual-scroll' }, template: "<div #viewport class=\"mk-virtual-scroll__viewport\" tabindex=\"0\" (scroll)=\"onScroll($event)\">\n <div class=\"mk-virtual-scroll__spacer\" [style.height.px]=\"totalHeight()\">\n <div\n class=\"mk-virtual-scroll__content\"\n [style.transform]=\"'translateY(' + offset() + 'px)'\"\n >\n @for (row of visibleItems(); track row.index) {\n <div class=\"mk-virtual-scroll__item\" [style.height.px]=\"itemHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"template() ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row.item, index: row.index }\"\n />\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.mk-virtual-scroll__viewport{height:100%;overflow-y:auto;overflow-x:hidden;position:relative;contain:strict}.mk-virtual-scroll__spacer{position:relative;width:100%}.mk-virtual-scroll__content{position:absolute;top:0;left:0;right:0;will-change:transform}.mk-virtual-scroll__item{box-sizing:border-box;overflow:hidden}.mk-virtual-scroll__viewport:focus-visible{outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring-color);outline-offset:calc(-1 * var(--mk-focus-ring-width))}\n"] }]
3580
3600
  }], ctorParameters: () => [], propDecorators: { viewportRef: [{ type: i0.ViewChild, args: ['viewport', { isSignal: true }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], overscan: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscan", required: false }] }], template: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
3581
3601
 
3582
3602
  /** Horizontal movement (px) before a pointer gesture commits to a swipe. */