@mk-kit/ui 0.34.1 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/mk-kit-ui-core.mjs +25 -5
- package/fesm2022/mk-kit-ui-core.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-datetime.mjs +566 -21
- package/fesm2022/mk-kit-ui-datetime.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-feedback.mjs +4 -4
- package/fesm2022/mk-kit-ui-feedback.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-forms.mjs +7 -7
- package/fesm2022/mk-kit-ui-forms.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-navigation.mjs +286 -17
- package/fesm2022/mk-kit-ui-navigation.mjs.map +1 -1
- package/package.json +1 -1
- package/types/mk-kit-ui-core.d.ts +18 -2
- package/types/mk-kit-ui-datetime.d.ts +163 -6
- package/types/mk-kit-ui-navigation.d.ts +172 -40
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk-kit-ui-navigation.mjs","sources":["../../../projects/mk-kit/navigation/tabs/tab.ts","../../../projects/mk-kit/navigation/tabs/tab.html","../../../projects/mk-kit/navigation/tabs/tabs.ts","../../../projects/mk-kit/navigation/tabs/tabs.html","../../../projects/mk-kit/navigation/accordion/accordion.ts","../../../projects/mk-kit/navigation/accordion/accordion.html","../../../projects/mk-kit/navigation/accordion/accordion-item.ts","../../../projects/mk-kit/navigation/accordion/accordion-item.html","../../../projects/mk-kit/navigation/accordion/accordion-header.ts","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb-item.ts","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb-item.html","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb.ts","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb.html","../../../projects/mk-kit/navigation/pagination/pagination.ts","../../../projects/mk-kit/navigation/pagination/pagination.html","../../../projects/mk-kit/navigation/menu/menu-item.ts","../../../projects/mk-kit/navigation/menu/menu-item.html","../../../projects/mk-kit/navigation/menu/menu.ts","../../../projects/mk-kit/navigation/menu/menu.html","../../../projects/mk-kit/navigation/menu/menu-trigger.ts","../../../projects/mk-kit/navigation/app-shell/app-shell.ts","../../../projects/mk-kit/navigation/app-shell/app-shell.html","../../../projects/mk-kit/navigation/nav-list/nav-list.ts","../../../projects/mk-kit/navigation/nav-list/nav-list.html","../../../projects/mk-kit/navigation/nav-list/nav-item.ts","../../../projects/mk-kit/navigation/nav-list/nav-item.html","../../../projects/mk-kit/navigation/nav-list/nav-group.ts","../../../projects/mk-kit/navigation/nav-list/nav-group.html","../../../projects/mk-kit/navigation/stepper/step.ts","../../../projects/mk-kit/navigation/stepper/step.html","../../../projects/mk-kit/navigation/stepper/stepper.ts","../../../projects/mk-kit/navigation/stepper/stepper.html","../../../projects/mk-kit/navigation/tree/tree.ts","../../../projects/mk-kit/navigation/tree/tree.html","../../../projects/mk-kit/navigation/drawer/drawer.ts","../../../projects/mk-kit/navigation/drawer/drawer.html","../../../projects/mk-kit/navigation/toolbar/toolbar.ts","../../../projects/mk-kit/navigation/toolbar/toolbar.html","../../../projects/mk-kit/navigation/page-header/page-header.ts","../../../projects/mk-kit/navigation/page-header/page-header.html","../../../projects/mk-kit/navigation/command-palette/command-palette.ts","../../../projects/mk-kit/navigation/command-palette/command-palette.html","../../../projects/mk-kit/navigation/splitter/splitter.ts","../../../projects/mk-kit/navigation/splitter/splitter.html","../../../projects/mk-kit/navigation/fab/fab.ts","../../../projects/mk-kit/navigation/fab/fab.html","../../../projects/mk-kit/navigation/back-to-top/back-to-top.ts","../../../projects/mk-kit/navigation/back-to-top/back-to-top.html","../../../projects/mk-kit/navigation/scroll-area/scroll-area.ts","../../../projects/mk-kit/navigation/scroll-area/scroll-area.html","../../../projects/mk-kit/navigation/index.ts","../../../projects/mk-kit/navigation/mk-kit-ui-navigation.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n signal,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\n\n/**\n * A single tab + its panel. Declared inside `<mk-tabs>`; the projected content\n * becomes the tab panel body while `label` is rendered in the tablist.\n *\n * ```html\n * <mk-tabs>\n * <mk-tab label=\"Overview\">…panel content…</mk-tab>\n * <mk-tab label=\"Settings\" [disabled]=\"locked()\">…</mk-tab>\n * </mk-tabs>\n * ```\n */\n@Component({\n selector: 'mk-tab',\n templateUrl: './tab.html',\n styleUrl: './tab.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tab',\n role: 'tabpanel',\n '[id]': 'panelId',\n '[attr.aria-labelledby]': 'tabId',\n '[attr.hidden]': \"active() ? null : ''\",\n '[attr.tabindex]': 'active() ? 0 : null',\n },\n})\nexport class MkTab {\n /** Text shown on the tab button in the tablist. */\n readonly label = input('');\n /** Disable selection of this tab. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Stable id for the tab button (wires `aria-labelledby`). */\n readonly tabId = mkUniqueId('mk-tab');\n /** Stable id for the panel (wires `aria-controls`). */\n readonly panelId = mkUniqueId('mk-tabpanel');\n\n /** Whether this tab is currently selected. Set by the parent `MkTabs`. */\n readonly active = signal(false);\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n contentChildren,\n effect,\n input,\n model,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { MkTab } from './tab';\n\n/** Visual style for the tablist. */\nexport type MkTabsVariant = 'line' | 'pill';\n\n/**\n * Accessible tabs implementing the ARIA tabs pattern: a `role=\"tablist\"` with\n * roving tabindex, Arrow/Home/End keyboard navigation and an animated active\n * indicator. Selection is two-way bindable via `selectedIndex`.\n *\n * ```html\n * <mk-tabs [(selectedIndex)]=\"tab\" variant=\"line\">\n * <mk-tab label=\"Profile\">…</mk-tab>\n * <mk-tab label=\"Billing\">…</mk-tab>\n * </mk-tabs>\n * ```\n */\n@Component({\n selector: 'mk-tabs',\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tabs',\n '[class.mk-tabs--line]': \"variant() === 'line'\",\n '[class.mk-tabs--pill]': \"variant() === 'pill'\",\n },\n})\nexport class MkTabs {\n /** Projected tabs, kept live via a signal content query. */\n readonly tabs = contentChildren(MkTab);\n /** Rendered tab buttons, used to move focus and measure the indicator. */\n protected readonly tabButtons =\n viewChildren<ElementRef<HTMLButtonElement>>('tabBtn');\n\n /** Zero-based index of the active tab (two-way). */\n readonly selectedIndex = model(0);\n /** `line` shows an underline indicator; `pill` uses filled pills. */\n readonly variant = input<MkTabsVariant>('line');\n\n /** Sliding indicator geometry (line variant). */\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n\n constructor() {\n // Keep each tab's `active` state and the clamped selected index in sync.\n effect(() => {\n const tabs = this.tabs();\n let index = this.selectedIndex();\n if (tabs.length > 0 && index > tabs.length - 1) {\n index = tabs.length - 1;\n }\n if (index < 0) index = 0;\n tabs.forEach((tab, i) => tab.active.set(i === index));\n queueMicrotask(() => this.measureIndicator(index));\n });\n }\n\n protected select(index: number): void {\n const tab = this.tabs()[index];\n if (!tab || tab.disabled()) return;\n this.selectedIndex.set(index);\n // The tablist scrolls horizontally on narrow screens — keep the newly\n // active tab visible. 'nearest' so activating a tab never jumps the page\n // vertically. Optional-chained: jsdom has no scrollIntoView.\n this.tabButtons()[index]?.nativeElement.scrollIntoView?.({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n protected focusTab(index: number): void {\n this.tabButtons()[index]?.nativeElement.focus();\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const count = this.tabs().length;\n let next = -1;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextEnabled(index, 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextEnabled(index, -1);\n break;\n case 'Home':\n next = this.nextEnabled(-1, 1);\n break;\n case 'End':\n next = this.nextEnabled(count, -1);\n break;\n default:\n return;\n }\n if (next >= 0) {\n event.preventDefault();\n this.select(next);\n this.focusTab(next);\n }\n }\n\n /** Next non-disabled tab index starting from `from`, wrapping around. */\n private nextEnabled(from: number, step: number): number {\n const tabs = this.tabs();\n const count = tabs.length;\n if (count === 0) return -1;\n for (let i = 1; i <= count; i++) {\n const idx = (((from + step * i) % count) + count) % count;\n if (!tabs[idx].disabled()) return idx;\n }\n return -1;\n }\n\n private measureIndicator(index: number): void {\n const btn = this.tabButtons()[index]?.nativeElement;\n if (!btn) return;\n this.indicatorLeft.set(btn.offsetLeft);\n this.indicatorWidth.set(btn.offsetWidth);\n }\n}\n","<div class=\"mk-tabs__list\" role=\"tablist\">\n @for (tab of tabs(); track tab.tabId; let i = $index) {\n <button\n #tabBtn\n type=\"button\"\n role=\"tab\"\n class=\"mk-tabs__tab\"\n [class.mk-tabs__tab--active]=\"i === selectedIndex()\"\n [id]=\"tab.tabId\"\n [attr.aria-controls]=\"tab.panelId\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [attr.tabindex]=\"i === selectedIndex() ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"select(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n {{ tab.label() }}\n </button>\n }\n\n @if (variant() === 'line') {\n <span\n class=\"mk-tabs__indicator\"\n aria-hidden=\"true\"\n [style.transform]=\"'translateX(' + indicatorLeft() + 'px)'\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n }\n</div>\n\n<div class=\"mk-tabs__panels\">\n <ng-content />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport type { MkAccordionItem } from './accordion-item';\n\n/**\n * Groups `<mk-accordion-item>`s. By default only one item can be open at a\n * time (single-open); set `multi` to allow several. Coordinates its children\n * through their two-way `open` models.\n *\n * ```html\n * <mk-accordion [multi]=\"false\">\n * <mk-accordion-item header=\"One\">…</mk-accordion-item>\n * <mk-accordion-item header=\"Two\">…</mk-accordion-item>\n * </mk-accordion>\n * ```\n */\n@Component({\n selector: 'mk-accordion',\n templateUrl: './accordion.html',\n styleUrl: './accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-accordion',\n },\n})\nexport class MkAccordion {\n /** Allow multiple items open simultaneously. */\n readonly multi = input(false, { transform: booleanAttribute });\n\n /** Registered items collapse siblings on open in single mode. */\n private readonly items = new Set<MkAccordionItem>();\n\n /** Called by an item just before its open state changes. */\n onItemToggle(source: MkAccordionItem, opening: boolean): void {\n this.items.add(source);\n if (opening && !this.multi()) {\n for (const item of this.items) {\n if (item !== source && item.open()) item.open.set(false);\n }\n }\n }\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkAccordion } from './accordion';\n\n/**\n * A collapsible section within an `<mk-accordion>`. The header is a button that\n * toggles a smoothly animated body region wired with `aria-expanded` /\n * `aria-controls`. Open state is two-way bindable via `open`.\n *\n * ```html\n * <mk-accordion-item header=\"Shipping\" [(open)]=\"shippingOpen\">\n * …body…\n * </mk-accordion-item>\n * ```\n */\n@Component({\n selector: 'mk-accordion-item',\n templateUrl: './accordion-item.html',\n styleUrl: './accordion-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-accordion-item',\n '[class.mk-accordion-item--open]': 'open()',\n '[class.mk-accordion-item--disabled]': 'disabled()',\n },\n})\nexport class MkAccordionItem {\n private readonly accordion = inject(MkAccordion, { optional: true });\n\n /** Plain-text header (ignored when `[mkAccordionHeader]` is projected). */\n readonly header = input('');\n /** Disable toggling of this item. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Whether the item is expanded (two-way). */\n readonly open = model(false);\n\n /** Stable id for the trigger button. */\n readonly triggerId = mkUniqueId('mk-acc-trigger');\n /** Stable id for the panel region. */\n readonly panelId = mkUniqueId('mk-acc-panel');\n\n protected toggle(): void {\n if (this.disabled()) return;\n const next = !this.open();\n this.accordion?.onItemToggle(this, next);\n this.open.set(next);\n }\n}\n","<h3 class=\"mk-accordion-item__heading\">\n <button\n type=\"button\"\n class=\"mk-accordion-item__trigger\"\n [id]=\"triggerId\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"mk-accordion-item__label\">\n @if (header()) {\n {{ header() }}\n }\n <ng-content select=\"[mkAccordionHeader]\" />\n </span>\n <span class=\"mk-accordion-item__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </span>\n </button>\n</h3>\n\n<div\n class=\"mk-accordion-item__panel\"\n role=\"region\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"triggerId\"\n [attr.inert]=\"open() ? null : ''\"\n>\n <div class=\"mk-accordion-item__panel-inner\">\n <div class=\"mk-accordion-item__body\">\n <ng-content />\n </div>\n </div>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * Marks projected content as the header of an `<mk-accordion-item>`. Use when\n * the header needs rich markup instead of the plain-text `header` input.\n *\n * ```html\n * <mk-accordion-item>\n * <span mkAccordionHeader><mk-icon name=\"user\" /> Account</span>\n * …body…\n * </mk-accordion-item>\n * ```\n */\n@Directive({\n selector: '[mkAccordionHeader]',\n})\nexport class MkAccordionHeader {}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * A single crumb inside `<mk-breadcrumb>`. Renders a link when `href` is set,\n * otherwise plain text. The last item is automatically marked\n * `aria-current=\"page\"` by the parent.\n *\n * ```html\n * <mk-breadcrumb-item href=\"/\">Home</mk-breadcrumb-item>\n * <mk-breadcrumb-item>Current page</mk-breadcrumb-item>\n * ```\n */\n@Component({\n selector: 'mk-breadcrumb-item',\n templateUrl: './breadcrumb-item.html',\n styleUrl: './breadcrumb-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n class: 'mk-breadcrumb-item',\n role: 'listitem',\n },\n})\nexport class MkBreadcrumbItem {\n /** Optional link target. Rendered as text when omitted or when it is last. */\n readonly href = input<string>();\n\n /** Whether this is the final crumb. Set by the parent `MkBreadcrumb`. */\n readonly last = signal(false);\n}\n","<!-- A single ng-content captured in a template: the default projection slot\n belongs to exactly one ng-content, so placing one in each branch leaves\n whichever branch Angular didn't pick rendering empty. -->\n<ng-template #content><ng-content /></ng-template>\n\n@if (href() && !last()) {\n <a class=\"mk-breadcrumb-item__link\" [href]=\"href()\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n} @else {\n <span\n class=\"mk-breadcrumb-item__current\"\n [attr.aria-current]=\"last() ? 'page' : null\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkBreadcrumbItem } from './breadcrumb-item';\n\n/**\n * Breadcrumb trail. Renders `nav[aria-label=\"Breadcrumb\"] > ol` and marks the\n * final `<mk-breadcrumb-item>` as the current page. The separator is drawn in\n * CSS and can be customised via `separator`.\n *\n * ```html\n * <mk-breadcrumb separator=\"›\">\n * <mk-breadcrumb-item href=\"/\">Home</mk-breadcrumb-item>\n * <mk-breadcrumb-item href=\"/users\">Users</mk-breadcrumb-item>\n * <mk-breadcrumb-item>Jane</mk-breadcrumb-item>\n * </mk-breadcrumb>\n * ```\n */\n@Component({\n selector: 'mk-breadcrumb',\n templateUrl: './breadcrumb.html',\n styleUrl: './breadcrumb.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-breadcrumb',\n '[style.--mk-breadcrumb-separator]': 'separatorValue()',\n },\n})\nexport class MkBreadcrumb {\n protected readonly i18n = inject(MK_I18N);\n\n /** Accessible label for the navigation landmark. */\n readonly label = input(this.i18n.breadcrumbLabel);\n /** Separator character rendered between crumbs. */\n readonly separator = input('/');\n\n private readonly items = contentChildren(MkBreadcrumbItem);\n\n /** Wrap the separator in quotes for the CSS `content` property. */\n protected readonly separatorValue = computed(\n () => `\"${this.separator().replace(/\"/g, '\\\\\"')}\"`,\n );\n\n constructor() {\n // Flag the last crumb so it renders as the current page.\n effect(() => {\n const items = this.items();\n items.forEach((item, i) => item.last.set(i === items.length - 1));\n });\n }\n}\n","<nav [attr.aria-label]=\"label()\">\n <ol class=\"mk-breadcrumb__list\" role=\"list\">\n <ng-content />\n </ol>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n inject,\n} from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** A rendered pagination cell: a real page number or a gap marker. */\nexport type MkPageItem = number | 'ellipsis';\n\n/**\n * Page navigation with previous/next controls and numbered pages that collapse\n * to ellipses for large ranges. Provide either `total` (+ `pageSize`) or a\n * direct `pageCount`. `page` is 1-based and two-way bindable.\n *\n * ```html\n * <mk-pagination\n * [total]=\"240\"\n * [pageSize]=\"20\"\n * [(page)]=\"page\"\n * (pageChange)=\"load($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'mk-pagination',\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-pagination',\n },\n})\nexport class MkPagination {\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n /** Total number of items (used with `pageSize` when `pageCount` is unset). */\n readonly total = input(0, { transform: numberAttribute });\n /** Items per page. */\n readonly pageSize = input(10, { transform: numberAttribute });\n /** Explicit page count; overrides `total`/`pageSize` when > 0. */\n readonly pageCount = input(0, { transform: numberAttribute });\n /** Current 1-based page (two-way). */\n readonly page = model(1);\n /** Number of page buttons to keep on each side of the current page. */\n readonly siblingCount = input(1, { transform: numberAttribute });\n /** Number of page buttons pinned at each end. */\n readonly boundaryCount = input(1, { transform: numberAttribute });\n /** Accessible label for the navigation landmark. */\n readonly label = input(this.i18n.paginationLabel);\n\n /**\n * `pageChange` is emitted automatically by the two-way `page` model whenever\n * the page changes — bind it via `(pageChange)` or `[(page)]`.\n */\n\n /** Resolved total number of pages (at least 1). */\n protected readonly pages = computed(() => {\n const explicit = this.pageCount();\n if (explicit > 0) return explicit;\n const size = Math.max(1, this.pageSize());\n return Math.max(1, Math.ceil(this.total() / size));\n });\n\n protected readonly current = computed(() =>\n Math.min(Math.max(1, this.page()), this.pages()),\n );\n\n protected readonly hasPrev = computed(() => this.current() > 1);\n protected readonly hasNext = computed(() => this.current() < this.pages());\n\n /** The sequence of page cells with ellipsis gaps. */\n protected readonly items = computed<MkPageItem[]>(() => {\n const total = this.pages();\n const boundary = Math.max(0, this.boundaryCount());\n const sibling = Math.max(0, this.siblingCount());\n const current = this.current();\n\n // Total slots: boundaries + siblings + current + 2 ellipses + first/last.\n const totalSlots = boundary * 2 + sibling * 2 + 3 + 2;\n if (total <= totalSlots) {\n return this.range(1, total);\n }\n\n const startPages = this.range(1, boundary);\n const endPages = this.range(total - boundary + 1, total);\n\n const siblingsStart = Math.max(\n Math.min(current - sibling, total - boundary - sibling * 2 - 1),\n boundary + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(current + sibling, boundary + sibling * 2 + 2),\n endPages.length > 0 ? endPages[0] - 2 : total - 1,\n );\n\n const result: MkPageItem[] = [...startPages];\n\n if (siblingsStart > boundary + 2) {\n result.push('ellipsis');\n } else if (boundary + 1 < total - boundary) {\n result.push(boundary + 1);\n }\n\n result.push(...this.range(siblingsStart, siblingsEnd));\n\n if (siblingsEnd < total - boundary - 1) {\n result.push('ellipsis');\n } else if (total - boundary > boundary) {\n result.push(total - boundary);\n }\n\n result.push(...endPages);\n return result;\n });\n\n protected goTo(page: number): void {\n const target = Math.min(Math.max(1, page), this.pages());\n if (target === this.current()) return;\n this.page.set(target);\n }\n\n protected prev(): void {\n if (this.hasPrev()) this.goTo(this.current() - 1);\n }\n\n protected next(): void {\n if (this.hasNext()) this.goTo(this.current() + 1);\n }\n\n private range(start: number, end: number): number[] {\n const length = end - start + 1;\n return length > 0 ? Array.from({ length }, (_, i) => start + i) : [];\n }\n}\n","<nav [attr.aria-label]=\"label()\">\n <ul class=\"mk-pagination__list\" role=\"list\">\n <li>\n <button\n type=\"button\"\n class=\"mk-pagination__btn mk-pagination__btn--nav\"\n [attr.aria-label]=\"i18n.previousPage\"\n [disabled]=\"!hasPrev()\"\n (click)=\"prev()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n </li>\n\n @for (item of items(); track $index) {\n @if (item === 'ellipsis') {\n <li>\n <span class=\"mk-pagination__ellipsis\" aria-hidden=\"true\">…</span>\n </li>\n } @else {\n <li>\n <button\n type=\"button\"\n class=\"mk-pagination__btn\"\n [class.mk-pagination__btn--active]=\"item === current()\"\n [attr.aria-label]=\"i18n.goToPage(item)\"\n [attr.aria-current]=\"item === current() ? 'page' : null\"\n (click)=\"goTo(item)\"\n >\n {{ item }}\n </button>\n </li>\n }\n }\n\n <li>\n <button\n type=\"button\"\n class=\"mk-pagination__btn mk-pagination__btn--nav\"\n [attr.aria-label]=\"i18n.nextPage\"\n [disabled]=\"!hasNext()\"\n (click)=\"next()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </li>\n </ul>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n booleanAttribute,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { MkMenu } from './menu';\n\n/**\n * An item within an `<mk-menu>`. Renders as an ARIA `menuitem` with an optional\n * icon slot (`[mkMenuItemIcon]`), disabled and danger states, and either emits\n * `action` or navigates when `href` is set. Activating closes the menu.\n *\n * ```html\n * <mk-menu-item (action)=\"rename()\">\n * <svg mkMenuItemIcon>…</svg> Rename\n * </mk-menu-item>\n * <mk-menu-item danger (action)=\"remove()\">Delete</mk-menu-item>\n * <mk-menu-item href=\"/help\">Help</mk-menu-item>\n * ```\n */\n@Component({\n selector: 'mk-menu-item',\n templateUrl: './menu-item.html',\n styleUrl: './menu-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-menu-item',\n role: 'menuitem',\n tabindex: '-1',\n '[attr.aria-disabled]': 'disabled() || null',\n '[class.mk-menu-item--danger]': 'danger()',\n '[class.mk-menu-item--disabled]': 'disabled()',\n '(click)': 'activate($event)',\n },\n})\nexport class MkMenuItem {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly menu = inject(MkMenu, { optional: true });\n\n /** Prevent selection and focus. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Destructive styling (e.g. Delete). */\n readonly danger = input(false, { transform: booleanAttribute });\n /** When set, activating the item navigates here. */\n readonly href = input<string>();\n\n /** Emitted when the item is activated (not for disabled items). */\n readonly action = output<void>();\n\n activate(event?: Event): void {\n if (this.disabled()) {\n event?.preventDefault();\n event?.stopPropagation();\n return;\n }\n this.action.emit();\n const href = this.href();\n this.menu?.close(true);\n if (href) {\n this.document.defaultView?.location.assign(href);\n }\n }\n\n /** Move DOM focus to this item (roving focus). */\n focusEl(): void {\n this.el.nativeElement.focus();\n }\n\n /** Whether `node` lives inside this item. */\n contains(node: Node | null): boolean {\n return !!node && this.el.nativeElement.contains(node);\n }\n\n /** Lowercased text content, used for typeahead matching. */\n text(): string {\n return (this.el.nativeElement.textContent ?? '').trim().toLowerCase();\n }\n}\n","<span class=\"mk-menu-item__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkMenuItemIcon]\" />\n</span>\n<span class=\"mk-menu-item__label\">\n <ng-content />\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n Injector,\n type OnDestroy,\n PLATFORM_ID,\n afterNextRender,\n contentChildren,\n inject,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { MkMenuItem } from './menu-item';\n\n/**\n * Dropdown menu implementing the ARIA menu pattern (roving focus, Arrow / Home\n * / End / typeahead, Enter/Space to activate). Attach it to a trigger with the\n * `mkMenuTriggerFor` directive; the trigger controls opening and positioning.\n *\n * The panel is rendered in the browser top layer via {@link MkAnchoredPanel}, so\n * it is never clipped by an ancestor's `overflow`/`transform` and always flips\n * back on-screen near a viewport edge.\n *\n * ```html\n * <button mkButton [mkMenuTriggerFor]=\"menu\">Actions</button>\n * <mk-menu #menu>\n * <mk-menu-item (action)=\"edit()\">Edit</mk-menu-item>\n * <mk-menu-item danger (action)=\"del()\">Delete</mk-menu-item>\n * </mk-menu>\n * ```\n */\n@Component({\n selector: 'mk-menu',\n exportAs: 'mkMenu',\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-menu',\n },\n})\nexport class MkMenu implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n private readonly injector = inject(Injector);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly items = contentChildren(MkMenuItem);\n\n /** Stable id for `aria-controls` on the trigger. */\n readonly panelId = mkUniqueId('mk-menu');\n\n private readonly _open = signal(false);\n /** Whether the menu is currently open. */\n readonly opened = this._open.asReadonly();\n\n /** Accessible label for the menu (defaults via the trigger if unset). */\n readonly ariaLabel = signal<string | undefined>(undefined);\n\n /** Element to anchor the panel to (element-anchored open). */\n protected readonly anchorEl = signal<HTMLElement | undefined>(undefined);\n /** Viewport point to anchor to (`openAt` / context menu). */\n protected readonly anchorPoint = signal<{ x: number; y: number } | undefined>(\n undefined,\n );\n\n private triggerEl: HTMLElement | null = null;\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Open the menu anchored to `trigger`. `focus` picks the item that receives\n * focus once the panel is painted: `true`/`'first'` for the first enabled\n * item, `'last'` for the last (ArrowUp on a menu button, per the APG\n * menu-button pattern), `false` to leave focus where it is (mouse open).\n */\n open(trigger: HTMLElement, focus: boolean | 'first' | 'last' = true): void {\n if (!this.isBrowser || this._open()) return;\n this.triggerEl = trigger;\n this.anchorEl.set(trigger);\n this.anchorPoint.set(undefined);\n this._open.set(true);\n if (focus) this.focusAfterOpen(focus === 'last' ? 'last' : 'first');\n }\n\n /**\n * Open the menu at viewport coordinates — e.g. a right-click point from a\n * `contextmenu` event. Positioning (and flip/shift back on-screen) is handled\n * by {@link MkAnchoredPanel} via the point anchor. Focus moves to the first\n * item; `restoreFocusEl` (when provided) regains focus on close.\n */\n openAt(x: number, y: number, restoreFocusEl?: HTMLElement): void {\n if (!this.isBrowser || this._open()) return;\n this.triggerEl = restoreFocusEl ?? null;\n this.anchorEl.set(undefined);\n this.anchorPoint.set({ x, y });\n this._open.set(true);\n this.focusAfterOpen('first');\n }\n\n /** Close the menu; optionally restore focus to the trigger. */\n close(restoreFocus = true): void {\n if (!this._open()) return;\n this._open.set(false);\n this.anchorEl.set(undefined);\n this.anchorPoint.set(undefined);\n const trigger = this.triggerEl;\n this.triggerEl = null;\n if (restoreFocus) trigger?.focus();\n }\n\n /** Toggle open/closed from a trigger. */\n toggle(trigger: HTMLElement, focusFirst = true): void {\n if (this._open()) {\n this.close(true);\n } else {\n this.open(trigger, focusFirst);\n }\n }\n\n /**\n * Move focus to the first enabled item. Used by the trigger when the menu is\n * already open (e.g. ArrowDown after a mouse open), so arrow keys always\n * reach the items even though focus never left the trigger.\n */\n focusFirstItem(): void {\n this.focusFirst();\n }\n\n /** Move focus to the last enabled item (ArrowUp from the trigger). */\n focusLastItem(): void {\n this.focusLast();\n }\n\n /** Focus an item once the panel is in the top layer and painted. */\n private focusAfterOpen(which: 'first' | 'last'): void {\n afterNextRender(\n {\n write: () => {\n if (which === 'last') this.focusLast();\n else this.focusFirst();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.focusFirst();\n break;\n case 'End':\n event.preventDefault();\n this.focusLast();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.activeItem()?.activate();\n break;\n case 'Escape':\n event.preventDefault();\n this.close(true);\n break;\n case 'Tab':\n event.preventDefault();\n this.close(true);\n break;\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n this.onTypeahead(event.key);\n }\n }\n }\n\n private enabled(): MkMenuItem[] {\n return this.items().filter((i) => !i.disabled());\n }\n\n private activeItem(): MkMenuItem | undefined {\n const active = this.document.activeElement;\n return this.enabled().find((i) => i.contains(active));\n }\n\n private currentIndex(): number {\n const active = this.document.activeElement;\n return this.enabled().findIndex((i) => i.contains(active));\n }\n\n private move(delta: number): void {\n const items = this.enabled();\n if (items.length === 0) return;\n const current = this.currentIndex();\n const next =\n current < 0\n ? delta > 0\n ? 0\n : items.length - 1\n : (current + delta + items.length) % items.length;\n items[next].focusEl();\n }\n\n private focusFirst(): void {\n this.enabled()[0]?.focusEl();\n }\n\n private focusLast(): void {\n const items = this.enabled();\n items[items.length - 1]?.focusEl();\n }\n\n private onTypeahead(char: string): void {\n this.typeahead += char.toLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n\n const items = this.enabled();\n const start = Math.max(0, this.currentIndex());\n for (let i = 1; i <= items.length; i++) {\n const item = items[(start + i) % items.length];\n if (item.text().startsWith(this.typeahead)) {\n item.focusEl();\n return;\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n }\n}\n","@if (opened()) {\n <div\n class=\"mk-menu__panel\"\n role=\"menu\"\n [id]=\"panelId\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"anchorEl()\"\n [anchorRect]=\"anchorPoint()\"\n placement=\"bottom-start\"\n (dismiss)=\"close(false)\"\n [attr.aria-label]=\"ariaLabel()\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <ng-content />\n </div>\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { MkMenu } from './menu';\n\n/**\n * Turns its host button into a trigger for an `<mk-menu>`. Wires\n * `aria-haspopup=\"menu\"` / `aria-expanded` / `aria-controls`, toggles on click,\n * opens on ArrowDown / Enter / Space (focusing the first item) and on ArrowUp\n * (focusing the last item, per the APG menu-button pattern), and closes on\n * Escape. When the menu is already open — e.g. after a mouse click, which\n * deliberately leaves focus on the trigger — ArrowDown moves focus to the\n * first item and ArrowUp to the last, so the keyboard is never dead.\n *\n * ```html\n * <button mkButton [mkMenuTriggerFor]=\"menu\">Actions</button>\n * <mk-menu #menu>…</mk-menu>\n * ```\n */\n@Directive({\n selector: '[mkMenuTriggerFor]',\n exportAs: 'mkMenuTrigger',\n host: {\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'menu().opened()',\n '[attr.aria-controls]': 'menu().panelId',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class MkMenuTrigger {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The menu instance to control. */\n readonly menu = input.required<MkMenu>({ alias: 'mkMenuTriggerFor' });\n\n protected onClick(event: Event): void {\n event.preventDefault();\n this.menu().toggle(this.host.nativeElement, false);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const menu = this.menu();\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (menu.opened()) {\n // Already open (mouse open keeps focus on the trigger) — enter the\n // menu at the top instead of swallowing the key.\n menu.focusFirstItem();\n } else {\n menu.open(this.host.nativeElement, 'first');\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (menu.opened()) {\n menu.focusLastItem();\n } else {\n menu.open(this.host.nativeElement, 'last');\n }\n break;\n case 'Escape':\n if (menu.opened()) {\n event.preventDefault();\n menu.close(true);\n }\n break;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n effect,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MkFocusTrap } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** Viewport width (px) at/below which the sidebar becomes an off-canvas drawer. */\nconst MOBILE_BREAKPOINT = 1024;\n\n/**\n * Admin dashboard layout with a fixed header, a collapsible/responsive sidebar\n * and a main content area. On small screens the sidebar becomes a focus-trapped\n * off-canvas drawer with a scrim (Escape to close). Includes a skip-to-content\n * link for keyboard users.\n *\n * ```html\n * <mk-app-shell [(sidebarOpen)]=\"open\" [(sidebarCollapsed)]=\"collapsed\">\n * <div mkAppHeader>\n * <button mkButton iconOnly (click)=\"shell.toggleSidebar()\">☰</button>\n * </div>\n * <mk-nav-list mkAppSidebar [collapsed]=\"collapsed()\">…</mk-nav-list>\n * <router-outlet />\n * </mk-app-shell>\n * ```\n */\n@Component({\n selector: 'mk-app-shell',\n templateUrl: './app-shell.html',\n styleUrl: './app-shell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-app-shell',\n '[class.mk-app-shell--collapsed]': 'sidebarCollapsed() && !isMobile()',\n '[class.mk-app-shell--mobile]': 'isMobile()',\n '[class.mk-app-shell--drawer-open]': 'isMobile() && sidebarOpen()',\n },\n})\nexport class MkAppShell {\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n protected readonly i18n = inject(MK_I18N);\n\n private readonly sidebarRef =\n viewChild<ElementRef<HTMLElement>>('sidebar');\n\n /** Whether the mobile drawer is open (two-way). */\n readonly sidebarOpen = model(false);\n /** Whether the desktop sidebar is collapsed to icons (two-way). */\n readonly sidebarCollapsed = model(false);\n\n /** True when the viewport is at/below the mobile breakpoint. */\n readonly isMobile = signal(false);\n\n private focusTrap?: MkFocusTrap;\n\n constructor() {\n if (this.isBrowser) {\n const mql = this.document.defaultView?.matchMedia(\n `(max-width: ${MOBILE_BREAKPOINT}px)`,\n );\n if (mql) {\n this.isMobile.set(mql.matches);\n this.mql = mql;\n mql.addEventListener('change', this.onMediaChange);\n }\n }\n\n // Trap focus inside the drawer while it is open on mobile.\n effect(() => {\n const el = this.sidebarRef()?.nativeElement;\n const active = this.isMobile() && this.sidebarOpen();\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (active && el) {\n this.focusTrap = new MkFocusTrap(el);\n this.focusTrap.activate();\n }\n });\n }\n\n private mql?: MediaQueryList;\n private readonly onMediaChange = (e: MediaQueryListEvent): void => {\n this.isMobile.set(e.matches);\n if (!e.matches) this.sidebarOpen.set(false);\n };\n\n ngOnDestroy(): void {\n this.mql?.removeEventListener('change', this.onMediaChange);\n this.focusTrap?.release();\n this.focusTrap = undefined;\n }\n\n /** Toggle the mobile drawer open/closed. Handy for a hamburger button. */\n toggleSidebar(): void {\n this.sidebarOpen.update((v) => !v);\n }\n\n /** Open the mobile drawer. */\n openSidebar(): void {\n this.sidebarOpen.set(true);\n }\n\n /** Close the mobile drawer. */\n closeSidebar(): void {\n this.sidebarOpen.set(false);\n }\n\n /** Toggle the desktop collapsed (icon-only) state. */\n toggleCollapsed(): void {\n this.sidebarCollapsed.update((v) => !v);\n }\n\n protected onSidebarKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.isMobile() && this.sidebarOpen()) {\n event.preventDefault();\n this.closeSidebar();\n }\n }\n}\n","<a class=\"mk-app-shell__skip\" href=\"#mk-app-main\">{{ i18n.skipToContent }}</a>\n\n<header class=\"mk-app-shell__header\" role=\"banner\">\n <ng-content select=\"[mkAppHeader]\" />\n</header>\n\n<div class=\"mk-app-shell__body\">\n <aside\n #sidebar\n class=\"mk-app-shell__sidebar\"\n [attr.role]=\"isMobile() ? 'dialog' : null\"\n [attr.aria-modal]=\"isMobile() && sidebarOpen() ? 'true' : null\"\n [attr.aria-label]=\"isMobile() ? 'Sidebar navigation' : null\"\n [attr.inert]=\"isMobile() && !sidebarOpen() ? '' : null\"\n (keydown)=\"onSidebarKeydown($event)\"\n >\n <nav class=\"mk-app-shell__nav\" [attr.aria-label]=\"i18n.primaryNav\">\n <ng-content select=\"[mkAppSidebar]\" />\n </nav>\n </aside>\n\n @if (isMobile() && sidebarOpen()) {\n <div\n class=\"mk-app-shell__scrim\"\n aria-hidden=\"true\"\n (click)=\"closeSidebar()\"\n ></div>\n }\n\n <main\n id=\"mk-app-main\"\n class=\"mk-app-shell__main\"\n role=\"main\"\n tabindex=\"-1\"\n >\n <ng-content />\n </main>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Sidebar navigation list. Hosts `<mk-nav-item>`s and, when `collapsed`, drives\n * them into an icon-only rail (labels hidden, exposed via `title` tooltips).\n * Designed to sit inside the `mkAppSidebar` slot of `<mk-app-shell>`.\n *\n * ```html\n * <mk-nav-list [collapsed]=\"collapsed()\">\n * <mk-nav-item label=\"Dashboard\" href=\"/\" active>\n * <svg mkNavIcon>…</svg>\n * </mk-nav-item>\n * </mk-nav-list>\n * ```\n */\n@Component({\n selector: 'mk-nav-list',\n templateUrl: './nav-list.html',\n styleUrl: './nav-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-nav-list',\n '[class.mk-nav-list--collapsed]': 'collapsed()',\n },\n})\nexport class MkNavList {\n /** Collapse items to icon-only. Read by descendant `MkNavItem`s. */\n readonly collapsed = input(false, { transform: booleanAttribute });\n}\n","<ul class=\"mk-nav-list__items\" role=\"list\">\n <ng-content />\n</ul>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkNavList } from './nav-list';\n\n/**\n * A single sidebar entry: icon slot (`[mkNavIcon]`), label, optional badge and\n * active state. Renders a link when `href` is set, otherwise a button that\n * emits `action`. If it contains nested `<mk-nav-item>`s it becomes an\n * expandable disclosure (`aria-expanded`). Collapses to an icon in a collapsed\n * list, exposing the label as a tooltip — and because a sub-list can't be shown\n * at rail width, a parent item there emits `action` (navigate) instead of\n * toggling, so it never becomes a dead button.\n *\n * ```html\n * <mk-nav-item label=\"Reports\" active href=\"/reports\" badge=\"3\">\n * <svg mkNavIcon>…</svg>\n * </mk-nav-item>\n * <mk-nav-item label=\"Settings\">\n * <svg mkNavIcon>…</svg>\n * <mk-nav-item label=\"Team\" href=\"/team\" />\n * </mk-nav-item>\n * ```\n */\n@Component({\n selector: 'mk-nav-item',\n templateUrl: './nav-item.html',\n styleUrl: './nav-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n class: 'mk-nav-item',\n role: 'listitem',\n '[class.mk-nav-item--active]': 'active()',\n '[class.mk-nav-item--collapsed]': 'collapsed()',\n '[class.mk-nav-item--has-children]': 'hasChildren()',\n },\n})\nexport class MkNavItem {\n private readonly list = inject(MkNavList, { optional: true });\n\n /** Visible label. Also used as the tooltip when collapsed. */\n readonly label = input('');\n /** Link target. Renders an anchor instead of a button. */\n readonly href = input<string>();\n /** Marks the current page (`aria-current=\"page\"`). */\n readonly active = input(false, { transform: booleanAttribute });\n /** Disable interaction. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Optional badge (count or short text). */\n readonly badge = input<string | number>();\n /** Whether nested children are expanded (two-way). */\n readonly expanded = model(false);\n\n /** Emitted when a button-style item is activated. */\n readonly action = output<void>();\n\n /** Nested items projected inside this one. */\n private readonly children = contentChildren(MkNavItem);\n protected readonly hasChildren = computed(() => this.children().length > 0);\n\n /** Collapsed state inherited from the enclosing `MkNavList`. */\n protected readonly collapsed = computed(() => this.list?.collapsed() ?? false);\n\n /** Id wiring the disclosure button to its sub-list. */\n protected readonly subId = mkUniqueId('mk-nav-sub');\n\n protected toggle(): void {\n if (this.disabled()) return;\n // In a collapsed (icon-rail) list the sub-list cannot be shown, so flipping\n // `expanded` would be an invisible no-op and the item would read as a dead\n // button. Emit `action` instead, letting the host navigate to the section —\n // the same thing a leaf item does. Hosts that don't bind `(action)` on\n // parents simply keep the previous (no-op) behaviour.\n if (this.collapsed()) {\n this.action.emit();\n return;\n }\n this.expanded.update((v) => !v);\n }\n\n protected activate(): void {\n if (this.disabled()) return;\n this.action.emit();\n }\n}\n","<!-- Projected slots captured once: a projection slot belongs to exactly one\n ng-content, so referencing it directly from several @if branches leaves\n all but one branch empty. -->\n<ng-template #iconTpl>\n <span class=\"mk-nav-item__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkNavIcon]\" />\n </span>\n</ng-template>\n\n@if (hasChildren()) {\n <button\n type=\"button\"\n class=\"mk-nav-item__link\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"subId\"\n [attr.title]=\"collapsed() ? label() : null\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconTpl\" />\n <span class=\"mk-nav-item__label\">{{ label() }}</span>\n @if (badge() !== undefined) {\n <span class=\"mk-nav-item__badge\">{{ badge() }}</span>\n }\n <span class=\"mk-nav-item__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </span>\n </button>\n\n <ul\n class=\"mk-nav-item__sub\"\n role=\"list\"\n [id]=\"subId\"\n [attr.hidden]=\"expanded() && !collapsed() ? null : ''\"\n >\n <ng-content select=\"mk-nav-item\" />\n </ul>\n} @else if (href()) {\n <a\n class=\"mk-nav-item__link\"\n [href]=\"href()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"disabled() ? -1 : null\"\n >\n <ng-container [ngTemplateOutlet]=\"iconTpl\" />\n <span class=\"mk-nav-item__label\">{{ label() }}</span>\n @if (badge() !== undefined) {\n <span class=\"mk-nav-item__badge\">{{ badge() }}</span>\n }\n </a>\n} @else {\n <button\n type=\"button\"\n class=\"mk-nav-item__link\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.title]=\"collapsed() ? label() : null\"\n [disabled]=\"disabled()\"\n (click)=\"activate()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconTpl\" />\n <span class=\"mk-nav-item__label\">{{ label() }}</span>\n @if (badge() !== undefined) {\n <span class=\"mk-nav-item__badge\">{{ badge() }}</span>\n }\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkNavList } from './nav-list';\n\n/**\n * A titled section within an `<mk-nav-list>` — the \"MAIN\" / \"SETTINGS\" groupings\n * common in admin/CMS sidebars. Static by default; set `collapsible` to make\n * the label a toggle that expands/collapses its items (`aria-expanded` +\n * region). In a collapsed icon rail the label becomes a divider.\n *\n * ```html\n * <mk-nav-list>\n * <mk-nav-group label=\"Main\">\n * <mk-nav-item label=\"Dashboard\" href=\"/\" />\n * </mk-nav-group>\n * <mk-nav-group label=\"Settings\" collapsible>\n * <mk-nav-item label=\"Team\" href=\"/team\" />\n * </mk-nav-group>\n * </mk-nav-list>\n * ```\n */\n@Component({\n selector: 'mk-nav-group',\n templateUrl: './nav-group.html',\n styleUrl: './nav-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-nav-group',\n role: 'group',\n '[attr.aria-label]': 'label() || null',\n '[class.mk-nav-group--collapsed-rail]': 'railCollapsed()',\n '[class.mk-nav-group--closed]': 'collapsible() && !expanded()',\n },\n})\nexport class MkNavGroup {\n private readonly list = inject(MkNavList, { optional: true });\n\n /** Section title. */\n readonly label = input('');\n /** Make the label a toggle that shows/hides the items. */\n readonly collapsible = input(false, { transform: booleanAttribute });\n /** Whether the section is expanded (two-way; only meaningful when collapsible). */\n readonly expanded = model(true);\n\n /** Id of the items region (for `aria-controls`). */\n readonly regionId = mkUniqueId('mk-nav-group');\n\n /** Whether the enclosing list is a collapsed icon rail. */\n protected readonly railCollapsed = computed(\n () => this.list?.collapsed() ?? false,\n );\n /** Items are visible unless collapsible-and-closed. */\n protected readonly itemsVisible = computed(\n () => !this.collapsible() || this.expanded(),\n );\n\n protected toggle(): void {\n if (this.collapsible()) this.expanded.update((v) => !v);\n }\n}\n","@if (collapsible() && !railCollapsed()) {\n <button\n type=\"button\"\n class=\"mk-nav-group__header mk-nav-group__header--toggle\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"regionId\"\n (click)=\"toggle()\"\n >\n <span class=\"mk-nav-group__label\">{{ label() }}</span>\n <span class=\"mk-nav-group__chevron\" aria-hidden=\"true\"></span>\n </button>\n} @else if (!railCollapsed()) {\n <p class=\"mk-nav-group__header\">\n <span class=\"mk-nav-group__label\">{{ label() }}</span>\n </p>\n}\n\n<div\n class=\"mk-nav-group__items\"\n [id]=\"regionId\"\n [attr.hidden]=\"itemsVisible() ? null : ''\"\n>\n <ng-content />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n booleanAttribute,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\n\n/**\n * A single step + its content panel. Declared inside `<mk-stepper>`; the\n * projected content becomes the step body while `label` (and optional\n * `description`) render in the step header.\n *\n * `completed` is a two-way model so a parent can gate a `linear` stepper:\n * `<mk-step label=\"Details\" [(completed)]=\"detailsValid()\">`.\n *\n * ```html\n * <mk-stepper linear>\n * <mk-step label=\"Account\" [completed]=\"form.valid\">…</mk-step>\n * <mk-step label=\"Payment\" optional>…</mk-step>\n * </mk-stepper>\n * ```\n */\n@Component({\n selector: 'mk-step',\n templateUrl: './step.html',\n styleUrl: './step.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-step',\n },\n})\nexport class MkStep {\n /** Title shown in the step header. */\n readonly label = input('');\n /** Optional secondary line under the label. */\n readonly description = input('');\n /** Marks the step optional (skippable in a `linear` stepper). */\n readonly optional = input(false, { transform: booleanAttribute });\n /** Whether the step is complete (two-way; drives `linear` gating + the ✓). */\n readonly completed = model(false);\n /** Show the error state in the header (e.g. failed validation). */\n readonly hasError = input(false, { transform: booleanAttribute });\n /** Allow returning to this step after it is completed. */\n readonly editable = input(true, { transform: booleanAttribute });\n\n /** Stable id for the header button (wires `aria-labelledby`). */\n readonly headerId = mkUniqueId('mk-step');\n /** Stable id for the panel (wires `aria-controls`). */\n readonly panelId = mkUniqueId('mk-step-panel');\n\n /** Whether this step is currently selected. Set by the parent `MkStepper`. */\n readonly active = signal(false);\n\n /**\n * The step body, captured so `MkStepper` can render it in the position the\n * orientation calls for. The host element itself stays empty — the panel\n * wrapper (and its role/aria) belongs to the stepper, which is the only\n * place that knows whether this is a tab panel or a disclosure region.\n */\n readonly content = viewChild.required(TemplateRef);\n}\n","<!--\n The body is captured as a TEMPLATE rather than projected in place, so the\n parent `MkStepper` can render it wherever the orientation requires — beneath\n the header rail when horizontal, or interleaved directly under its own header\n when vertical. Projecting it here would pin every panel below every header.\n-->\n<ng-template>\n <ng-content />\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { isPlatformServer } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n model,\n output,\n viewChildren,\n} from '@angular/core';\nimport { MkStep } from './step';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** Orientation of the step header rail. */\nexport type MkStepperOrientation = 'horizontal' | 'vertical';\n\n/**\n * Stepper — walks a user through an ordered sequence of `<mk-step>`s with an\n * accessible header rail (ARIA `tablist` + roving tabindex, Arrow/Home/End\n * navigation) and a single visible panel.\n *\n * In `linear` mode a step is only reachable once every preceding required\n * (non-`optional`) step reports `completed`. Drive completion from your form\n * state and move with the `next()` / `previous()` / `reset()` API or by\n * clicking a reachable header.\n *\n * ```html\n * <mk-stepper #s linear [(selectedIndex)]=\"index\">\n * <mk-step label=\"Account\" [completed]=\"accountValid()\">…</mk-step>\n * <mk-step label=\"Address\" [completed]=\"addressValid()\">…</mk-step>\n * <mk-step label=\"Review\">…</mk-step>\n * </mk-stepper>\n * <button mkButton (click)=\"s.previous()\">Back</button>\n * <button mkButton (click)=\"s.next()\">Next</button>\n * ```\n */\n@Component({\n selector: 'mk-stepper',\n imports: [NgTemplateOutlet],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-stepper',\n '[class.mk-stepper--horizontal]': \"orientation() === 'horizontal'\",\n '[class.mk-stepper--vertical]': \"orientation() === 'vertical'\",\n },\n})\nexport class MkStepper {\n protected readonly i18n = inject(MK_I18N);\n /** Step hosts are projected on the server only — see stepper.html. */\n protected readonly isServer = isPlatformServer(inject(PLATFORM_ID));\n\n /** Projected steps, kept live via a signal content query. */\n readonly steps = contentChildren(MkStep);\n /** Rendered header buttons, used to move focus. */\n protected readonly headerButtons =\n viewChildren<ElementRef<HTMLButtonElement>>('stepBtn');\n\n /** Zero-based index of the active step (two-way). */\n readonly selectedIndex = model(0);\n /** Header rail orientation. */\n readonly orientation = input<MkStepperOrientation>('horizontal');\n /** Enforce sequential completion before a step becomes reachable. */\n readonly linear = input(false, { transform: booleanAttribute });\n\n protected readonly isHorizontal = computed(\n () => this.orientation() === 'horizontal',\n );\n\n /** Emits the newly selected index whenever the active step changes. */\n readonly selectionChange = output<number>();\n\n constructor() {\n // Keep each step's `active` flag in sync with the clamped selected index.\n effect(() => {\n const steps = this.steps();\n const index = this.clampedIndex();\n steps.forEach((step, i) => step.active.set(i === index));\n });\n }\n\n private readonly clampedIndex = computed(() => {\n const count = this.steps().length;\n if (count === 0) return 0;\n return Math.min(Math.max(this.selectedIndex(), 0), count - 1);\n });\n\n /** 1-based label for the header circle. */\n protected stepNumber(index: number): number {\n return index + 1;\n }\n\n /**\n * Whether a step can be selected. In linear mode every earlier required step\n * must be completed; a completed step is reachable only when `editable`.\n */\n isReachable(index: number): boolean {\n const steps = this.steps();\n if (index < 0 || index >= steps.length) return false;\n if (!this.linear()) return true;\n if (index <= this.clampedIndex()) {\n // Going back is allowed only to editable steps.\n return steps[index].editable() || index === this.clampedIndex();\n }\n for (let i = 0; i < index; i++) {\n if (!steps[i].optional() && !steps[i].completed()) return false;\n }\n return true;\n }\n\n protected select(index: number): void {\n if (!this.isReachable(index)) return;\n if (index === this.clampedIndex()) return;\n this.selectedIndex.set(index);\n this.selectionChange.emit(index);\n }\n\n protected focusHeader(index: number): void {\n this.headerButtons()[index]?.nativeElement.focus();\n }\n\n /** Advance to the next reachable step, if any. */\n next(): void {\n const from = this.clampedIndex();\n const target = from + 1;\n if (target < this.steps().length && this.isReachable(target)) {\n this.select(target);\n }\n }\n\n /** Return to the previous step, if any. */\n previous(): void {\n const target = this.clampedIndex() - 1;\n if (target >= 0) this.select(target);\n }\n\n /** Reset to the first step and clear every step's completed flag. */\n reset(): void {\n this.steps().forEach((s) => s.completed.set(false));\n this.selectedIndex.set(0);\n this.selectionChange.emit(0);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const count = this.steps().length;\n let next = -1;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextFocusable(index, 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextFocusable(index, -1);\n break;\n case 'Home':\n next = this.nextFocusable(-1, 1);\n break;\n case 'End':\n next = this.nextFocusable(count, -1);\n break;\n default:\n return;\n }\n if (next >= 0) {\n event.preventDefault();\n // Automatic activation (as in `mk-tabs`): selection follows focus for\n // reachable steps. `nextFocusable` already skips unreachable ones, so the\n // guard only matters if the step became unreachable in between.\n this.focusHeader(next);\n if (this.isReachable(next)) this.select(next);\n }\n }\n\n /** Next header index (wrapping) whose step is reachable. */\n private nextFocusable(from: number, step: number): number {\n const count = this.steps().length;\n if (!count) return -1;\n for (let i = 1; i <= count; i++) {\n const idx = (((from + step * i) % count) + count) % count;\n if (this.isReachable(idx)) return idx;\n }\n return -1;\n }\n}\n","<!--\n Steps are content children whose bodies are TEMPLATES (see MkStep), so this\n view decides where each one lands. Horizontal keeps the classic split: one\n header rail, one panel area below it. Vertical INTERLEAVES header and body,\n the way a vertical stepper is expected to read.\n\n The ARIA model differs with it, deliberately. Horizontal is a tablist: tabs\n must be direct children of their tablist, which an interleaved layout cannot\n satisfy. Vertical is therefore a disclosure pattern instead — plain buttons\n with aria-expanded driving labelled regions. Same visuals, both valid.\n\n On the server the step hosts still have to be projected somewhere or the\n serializer has nowhere to put the projected nodes and hydration fails. They\n render empty (the body lives in a template), so this costs nothing visually.\n-->\n@if (isServer) {\n <ng-content />\n}\n\n@if (orientation() === 'horizontal') {\n <div class=\"mk-stepper__header\" role=\"tablist\" aria-orientation=\"horizontal\">\n @for (\n step of steps();\n track step.headerId;\n let i = $index;\n let last = $last\n ) {\n <ng-container\n [ngTemplateOutlet]=\"headerTpl\"\n [ngTemplateOutletContext]=\"{ step: step, i: i }\"\n />\n @if (!last) {\n <span class=\"mk-stepper__connector\" aria-hidden=\"true\"></span>\n }\n }\n </div>\n\n <div class=\"mk-stepper__panels\">\n @for (step of steps(); track step.headerId) {\n <div\n class=\"mk-stepper__panel\"\n role=\"tabpanel\"\n [id]=\"step.panelId\"\n [attr.aria-labelledby]=\"step.headerId\"\n [attr.tabindex]=\"step.active() ? 0 : null\"\n [attr.inert]=\"step.active() ? null : ''\"\n [hidden]=\"!step.active()\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content()\" />\n </div>\n }\n </div>\n} @else {\n @for (\n step of steps();\n track step.headerId;\n let i = $index;\n let last = $last\n ) {\n <div class=\"mk-stepper__row\">\n <ng-container\n [ngTemplateOutlet]=\"headerTpl\"\n [ngTemplateOutletContext]=\"{ step: step, i: i }\"\n />\n <!-- The rule down the side is this wrapper's left border, so it spans the\n expanded body and stops at the last step. -->\n <div\n class=\"mk-stepper__vline\"\n [class.mk-stepper__vline--last]=\"last\"\n [attr.inert]=\"step.active() ? null : ''\"\n >\n <div\n class=\"mk-stepper__panel\"\n role=\"region\"\n [id]=\"step.panelId\"\n [attr.aria-labelledby]=\"step.headerId\"\n [hidden]=\"!step.active()\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content()\" />\n </div>\n </div>\n </div>\n }\n}\n\n<ng-template #headerTpl let-step=\"step\" let-i=\"i\">\n <button\n #stepBtn\n type=\"button\"\n class=\"mk-stepper__step\"\n [class.mk-stepper__step--active]=\"step.active()\"\n [class.mk-stepper__step--completed]=\"step.completed()\"\n [class.mk-stepper__step--error]=\"step.hasError()\"\n [id]=\"step.headerId\"\n [attr.role]=\"isHorizontal() ? 'tab' : null\"\n [attr.aria-controls]=\"step.panelId\"\n [attr.aria-selected]=\"isHorizontal() ? step.active() : null\"\n [attr.aria-posinset]=\"isHorizontal() ? i + 1 : null\"\n [attr.aria-setsize]=\"isHorizontal() ? steps().length : null\"\n [attr.aria-expanded]=\"isHorizontal() ? null : step.active()\"\n [attr.aria-current]=\"!isHorizontal() && step.active() ? 'step' : null\"\n [attr.aria-disabled]=\"!isReachable(i) || null\"\n [attr.tabindex]=\"step.active() ? 0 : -1\"\n [disabled]=\"!isReachable(i)\"\n (click)=\"select(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n <span class=\"mk-stepper__marker\" aria-hidden=\"true\">\n @if (step.hasError()) {\n <span class=\"mk-stepper__bang\">!</span>\n } @else if (step.completed()) {\n <span class=\"mk-stepper__check\"></span>\n } @else {\n {{ stepNumber(i) }}\n }\n </span>\n <span class=\"mk-stepper__labels\">\n <span class=\"mk-stepper__label\">\n {{ step.label() }}\n @if (step.optional()) {\n <span class=\"mk-stepper__optional\">{{ i18n.optional }}</span>\n }\n </span>\n @if (step.description()) {\n <span class=\"mk-stepper__description\">{{ step.description() }}</span>\n }\n </span>\n <!-- The marker above is aria-hidden, so the completed/error state needs a\n textual counterpart for assistive tech. -->\n @if (step.hasError()) {\n <span class=\"mk-visually-hidden\">{{ i18n.stepError }}</span>\n } @else if (step.completed()) {\n <span class=\"mk-visually-hidden\">{{ i18n.stepCompleted }}</span>\n }\n </button>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\n\n/** A node in an {@link MkTree}. `children` makes it expandable. */\nexport interface MkTreeNode {\n /** Text shown for the node. */\n label: string;\n /** Value bound to the selection when the node is chosen (defaults to the node). */\n value?: unknown;\n /** Child nodes; a non-empty array makes the node a parent (expandable). */\n children?: MkTreeNode[];\n /** Disable selection/toggling of this node (still focusable). */\n disabled?: boolean;\n /** Expand this node initially. */\n expanded?: boolean;\n /** Optional leading glyph (any short string / emoji). */\n icon?: string;\n}\n\n/** One visible row after flattening the tree for keyboard + rendering. */\ninterface MkTreeRow {\n node: MkTreeNode;\n level: number;\n posinset: number;\n setsize: number;\n expandable: boolean;\n expanded: boolean;\n}\n\n/**\n * Tree — renders hierarchical data following the ARIA tree pattern\n * (`role=\"tree\"` / `treeitem` with `aria-level`, `aria-expanded`,\n * `aria-selected`). Supply `nodes`; expansion is managed internally.\n *\n * Keyboard: Up/Down move between visible rows, Right expands (or steps into the\n * first child), Left collapses (or steps out to the parent), Home/End jump, and\n * Enter/Space toggles expansion and selects (when `selectable`). A single\n * roving tabindex keeps the whole tree one tab stop.\n *\n * ```html\n * <mk-tree selectable [nodes]=\"tree\" [(selected)]=\"picked\"\n * (selectionChange)=\"onPick($event)\" />\n * ```\n */\n@Component({\n selector: 'mk-tree',\n templateUrl: './tree.html',\n styleUrl: './tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tree',\n },\n})\nexport class MkTree {\n /** The hierarchical data to render. */\n readonly nodes = input<readonly MkTreeNode[]>([]);\n /** Allow choosing a node (adds selection styling + `aria-selected`). */\n readonly selectable = input(false, { transform: booleanAttribute });\n /** Accessible name for the tree. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n /** Two-way selected value (a node's `value`, or the node itself if unset). */\n readonly selected = model<unknown>(null);\n\n /** Emits the selected value whenever the selection changes. */\n readonly selectionChange = output<unknown>();\n /** Emits a node whenever it is expanded or collapsed. */\n readonly nodeToggle = output<MkTreeNode>();\n\n protected readonly rowRefs =\n viewChildren<ElementRef<HTMLElement>>('row');\n\n /**\n * Expanded nodes. Survives `nodes` identity changes (a consumer rebuilding\n * the array keeps the user's expansion state for the node objects it\n * reuses); a node's `expanded` flag only seeds nodes NOT present in the\n * previous array — so it applies on first render and to newly added nodes,\n * without reverting branches the user has since collapsed.\n */\n private readonly expandedSet = linkedSignal<\n readonly MkTreeNode[],\n ReadonlySet<MkTreeNode>\n >({\n source: this.nodes,\n computation: (nodes, previous) => {\n const prevExpanded = previous?.value;\n // Lazily built set of nodes from the previous input — only needed when\n // a node carries `expanded: true` and we must decide whether it is new.\n let prevNodes: Set<MkTreeNode> | null = null;\n const isNewNode = (node: MkTreeNode): boolean => {\n if (!previous) return true;\n if (prevNodes === null) {\n prevNodes = new Set<MkTreeNode>();\n const collect = (list: readonly MkTreeNode[]): void => {\n for (const n of list) {\n prevNodes!.add(n);\n if (n.children?.length) collect(n.children);\n }\n };\n collect(previous.source);\n }\n return !prevNodes.has(node);\n };\n const next = new Set<MkTreeNode>();\n const walk = (list: readonly MkTreeNode[]): void => {\n for (const node of list) {\n if (node.children?.length) {\n if (prevExpanded?.has(node) || (node.expanded && isNewNode(node))) {\n next.add(node);\n }\n walk(node.children);\n }\n }\n };\n walk(nodes);\n return next;\n },\n });\n protected readonly activeIndex = signal(0);\n\n /** Flattened list of currently visible rows (respects expansion). */\n protected readonly rows = computed<MkTreeRow[]>(() => {\n const expanded = this.expandedSet();\n const out: MkTreeRow[] = [];\n const walk = (list: readonly MkTreeNode[], level: number): void => {\n list.forEach((node, i) => {\n const expandable = !!node.children?.length;\n const isExpanded = expandable && expanded.has(node);\n out.push({\n node,\n level,\n posinset: i + 1,\n setsize: list.length,\n expandable,\n expanded: isExpanded,\n });\n if (isExpanded) walk(node.children!, level + 1);\n });\n };\n walk(this.nodes(), 1);\n return out;\n });\n\n private valueOf(node: MkTreeNode): unknown {\n return node.value !== undefined ? node.value : node;\n }\n\n protected isSelected(node: MkTreeNode): boolean {\n return this.selectable() && this.selected() === this.valueOf(node);\n }\n\n protected isExpanded(node: MkTreeNode): boolean {\n return this.expandedSet().has(node);\n }\n\n protected toggle(node: MkTreeNode): void {\n if (node.disabled || !node.children?.length) return;\n const next = new Set(this.expandedSet());\n if (next.has(node)) next.delete(node);\n else next.add(node);\n this.expandedSet.set(next);\n this.nodeToggle.emit(node);\n }\n\n private expand(node: MkTreeNode): void {\n if (node.disabled || !node.children?.length || this.isExpanded(node)) return;\n const next = new Set(this.expandedSet());\n next.add(node);\n this.expandedSet.set(next);\n this.nodeToggle.emit(node);\n }\n\n private collapse(node: MkTreeNode): void {\n if (!this.isExpanded(node)) return;\n const next = new Set(this.expandedSet());\n next.delete(node);\n this.expandedSet.set(next);\n this.nodeToggle.emit(node);\n }\n\n protected select(node: MkTreeNode): void {\n if (!this.selectable() || node.disabled) return;\n const value = this.valueOf(node);\n this.selected.set(value);\n this.selectionChange.emit(value);\n }\n\n /**\n * Click on a parent row's chevron: toggle expansion WITHOUT selecting, so\n * mouse users can open a branch without committing it (hosts like\n * `mk-tree-select` close on any selection, which would make children\n * unreachable by mouse otherwise). On leaf rows the click falls through to\n * the row handler and behaves as a normal row click.\n */\n protected onToggleClick(event: Event, index: number): void {\n const row = this.rows()[index];\n if (!row?.expandable) return;\n event.stopPropagation();\n this.activeIndex.set(index);\n this.toggle(row.node);\n }\n\n /** Click a row: toggle expansion for parents, select when selectable. */\n protected onRowClick(index: number): void {\n const row = this.rows()[index];\n if (!row) return;\n this.activeIndex.set(index);\n if (row.expandable) this.toggle(row.node);\n this.select(row.node);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const rows = this.rows();\n const row = rows[index];\n if (!row) return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusRow(Math.min(index + 1, rows.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.focusRow(Math.max(index - 1, 0));\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (row.expandable && !row.expanded) this.expand(row.node);\n else if (row.expanded) this.focusRow(index + 1);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (row.expandable && row.expanded) this.collapse(row.node);\n else this.focusRow(this.parentIndex(index));\n break;\n case 'Home':\n event.preventDefault();\n this.focusRow(0);\n break;\n case 'End':\n event.preventDefault();\n this.focusRow(rows.length - 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (row.expandable) this.toggle(row.node);\n this.select(row.node);\n break;\n }\n }\n\n /** Index of the nearest preceding row one level up (or the row itself). */\n private parentIndex(index: number): number {\n const rows = this.rows();\n const level = rows[index]?.level ?? 1;\n for (let i = index - 1; i >= 0; i--) {\n if (rows[i].level < level) return i;\n }\n return index;\n }\n\n private focusRow(index: number): void {\n const rows = this.rows();\n if (index < 0 || index >= rows.length) return;\n this.activeIndex.set(index);\n this.rowRefs()[index]?.nativeElement.focus();\n }\n\n protected tabIndexFor(index: number): number {\n const active = Math.min(this.activeIndex(), this.rows().length - 1);\n return index === Math.max(active, 0) ? 0 : -1;\n }\n\n protected indent(level: number): string {\n return `calc(${level - 1} * var(--mk-space-5))`;\n }\n}\n","<div\n class=\"mk-tree__root\"\n role=\"tree\"\n [attr.aria-label]=\"ariaLabel() || null\"\n>\n @for (row of rows(); track row.node; let i = $index) {\n <div\n #row\n class=\"mk-tree__item\"\n role=\"treeitem\"\n [class.mk-tree__item--selected]=\"isSelected(row.node)\"\n [class.mk-tree__item--disabled]=\"row.node.disabled\"\n [attr.aria-level]=\"row.level\"\n [attr.aria-posinset]=\"row.posinset\"\n [attr.aria-setsize]=\"row.setsize\"\n [attr.aria-expanded]=\"row.expandable ? row.expanded : null\"\n [attr.aria-selected]=\"selectable() ? isSelected(row.node) : null\"\n [attr.aria-disabled]=\"row.node.disabled || null\"\n [attr.tabindex]=\"tabIndexFor(i)\"\n [style.padding-inline-start]=\"indent(row.level)\"\n (click)=\"onRowClick(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n <span\n class=\"mk-tree__toggle\"\n aria-hidden=\"true\"\n (click)=\"onToggleClick($event, i)\"\n >\n @if (row.expandable) {\n <span\n class=\"mk-tree__caret\"\n [class.mk-tree__caret--open]=\"row.expanded\"\n ></span>\n }\n </span>\n @if (row.node.icon) {\n <span class=\"mk-tree__icon\" aria-hidden=\"true\">{{ row.node.icon }}</span>\n }\n <span class=\"mk-tree__label\">{{ row.node.label }}</span>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n effect,\n inject,\n input,\n model,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkFocusTrap } from '@mk-kit/ui/core';\n\n/** Edge the drawer slides in from. */\nexport type MkDrawerSide = 'start' | 'end' | 'top' | 'bottom';\n\n/**\n * Drawer — a declarative slide-out panel anchored to a viewport edge, driven by\n * a two-way `open`. Ideal for admin/CMS side panels: filters, entity details,\n * settings, quick-create forms. Traps focus while open, closes on backdrop\n * click or Escape, restores focus on close, and locks body scroll when modal.\n *\n * Slots: `[mkDrawerHeader]` (extra header content), default content (body),\n * `[mkDrawerFooter]` (sticky footer).\n *\n * ```html\n * <button mkButton (click)=\"filters.set(true)\">Filters</button>\n * <mk-drawer [(open)]=\"filters\" side=\"end\" heading=\"Filters\">\n * …filter form…\n * <div mkDrawerFooter>\n * <button mkButton variant=\"ghost\" (click)=\"filters.set(false)\">Close</button>\n * <button mkButton (click)=\"apply()\">Apply</button>\n * </div>\n * </mk-drawer>\n * ```\n */\n@Component({\n selector: 'mk-drawer',\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-drawer',\n '[class.mk-drawer--open]': 'open()',\n '[attr.data-side]': 'side()',\n '[attr.inert]': \"open() ? null : ''\",\n '(keydown.escape)': 'onEscape($event)',\n },\n})\nexport class MkDrawer {\n private readonly document = inject(DOCUMENT);\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly panelRef = viewChild.required<ElementRef<HTMLElement>>('panel');\n\n /** Whether the drawer is open (two-way). */\n readonly open = model(false);\n /** Viewport edge to anchor to. */\n readonly side = input<MkDrawerSide>('end');\n /** Panel width (start/end) or height (top/bottom) — any CSS length. */\n readonly size = input<string>('20rem');\n /** Render a dimmed backdrop and lock body scroll (modal). */\n readonly hasBackdrop = input(true, { transform: booleanAttribute });\n /** Close when the backdrop is clicked. */\n readonly closeOnBackdrop = input(true, { transform: booleanAttribute });\n /** Close on the Escape key. */\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n /** Trap Tab focus inside the panel while open. */\n readonly trapFocus = input(true, { transform: booleanAttribute });\n /** Optional heading rendered in the header. */\n readonly heading = input<string>('');\n /** Hide the header close button. */\n readonly hideClose = input(false, { transform: booleanAttribute });\n /** Accessible name when no `heading` is provided. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n\n readonly titleId = mkUniqueId('mk-drawer-title');\n\n private focusTrap?: MkFocusTrap;\n private previouslyFocused: HTMLElement | null = null;\n private scrollLocked = false;\n\n constructor() {\n effect(() => {\n const isOpen = this.open();\n if (!this.isBrowser) return;\n // Defer so the panel has rendered/settled before focus moves into it.\n queueMicrotask(() => this.sync(isOpen));\n });\n }\n\n private sync(isOpen: boolean): void {\n const panel = this.panelRef().nativeElement;\n if (isOpen) {\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\n if (this.trapFocus()) {\n this.focusTrap = new MkFocusTrap(panel);\n this.focusTrap.activate();\n }\n if (this.hasBackdrop() && !this.scrollLocked) {\n this.document.body.style.setProperty('overflow', 'hidden');\n this.scrollLocked = true;\n }\n } else {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n this.previouslyFocused?.focus?.();\n }\n }\n\n /** Release the focus trap + scroll lock if destroyed while open. */\n ngOnDestroy(): void {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n }\n\n /** Close the drawer. */\n close(): void {\n this.open.set(false);\n }\n\n protected onBackdrop(): void {\n if (this.closeOnBackdrop()) this.close();\n }\n\n protected onEscape(event: Event): void {\n if (this.open() && this.closeOnEscape()) {\n event.stopPropagation();\n this.close();\n }\n }\n}\n","@if (hasBackdrop()) {\n <div class=\"mk-drawer__backdrop\" (click)=\"onBackdrop()\"></div>\n}\n\n<aside\n #panel\n class=\"mk-drawer__panel\"\n role=\"dialog\"\n [attr.aria-modal]=\"hasBackdrop() ? 'true' : null\"\n [attr.aria-label]=\"!heading() ? ariaLabel() || null : null\"\n [attr.aria-labelledby]=\"heading() ? titleId : null\"\n [style.--_size]=\"size()\"\n tabindex=\"-1\"\n>\n @if (heading() || !hideClose()) {\n <header class=\"mk-drawer__header\">\n @if (heading(); as h) {\n <h2 class=\"mk-drawer__title\" [id]=\"titleId\">{{ h }}</h2>\n }\n <ng-content select=\"[mkDrawerHeader]\" />\n @if (!hideClose()) {\n <button\n type=\"button\"\n class=\"mk-drawer__close\"\n [attr.aria-label]=\"i18n.close\"\n (click)=\"close()\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n }\n </header>\n }\n\n <div class=\"mk-drawer__body\">\n <ng-content />\n </div>\n\n <footer class=\"mk-drawer__footer\">\n <ng-content select=\"[mkDrawerFooter]\" />\n </footer>\n</aside>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Toolbar — a horizontal action bar: content flows on the start side, anything\n * marked `mkToolbarEnd` is pushed to the end. Handy above tables and lists for\n * a title/search on the left and actions on the right.\n *\n * The projected controls are ordinary tab stops (no roving focus), so this is a\n * layout container, not an ARIA `toolbar` widget.\n *\n * ```html\n * <mk-toolbar bordered aria-label=\"Users actions\">\n * <strong>Users</strong>\n * <span mkToolbarEnd>\n * <button mkButton variant=\"outline\">Export</button>\n * <button mkButton>New user</button>\n * </span>\n * </mk-toolbar>\n * ```\n */\n@Component({\n selector: 'mk-toolbar',\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-toolbar',\n '[class.mk-toolbar--bordered]': 'bordered()',\n '[attr.role]': \"ariaLabel() ? 'group' : null\",\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n})\nexport class MkToolbar {\n /** Wrap the bar in a themed, bordered surface. */\n readonly bordered = input(false, { transform: booleanAttribute });\n /** Accessible name (also promotes the bar to an ARIA `group`). */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n}\n","<div class=\"mk-toolbar__start\">\n <ng-content />\n</div>\n<div class=\"mk-toolbar__end\">\n <ng-content select=\"[mkToolbarEnd]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core';\n\n/**\n * PageHeader — the standard heading block at the top of an admin/CMS page: an\n * optional breadcrumb, a page title with optional description and inline meta\n * (badges/status), a right-aligned actions cluster, and an optional tab row\n * beneath. Everything but the title/description is projected, so it composes\n * with `mk-breadcrumb`, `mk-tabs`, buttons, badges, etc.\n *\n * Slots: `[mkPageHeaderBreadcrumb]`, `[mkPageHeaderMeta]` (beside the title),\n * `[mkPageHeaderActions]` (right), `[mkPageHeaderTabs]` (below).\n *\n * ```html\n * <mk-page-header heading=\"Articles\" description=\"Manage your published posts.\">\n * <mk-breadcrumb mkPageHeaderBreadcrumb …></mk-breadcrumb>\n * <mk-badge mkPageHeaderMeta tone=\"success\">Live</mk-badge>\n * <div mkPageHeaderActions>\n * <button mkButton variant=\"outline\">Import</button>\n * <button mkButton>New article</button>\n * </div>\n * </mk-page-header>\n * ```\n */\n@Component({\n selector: 'mk-page-header',\n templateUrl: './page-header.html',\n styleUrl: './page-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'mk-page-header' },\n})\nexport class MkPageHeader {\n /** The page title (rendered as an `<h1>`). */\n readonly heading = input<string>('');\n /** Supporting description under the title. */\n readonly description = input<string>('');\n}\n","<div class=\"mk-page-header__breadcrumb\">\n <ng-content select=\"[mkPageHeaderBreadcrumb]\" />\n</div>\n\n<div class=\"mk-page-header__main\">\n <div class=\"mk-page-header__media\">\n <ng-content select=\"[mkPageHeaderMedia]\" />\n </div>\n <div class=\"mk-page-header__heading\">\n <div class=\"mk-page-header__title-row\">\n @if (heading(); as h) {\n <h1 class=\"mk-page-header__title\">{{ h }}</h1>\n }\n <div class=\"mk-page-header__meta\">\n <ng-content select=\"[mkPageHeaderMeta]\" />\n </div>\n </div>\n @if (description(); as d) {\n <p class=\"mk-page-header__description\">{{ d }}</p>\n }\n </div>\n\n <div class=\"mk-page-header__actions\">\n <ng-content select=\"[mkPageHeaderActions]\" />\n </div>\n</div>\n\n<div class=\"mk-page-header__tabs\">\n <ng-content select=\"[mkPageHeaderTabs]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkFocusTrap } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkIcon } from '@mk-kit/ui/icon';\n\n/** A single actionable entry in the {@link MkCommandPalette}. */\nexport interface MkCommand {\n /** Stable unique id. */\n id: string;\n /** Text shown (and the primary search target). */\n label: string;\n /** Optional section heading this command is grouped under. */\n group?: string;\n /** Secondary text shown after the label. */\n hint?: string;\n /** Name of a registered icon (see `MkIconRegistry`). */\n icon?: string;\n /** Extra search terms (not shown). */\n keywords?: string;\n /** Display-only shortcut hint, e.g. `⌘S`. */\n shortcut?: string;\n /** Disable the command (skipped by keyboard, not runnable). */\n disabled?: boolean;\n /** Invoked when the command is chosen. */\n run?: () => void;\n}\n\ninterface Group {\n name: string;\n items: { cmd: MkCommand; index: number }[];\n}\n\n/**\n * CommandPalette — a modal ⌘K/Ctrl+K menu for fast, keyboard-first actions and\n * navigation. Supply a flat `commands` list (optionally grouped); the palette\n * filters as you type, groups results, and runs the chosen command. Implements\n * the ARIA combobox + listbox pattern with full keyboard support and focus\n * trapping.\n *\n * Mount it once near your app root and bind `open` (the built-in hotkey toggles\n * it, or open it yourself).\n *\n * ```html\n * <mk-command-palette [(open)]=\"paletteOpen\" [commands]=\"commands\"\n * (commandSelected)=\"run($event)\" />\n * ```\n */\n@Component({\n selector: 'mk-command-palette',\n templateUrl: './command-palette.html',\n styleUrl: './command-palette.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkIcon, NgTemplateOutlet],\n host: {\n class: 'mk-command-palette',\n '[class.mk-command-palette--open]': 'open()',\n '[attr.inert]': \"open() ? null : ''\",\n '(document:keydown)': 'onGlobalKey($event)',\n },\n})\nexport class MkCommandPalette {\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n protected readonly i18n = inject(MK_I18N);\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Whether the palette is open (two-way). */\n readonly open = model(false);\n /** The commands to search and run. */\n readonly commands = input<readonly MkCommand[]>([]);\n /** Search field placeholder. */\n readonly placeholder = input(this.i18n.commandPalettePlaceholder);\n /** Message shown when nothing matches. */\n readonly emptyMessage = input(this.i18n.noResults);\n /** Toggle open with ⌘K / Ctrl+K anywhere. */\n readonly hotkey = input(true, { transform: booleanAttribute });\n\n /** Emits the chosen command (its own `run` callback also fires). */\n readonly commandSelected = output<MkCommand>();\n\n protected readonly query = signal('');\n protected readonly activeIndex = signal(0);\n readonly listId = mkUniqueId('mk-cmdk-list');\n\n private focusTrap?: MkFocusTrap;\n private scrollLocked = false;\n private previouslyFocused: HTMLElement | null = null;\n\n /** Commands matching the current query (label + keywords + group). */\n protected readonly filtered = computed<readonly MkCommand[]>(() => {\n const q = this.query().trim().toLowerCase();\n const list = this.commands();\n if (!q) return list;\n return list.filter((c) =>\n `${c.label} ${c.keywords ?? ''} ${c.group ?? ''}`\n .toLowerCase()\n .includes(q),\n );\n });\n\n /** Filtered commands bucketed into ordered groups (flat index preserved). */\n protected readonly grouped = computed<Group[]>(() => {\n const groups: Group[] = [];\n this.filtered().forEach((cmd, index) => {\n const name = cmd.group ?? '';\n let g = groups.find((x) => x.name === name);\n if (!g) {\n g = { name, items: [] };\n groups.push(g);\n }\n g.items.push({ cmd, index });\n });\n return groups;\n });\n\n constructor() {\n effect(() => {\n const isOpen = this.open();\n if (!this.isBrowser) return;\n queueMicrotask(() => this.sync(isOpen));\n });\n // Keep the active option visible while the list scrolls under 70vh.\n // Synchronous on purpose: on an index change the option elements already\n // exist, and the getElementById chain no-ops for the open-with-index-0\n // case where the list has not rendered yet. (A queueMicrotask here raced\n // test schedulers and bought nothing.)\n effect(() => {\n const index = this.activeIndex();\n if (!this.isBrowser || !this.open() || index < 0) return;\n this.document\n .getElementById(this.optionId(index))\n ?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected groupId(index: number): string {\n return `${this.listId}-group-${index}`;\n }\n\n private sync(isOpen: boolean): void {\n const panel = this.panelRef()?.nativeElement;\n if (isOpen) {\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\n this.query.set('');\n this.activeIndex.set(this.firstEnabled());\n this.document.body.style.setProperty('overflow', 'hidden');\n this.scrollLocked = true;\n if (panel) {\n this.focusTrap = new MkFocusTrap(panel);\n this.focusTrap.activate();\n }\n this.inputRef()?.nativeElement.focus();\n } else {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n this.previouslyFocused?.focus?.();\n }\n }\n\n /**\n * Release the scroll lock + focus trap if the palette is destroyed while\n * open (e.g. a command triggered a route navigation).\n */\n ngOnDestroy(): void {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n }\n\n protected onGlobalKey(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.hotkey() && (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n this.open.update((v) => !v);\n }\n }\n\n protected onInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(this.firstEnabled());\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.select(this.activeIndex());\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n }\n }\n\n protected select(index: number): void {\n const cmd = this.filtered()[index];\n if (!cmd || cmd.disabled) return;\n this.commandSelected.emit(cmd);\n cmd.run?.();\n this.close();\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n private move(delta: number): void {\n const list = this.filtered();\n if (!list.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < list.length; step++) {\n i = (i + delta + list.length) % list.length;\n if (!list[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.filtered().findIndex((c) => !c.disabled);\n }\n\n private lastEnabled(): number {\n const list = this.filtered();\n for (let i = list.length - 1; i >= 0; i--) {\n if (!list[i].disabled) return i;\n }\n return -1;\n }\n}\n","<div class=\"mk-cmdk__backdrop\" (click)=\"close()\"></div>\n\n<div\n #panel\n class=\"mk-cmdk__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"i18n.commandPaletteLabel\"\n>\n <div class=\"mk-cmdk__search\">\n <mk-icon class=\"mk-cmdk__search-icon\" name=\"search\" [size]=\"18\" />\n <input\n #input\n type=\"text\"\n class=\"mk-cmdk__input\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-expanded=\"true\"\n [attr.aria-controls]=\"listId\"\n aria-autocomplete=\"list\"\n [attr.aria-activedescendant]=\"\n activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <ul class=\"mk-cmdk__list\" [id]=\"listId\" role=\"listbox\">\n @for (group of grouped(); track group.name; let gi = $index) {\n @if (group.name) {\n <li\n class=\"mk-cmdk__group-section\"\n role=\"group\"\n [attr.aria-labelledby]=\"groupId(gi)\"\n >\n <div class=\"mk-cmdk__group\" [id]=\"groupId(gi)\">{{ group.name }}</div>\n <ul class=\"mk-cmdk__group-items\" role=\"none\">\n @for (entry of group.items; track entry.cmd.id) {\n <ng-container\n [ngTemplateOutlet]=\"optionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n </ul>\n </li>\n } @else {\n @for (entry of group.items; track entry.cmd.id) {\n <ng-container\n [ngTemplateOutlet]=\"optionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n }\n } @empty {\n <li class=\"mk-cmdk__empty\">{{ emptyMessage() }}</li>\n }\n </ul>\n\n <div class=\"mk-cmdk__sr\" role=\"status\">\n {{ i18n.resultsCount(filtered().length) }}\n </div>\n</div>\n\n<ng-template #optionTpl let-entry>\n <li\n class=\"mk-cmdk__option\"\n [id]=\"optionId(entry.index)\"\n role=\"option\"\n [attr.aria-selected]=\"entry.index === activeIndex()\"\n [attr.aria-disabled]=\"entry.cmd.disabled || null\"\n [class.mk-cmdk__option--active]=\"entry.index === activeIndex()\"\n [class.mk-cmdk__option--disabled]=\"entry.cmd.disabled\"\n (mousemove)=\"!entry.cmd.disabled && activeIndex.set(entry.index)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(entry.index)\"\n >\n @if (entry.cmd.icon) {\n <mk-icon class=\"mk-cmdk__option-icon\" [name]=\"entry.cmd.icon\" [size]=\"18\" />\n }\n <span class=\"mk-cmdk__option-label\">\n {{ entry.cmd.label }}\n @if (entry.cmd.hint) {\n <span class=\"mk-cmdk__option-hint\">{{ entry.cmd.hint }}</span>\n }\n </span>\n @if (entry.cmd.shortcut) {\n <kbd class=\"mk-cmdk__shortcut\">{{ entry.cmd.shortcut }}</kbd>\n }\n </li>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n} from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** Split direction for {@link MkSplitter}. */\nexport type MkSplitterOrientation = 'horizontal' | 'vertical';\n\n/**\n * Splitter — two resizable panes with a draggable, keyboard-operable separator\n * (ARIA `separator` with `aria-valuenow`). `horizontal` places the panes\n * side-by-side (a vertical handle); `vertical` stacks them (a horizontal\n * handle). The start pane's size is a two-way `position` model (percent).\n *\n * Project the panes with `mkSplitterStart` / `mkSplitterEnd`:\n * ```html\n * <mk-splitter [(position)]=\"split\" [min]=\"20\">\n * <nav mkSplitterStart>…</nav>\n * <main mkSplitterEnd>…</main>\n * </mk-splitter>\n * ```\n * Drag the handle, or focus it and use Arrow keys (Home/End jump to min/max).\n */\n@Component({\n selector: 'mk-splitter',\n templateUrl: './splitter.html',\n styleUrl: './splitter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-splitter',\n '[class.mk-splitter--vertical]': \"orientation() === 'vertical'\",\n '[class.mk-splitter--disabled]': 'disabled()',\n },\n})\nexport class MkSplitter {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly i18n = inject(MK_I18N);\n\n /** `horizontal` = side-by-side; `vertical` = stacked. */\n readonly orientation = input<MkSplitterOrientation>('horizontal');\n /** Two-way position of the separator = start-pane size, in percent (0–100). */\n readonly position = model(50);\n /** Minimum start-pane size (percent). */\n readonly min = input(10, { transform: numberAttribute });\n /** Maximum start-pane size (percent). */\n readonly max = input(90, { transform: numberAttribute });\n /** Keyboard resize increment (percent). */\n readonly step = input(5, { transform: numberAttribute });\n /** Disable resizing. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Accessible label for the separator. */\n readonly ariaLabel = input(this.i18n.resizePanes);\n\n private dragging = false;\n\n /** Clamped size actually applied (defends against out-of-range inputs). */\n protected readonly clampedSize = computed(() =>\n Math.min(this.max(), Math.max(this.min(), this.position())),\n );\n\n protected onPointerdown(event: PointerEvent): void {\n if (this.disabled() || event.button !== 0) return;\n event.preventDefault();\n this.dragging = true;\n try {\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n }\n\n protected onPointermove(event: PointerEvent): void {\n if (!this.dragging) return;\n const rect = this.host.nativeElement.getBoundingClientRect();\n const pct =\n this.orientation() === 'vertical'\n ? ((event.clientY - rect.top) / rect.height) * 100\n : ((event.clientX - rect.left) / rect.width) * 100;\n this.setSize(pct);\n }\n\n protected onPointerup(event: PointerEvent): void {\n if (!this.dragging) return;\n this.dragging = false;\n (event.target as HTMLElement).releasePointerCapture?.(event.pointerId);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n const vertical = this.orientation() === 'vertical';\n const dec = vertical ? 'ArrowUp' : 'ArrowLeft';\n const inc = vertical ? 'ArrowDown' : 'ArrowRight';\n switch (event.key) {\n case dec:\n event.preventDefault();\n this.setSize(this.clampedSize() - this.step());\n break;\n case inc:\n event.preventDefault();\n this.setSize(this.clampedSize() + this.step());\n break;\n case 'Home':\n event.preventDefault();\n this.setSize(this.min());\n break;\n case 'End':\n event.preventDefault();\n this.setSize(this.max());\n break;\n }\n }\n\n private setSize(pct: number): void {\n const next = Math.round(Math.min(this.max(), Math.max(this.min(), pct)));\n if (next !== this.position()) this.position.set(next);\n }\n}\n","<div class=\"mk-splitter__pane mk-splitter__pane--start\" [style.flex-basis.%]=\"clampedSize()\">\n <ng-content select=\"[mkSplitterStart]\" />\n</div>\n\n<div\n class=\"mk-splitter__separator\"\n role=\"separator\"\n tabindex=\"0\"\n [attr.aria-orientation]=\"orientation() === 'vertical' ? 'horizontal' : 'vertical'\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuenow]=\"clampedSize()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (pointerdown)=\"onPointerdown($event)\"\n (pointermove)=\"onPointermove($event)\"\n (pointerup)=\"onPointerup($event)\"\n (pointercancel)=\"onPointerup($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"mk-splitter__grip\" aria-hidden=\"true\"></span>\n</div>\n\n<div class=\"mk-splitter__pane mk-splitter__pane--end\">\n <ng-content select=\"[mkSplitterEnd]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\n\n/** Corner placement for a fixed {@link MkFab}. `static` renders it inline. */\nexport type MkFabPosition =\n | 'bottom-end'\n | 'bottom-start'\n | 'top-end'\n | 'top-start'\n | 'static';\n\n/** A speed-dial action button projected into {@link MkFab}. */\n@Directive({\n selector: '[mkFabAction]',\n host: { class: 'mk-fab__action', type: 'button' },\n})\nexport class MkFabAction {\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * FAB — a floating action button, fixed to a corner (or `static` for inline\n * use). Project the icon as content and set `label` for the accessible name\n * (shown too when `extended`). Add `mkFabAction` buttons to turn it into a\n * speed-dial that reveals them on toggle.\n *\n * ```html\n * <mk-fab label=\"Create\" position=\"bottom-end\">\n * <svg>…</svg>\n * <button mkFabAction (click)=\"newDoc()\">Doc</button>\n * <button mkFabAction (click)=\"newFolder()\">Folder</button>\n * </mk-fab>\n * ```\n */\n@Component({\n selector: 'mk-fab',\n templateUrl: './fab.html',\n styleUrl: './fab.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-fab',\n '[attr.data-position]': 'position()',\n '[class.mk-fab--extended]': 'extended()',\n '[class.mk-fab--open]': 'open()',\n },\n})\nexport class MkFab {\n private readonly actions = contentChildren(MkFabAction);\n private readonly trigger =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly injector = inject(Injector);\n protected readonly i18n = inject(MK_I18N);\n\n /** Id of the actions container, referenced by the trigger's aria-controls. */\n protected readonly actionsId = mkUniqueId('mk-fab-actions');\n\n /** Corner placement (or `static` to render inline). */\n readonly position = input<MkFabPosition>('bottom-end');\n /** Semantic tone. */\n readonly tone = input<MkTone>('primary');\n /** Size scale. */\n readonly size = input<MkSize>('md');\n /** Accessible label (and visible text when `extended`). */\n readonly label = input(this.i18n.fabLabel);\n /** Render as a pill with the label beside the icon. */\n readonly extended = input(false, { transform: booleanAttribute });\n /** Disable the button. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Two-way open state of the speed-dial. */\n readonly open = model(false);\n\n /** Emitted when the FAB is activated (only when it has no actions). */\n readonly action = output<void>();\n\n protected readonly hasActions = computed(() => this.actions().length > 0);\n\n protected onClick(): void {\n if (this.disabled()) return;\n if (this.hasActions()) {\n const opening = !this.open();\n this.open.set(opening);\n if (opening) {\n // The actions container un-hides on the next render (zoneless);\n // only then can the first action receive focus.\n afterNextRender(\n () => this.actions()[0]?.el.nativeElement.focus(),\n { injector: this.injector },\n );\n }\n } else {\n this.action.emit();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault();\n this.open.set(false);\n // Focus may sit on an action inside the now-hidden container —\n // return it to the trigger instead of letting it drop to <body>.\n this.trigger()?.nativeElement.focus();\n }\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"mk-fab__button\"\n [attr.data-tone]=\"tone()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"hasActions() ? open() : null\"\n [attr.aria-controls]=\"hasActions() ? actionsId : null\"\n [disabled]=\"disabled()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"mk-fab__icon\"><ng-content /></span>\n @if (extended()) {\n <span class=\"mk-fab__label\">{{ label() }}</span>\n }\n</button>\n\n<!-- After the trigger in DOM so Tab reaches the revealed actions next;\n the visual stacking is restored with flex column-reverse in fab.scss. -->\n<div\n class=\"mk-fab__actions\"\n [id]=\"actionsId\"\n [attr.hidden]=\"hasActions() && open() ? null : ''\"\n (keydown)=\"onKeydown($event)\"\n>\n <ng-content select=\"[mkFabAction]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n PLATFORM_ID,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/**\n * BackToTop — a floating button that appears once the page (or a scroll target)\n * has scrolled past `threshold`, and smooth-scrolls back to the top on click.\n *\n * ```html\n * <mk-back-to-top [threshold]=\"600\" />\n * ```\n * Pass `[target]` to watch/scroll a specific scroll container instead of the\n * window.\n */\n@Component({\n selector: 'mk-back-to-top',\n templateUrl: './back-to-top.html',\n styleUrl: './back-to-top.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-back-to-top',\n '[class.mk-back-to-top--visible]': 'visible()',\n '[attr.hidden]': 'visible() ? null : \"\"',\n },\n})\nexport class MkBackToTop {\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n protected readonly i18n = inject(MK_I18N);\n\n /** Scroll distance (px) before the button appears. */\n readonly threshold = input(400);\n /** Optional scroll container; defaults to the window. */\n readonly target = input<HTMLElement | null>(null);\n /** Accessible label. */\n readonly ariaLabel = input(this.i18n.backToTop);\n /**\n * Smooth-scroll on click. Ignored under `prefers-reduced-motion: reduce`\n * (programmatic `scrollTo` is not toned down by browsers, so the component\n * falls back to an instant jump itself).\n */\n readonly smooth = input(true, { transform: booleanAttribute });\n\n private readonly scrollY = signal(0);\n protected readonly visible = computed(() => this.scrollY() > this.threshold());\n\n private scrollSource?: EventTarget;\n\n private readonly onScroll = (): void => {\n const el = this.target();\n this.scrollY.set(\n el\n ? el.scrollTop\n : (this.document.defaultView?.scrollY ??\n this.document.documentElement.scrollTop),\n );\n };\n\n constructor() {\n // afterNextRender runs after inputs are bound, so `target()` is resolved.\n afterNextRender(() => {\n if (!this.isBrowser) return;\n this.scrollSource = this.target() ?? this.document.defaultView ?? undefined;\n this.scrollSource?.addEventListener('scroll', this.onScroll, {\n passive: true,\n });\n this.onScroll();\n });\n }\n\n protected scrollToTop(): void {\n const el = this.target();\n const behavior: ScrollBehavior =\n this.smooth() && !this.prefersReducedMotion() ? 'smooth' : 'auto';\n if (el) {\n el.scrollTo({ top: 0, behavior });\n this.focusScrollTarget(el);\n } else {\n this.document.defaultView?.scrollTo({ top: 0, behavior });\n const doc = (this.document.scrollingElement ??\n this.document.documentElement) as HTMLElement | null;\n if (doc) this.focusScrollTarget(doc);\n }\n }\n\n /**\n * Once the page is back at the top the button hides itself, which would\n * silently drop keyboard focus on `<body>` (WCAG 2.4.3). Move focus to the\n * scroll container instead, so the tab sequence resumes from the top.\n */\n private focusScrollTarget(el: HTMLElement): void {\n if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '-1');\n el.focus({ preventScroll: true });\n }\n\n /** `prefers-reduced-motion: reduce`, SSR-safe. */\n private prefersReducedMotion(): boolean {\n const win = this.document.defaultView;\n return (\n !!win &&\n typeof win.matchMedia === 'function' &&\n win.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n }\n\n ngOnDestroy(): void {\n this.scrollSource?.removeEventListener('scroll', this.onScroll);\n }\n}\n","<button\n type=\"button\"\n class=\"mk-back-to-top__button\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"scrollToTop()\"\n>\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 19V5M5 12l7-7 7 7\" />\n </svg>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n afterNextRender,\n computed,\n inject,\n input,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\n\n/** Which axes get a custom scrollbar for {@link MkScrollArea}. */\nexport type MkScrollAreaOrientation = 'vertical' | 'horizontal' | 'both';\n\ntype Axis = 'vertical' | 'horizontal';\n\n/**\n * ScrollArea — a scroll container that hides the native scrollbar and renders\n * its own themed overlay bars (à la Radix ScrollArea). The projected content\n * scrolls inside a real, keyboard-focusable viewport, so native wheel / arrow\n * scrolling keeps working; the custom bars are decorative (`aria-hidden`) and\n * draggable.\n *\n * ```html\n * <mk-scroll-area maxHeight=\"20rem\">\n * <p>…lots of content…</p>\n * </mk-scroll-area>\n * ```\n *\n * Set `orientation` to `horizontal` / `both` for a horizontal bar, and\n * `hideDelay` to auto-hide the bars after inactivity (`0` = always visible).\n */\n@Component({\n selector: 'mk-scroll-area',\n templateUrl: './scroll-area.html',\n styleUrl: './scroll-area.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-scroll-area',\n '(mouseenter)': 'onEnter()',\n '(mouseleave)': 'onLeave()',\n },\n})\nexport class MkScrollArea {\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly viewportRef =\n viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly contentRef =\n viewChild.required<ElementRef<HTMLElement>>('content');\n\n /** Optional CSS max-height for the viewport, e.g. `'20rem'`. */\n readonly maxHeight = input<string>('');\n /**\n * Accessible name for the scrollable viewport. When set, the viewport is\n * exposed as a labelled `region` landmark — recommended, since the viewport\n * is keyboard-focusable (`tabindex=\"0\"`) and a focusable scroll container\n * should have an accessible name. When empty, no role / label is added.\n */\n readonly ariaLabel = input<string>('');\n /** Which axes render a custom bar. */\n readonly orientation = input<MkScrollAreaOrientation>('vertical');\n /** Auto-hide the bars after this many ms of inactivity (`0` = always on). */\n readonly hideDelay = input(1000, { transform: numberAttribute });\n\n protected readonly viewportId = mkUniqueId('mk-scroll-area');\n\n // Live viewport metrics, mirrored into signals so the thumbs recompute.\n protected readonly scrollTop = signal(0);\n protected readonly scrollLeft = signal(0);\n protected readonly scrollHeight = signal(0);\n protected readonly scrollWidth = signal(0);\n protected readonly clientHeight = signal(0);\n protected readonly clientWidth = signal(0);\n\n protected readonly showVertical = computed(\n () => this.orientation() !== 'horizontal',\n );\n protected readonly showHorizontal = computed(\n () => this.orientation() !== 'vertical',\n );\n\n /** The viewport actually overflows on the given axis. */\n protected readonly vScrollable = computed(\n () => this.scrollHeight() - this.clientHeight() > 1,\n );\n protected readonly hScrollable = computed(\n () => this.scrollWidth() - this.clientWidth() > 1,\n );\n\n /** Thumb length as a fraction of the track (`clientHeight / scrollHeight`). */\n protected readonly vThumbSize = computed(() => {\n const sh = this.scrollHeight();\n return sh > 0 ? Math.min(1, this.clientHeight() / sh) : 0;\n });\n protected readonly hThumbSize = computed(() => {\n const sw = this.scrollWidth();\n return sw > 0 ? Math.min(1, this.clientWidth() / sw) : 0;\n });\n\n /** Thumb position as a fraction of the scroll range (0 = start, 1 = end). */\n protected readonly vThumbOffset = computed(() => {\n const range = this.scrollHeight() - this.clientHeight();\n return range > 0 ? Math.min(1, Math.max(0, this.scrollTop() / range)) : 0;\n });\n protected readonly hThumbOffset = computed(() => {\n const range = this.scrollWidth() - this.clientWidth();\n return range > 0 ? Math.min(1, Math.max(0, this.scrollLeft() / range)) : 0;\n });\n\n /** CSS `top` / `left` for the thumb, accounting for its own length. */\n protected readonly vThumbTop = computed(\n () => `calc((100% - ${this.vThumbSize() * 100}%) * ${this.vThumbOffset()})`,\n );\n protected readonly hThumbLeft = computed(\n () => `calc((100% - ${this.hThumbSize() * 100}%) * ${this.hThumbOffset()})`,\n );\n\n private readonly _visible = signal(false);\n /** Whether the bars are currently shown (always true when `hideDelay` is 0). */\n protected readonly barsVisible = computed(\n () => this.hideDelay() === 0 || this._visible(),\n );\n\n private dragAxis: Axis | null = null;\n private dragStartPointer = 0;\n private dragStartScroll = 0;\n private hideTimer?: ReturnType<typeof setTimeout>;\n private resizeObserver?: ResizeObserver;\n private scrollRaf: number | null = null;\n\n constructor() {\n // Runs after the first render (inputs bound, view children resolved).\n afterNextRender(() => {\n if (!this.isBrowser) return;\n this.measure();\n const view = this.viewportRef().nativeElement;\n const content = this.contentRef().nativeElement;\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => this.measure());\n this.resizeObserver.observe(view);\n this.resizeObserver.observe(content);\n }\n });\n }\n\n /** Snapshot the viewport's scroll metrics into signals. */\n private measure(): void {\n const view = this.viewportRef().nativeElement;\n this.scrollTop.set(view.scrollTop);\n this.scrollLeft.set(view.scrollLeft);\n this.scrollHeight.set(view.scrollHeight);\n this.scrollWidth.set(view.scrollWidth);\n this.clientHeight.set(view.clientHeight);\n this.clientWidth.set(view.clientWidth);\n }\n\n /**\n * rAF-coalesced (same pattern as `MkScrollspy`): a burst of scroll events\n * per frame triggers a single batch of layout reads + signal writes, and the\n * auto-hide idle timer restarts once per flushed frame rather than per raw\n * event.\n */\n protected onScroll(): void {\n if (!this.isBrowser || this.scrollRaf != null) return;\n this.scrollRaf = requestAnimationFrame(() => {\n this.scrollRaf = null;\n this.measure();\n this.show();\n this.scheduleHide();\n });\n }\n\n protected onEnter(): void {\n this.show();\n }\n\n protected onLeave(): void {\n this.scheduleHide();\n }\n\n // --- Thumb dragging -------------------------------------------------------\n\n protected onThumbPointerdown(event: PointerEvent, axis: Axis): void {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation(); // don't let the track handler page as well\n const view = this.viewportRef().nativeElement;\n this.dragAxis = axis;\n if (axis === 'vertical') {\n this.dragStartPointer = event.clientY;\n this.dragStartScroll = view.scrollTop;\n } else {\n this.dragStartPointer = event.clientX;\n this.dragStartScroll = view.scrollLeft;\n }\n try {\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n this.show();\n }\n\n protected onThumbPointermove(event: PointerEvent): void {\n if (!this.dragAxis) return;\n const view = this.viewportRef().nativeElement;\n if (this.dragAxis === 'vertical') {\n const delta = event.clientY - this.dragStartPointer;\n // A 1px thumb move maps to scrollHeight/clientHeight px of scroll.\n const scale = this.clientHeight()\n ? this.scrollHeight() / this.clientHeight()\n : 0;\n view.scrollTop = this.dragStartScroll + delta * scale;\n } else {\n const delta = event.clientX - this.dragStartPointer;\n const scale = this.clientWidth()\n ? this.scrollWidth() / this.clientWidth()\n : 0;\n view.scrollLeft = this.dragStartScroll + delta * scale;\n }\n }\n\n protected onThumbPointerup(event: PointerEvent): void {\n if (!this.dragAxis) return;\n this.dragAxis = null;\n (event.target as HTMLElement).releasePointerCapture?.(event.pointerId);\n this.scheduleHide();\n }\n\n // --- Track paging ---------------------------------------------------------\n\n protected onTrackPointerdown(event: PointerEvent, axis: Axis): void {\n if (event.button !== 0) return;\n const view = this.viewportRef().nativeElement;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n if (axis === 'vertical') {\n const clickPos = event.clientY - rect.top;\n const thumbLen = rect.height * this.vThumbSize();\n const thumbStart = this.vThumbOffset() * (rect.height - thumbLen);\n const page = view.clientHeight * 0.9;\n if (clickPos < thumbStart) view.scrollTop -= page;\n else if (clickPos > thumbStart + thumbLen) view.scrollTop += page;\n } else {\n const clickPos = event.clientX - rect.left;\n const thumbLen = rect.width * this.hThumbSize();\n const thumbStart = this.hThumbOffset() * (rect.width - thumbLen);\n const page = view.clientWidth * 0.9;\n if (clickPos < thumbStart) view.scrollLeft -= page;\n else if (clickPos > thumbStart + thumbLen) view.scrollLeft += page;\n }\n }\n\n // --- Auto-hide ------------------------------------------------------------\n\n private show(): void {\n if (!this.isBrowser) return;\n this._visible.set(true);\n this.clearHideTimer();\n }\n\n private scheduleHide(): void {\n const delay = this.hideDelay();\n if (delay === 0 || this.dragAxis) return;\n this.clearHideTimer();\n this.hideTimer = setTimeout(() => this._visible.set(false), delay);\n }\n\n private clearHideTimer(): void {\n if (this.hideTimer !== undefined) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n ngOnDestroy(): void {\n if (this.scrollRaf != null) {\n cancelAnimationFrame(this.scrollRaf);\n this.scrollRaf = null;\n }\n this.resizeObserver?.disconnect();\n this.clearHideTimer();\n }\n}\n","<div\n #viewport\n [id]=\"viewportId\"\n class=\"mk-scroll-area__viewport\"\n tabindex=\"0\"\n [attr.role]=\"ariaLabel() ? 'region' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [style.max-height]=\"maxHeight() || null\"\n (scroll)=\"onScroll()\"\n>\n <div #content class=\"mk-scroll-area__content\">\n <ng-content />\n </div>\n</div>\n\n@if (showVertical() && vScrollable()) {\n <div\n class=\"mk-scroll-area__scrollbar mk-scroll-area__scrollbar--vertical\"\n [class.mk-scroll-area__scrollbar--visible]=\"barsVisible()\"\n aria-hidden=\"true\"\n (pointerdown)=\"onTrackPointerdown($event, 'vertical')\"\n >\n <div\n class=\"mk-scroll-area__thumb\"\n [style.height.%]=\"vThumbSize() * 100\"\n [style.top]=\"vThumbTop()\"\n (pointerdown)=\"onThumbPointerdown($event, 'vertical')\"\n (pointermove)=\"onThumbPointermove($event)\"\n (pointerup)=\"onThumbPointerup($event)\"\n (pointercancel)=\"onThumbPointerup($event)\"\n ></div>\n </div>\n}\n\n@if (showHorizontal() && hScrollable()) {\n <div\n class=\"mk-scroll-area__scrollbar mk-scroll-area__scrollbar--horizontal\"\n [class.mk-scroll-area__scrollbar--visible]=\"barsVisible()\"\n aria-hidden=\"true\"\n (pointerdown)=\"onTrackPointerdown($event, 'horizontal')\"\n >\n <div\n class=\"mk-scroll-area__thumb\"\n [style.width.%]=\"hThumbSize() * 100\"\n [style.left]=\"hThumbLeft()\"\n (pointerdown)=\"onThumbPointerdown($event, 'horizontal')\"\n (pointermove)=\"onThumbPointermove($event)\"\n (pointerup)=\"onThumbPointerup($event)\"\n (pointercancel)=\"onThumbPointerup($event)\"\n ></div>\n </div>\n}\n","/**\n * Navigation & Layout component group barrel.\n *\n * Re-exports every public symbol of the group via each component folder's\n * `index.ts`. Not part of the library `public-api` by itself — consumed by the\n * top-level surface when the group is wired in.\n */\nexport * from './tabs';\nexport * from './accordion';\nexport * from './breadcrumb';\nexport * from './pagination';\nexport * from './menu';\nexport * from './app-shell';\nexport * from './nav-list';\nexport * from './stepper';\nexport * from './tree';\nexport * from './drawer';\nexport * from './toolbar';\nexport * from './page-header';\nexport * from './command-palette';\nexport * from './splitter';\nexport * from './fab';\nexport * from './back-to-top';\nexport * from './scroll-area';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mk-kit-ui-navigation.mjs","sources":["../../../projects/mk-kit/navigation/tabs/tab.ts","../../../projects/mk-kit/navigation/tabs/tab.html","../../../projects/mk-kit/navigation/tabs/tabs.ts","../../../projects/mk-kit/navigation/tabs/tabs.html","../../../projects/mk-kit/navigation/accordion/accordion.ts","../../../projects/mk-kit/navigation/accordion/accordion.html","../../../projects/mk-kit/navigation/accordion/accordion-item.ts","../../../projects/mk-kit/navigation/accordion/accordion-item.html","../../../projects/mk-kit/navigation/accordion/accordion-header.ts","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb-item.ts","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb-item.html","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb.ts","../../../projects/mk-kit/navigation/breadcrumb/breadcrumb.html","../../../projects/mk-kit/navigation/pagination/pagination.ts","../../../projects/mk-kit/navigation/pagination/pagination.html","../../../projects/mk-kit/navigation/menu/menu-item.ts","../../../projects/mk-kit/navigation/menu/menu-item.html","../../../projects/mk-kit/navigation/menu/menu.ts","../../../projects/mk-kit/navigation/menu/menu.html","../../../projects/mk-kit/navigation/menu/menu-trigger.ts","../../../projects/mk-kit/navigation/split-button/split-button.ts","../../../projects/mk-kit/navigation/split-button/split-button.html","../../../projects/mk-kit/navigation/app-shell/app-shell.ts","../../../projects/mk-kit/navigation/app-shell/app-shell.html","../../../projects/mk-kit/navigation/nav-list/nav-list.ts","../../../projects/mk-kit/navigation/nav-list/nav-list.html","../../../projects/mk-kit/navigation/nav-list/nav-item.ts","../../../projects/mk-kit/navigation/nav-list/nav-item.html","../../../projects/mk-kit/navigation/nav-list/nav-group.ts","../../../projects/mk-kit/navigation/nav-list/nav-group.html","../../../projects/mk-kit/navigation/stepper/step.ts","../../../projects/mk-kit/navigation/stepper/step.html","../../../projects/mk-kit/navigation/stepper/stepper.ts","../../../projects/mk-kit/navigation/stepper/stepper.html","../../../projects/mk-kit/navigation/tree/tree.ts","../../../projects/mk-kit/navigation/tree/tree.html","../../../projects/mk-kit/navigation/drawer/drawer.ts","../../../projects/mk-kit/navigation/drawer/drawer.html","../../../projects/mk-kit/navigation/toolbar/toolbar.ts","../../../projects/mk-kit/navigation/toolbar/toolbar.html","../../../projects/mk-kit/navigation/page-header/page-header.ts","../../../projects/mk-kit/navigation/page-header/page-header.html","../../../projects/mk-kit/navigation/command-palette/command-palette.ts","../../../projects/mk-kit/navigation/command-palette/command-palette.html","../../../projects/mk-kit/navigation/splitter/splitter.ts","../../../projects/mk-kit/navigation/splitter/splitter.html","../../../projects/mk-kit/navigation/fab/fab.ts","../../../projects/mk-kit/navigation/fab/fab.html","../../../projects/mk-kit/navigation/back-to-top/back-to-top.ts","../../../projects/mk-kit/navigation/back-to-top/back-to-top.html","../../../projects/mk-kit/navigation/scroll-area/scroll-area.ts","../../../projects/mk-kit/navigation/scroll-area/scroll-area.html","../../../projects/mk-kit/navigation/index.ts","../../../projects/mk-kit/navigation/mk-kit-ui-navigation.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n signal,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\n\n/**\n * A single tab + its panel. Declared inside `<mk-tabs>`; the projected content\n * becomes the tab panel body while `label` is rendered in the tablist.\n *\n * ```html\n * <mk-tabs>\n * <mk-tab label=\"Overview\">…panel content…</mk-tab>\n * <mk-tab label=\"Settings\" [disabled]=\"locked()\">…</mk-tab>\n * </mk-tabs>\n * ```\n */\n@Component({\n selector: 'mk-tab',\n templateUrl: './tab.html',\n styleUrl: './tab.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tab',\n role: 'tabpanel',\n '[id]': 'panelId',\n '[attr.aria-labelledby]': 'tabId',\n '[attr.hidden]': \"active() ? null : ''\",\n '[attr.tabindex]': 'active() ? 0 : null',\n },\n})\nexport class MkTab {\n /** Text shown on the tab button in the tablist. */\n readonly label = input('');\n /** Disable selection of this tab. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Stable id for the tab button (wires `aria-labelledby`). */\n readonly tabId = mkUniqueId('mk-tab');\n /** Stable id for the panel (wires `aria-controls`). */\n readonly panelId = mkUniqueId('mk-tabpanel');\n\n /** Whether this tab is currently selected. Set by the parent `MkTabs`. */\n readonly active = signal(false);\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n contentChildren,\n effect,\n input,\n model,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { MkTab } from './tab';\n\n/** Visual style for the tablist. */\nexport type MkTabsVariant = 'line' | 'pill';\n\n/**\n * Accessible tabs implementing the ARIA tabs pattern: a `role=\"tablist\"` with\n * roving tabindex, Arrow/Home/End keyboard navigation and an animated active\n * indicator. Selection is two-way bindable via `selectedIndex`.\n *\n * ```html\n * <mk-tabs [(selectedIndex)]=\"tab\" variant=\"line\">\n * <mk-tab label=\"Profile\">…</mk-tab>\n * <mk-tab label=\"Billing\">…</mk-tab>\n * </mk-tabs>\n * ```\n */\n@Component({\n selector: 'mk-tabs',\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tabs',\n '[class.mk-tabs--line]': \"variant() === 'line'\",\n '[class.mk-tabs--pill]': \"variant() === 'pill'\",\n },\n})\nexport class MkTabs {\n /** Projected tabs, kept live via a signal content query. */\n readonly tabs = contentChildren(MkTab);\n /** Rendered tab buttons, used to move focus and measure the indicator. */\n protected readonly tabButtons =\n viewChildren<ElementRef<HTMLButtonElement>>('tabBtn');\n\n /** Zero-based index of the active tab (two-way). */\n readonly selectedIndex = model(0);\n /** `line` shows an underline indicator; `pill` uses filled pills. */\n readonly variant = input<MkTabsVariant>('line');\n\n /** Sliding indicator geometry (line variant). */\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n\n constructor() {\n // Keep each tab's `active` state and the clamped selected index in sync.\n effect(() => {\n const tabs = this.tabs();\n let index = this.selectedIndex();\n if (tabs.length > 0 && index > tabs.length - 1) {\n index = tabs.length - 1;\n }\n if (index < 0) index = 0;\n tabs.forEach((tab, i) => tab.active.set(i === index));\n queueMicrotask(() => this.measureIndicator(index));\n });\n }\n\n protected select(index: number): void {\n const tab = this.tabs()[index];\n if (!tab || tab.disabled()) return;\n this.selectedIndex.set(index);\n // The tablist scrolls horizontally on narrow screens — keep the newly\n // active tab visible. 'nearest' so activating a tab never jumps the page\n // vertically. Optional-chained: jsdom has no scrollIntoView.\n this.tabButtons()[index]?.nativeElement.scrollIntoView?.({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n protected focusTab(index: number): void {\n this.tabButtons()[index]?.nativeElement.focus();\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const count = this.tabs().length;\n let next = -1;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextEnabled(index, 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextEnabled(index, -1);\n break;\n case 'Home':\n next = this.nextEnabled(-1, 1);\n break;\n case 'End':\n next = this.nextEnabled(count, -1);\n break;\n default:\n return;\n }\n if (next >= 0) {\n event.preventDefault();\n this.select(next);\n this.focusTab(next);\n }\n }\n\n /** Next non-disabled tab index starting from `from`, wrapping around. */\n private nextEnabled(from: number, step: number): number {\n const tabs = this.tabs();\n const count = tabs.length;\n if (count === 0) return -1;\n for (let i = 1; i <= count; i++) {\n const idx = (((from + step * i) % count) + count) % count;\n if (!tabs[idx].disabled()) return idx;\n }\n return -1;\n }\n\n private measureIndicator(index: number): void {\n const btn = this.tabButtons()[index]?.nativeElement;\n if (!btn) return;\n this.indicatorLeft.set(btn.offsetLeft);\n this.indicatorWidth.set(btn.offsetWidth);\n }\n}\n","<div class=\"mk-tabs__list\" role=\"tablist\">\n @for (tab of tabs(); track tab.tabId; let i = $index) {\n <button\n #tabBtn\n type=\"button\"\n role=\"tab\"\n class=\"mk-tabs__tab\"\n [class.mk-tabs__tab--active]=\"i === selectedIndex()\"\n [id]=\"tab.tabId\"\n [attr.aria-controls]=\"tab.panelId\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [attr.tabindex]=\"i === selectedIndex() ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"select(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n {{ tab.label() }}\n </button>\n }\n\n @if (variant() === 'line') {\n <span\n class=\"mk-tabs__indicator\"\n aria-hidden=\"true\"\n [style.transform]=\"'translateX(' + indicatorLeft() + 'px)'\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n }\n</div>\n\n<div class=\"mk-tabs__panels\">\n <ng-content />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\nimport type { MkAccordionItem } from './accordion-item';\n\n/**\n * Groups `<mk-accordion-item>`s. By default only one item can be open at a\n * time (single-open); set `multi` to allow several. Coordinates its children\n * through their two-way `open` models.\n *\n * ```html\n * <mk-accordion [multi]=\"false\">\n * <mk-accordion-item header=\"One\">…</mk-accordion-item>\n * <mk-accordion-item header=\"Two\">…</mk-accordion-item>\n * </mk-accordion>\n * ```\n */\n@Component({\n selector: 'mk-accordion',\n templateUrl: './accordion.html',\n styleUrl: './accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-accordion',\n },\n})\nexport class MkAccordion {\n /** Allow multiple items open simultaneously. */\n readonly multi = input(false, { transform: booleanAttribute });\n\n /** Registered items collapse siblings on open in single mode. */\n private readonly items = new Set<MkAccordionItem>();\n\n /** Called by an item just before its open state changes. */\n onItemToggle(source: MkAccordionItem, opening: boolean): void {\n this.items.add(source);\n if (opening && !this.multi()) {\n for (const item of this.items) {\n if (item !== source && item.open()) item.open.set(false);\n }\n }\n }\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkAccordion } from './accordion';\n\n/**\n * A collapsible section within an `<mk-accordion>`. The header is a button that\n * toggles a smoothly animated body region wired with `aria-expanded` /\n * `aria-controls`. Open state is two-way bindable via `open`.\n *\n * ```html\n * <mk-accordion-item header=\"Shipping\" [(open)]=\"shippingOpen\">\n * …body…\n * </mk-accordion-item>\n * ```\n */\n@Component({\n selector: 'mk-accordion-item',\n templateUrl: './accordion-item.html',\n styleUrl: './accordion-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-accordion-item',\n '[class.mk-accordion-item--open]': 'open()',\n '[class.mk-accordion-item--disabled]': 'disabled()',\n },\n})\nexport class MkAccordionItem {\n private readonly accordion = inject(MkAccordion, { optional: true });\n\n /** Plain-text header (ignored when `[mkAccordionHeader]` is projected). */\n readonly header = input('');\n /** Disable toggling of this item. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Whether the item is expanded (two-way). */\n readonly open = model(false);\n\n /** Stable id for the trigger button. */\n readonly triggerId = mkUniqueId('mk-acc-trigger');\n /** Stable id for the panel region. */\n readonly panelId = mkUniqueId('mk-acc-panel');\n\n protected toggle(): void {\n if (this.disabled()) return;\n const next = !this.open();\n this.accordion?.onItemToggle(this, next);\n this.open.set(next);\n }\n}\n","<h3 class=\"mk-accordion-item__heading\">\n <button\n type=\"button\"\n class=\"mk-accordion-item__trigger\"\n [id]=\"triggerId\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"mk-accordion-item__label\">\n @if (header()) {\n {{ header() }}\n }\n <ng-content select=\"[mkAccordionHeader]\" />\n </span>\n <span class=\"mk-accordion-item__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </span>\n </button>\n</h3>\n\n<div\n class=\"mk-accordion-item__panel\"\n role=\"region\"\n [id]=\"panelId\"\n [attr.aria-labelledby]=\"triggerId\"\n [attr.inert]=\"open() ? null : ''\"\n>\n <div class=\"mk-accordion-item__panel-inner\">\n <div class=\"mk-accordion-item__body\">\n <ng-content />\n </div>\n </div>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * Marks projected content as the header of an `<mk-accordion-item>`. Use when\n * the header needs rich markup instead of the plain-text `header` input.\n *\n * ```html\n * <mk-accordion-item>\n * <span mkAccordionHeader><mk-icon name=\"user\" /> Account</span>\n * …body…\n * </mk-accordion-item>\n * ```\n */\n@Directive({\n selector: '[mkAccordionHeader]',\n})\nexport class MkAccordionHeader {}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * A single crumb inside `<mk-breadcrumb>`. Renders a link when `href` is set,\n * otherwise plain text. The last item is automatically marked\n * `aria-current=\"page\"` by the parent.\n *\n * ```html\n * <mk-breadcrumb-item href=\"/\">Home</mk-breadcrumb-item>\n * <mk-breadcrumb-item>Current page</mk-breadcrumb-item>\n * ```\n */\n@Component({\n selector: 'mk-breadcrumb-item',\n templateUrl: './breadcrumb-item.html',\n styleUrl: './breadcrumb-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n class: 'mk-breadcrumb-item',\n role: 'listitem',\n },\n})\nexport class MkBreadcrumbItem {\n /** Optional link target. Rendered as text when omitted or when it is last. */\n readonly href = input<string>();\n\n /** Whether this is the final crumb. Set by the parent `MkBreadcrumb`. */\n readonly last = signal(false);\n}\n","<!-- A single ng-content captured in a template: the default projection slot\n belongs to exactly one ng-content, so placing one in each branch leaves\n whichever branch Angular didn't pick rendering empty. -->\n<ng-template #content><ng-content /></ng-template>\n\n@if (href() && !last()) {\n <a class=\"mk-breadcrumb-item__link\" [href]=\"href()\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n} @else {\n <span\n class=\"mk-breadcrumb-item__current\"\n [attr.aria-current]=\"last() ? 'page' : null\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkBreadcrumbItem } from './breadcrumb-item';\n\n/**\n * Breadcrumb trail. Renders `nav[aria-label=\"Breadcrumb\"] > ol` and marks the\n * final `<mk-breadcrumb-item>` as the current page. The separator is drawn in\n * CSS and can be customised via `separator`.\n *\n * ```html\n * <mk-breadcrumb separator=\"›\">\n * <mk-breadcrumb-item href=\"/\">Home</mk-breadcrumb-item>\n * <mk-breadcrumb-item href=\"/users\">Users</mk-breadcrumb-item>\n * <mk-breadcrumb-item>Jane</mk-breadcrumb-item>\n * </mk-breadcrumb>\n * ```\n */\n@Component({\n selector: 'mk-breadcrumb',\n templateUrl: './breadcrumb.html',\n styleUrl: './breadcrumb.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-breadcrumb',\n '[style.--mk-breadcrumb-separator]': 'separatorValue()',\n },\n})\nexport class MkBreadcrumb {\n protected readonly i18n = inject(MK_I18N);\n\n /** Accessible label for the navigation landmark. */\n readonly label = input(this.i18n.breadcrumbLabel);\n /** Separator character rendered between crumbs. */\n readonly separator = input('/');\n\n private readonly items = contentChildren(MkBreadcrumbItem);\n\n /** Wrap the separator in quotes for the CSS `content` property. */\n protected readonly separatorValue = computed(\n () => `\"${this.separator().replace(/\"/g, '\\\\\"')}\"`,\n );\n\n constructor() {\n // Flag the last crumb so it renders as the current page.\n effect(() => {\n const items = this.items();\n items.forEach((item, i) => item.last.set(i === items.length - 1));\n });\n }\n}\n","<nav [attr.aria-label]=\"label()\">\n <ol class=\"mk-breadcrumb__list\" role=\"list\">\n <ng-content />\n </ol>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n inject,\n} from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** A rendered pagination cell: a real page number or a gap marker. */\nexport type MkPageItem = number | 'ellipsis';\n\n/**\n * Page navigation with previous/next controls and numbered pages that collapse\n * to ellipses for large ranges. Provide either `total` (+ `pageSize`) or a\n * direct `pageCount`. `page` is 1-based and two-way bindable.\n *\n * ```html\n * <mk-pagination\n * [total]=\"240\"\n * [pageSize]=\"20\"\n * [(page)]=\"page\"\n * (pageChange)=\"load($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'mk-pagination',\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-pagination',\n },\n})\nexport class MkPagination {\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n /** Total number of items (used with `pageSize` when `pageCount` is unset). */\n readonly total = input(0, { transform: numberAttribute });\n /** Items per page. */\n readonly pageSize = input(10, { transform: numberAttribute });\n /** Explicit page count; overrides `total`/`pageSize` when > 0. */\n readonly pageCount = input(0, { transform: numberAttribute });\n /** Current 1-based page (two-way). */\n readonly page = model(1);\n /** Number of page buttons to keep on each side of the current page. */\n readonly siblingCount = input(1, { transform: numberAttribute });\n /** Number of page buttons pinned at each end. */\n readonly boundaryCount = input(1, { transform: numberAttribute });\n /** Accessible label for the navigation landmark. */\n readonly label = input(this.i18n.paginationLabel);\n\n /**\n * `pageChange` is emitted automatically by the two-way `page` model whenever\n * the page changes — bind it via `(pageChange)` or `[(page)]`.\n */\n\n /** Resolved total number of pages (at least 1). */\n protected readonly pages = computed(() => {\n const explicit = this.pageCount();\n if (explicit > 0) return explicit;\n const size = Math.max(1, this.pageSize());\n return Math.max(1, Math.ceil(this.total() / size));\n });\n\n protected readonly current = computed(() =>\n Math.min(Math.max(1, this.page()), this.pages()),\n );\n\n protected readonly hasPrev = computed(() => this.current() > 1);\n protected readonly hasNext = computed(() => this.current() < this.pages());\n\n /** The sequence of page cells with ellipsis gaps. */\n protected readonly items = computed<MkPageItem[]>(() => {\n const total = this.pages();\n const boundary = Math.max(0, this.boundaryCount());\n const sibling = Math.max(0, this.siblingCount());\n const current = this.current();\n\n // Total slots: boundaries + siblings + current + 2 ellipses + first/last.\n const totalSlots = boundary * 2 + sibling * 2 + 3 + 2;\n if (total <= totalSlots) {\n return this.range(1, total);\n }\n\n const startPages = this.range(1, boundary);\n const endPages = this.range(total - boundary + 1, total);\n\n const siblingsStart = Math.max(\n Math.min(current - sibling, total - boundary - sibling * 2 - 1),\n boundary + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(current + sibling, boundary + sibling * 2 + 2),\n endPages.length > 0 ? endPages[0] - 2 : total - 1,\n );\n\n const result: MkPageItem[] = [...startPages];\n\n if (siblingsStart > boundary + 2) {\n result.push('ellipsis');\n } else if (boundary + 1 < total - boundary) {\n result.push(boundary + 1);\n }\n\n result.push(...this.range(siblingsStart, siblingsEnd));\n\n if (siblingsEnd < total - boundary - 1) {\n result.push('ellipsis');\n } else if (total - boundary > boundary) {\n result.push(total - boundary);\n }\n\n result.push(...endPages);\n return result;\n });\n\n protected goTo(page: number): void {\n const target = Math.min(Math.max(1, page), this.pages());\n if (target === this.current()) return;\n this.page.set(target);\n }\n\n protected prev(): void {\n if (this.hasPrev()) this.goTo(this.current() - 1);\n }\n\n protected next(): void {\n if (this.hasNext()) this.goTo(this.current() + 1);\n }\n\n private range(start: number, end: number): number[] {\n const length = end - start + 1;\n return length > 0 ? Array.from({ length }, (_, i) => start + i) : [];\n }\n}\n","<nav [attr.aria-label]=\"label()\">\n <ul class=\"mk-pagination__list\" role=\"list\">\n <li>\n <button\n type=\"button\"\n class=\"mk-pagination__btn mk-pagination__btn--nav\"\n [attr.aria-label]=\"i18n.previousPage\"\n [disabled]=\"!hasPrev()\"\n (click)=\"prev()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n </li>\n\n @for (item of items(); track $index) {\n @if (item === 'ellipsis') {\n <li>\n <span class=\"mk-pagination__ellipsis\" aria-hidden=\"true\">…</span>\n </li>\n } @else {\n <li>\n <button\n type=\"button\"\n class=\"mk-pagination__btn\"\n [class.mk-pagination__btn--active]=\"item === current()\"\n [attr.aria-label]=\"i18n.goToPage(item)\"\n [attr.aria-current]=\"item === current() ? 'page' : null\"\n (click)=\"goTo(item)\"\n >\n {{ item }}\n </button>\n </li>\n }\n }\n\n <li>\n <button\n type=\"button\"\n class=\"mk-pagination__btn mk-pagination__btn--nav\"\n [attr.aria-label]=\"i18n.nextPage\"\n [disabled]=\"!hasNext()\"\n (click)=\"next()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </li>\n </ul>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n type OnDestroy,\n booleanAttribute,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { MkMenu } from './menu';\n\n/** Hover dwell before a submenu opens, so sweeping past an item does not flash it. */\nconst SUBMENU_HOVER_DELAY = 150;\n\n/**\n * An item within an `<mk-menu>`. Renders as an ARIA `menuitem` with an optional\n * icon slot (`[mkMenuItemIcon]`), disabled and danger states, and either emits\n * `action` or navigates when `href` is set. Activating closes the menu.\n *\n * With `[mkSubmenuFor]` pointing at a nested `<mk-menu>` the item becomes a\n * submenu trigger instead: it shows a chevron, exposes `aria-haspopup` /\n * `aria-expanded`, opens the submenu beside itself on hover, ArrowRight,\n * Enter, Space or click, and never emits `action`.\n *\n * ```html\n * <mk-menu-item (action)=\"rename()\">\n * <svg mkMenuItemIcon>…</svg> Rename\n * </mk-menu-item>\n * <mk-menu-item danger (action)=\"remove()\">Delete</mk-menu-item>\n * <mk-menu-item href=\"/help\">Help</mk-menu-item>\n * <mk-menu-item [mkSubmenuFor]=\"more\">More</mk-menu-item>\n * ```\n */\n@Component({\n selector: 'mk-menu-item',\n templateUrl: './menu-item.html',\n styleUrl: './menu-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-menu-item',\n role: 'menuitem',\n tabindex: '-1',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-haspopup]': \"submenu() ? 'menu' : null\",\n '[attr.aria-expanded]': 'submenu() ? submenu()!.opened() : null',\n '[attr.aria-controls]': 'submenu()?.panelId ?? null',\n '[class.mk-menu-item--danger]': 'danger()',\n '[class.mk-menu-item--disabled]': 'disabled()',\n '[class.mk-menu-item--submenu]': '!!submenu()',\n '[class.mk-menu-item--expanded]': 'submenu()?.opened() ?? false',\n '(click)': 'activate($event)',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n },\n})\nexport class MkMenuItem implements OnDestroy {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly menu = inject(MkMenu, { optional: true });\n\n /** Prevent selection and focus. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Destructive styling (e.g. Delete). */\n readonly danger = input(false, { transform: booleanAttribute });\n /** When set, activating the item navigates here. */\n readonly href = input<string>();\n /** A nested `mk-menu` this item opens as a submenu. */\n readonly submenu = input<MkMenu | undefined>(undefined, { alias: 'mkSubmenuFor' });\n\n /** Emitted when the item is activated (not for disabled or submenu items). */\n readonly action = output<void>();\n\n private hoverTimer?: ReturnType<typeof setTimeout>;\n\n activate(event?: Event): void {\n if (this.disabled()) {\n event?.preventDefault();\n event?.stopPropagation();\n return;\n }\n if (this.submenu()) {\n // A pointer click keeps focus where it is; keyboard activation (Enter /\n // Space arrive here through the panel handler without an event) moves\n // focus into the submenu.\n this.openSubmenu(!event);\n return;\n }\n this.action.emit();\n const href = this.href();\n this.menu?.closeAll(true);\n if (href) {\n this.document.defaultView?.location.assign(href);\n }\n }\n\n /** Open the submenu beside this item; `focus` moves focus to its first item. */\n openSubmenu(focus: boolean): void {\n const sub = this.submenu();\n if (!sub || this.disabled()) return;\n this.cancelHover();\n if (sub.opened()) {\n if (focus) sub.focusFirstItem();\n return;\n }\n sub.open(\n this.el.nativeElement,\n focus ? 'first' : false,\n this.menu?.submenuPlacement() ?? 'right-start',\n );\n }\n\n protected onMouseEnter(): void {\n if (this.disabled()) return;\n this.menu?.itemHovered(this);\n if (this.submenu() && !this.submenu()!.opened()) {\n this.cancelHover();\n this.hoverTimer = setTimeout(() => this.openSubmenu(false), SUBMENU_HOVER_DELAY);\n }\n }\n\n protected onMouseLeave(): void {\n this.cancelHover();\n }\n\n private cancelHover(): void {\n if (this.hoverTimer) {\n clearTimeout(this.hoverTimer);\n this.hoverTimer = undefined;\n }\n }\n\n /** Move DOM focus to this item (roving focus). */\n focusEl(): void {\n this.el.nativeElement.focus();\n }\n\n /** Whether `node` lives inside this item. */\n contains(node: Node | null): boolean {\n return !!node && this.el.nativeElement.contains(node);\n }\n\n /** Lowercased text content, used for typeahead matching. */\n text(): string {\n return (this.el.nativeElement.textContent ?? '').trim().toLowerCase();\n }\n\n ngOnDestroy(): void {\n this.cancelHover();\n }\n}\n","<span class=\"mk-menu-item__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkMenuItemIcon]\" />\n</span>\n<span class=\"mk-menu-item__label\">\n <ng-content />\n</span>\n@if (submenu()) {\n <svg\n class=\"mk-menu-item__chevron\"\n viewBox=\"0 0 16 16\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 3.5 10.5 8 6 12.5\" />\n </svg>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n Injector,\n type OnDestroy,\n PLATFORM_ID,\n afterNextRender,\n contentChildren,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { MkPlacement } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { MkMenuItem } from './menu-item';\n\n/**\n * Dropdown menu implementing the ARIA menu pattern (roving focus, Arrow / Home\n * / End / typeahead, Enter/Space to activate). Attach it to a trigger with the\n * `mkMenuTriggerFor` directive; the trigger controls opening and positioning.\n *\n * The panel is rendered in the browser top layer via {@link MkAnchoredPanel}, so\n * it is never clipped by an ancestor's `overflow`/`transform` and always flips\n * back on-screen near a viewport edge.\n *\n * ```html\n * <button mkButton [mkMenuTriggerFor]=\"menu\">Actions</button>\n * <mk-menu #menu>\n * <mk-menu-item (action)=\"edit()\">Edit</mk-menu-item>\n * <mk-menu-item danger (action)=\"del()\">Delete</mk-menu-item>\n * </mk-menu>\n * ```\n *\n * **Submenus.** Point an item at a nested menu with `[mkSubmenuFor]`; declare\n * the nested `<mk-menu>` anywhere inside the parent menu. The submenu opens\n * beside its item on hover (after a short delay), on ArrowRight / Enter /\n * Space / click, and closes with ArrowLeft or Escape (returning focus to the\n * item) — only that level, per the APG menu pattern. Activating any leaf item\n * closes the whole chain. In RTL the submenu opens on the left and the arrow\n * keys swap.\n *\n * ```html\n * <mk-menu #menu>\n * <mk-menu-item [mkSubmenuFor]=\"exportMenu\">Export</mk-menu-item>\n * <mk-menu #exportMenu>\n * <mk-menu-item (action)=\"csv()\">CSV</mk-menu-item>\n * <mk-menu-item (action)=\"pdf()\">PDF</mk-menu-item>\n * </mk-menu>\n * </mk-menu>\n * ```\n */\n@Component({\n selector: 'mk-menu',\n exportAs: 'mkMenu',\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-menu',\n },\n})\nexport class MkMenu implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n private readonly injector = inject(Injector);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n /** The enclosing menu when this one is a submenu. */\n private readonly parent = inject(MkMenu, { optional: true, skipSelf: true });\n\n private readonly items = contentChildren(MkMenuItem);\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Stable id for `aria-controls` on the trigger. */\n readonly panelId = mkUniqueId('mk-menu');\n\n private readonly _open = signal(false);\n /** Whether the menu is currently open. */\n readonly opened = this._open.asReadonly();\n\n /** Accessible label for the menu (defaults via the trigger if unset). */\n readonly ariaLabel = signal<string | undefined>(undefined);\n\n /** Element to anchor the panel to (element-anchored open). */\n protected readonly anchorEl = signal<HTMLElement | undefined>(undefined);\n /** Viewport point to anchor to (`openAt` / context menu). */\n protected readonly anchorPoint = signal<{ x: number; y: number } | undefined>(\n undefined,\n );\n /** Where the panel sits relative to its anchor (submenus open sideways). */\n protected readonly placement = signal<MkPlacement>('bottom-start');\n\n private triggerEl: HTMLElement | null = null;\n private typeahead = '';\n private typeaheadTimer?: ReturnType<typeof setTimeout>;\n /** Submenus that are currently open under this menu. */\n private readonly openChildren = new Set<MkMenu>();\n\n /**\n * Whether this menu is a submenu of another `mk-menu`. Submenus open\n * sideways, close a single level on Escape, and swap ArrowLeft/ArrowRight.\n */\n get isSubmenu(): boolean {\n return this.parent !== null;\n }\n\n /**\n * Open the menu anchored to `trigger`. `focus` picks the item that receives\n * focus once the panel is painted: `true`/`'first'` for the first enabled\n * item, `'last'` for the last (ArrowUp on a menu button, per the APG\n * menu-button pattern), `false` to leave focus where it is (mouse open).\n * `placement` overrides the default `bottom-start` (submenus pass\n * `right-start` / `left-start`).\n */\n open(\n trigger: HTMLElement,\n focus: boolean | 'first' | 'last' = true,\n placement: MkPlacement = 'bottom-start',\n ): void {\n if (!this.isBrowser || this._open()) return;\n this.triggerEl = trigger;\n this.anchorEl.set(trigger);\n this.anchorPoint.set(undefined);\n this.placement.set(placement);\n this._open.set(true);\n this.parent?.childOpened(this);\n if (focus) this.focusAfterOpen(focus === 'last' ? 'last' : 'first');\n }\n\n /**\n * Open the menu at viewport coordinates — e.g. a right-click point from a\n * `contextmenu` event. Positioning (and flip/shift back on-screen) is handled\n * by {@link MkAnchoredPanel} via the point anchor. Focus moves to the first\n * item; `restoreFocusEl` (when provided) regains focus on close.\n */\n openAt(x: number, y: number, restoreFocusEl?: HTMLElement): void {\n if (!this.isBrowser || this._open()) return;\n this.triggerEl = restoreFocusEl ?? null;\n this.anchorEl.set(undefined);\n this.anchorPoint.set({ x, y });\n this.placement.set('bottom-start');\n this._open.set(true);\n this.focusAfterOpen('first');\n }\n\n /**\n * Close this menu (and any submenu open under it); optionally restore focus\n * to the trigger — for a submenu that is the item it hangs off.\n */\n close(restoreFocus = true): void {\n if (!this._open()) return;\n this.closeChildren();\n this._open.set(false);\n this.anchorEl.set(undefined);\n this.anchorPoint.set(undefined);\n const trigger = this.triggerEl;\n this.triggerEl = null;\n this.parent?.childClosed(this);\n if (restoreFocus) trigger?.focus();\n }\n\n /**\n * Close the whole menu chain from the root down — what activating a leaf\n * item does, wherever in the tree it sits. Focus returns to the root\n * trigger when `restoreFocus` is set.\n */\n closeAll(restoreFocus = true): void {\n this.root().close(restoreFocus);\n }\n\n /** Close every submenu open under this menu, except `keep`. */\n closeChildren(keep?: MkMenu): void {\n for (const child of [...this.openChildren]) {\n if (child !== keep) child.close(false);\n }\n }\n\n /** Toggle open/closed from a trigger. */\n toggle(trigger: HTMLElement, focusFirst = true): void {\n if (this._open()) {\n this.close(true);\n } else {\n this.open(trigger, focusFirst);\n }\n }\n\n /**\n * Move focus to the first enabled item. Used by the trigger when the menu is\n * already open (e.g. ArrowDown after a mouse open), so arrow keys always\n * reach the items even though focus never left the trigger.\n */\n focusFirstItem(): void {\n this.focusFirst();\n }\n\n /** Move focus to the last enabled item (ArrowUp from the trigger). */\n focusLastItem(): void {\n this.focusLast();\n }\n\n /**\n * Whether `node` lives inside this menu's panel or any submenu open under\n * it. Submenu panels are separate top-layer elements, so a plain\n * `contains` on the parent panel would treat clicks in them as outside.\n */\n containsTarget(node: Node | null): boolean {\n if (!node) return false;\n if (this.panelRef()?.nativeElement.contains(node)) return true;\n for (const child of this.openChildren) {\n if (child.containsTarget(node)) return true;\n }\n return false;\n }\n\n /** Bound for the anchored panel's `keepOpenWhen` (stable identity). */\n protected readonly keepOpenWhen = (target: Node): boolean =>\n [...this.openChildren].some((c) => c.containsTarget(target));\n\n /**\n * An item was hovered: close sibling submenus so only the hovered branch\n * stays open (the item opens its own submenu after a delay).\n */\n itemHovered(item: MkMenuItem): void {\n this.closeChildren(item.submenu());\n }\n\n /** @internal */\n childOpened(child: MkMenu): void {\n this.closeChildren(child);\n this.openChildren.add(child);\n }\n\n /** @internal */\n childClosed(child: MkMenu): void {\n this.openChildren.delete(child);\n }\n\n private root(): MkMenu {\n let m: MkMenu = this;\n while (m.parent) m = m.parent;\n return m;\n }\n\n /** Focus an item once the panel is in the top layer and painted. */\n private focusAfterOpen(which: 'first' | 'last'): void {\n afterNextRender(\n {\n write: () => {\n if (which === 'last') this.focusLast();\n else this.focusFirst();\n },\n },\n { injector: this.injector },\n );\n }\n\n /**\n * Whether the menu is laid out right-to-left (submenu side + arrow keys).\n * Read from the trigger's nearest `dir` attribute — the panel itself lives\n * in the top layer, outside any `dir` container — then from computed style.\n */\n private isRtl(): boolean {\n // A submenu's trigger is an item inside a teleported panel, so climb to\n // the root menu, whose trigger sits in the consumer's DOM.\n const el = this.root().triggerEl ?? this.panelRef()?.nativeElement;\n if (!el) return this.document.dir === 'rtl';\n const dir = el.closest('[dir]')?.getAttribute('dir');\n if (dir) return dir.toLowerCase() === 'rtl';\n const view = this.document.defaultView;\n return (view?.getComputedStyle(el).direction ?? 'ltr') === 'rtl';\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n const rtl = this.isRtl();\n const openKey = rtl ? 'ArrowLeft' : 'ArrowRight';\n const closeKey = rtl ? 'ArrowRight' : 'ArrowLeft';\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.focusFirst();\n break;\n case 'End':\n event.preventDefault();\n this.focusLast();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.activeItem()?.activate();\n break;\n case openKey: {\n const item = this.activeItem();\n if (item?.submenu()) {\n event.preventDefault();\n item.openSubmenu(true);\n }\n break;\n }\n case closeKey:\n if (this.isSubmenu) {\n event.preventDefault();\n this.close(true);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close(true);\n break;\n case 'Tab':\n event.preventDefault();\n this.closeAll(true);\n break;\n default:\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n this.onTypeahead(event.key);\n }\n }\n }\n\n /** Placement for a submenu hanging off `item`, honouring text direction. */\n submenuPlacement(): MkPlacement {\n return this.isRtl() ? 'left-start' : 'right-start';\n }\n\n private enabled(): MkMenuItem[] {\n return this.items().filter((i) => !i.disabled());\n }\n\n private activeItem(): MkMenuItem | undefined {\n const active = this.document.activeElement;\n return this.enabled().find((i) => i.contains(active));\n }\n\n private currentIndex(): number {\n const active = this.document.activeElement;\n return this.enabled().findIndex((i) => i.contains(active));\n }\n\n private move(delta: number): void {\n const items = this.enabled();\n if (items.length === 0) return;\n const current = this.currentIndex();\n const next =\n current < 0\n ? delta > 0\n ? 0\n : items.length - 1\n : (current + delta + items.length) % items.length;\n items[next].focusEl();\n }\n\n private focusFirst(): void {\n this.enabled()[0]?.focusEl();\n }\n\n private focusLast(): void {\n const items = this.enabled();\n items[items.length - 1]?.focusEl();\n }\n\n private onTypeahead(char: string): void {\n this.typeahead += char.toLowerCase();\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n this.typeaheadTimer = setTimeout(() => (this.typeahead = ''), 500);\n\n const items = this.enabled();\n const start = Math.max(0, this.currentIndex());\n for (let i = 1; i <= items.length; i++) {\n const item = items[(start + i) % items.length];\n if (item.text().startsWith(this.typeahead)) {\n item.focusEl();\n return;\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadTimer) clearTimeout(this.typeaheadTimer);\n if (this._open()) this.close(false);\n }\n}\n","@if (opened()) {\n <div\n #panel\n class=\"mk-menu__panel\"\n [class.mk-menu__panel--submenu]=\"isSubmenu\"\n role=\"menu\"\n [id]=\"panelId\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"anchorEl()\"\n [anchorRect]=\"anchorPoint()\"\n [placement]=\"placement()\"\n [keepOpenWhen]=\"keepOpenWhen\"\n (dismiss)=\"close(false)\"\n [attr.aria-label]=\"ariaLabel()\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <ng-content />\n </div>\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { MkMenu } from './menu';\n\n/**\n * Turns its host button into a trigger for an `<mk-menu>`. Wires\n * `aria-haspopup=\"menu\"` / `aria-expanded` / `aria-controls`, toggles on click,\n * opens on ArrowDown / Enter / Space (focusing the first item) and on ArrowUp\n * (focusing the last item, per the APG menu-button pattern), and closes on\n * Escape. When the menu is already open — e.g. after a mouse click, which\n * deliberately leaves focus on the trigger — ArrowDown moves focus to the\n * first item and ArrowUp to the last, so the keyboard is never dead.\n *\n * ```html\n * <button mkButton [mkMenuTriggerFor]=\"menu\">Actions</button>\n * <mk-menu #menu>…</mk-menu>\n * ```\n */\n@Directive({\n selector: '[mkMenuTriggerFor]',\n exportAs: 'mkMenuTrigger',\n host: {\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'menu().opened()',\n '[attr.aria-controls]': 'menu().panelId',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class MkMenuTrigger {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The menu instance to control. */\n readonly menu = input.required<MkMenu>({ alias: 'mkMenuTriggerFor' });\n\n protected onClick(event: Event): void {\n event.preventDefault();\n this.menu().toggle(this.host.nativeElement, false);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const menu = this.menu();\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (menu.opened()) {\n // Already open (mouse open keeps focus on the trigger) — enter the\n // menu at the top instead of swallowing the key.\n menu.focusFirstItem();\n } else {\n menu.open(this.host.nativeElement, 'first');\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (menu.opened()) {\n menu.focusLastItem();\n } else {\n menu.open(this.host.nativeElement, 'last');\n }\n break;\n case 'Escape':\n if (menu.opened()) {\n event.preventDefault();\n menu.close(true);\n }\n break;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport type { MkSize, MkTone, MkVariant } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkButton } from '@mk-kit/ui/button';\nimport { MkMenu } from '../menu/menu';\nimport { MkMenuTrigger } from '../menu/menu-trigger';\n\n/**\n * SplitButton — a primary action with an attached menu of alternatives.\n * The main segment emits `action`; the chevron segment is a menu button\n * (`mkMenuTriggerFor`) for the `mk-menu` passed in `[menu]`, with the full\n * keyboard model of the menu trigger (ArrowDown / Enter / Space open and focus\n * the first item, ArrowUp the last, Escape closes).\n *\n * Both segments share `variant`, `tone` and `size`; `disabled` disables both,\n * `loading` shows the main segment's spinner and disables the chevron.\n *\n * ```html\n * <mk-split-button [menu]=\"saveMenu\" tone=\"primary\" (action)=\"save()\">\n * Save\n * </mk-split-button>\n * <mk-menu #saveMenu>\n * <mk-menu-item (action)=\"saveAs()\">Save as…</mk-menu-item>\n * <mk-menu-item (action)=\"saveTemplate()\">Save as template</mk-menu-item>\n * </mk-menu>\n * ```\n */\n@Component({\n selector: 'mk-split-button',\n templateUrl: './split-button.html',\n styleUrl: './split-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkButton, MkMenuTrigger],\n host: {\n class: 'mk-split-button',\n role: 'group',\n '[class.mk-split-button--block]': 'fullWidth()',\n '[class.mk-split-button--sm]': \"size() === 'sm'\",\n '[class.mk-split-button--lg]': \"size() === 'lg'\",\n '[class.mk-split-button--outline]': \"variant() === 'outline'\",\n },\n})\nexport class MkSplitButton {\n protected readonly i18n = inject(MK_I18N);\n\n /** The menu the chevron segment opens. */\n readonly menu = input.required<MkMenu>();\n /** Visual treatment shared by both segments. */\n readonly variant = input<MkVariant>('solid');\n /** Semantic color tone shared by both segments. */\n readonly tone = input<MkTone>('primary');\n /** Control size shared by both segments. */\n readonly size = input<MkSize>('md');\n /** Disable both segments. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Spinner on the main segment; the menu segment is disabled meanwhile. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Stretch to the container width (the main segment grows). */\n readonly fullWidth = input(false, { transform: booleanAttribute });\n /** `type` of the main segment — `submit` to submit the enclosing form. */\n readonly type = input<'button' | 'submit'>('button');\n /** Accessible name of the chevron segment. */\n readonly menuLabel = input(this.i18n.moreActions);\n\n /** Emitted when the main segment is activated (not while disabled/loading). */\n readonly action = output<void>();\n\n protected readonly menuDisabled = computed(() => this.disabled() || this.loading());\n\n protected onMain(): void {\n if (this.disabled() || this.loading()) return;\n this.action.emit();\n }\n}\n","<button\n mkButton\n class=\"mk-split-button__main\"\n [type]=\"type()\"\n [variant]=\"variant()\"\n [tone]=\"tone()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [loading]=\"loading()\"\n (click)=\"onMain()\"\n>\n <ng-content />\n</button>\n<button\n mkButton\n class=\"mk-split-button__toggle\"\n type=\"button\"\n iconOnly\n [variant]=\"variant()\"\n [tone]=\"tone()\"\n [size]=\"size()\"\n [disabled]=\"menuDisabled()\"\n [mkMenuTriggerFor]=\"menu()\"\n [attr.aria-label]=\"menuLabel()\"\n>\n <svg\n class=\"mk-split-button__chevron\"\n viewBox=\"0 0 16 16\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M3.5 6 8 10.5 12.5 6\" />\n </svg>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n effect,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MkFocusTrap } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** Viewport width (px) at/below which the sidebar becomes an off-canvas drawer. */\nconst MOBILE_BREAKPOINT = 1024;\n\n/**\n * Admin dashboard layout with a fixed header, a collapsible/responsive sidebar\n * and a main content area. On small screens the sidebar becomes a focus-trapped\n * off-canvas drawer with a scrim (Escape to close). Includes a skip-to-content\n * link for keyboard users.\n *\n * ```html\n * <mk-app-shell [(sidebarOpen)]=\"open\" [(sidebarCollapsed)]=\"collapsed\">\n * <div mkAppHeader>\n * <button mkButton iconOnly (click)=\"shell.toggleSidebar()\">☰</button>\n * </div>\n * <mk-nav-list mkAppSidebar [collapsed]=\"collapsed()\">…</mk-nav-list>\n * <router-outlet />\n * </mk-app-shell>\n * ```\n */\n@Component({\n selector: 'mk-app-shell',\n templateUrl: './app-shell.html',\n styleUrl: './app-shell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-app-shell',\n '[class.mk-app-shell--collapsed]': 'sidebarCollapsed() && !isMobile()',\n '[class.mk-app-shell--mobile]': 'isMobile()',\n '[class.mk-app-shell--drawer-open]': 'isMobile() && sidebarOpen()',\n },\n})\nexport class MkAppShell {\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n protected readonly i18n = inject(MK_I18N);\n\n private readonly sidebarRef =\n viewChild<ElementRef<HTMLElement>>('sidebar');\n\n /** Whether the mobile drawer is open (two-way). */\n readonly sidebarOpen = model(false);\n /** Whether the desktop sidebar is collapsed to icons (two-way). */\n readonly sidebarCollapsed = model(false);\n\n /** True when the viewport is at/below the mobile breakpoint. */\n readonly isMobile = signal(false);\n\n private focusTrap?: MkFocusTrap;\n\n constructor() {\n if (this.isBrowser) {\n const mql = this.document.defaultView?.matchMedia(\n `(max-width: ${MOBILE_BREAKPOINT}px)`,\n );\n if (mql) {\n this.isMobile.set(mql.matches);\n this.mql = mql;\n mql.addEventListener('change', this.onMediaChange);\n }\n }\n\n // Trap focus inside the drawer while it is open on mobile.\n effect(() => {\n const el = this.sidebarRef()?.nativeElement;\n const active = this.isMobile() && this.sidebarOpen();\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (active && el) {\n this.focusTrap = new MkFocusTrap(el);\n this.focusTrap.activate();\n }\n });\n }\n\n private mql?: MediaQueryList;\n private readonly onMediaChange = (e: MediaQueryListEvent): void => {\n this.isMobile.set(e.matches);\n if (!e.matches) this.sidebarOpen.set(false);\n };\n\n ngOnDestroy(): void {\n this.mql?.removeEventListener('change', this.onMediaChange);\n this.focusTrap?.release();\n this.focusTrap = undefined;\n }\n\n /** Toggle the mobile drawer open/closed. Handy for a hamburger button. */\n toggleSidebar(): void {\n this.sidebarOpen.update((v) => !v);\n }\n\n /** Open the mobile drawer. */\n openSidebar(): void {\n this.sidebarOpen.set(true);\n }\n\n /** Close the mobile drawer. */\n closeSidebar(): void {\n this.sidebarOpen.set(false);\n }\n\n /** Toggle the desktop collapsed (icon-only) state. */\n toggleCollapsed(): void {\n this.sidebarCollapsed.update((v) => !v);\n }\n\n protected onSidebarKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.isMobile() && this.sidebarOpen()) {\n event.preventDefault();\n this.closeSidebar();\n }\n }\n}\n","<a class=\"mk-app-shell__skip\" href=\"#mk-app-main\">{{ i18n.skipToContent }}</a>\n\n<header class=\"mk-app-shell__header\" role=\"banner\">\n <ng-content select=\"[mkAppHeader]\" />\n</header>\n\n<div class=\"mk-app-shell__body\">\n <aside\n #sidebar\n class=\"mk-app-shell__sidebar\"\n [attr.role]=\"isMobile() ? 'dialog' : null\"\n [attr.aria-modal]=\"isMobile() && sidebarOpen() ? 'true' : null\"\n [attr.aria-label]=\"isMobile() ? 'Sidebar navigation' : null\"\n [attr.inert]=\"isMobile() && !sidebarOpen() ? '' : null\"\n (keydown)=\"onSidebarKeydown($event)\"\n >\n <nav class=\"mk-app-shell__nav\" [attr.aria-label]=\"i18n.primaryNav\">\n <ng-content select=\"[mkAppSidebar]\" />\n </nav>\n </aside>\n\n @if (isMobile() && sidebarOpen()) {\n <div\n class=\"mk-app-shell__scrim\"\n aria-hidden=\"true\"\n (click)=\"closeSidebar()\"\n ></div>\n }\n\n <main\n id=\"mk-app-main\"\n class=\"mk-app-shell__main\"\n role=\"main\"\n tabindex=\"-1\"\n >\n <ng-content />\n </main>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Sidebar navigation list. Hosts `<mk-nav-item>`s and, when `collapsed`, drives\n * them into an icon-only rail (labels hidden, exposed via `title` tooltips).\n * Designed to sit inside the `mkAppSidebar` slot of `<mk-app-shell>`.\n *\n * ```html\n * <mk-nav-list [collapsed]=\"collapsed()\">\n * <mk-nav-item label=\"Dashboard\" href=\"/\" active>\n * <svg mkNavIcon>…</svg>\n * </mk-nav-item>\n * </mk-nav-list>\n * ```\n */\n@Component({\n selector: 'mk-nav-list',\n templateUrl: './nav-list.html',\n styleUrl: './nav-list.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-nav-list',\n '[class.mk-nav-list--collapsed]': 'collapsed()',\n },\n})\nexport class MkNavList {\n /** Collapse items to icon-only. Read by descendant `MkNavItem`s. */\n readonly collapsed = input(false, { transform: booleanAttribute });\n}\n","<ul class=\"mk-nav-list__items\" role=\"list\">\n <ng-content />\n</ul>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkNavList } from './nav-list';\n\n/**\n * A single sidebar entry: icon slot (`[mkNavIcon]`), label, optional badge and\n * active state. Renders a link when `href` is set, otherwise a button that\n * emits `action`. If it contains nested `<mk-nav-item>`s it becomes an\n * expandable disclosure (`aria-expanded`). Collapses to an icon in a collapsed\n * list, exposing the label as a tooltip — and because a sub-list can't be shown\n * at rail width, a parent item there emits `action` (navigate) instead of\n * toggling, so it never becomes a dead button.\n *\n * ```html\n * <mk-nav-item label=\"Reports\" active href=\"/reports\" badge=\"3\">\n * <svg mkNavIcon>…</svg>\n * </mk-nav-item>\n * <mk-nav-item label=\"Settings\">\n * <svg mkNavIcon>…</svg>\n * <mk-nav-item label=\"Team\" href=\"/team\" />\n * </mk-nav-item>\n * ```\n */\n@Component({\n selector: 'mk-nav-item',\n templateUrl: './nav-item.html',\n styleUrl: './nav-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n class: 'mk-nav-item',\n role: 'listitem',\n '[class.mk-nav-item--active]': 'active()',\n '[class.mk-nav-item--collapsed]': 'collapsed()',\n '[class.mk-nav-item--has-children]': 'hasChildren()',\n },\n})\nexport class MkNavItem {\n private readonly list = inject(MkNavList, { optional: true });\n\n /** Visible label. Also used as the tooltip when collapsed. */\n readonly label = input('');\n /** Link target. Renders an anchor instead of a button. */\n readonly href = input<string>();\n /** Marks the current page (`aria-current=\"page\"`). */\n readonly active = input(false, { transform: booleanAttribute });\n /** Disable interaction. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Optional badge (count or short text). */\n readonly badge = input<string | number>();\n /** Whether nested children are expanded (two-way). */\n readonly expanded = model(false);\n\n /** Emitted when a button-style item is activated. */\n readonly action = output<void>();\n\n /** Nested items projected inside this one. */\n private readonly children = contentChildren(MkNavItem);\n protected readonly hasChildren = computed(() => this.children().length > 0);\n\n /** Collapsed state inherited from the enclosing `MkNavList`. */\n protected readonly collapsed = computed(() => this.list?.collapsed() ?? false);\n\n /** Id wiring the disclosure button to its sub-list. */\n protected readonly subId = mkUniqueId('mk-nav-sub');\n\n protected toggle(): void {\n if (this.disabled()) return;\n // In a collapsed (icon-rail) list the sub-list cannot be shown, so flipping\n // `expanded` would be an invisible no-op and the item would read as a dead\n // button. Emit `action` instead, letting the host navigate to the section —\n // the same thing a leaf item does. Hosts that don't bind `(action)` on\n // parents simply keep the previous (no-op) behaviour.\n if (this.collapsed()) {\n this.action.emit();\n return;\n }\n this.expanded.update((v) => !v);\n }\n\n protected activate(): void {\n if (this.disabled()) return;\n this.action.emit();\n }\n}\n","<!-- Projected slots captured once: a projection slot belongs to exactly one\n ng-content, so referencing it directly from several @if branches leaves\n all but one branch empty. -->\n<ng-template #iconTpl>\n <span class=\"mk-nav-item__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkNavIcon]\" />\n </span>\n</ng-template>\n\n@if (hasChildren()) {\n <button\n type=\"button\"\n class=\"mk-nav-item__link\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"subId\"\n [attr.title]=\"collapsed() ? label() : null\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconTpl\" />\n <span class=\"mk-nav-item__label\">{{ label() }}</span>\n @if (badge() !== undefined) {\n <span class=\"mk-nav-item__badge\">{{ badge() }}</span>\n }\n <span class=\"mk-nav-item__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </span>\n </button>\n\n <ul\n class=\"mk-nav-item__sub\"\n role=\"list\"\n [id]=\"subId\"\n [attr.hidden]=\"expanded() && !collapsed() ? null : ''\"\n >\n <ng-content select=\"mk-nav-item\" />\n </ul>\n} @else if (href()) {\n <a\n class=\"mk-nav-item__link\"\n [href]=\"href()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.title]=\"collapsed() ? label() : null\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"disabled() ? -1 : null\"\n >\n <ng-container [ngTemplateOutlet]=\"iconTpl\" />\n <span class=\"mk-nav-item__label\">{{ label() }}</span>\n @if (badge() !== undefined) {\n <span class=\"mk-nav-item__badge\">{{ badge() }}</span>\n }\n </a>\n} @else {\n <button\n type=\"button\"\n class=\"mk-nav-item__link\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.title]=\"collapsed() ? label() : null\"\n [disabled]=\"disabled()\"\n (click)=\"activate()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconTpl\" />\n <span class=\"mk-nav-item__label\">{{ label() }}</span>\n @if (badge() !== undefined) {\n <span class=\"mk-nav-item__badge\">{{ badge() }}</span>\n }\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkNavList } from './nav-list';\n\n/**\n * A titled section within an `<mk-nav-list>` — the \"MAIN\" / \"SETTINGS\" groupings\n * common in admin/CMS sidebars. Static by default; set `collapsible` to make\n * the label a toggle that expands/collapses its items (`aria-expanded` +\n * region). In a collapsed icon rail the label becomes a divider.\n *\n * ```html\n * <mk-nav-list>\n * <mk-nav-group label=\"Main\">\n * <mk-nav-item label=\"Dashboard\" href=\"/\" />\n * </mk-nav-group>\n * <mk-nav-group label=\"Settings\" collapsible>\n * <mk-nav-item label=\"Team\" href=\"/team\" />\n * </mk-nav-group>\n * </mk-nav-list>\n * ```\n */\n@Component({\n selector: 'mk-nav-group',\n templateUrl: './nav-group.html',\n styleUrl: './nav-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-nav-group',\n role: 'group',\n '[attr.aria-label]': 'label() || null',\n '[class.mk-nav-group--collapsed-rail]': 'railCollapsed()',\n '[class.mk-nav-group--closed]': 'collapsible() && !expanded()',\n },\n})\nexport class MkNavGroup {\n private readonly list = inject(MkNavList, { optional: true });\n\n /** Section title. */\n readonly label = input('');\n /** Make the label a toggle that shows/hides the items. */\n readonly collapsible = input(false, { transform: booleanAttribute });\n /** Whether the section is expanded (two-way; only meaningful when collapsible). */\n readonly expanded = model(true);\n\n /** Id of the items region (for `aria-controls`). */\n readonly regionId = mkUniqueId('mk-nav-group');\n\n /** Whether the enclosing list is a collapsed icon rail. */\n protected readonly railCollapsed = computed(\n () => this.list?.collapsed() ?? false,\n );\n /** Items are visible unless collapsible-and-closed. */\n protected readonly itemsVisible = computed(\n () => !this.collapsible() || this.expanded(),\n );\n\n protected toggle(): void {\n if (this.collapsible()) this.expanded.update((v) => !v);\n }\n}\n","@if (collapsible() && !railCollapsed()) {\n <button\n type=\"button\"\n class=\"mk-nav-group__header mk-nav-group__header--toggle\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"regionId\"\n (click)=\"toggle()\"\n >\n <span class=\"mk-nav-group__label\">{{ label() }}</span>\n <span class=\"mk-nav-group__chevron\" aria-hidden=\"true\"></span>\n </button>\n} @else if (!railCollapsed()) {\n <p class=\"mk-nav-group__header\">\n <span class=\"mk-nav-group__label\">{{ label() }}</span>\n </p>\n}\n\n<div\n class=\"mk-nav-group__items\"\n [id]=\"regionId\"\n [attr.hidden]=\"itemsVisible() ? null : ''\"\n>\n <ng-content />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n booleanAttribute,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\n\n/**\n * A single step + its content panel. Declared inside `<mk-stepper>`; the\n * projected content becomes the step body while `label` (and optional\n * `description`) render in the step header.\n *\n * `completed` is a two-way model so a parent can gate a `linear` stepper:\n * `<mk-step label=\"Details\" [(completed)]=\"detailsValid()\">`.\n *\n * ```html\n * <mk-stepper linear>\n * <mk-step label=\"Account\" [completed]=\"form.valid\">…</mk-step>\n * <mk-step label=\"Payment\" optional>…</mk-step>\n * </mk-stepper>\n * ```\n */\n@Component({\n selector: 'mk-step',\n templateUrl: './step.html',\n styleUrl: './step.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-step',\n },\n})\nexport class MkStep {\n /** Title shown in the step header. */\n readonly label = input('');\n /** Optional secondary line under the label. */\n readonly description = input('');\n /** Marks the step optional (skippable in a `linear` stepper). */\n readonly optional = input(false, { transform: booleanAttribute });\n /** Whether the step is complete (two-way; drives `linear` gating + the ✓). */\n readonly completed = model(false);\n /** Show the error state in the header (e.g. failed validation). */\n readonly hasError = input(false, { transform: booleanAttribute });\n /** Allow returning to this step after it is completed. */\n readonly editable = input(true, { transform: booleanAttribute });\n\n /** Stable id for the header button (wires `aria-labelledby`). */\n readonly headerId = mkUniqueId('mk-step');\n /** Stable id for the panel (wires `aria-controls`). */\n readonly panelId = mkUniqueId('mk-step-panel');\n\n /** Whether this step is currently selected. Set by the parent `MkStepper`. */\n readonly active = signal(false);\n\n /**\n * The step body, captured so `MkStepper` can render it in the position the\n * orientation calls for. The host element itself stays empty — the panel\n * wrapper (and its role/aria) belongs to the stepper, which is the only\n * place that knows whether this is a tab panel or a disclosure region.\n */\n readonly content = viewChild.required(TemplateRef);\n}\n","<!--\n The body is captured as a TEMPLATE rather than projected in place, so the\n parent `MkStepper` can render it wherever the orientation requires — beneath\n the header rail when horizontal, or interleaved directly under its own header\n when vertical. Projecting it here would pin every panel below every header.\n-->\n<ng-template>\n <ng-content />\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { isPlatformServer } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n model,\n output,\n viewChildren,\n} from '@angular/core';\nimport { MkStep } from './step';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** Orientation of the step header rail. */\nexport type MkStepperOrientation = 'horizontal' | 'vertical';\n\n/**\n * Stepper — walks a user through an ordered sequence of `<mk-step>`s with an\n * accessible header rail (ARIA `tablist` + roving tabindex, Arrow/Home/End\n * navigation) and a single visible panel.\n *\n * In `linear` mode a step is only reachable once every preceding required\n * (non-`optional`) step reports `completed`. Drive completion from your form\n * state and move with the `next()` / `previous()` / `reset()` API or by\n * clicking a reachable header.\n *\n * ```html\n * <mk-stepper #s linear [(selectedIndex)]=\"index\">\n * <mk-step label=\"Account\" [completed]=\"accountValid()\">…</mk-step>\n * <mk-step label=\"Address\" [completed]=\"addressValid()\">…</mk-step>\n * <mk-step label=\"Review\">…</mk-step>\n * </mk-stepper>\n * <button mkButton (click)=\"s.previous()\">Back</button>\n * <button mkButton (click)=\"s.next()\">Next</button>\n * ```\n */\n@Component({\n selector: 'mk-stepper',\n imports: [NgTemplateOutlet],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-stepper',\n '[class.mk-stepper--horizontal]': \"orientation() === 'horizontal'\",\n '[class.mk-stepper--vertical]': \"orientation() === 'vertical'\",\n },\n})\nexport class MkStepper {\n protected readonly i18n = inject(MK_I18N);\n /** Step hosts are projected on the server only — see stepper.html. */\n protected readonly isServer = isPlatformServer(inject(PLATFORM_ID));\n\n /** Projected steps, kept live via a signal content query. */\n readonly steps = contentChildren(MkStep);\n /** Rendered header buttons, used to move focus. */\n protected readonly headerButtons =\n viewChildren<ElementRef<HTMLButtonElement>>('stepBtn');\n\n /** Zero-based index of the active step (two-way). */\n readonly selectedIndex = model(0);\n /** Header rail orientation. */\n readonly orientation = input<MkStepperOrientation>('horizontal');\n /** Enforce sequential completion before a step becomes reachable. */\n readonly linear = input(false, { transform: booleanAttribute });\n\n protected readonly isHorizontal = computed(\n () => this.orientation() === 'horizontal',\n );\n\n /** Emits the newly selected index whenever the active step changes. */\n readonly selectionChange = output<number>();\n\n constructor() {\n // Keep each step's `active` flag in sync with the clamped selected index.\n effect(() => {\n const steps = this.steps();\n const index = this.clampedIndex();\n steps.forEach((step, i) => step.active.set(i === index));\n });\n }\n\n private readonly clampedIndex = computed(() => {\n const count = this.steps().length;\n if (count === 0) return 0;\n return Math.min(Math.max(this.selectedIndex(), 0), count - 1);\n });\n\n /** 1-based label for the header circle. */\n protected stepNumber(index: number): number {\n return index + 1;\n }\n\n /**\n * Whether a step can be selected. In linear mode every earlier required step\n * must be completed; a completed step is reachable only when `editable`.\n */\n isReachable(index: number): boolean {\n const steps = this.steps();\n if (index < 0 || index >= steps.length) return false;\n if (!this.linear()) return true;\n if (index <= this.clampedIndex()) {\n // Going back is allowed only to editable steps.\n return steps[index].editable() || index === this.clampedIndex();\n }\n for (let i = 0; i < index; i++) {\n if (!steps[i].optional() && !steps[i].completed()) return false;\n }\n return true;\n }\n\n protected select(index: number): void {\n if (!this.isReachable(index)) return;\n if (index === this.clampedIndex()) return;\n this.selectedIndex.set(index);\n this.selectionChange.emit(index);\n }\n\n protected focusHeader(index: number): void {\n this.headerButtons()[index]?.nativeElement.focus();\n }\n\n /** Advance to the next reachable step, if any. */\n next(): void {\n const from = this.clampedIndex();\n const target = from + 1;\n if (target < this.steps().length && this.isReachable(target)) {\n this.select(target);\n }\n }\n\n /** Return to the previous step, if any. */\n previous(): void {\n const target = this.clampedIndex() - 1;\n if (target >= 0) this.select(target);\n }\n\n /** Reset to the first step and clear every step's completed flag. */\n reset(): void {\n this.steps().forEach((s) => s.completed.set(false));\n this.selectedIndex.set(0);\n this.selectionChange.emit(0);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const count = this.steps().length;\n let next = -1;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = this.nextFocusable(index, 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = this.nextFocusable(index, -1);\n break;\n case 'Home':\n next = this.nextFocusable(-1, 1);\n break;\n case 'End':\n next = this.nextFocusable(count, -1);\n break;\n default:\n return;\n }\n if (next >= 0) {\n event.preventDefault();\n // Automatic activation (as in `mk-tabs`): selection follows focus for\n // reachable steps. `nextFocusable` already skips unreachable ones, so the\n // guard only matters if the step became unreachable in between.\n this.focusHeader(next);\n if (this.isReachable(next)) this.select(next);\n }\n }\n\n /** Next header index (wrapping) whose step is reachable. */\n private nextFocusable(from: number, step: number): number {\n const count = this.steps().length;\n if (!count) return -1;\n for (let i = 1; i <= count; i++) {\n const idx = (((from + step * i) % count) + count) % count;\n if (this.isReachable(idx)) return idx;\n }\n return -1;\n }\n}\n","<!--\n Steps are content children whose bodies are TEMPLATES (see MkStep), so this\n view decides where each one lands. Horizontal keeps the classic split: one\n header rail, one panel area below it. Vertical INTERLEAVES header and body,\n the way a vertical stepper is expected to read.\n\n The ARIA model differs with it, deliberately. Horizontal is a tablist: tabs\n must be direct children of their tablist, which an interleaved layout cannot\n satisfy. Vertical is therefore a disclosure pattern instead — plain buttons\n with aria-expanded driving labelled regions. Same visuals, both valid.\n\n On the server the step hosts still have to be projected somewhere or the\n serializer has nowhere to put the projected nodes and hydration fails. They\n render empty (the body lives in a template), so this costs nothing visually.\n-->\n@if (isServer) {\n <ng-content />\n}\n\n@if (orientation() === 'horizontal') {\n <div class=\"mk-stepper__header\" role=\"tablist\" aria-orientation=\"horizontal\">\n @for (\n step of steps();\n track step.headerId;\n let i = $index;\n let last = $last\n ) {\n <ng-container\n [ngTemplateOutlet]=\"headerTpl\"\n [ngTemplateOutletContext]=\"{ step: step, i: i }\"\n />\n @if (!last) {\n <span class=\"mk-stepper__connector\" aria-hidden=\"true\"></span>\n }\n }\n </div>\n\n <div class=\"mk-stepper__panels\">\n @for (step of steps(); track step.headerId) {\n <div\n class=\"mk-stepper__panel\"\n role=\"tabpanel\"\n [id]=\"step.panelId\"\n [attr.aria-labelledby]=\"step.headerId\"\n [attr.tabindex]=\"step.active() ? 0 : null\"\n [attr.inert]=\"step.active() ? null : ''\"\n [hidden]=\"!step.active()\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content()\" />\n </div>\n }\n </div>\n} @else {\n @for (\n step of steps();\n track step.headerId;\n let i = $index;\n let last = $last\n ) {\n <div class=\"mk-stepper__row\">\n <ng-container\n [ngTemplateOutlet]=\"headerTpl\"\n [ngTemplateOutletContext]=\"{ step: step, i: i }\"\n />\n <!-- The rule down the side is this wrapper's left border, so it spans the\n expanded body and stops at the last step. -->\n <div\n class=\"mk-stepper__vline\"\n [class.mk-stepper__vline--last]=\"last\"\n [attr.inert]=\"step.active() ? null : ''\"\n >\n <div\n class=\"mk-stepper__panel\"\n role=\"region\"\n [id]=\"step.panelId\"\n [attr.aria-labelledby]=\"step.headerId\"\n [hidden]=\"!step.active()\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content()\" />\n </div>\n </div>\n </div>\n }\n}\n\n<ng-template #headerTpl let-step=\"step\" let-i=\"i\">\n <button\n #stepBtn\n type=\"button\"\n class=\"mk-stepper__step\"\n [class.mk-stepper__step--active]=\"step.active()\"\n [class.mk-stepper__step--completed]=\"step.completed()\"\n [class.mk-stepper__step--error]=\"step.hasError()\"\n [id]=\"step.headerId\"\n [attr.role]=\"isHorizontal() ? 'tab' : null\"\n [attr.aria-controls]=\"step.panelId\"\n [attr.aria-selected]=\"isHorizontal() ? step.active() : null\"\n [attr.aria-posinset]=\"isHorizontal() ? i + 1 : null\"\n [attr.aria-setsize]=\"isHorizontal() ? steps().length : null\"\n [attr.aria-expanded]=\"isHorizontal() ? null : step.active()\"\n [attr.aria-current]=\"!isHorizontal() && step.active() ? 'step' : null\"\n [attr.aria-disabled]=\"!isReachable(i) || null\"\n [attr.tabindex]=\"step.active() ? 0 : -1\"\n [disabled]=\"!isReachable(i)\"\n (click)=\"select(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n <span class=\"mk-stepper__marker\" aria-hidden=\"true\">\n @if (step.hasError()) {\n <span class=\"mk-stepper__bang\">!</span>\n } @else if (step.completed()) {\n <span class=\"mk-stepper__check\"></span>\n } @else {\n {{ stepNumber(i) }}\n }\n </span>\n <span class=\"mk-stepper__labels\">\n <span class=\"mk-stepper__label\">\n {{ step.label() }}\n @if (step.optional()) {\n <span class=\"mk-stepper__optional\">{{ i18n.optional }}</span>\n }\n </span>\n @if (step.description()) {\n <span class=\"mk-stepper__description\">{{ step.description() }}</span>\n }\n </span>\n <!-- The marker above is aria-hidden, so the completed/error state needs a\n textual counterpart for assistive tech. -->\n @if (step.hasError()) {\n <span class=\"mk-visually-hidden\">{{ i18n.stepError }}</span>\n } @else if (step.completed()) {\n <span class=\"mk-visually-hidden\">{{ i18n.stepCompleted }}</span>\n }\n </button>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\n\n/** A node in an {@link MkTree}. `children` makes it expandable. */\nexport interface MkTreeNode {\n /** Text shown for the node. */\n label: string;\n /** Value bound to the selection when the node is chosen (defaults to the node). */\n value?: unknown;\n /** Child nodes; a non-empty array makes the node a parent (expandable). */\n children?: MkTreeNode[];\n /** Disable selection/toggling of this node (still focusable). */\n disabled?: boolean;\n /** Expand this node initially. */\n expanded?: boolean;\n /** Optional leading glyph (any short string / emoji). */\n icon?: string;\n}\n\n/** One visible row after flattening the tree for keyboard + rendering. */\ninterface MkTreeRow {\n node: MkTreeNode;\n level: number;\n posinset: number;\n setsize: number;\n expandable: boolean;\n expanded: boolean;\n}\n\n/**\n * Tree — renders hierarchical data following the ARIA tree pattern\n * (`role=\"tree\"` / `treeitem` with `aria-level`, `aria-expanded`,\n * `aria-selected`). Supply `nodes`; expansion is managed internally.\n *\n * Keyboard: Up/Down move between visible rows, Right expands (or steps into the\n * first child), Left collapses (or steps out to the parent), Home/End jump, and\n * Enter/Space toggles expansion and selects (when `selectable`). A single\n * roving tabindex keeps the whole tree one tab stop.\n *\n * ```html\n * <mk-tree selectable [nodes]=\"tree\" [(selected)]=\"picked\"\n * (selectionChange)=\"onPick($event)\" />\n * ```\n */\n@Component({\n selector: 'mk-tree',\n templateUrl: './tree.html',\n styleUrl: './tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-tree',\n },\n})\nexport class MkTree {\n /** The hierarchical data to render. */\n readonly nodes = input<readonly MkTreeNode[]>([]);\n /** Allow choosing a node (adds selection styling + `aria-selected`). */\n readonly selectable = input(false, { transform: booleanAttribute });\n /** Accessible name for the tree. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n /** Two-way selected value (a node's `value`, or the node itself if unset). */\n readonly selected = model<unknown>(null);\n\n /** Emits the selected value whenever the selection changes. */\n readonly selectionChange = output<unknown>();\n /** Emits a node whenever it is expanded or collapsed. */\n readonly nodeToggle = output<MkTreeNode>();\n\n protected readonly rowRefs =\n viewChildren<ElementRef<HTMLElement>>('row');\n\n /**\n * Expanded nodes. Survives `nodes` identity changes (a consumer rebuilding\n * the array keeps the user's expansion state for the node objects it\n * reuses); a node's `expanded` flag only seeds nodes NOT present in the\n * previous array — so it applies on first render and to newly added nodes,\n * without reverting branches the user has since collapsed.\n */\n private readonly expandedSet = linkedSignal<\n readonly MkTreeNode[],\n ReadonlySet<MkTreeNode>\n >({\n source: this.nodes,\n computation: (nodes, previous) => {\n const prevExpanded = previous?.value;\n // Lazily built set of nodes from the previous input — only needed when\n // a node carries `expanded: true` and we must decide whether it is new.\n let prevNodes: Set<MkTreeNode> | null = null;\n const isNewNode = (node: MkTreeNode): boolean => {\n if (!previous) return true;\n if (prevNodes === null) {\n prevNodes = new Set<MkTreeNode>();\n const collect = (list: readonly MkTreeNode[]): void => {\n for (const n of list) {\n prevNodes!.add(n);\n if (n.children?.length) collect(n.children);\n }\n };\n collect(previous.source);\n }\n return !prevNodes.has(node);\n };\n const next = new Set<MkTreeNode>();\n const walk = (list: readonly MkTreeNode[]): void => {\n for (const node of list) {\n if (node.children?.length) {\n if (prevExpanded?.has(node) || (node.expanded && isNewNode(node))) {\n next.add(node);\n }\n walk(node.children);\n }\n }\n };\n walk(nodes);\n return next;\n },\n });\n protected readonly activeIndex = signal(0);\n\n /** Flattened list of currently visible rows (respects expansion). */\n protected readonly rows = computed<MkTreeRow[]>(() => {\n const expanded = this.expandedSet();\n const out: MkTreeRow[] = [];\n const walk = (list: readonly MkTreeNode[], level: number): void => {\n list.forEach((node, i) => {\n const expandable = !!node.children?.length;\n const isExpanded = expandable && expanded.has(node);\n out.push({\n node,\n level,\n posinset: i + 1,\n setsize: list.length,\n expandable,\n expanded: isExpanded,\n });\n if (isExpanded) walk(node.children!, level + 1);\n });\n };\n walk(this.nodes(), 1);\n return out;\n });\n\n private valueOf(node: MkTreeNode): unknown {\n return node.value !== undefined ? node.value : node;\n }\n\n protected isSelected(node: MkTreeNode): boolean {\n return this.selectable() && this.selected() === this.valueOf(node);\n }\n\n protected isExpanded(node: MkTreeNode): boolean {\n return this.expandedSet().has(node);\n }\n\n protected toggle(node: MkTreeNode): void {\n if (node.disabled || !node.children?.length) return;\n const next = new Set(this.expandedSet());\n if (next.has(node)) next.delete(node);\n else next.add(node);\n this.expandedSet.set(next);\n this.nodeToggle.emit(node);\n }\n\n private expand(node: MkTreeNode): void {\n if (node.disabled || !node.children?.length || this.isExpanded(node)) return;\n const next = new Set(this.expandedSet());\n next.add(node);\n this.expandedSet.set(next);\n this.nodeToggle.emit(node);\n }\n\n private collapse(node: MkTreeNode): void {\n if (!this.isExpanded(node)) return;\n const next = new Set(this.expandedSet());\n next.delete(node);\n this.expandedSet.set(next);\n this.nodeToggle.emit(node);\n }\n\n protected select(node: MkTreeNode): void {\n if (!this.selectable() || node.disabled) return;\n const value = this.valueOf(node);\n this.selected.set(value);\n this.selectionChange.emit(value);\n }\n\n /**\n * Click on a parent row's chevron: toggle expansion WITHOUT selecting, so\n * mouse users can open a branch without committing it (hosts like\n * `mk-tree-select` close on any selection, which would make children\n * unreachable by mouse otherwise). On leaf rows the click falls through to\n * the row handler and behaves as a normal row click.\n */\n protected onToggleClick(event: Event, index: number): void {\n const row = this.rows()[index];\n if (!row?.expandable) return;\n event.stopPropagation();\n this.activeIndex.set(index);\n this.toggle(row.node);\n }\n\n /** Click a row: toggle expansion for parents, select when selectable. */\n protected onRowClick(index: number): void {\n const row = this.rows()[index];\n if (!row) return;\n this.activeIndex.set(index);\n if (row.expandable) this.toggle(row.node);\n this.select(row.node);\n }\n\n protected onKeydown(event: KeyboardEvent, index: number): void {\n const rows = this.rows();\n const row = rows[index];\n if (!row) return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusRow(Math.min(index + 1, rows.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.focusRow(Math.max(index - 1, 0));\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (row.expandable && !row.expanded) this.expand(row.node);\n else if (row.expanded) this.focusRow(index + 1);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (row.expandable && row.expanded) this.collapse(row.node);\n else this.focusRow(this.parentIndex(index));\n break;\n case 'Home':\n event.preventDefault();\n this.focusRow(0);\n break;\n case 'End':\n event.preventDefault();\n this.focusRow(rows.length - 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (row.expandable) this.toggle(row.node);\n this.select(row.node);\n break;\n }\n }\n\n /** Index of the nearest preceding row one level up (or the row itself). */\n private parentIndex(index: number): number {\n const rows = this.rows();\n const level = rows[index]?.level ?? 1;\n for (let i = index - 1; i >= 0; i--) {\n if (rows[i].level < level) return i;\n }\n return index;\n }\n\n private focusRow(index: number): void {\n const rows = this.rows();\n if (index < 0 || index >= rows.length) return;\n this.activeIndex.set(index);\n this.rowRefs()[index]?.nativeElement.focus();\n }\n\n protected tabIndexFor(index: number): number {\n const active = Math.min(this.activeIndex(), this.rows().length - 1);\n return index === Math.max(active, 0) ? 0 : -1;\n }\n\n protected indent(level: number): string {\n return `calc(${level - 1} * var(--mk-space-5))`;\n }\n}\n","<div\n class=\"mk-tree__root\"\n role=\"tree\"\n [attr.aria-label]=\"ariaLabel() || null\"\n>\n @for (row of rows(); track row.node; let i = $index) {\n <div\n #row\n class=\"mk-tree__item\"\n role=\"treeitem\"\n [class.mk-tree__item--selected]=\"isSelected(row.node)\"\n [class.mk-tree__item--disabled]=\"row.node.disabled\"\n [attr.aria-level]=\"row.level\"\n [attr.aria-posinset]=\"row.posinset\"\n [attr.aria-setsize]=\"row.setsize\"\n [attr.aria-expanded]=\"row.expandable ? row.expanded : null\"\n [attr.aria-selected]=\"selectable() ? isSelected(row.node) : null\"\n [attr.aria-disabled]=\"row.node.disabled || null\"\n [attr.tabindex]=\"tabIndexFor(i)\"\n [style.padding-inline-start]=\"indent(row.level)\"\n (click)=\"onRowClick(i)\"\n (keydown)=\"onKeydown($event, i)\"\n >\n <span\n class=\"mk-tree__toggle\"\n aria-hidden=\"true\"\n (click)=\"onToggleClick($event, i)\"\n >\n @if (row.expandable) {\n <span\n class=\"mk-tree__caret\"\n [class.mk-tree__caret--open]=\"row.expanded\"\n ></span>\n }\n </span>\n @if (row.node.icon) {\n <span class=\"mk-tree__icon\" aria-hidden=\"true\">{{ row.node.icon }}</span>\n }\n <span class=\"mk-tree__label\">{{ row.node.label }}</span>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n effect,\n inject,\n input,\n model,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkFocusTrap } from '@mk-kit/ui/core';\n\n/** Edge the drawer slides in from. */\nexport type MkDrawerSide = 'start' | 'end' | 'top' | 'bottom';\n\n/**\n * Drawer — a declarative slide-out panel anchored to a viewport edge, driven by\n * a two-way `open`. Ideal for admin/CMS side panels: filters, entity details,\n * settings, quick-create forms. Traps focus while open, closes on backdrop\n * click or Escape, restores focus on close, and locks body scroll when modal.\n *\n * Slots: `[mkDrawerHeader]` (extra header content), default content (body),\n * `[mkDrawerFooter]` (sticky footer).\n *\n * ```html\n * <button mkButton (click)=\"filters.set(true)\">Filters</button>\n * <mk-drawer [(open)]=\"filters\" side=\"end\" heading=\"Filters\">\n * …filter form…\n * <div mkDrawerFooter>\n * <button mkButton variant=\"ghost\" (click)=\"filters.set(false)\">Close</button>\n * <button mkButton (click)=\"apply()\">Apply</button>\n * </div>\n * </mk-drawer>\n * ```\n */\n@Component({\n selector: 'mk-drawer',\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-drawer',\n '[class.mk-drawer--open]': 'open()',\n '[attr.data-side]': 'side()',\n '[attr.inert]': \"open() ? null : ''\",\n '(keydown.escape)': 'onEscape($event)',\n },\n})\nexport class MkDrawer {\n private readonly document = inject(DOCUMENT);\n /** Localised strings (override globally via `provideMkI18n`). */\n protected readonly i18n = inject(MK_I18N);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly panelRef = viewChild.required<ElementRef<HTMLElement>>('panel');\n\n /** Whether the drawer is open (two-way). */\n readonly open = model(false);\n /** Viewport edge to anchor to. */\n readonly side = input<MkDrawerSide>('end');\n /** Panel width (start/end) or height (top/bottom) — any CSS length. */\n readonly size = input<string>('20rem');\n /** Render a dimmed backdrop and lock body scroll (modal). */\n readonly hasBackdrop = input(true, { transform: booleanAttribute });\n /** Close when the backdrop is clicked. */\n readonly closeOnBackdrop = input(true, { transform: booleanAttribute });\n /** Close on the Escape key. */\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n /** Trap Tab focus inside the panel while open. */\n readonly trapFocus = input(true, { transform: booleanAttribute });\n /** Optional heading rendered in the header. */\n readonly heading = input<string>('');\n /** Hide the header close button. */\n readonly hideClose = input(false, { transform: booleanAttribute });\n /** Accessible name when no `heading` is provided. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n\n readonly titleId = mkUniqueId('mk-drawer-title');\n\n private focusTrap?: MkFocusTrap;\n private previouslyFocused: HTMLElement | null = null;\n private scrollLocked = false;\n\n constructor() {\n effect(() => {\n const isOpen = this.open();\n if (!this.isBrowser) return;\n // Defer so the panel has rendered/settled before focus moves into it.\n queueMicrotask(() => this.sync(isOpen));\n });\n }\n\n private sync(isOpen: boolean): void {\n const panel = this.panelRef().nativeElement;\n if (isOpen) {\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\n if (this.trapFocus()) {\n this.focusTrap = new MkFocusTrap(panel);\n this.focusTrap.activate();\n }\n if (this.hasBackdrop() && !this.scrollLocked) {\n this.document.body.style.setProperty('overflow', 'hidden');\n this.scrollLocked = true;\n }\n } else {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n this.previouslyFocused?.focus?.();\n }\n }\n\n /** Release the focus trap + scroll lock if destroyed while open. */\n ngOnDestroy(): void {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n }\n\n /** Close the drawer. */\n close(): void {\n this.open.set(false);\n }\n\n protected onBackdrop(): void {\n if (this.closeOnBackdrop()) this.close();\n }\n\n protected onEscape(event: Event): void {\n if (this.open() && this.closeOnEscape()) {\n event.stopPropagation();\n this.close();\n }\n }\n}\n","@if (hasBackdrop()) {\n <div class=\"mk-drawer__backdrop\" (click)=\"onBackdrop()\"></div>\n}\n\n<aside\n #panel\n class=\"mk-drawer__panel\"\n role=\"dialog\"\n [attr.aria-modal]=\"hasBackdrop() ? 'true' : null\"\n [attr.aria-label]=\"!heading() ? ariaLabel() || null : null\"\n [attr.aria-labelledby]=\"heading() ? titleId : null\"\n [style.--_size]=\"size()\"\n tabindex=\"-1\"\n>\n @if (heading() || !hideClose()) {\n <header class=\"mk-drawer__header\">\n @if (heading(); as h) {\n <h2 class=\"mk-drawer__title\" [id]=\"titleId\">{{ h }}</h2>\n }\n <ng-content select=\"[mkDrawerHeader]\" />\n @if (!hideClose()) {\n <button\n type=\"button\"\n class=\"mk-drawer__close\"\n [attr.aria-label]=\"i18n.close\"\n (click)=\"close()\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n }\n </header>\n }\n\n <div class=\"mk-drawer__body\">\n <ng-content />\n </div>\n\n <footer class=\"mk-drawer__footer\">\n <ng-content select=\"[mkDrawerFooter]\" />\n </footer>\n</aside>\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Toolbar — a horizontal action bar: content flows on the start side, anything\n * marked `mkToolbarEnd` is pushed to the end. Handy above tables and lists for\n * a title/search on the left and actions on the right.\n *\n * The projected controls are ordinary tab stops (no roving focus), so this is a\n * layout container, not an ARIA `toolbar` widget.\n *\n * ```html\n * <mk-toolbar bordered aria-label=\"Users actions\">\n * <strong>Users</strong>\n * <span mkToolbarEnd>\n * <button mkButton variant=\"outline\">Export</button>\n * <button mkButton>New user</button>\n * </span>\n * </mk-toolbar>\n * ```\n */\n@Component({\n selector: 'mk-toolbar',\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-toolbar',\n '[class.mk-toolbar--bordered]': 'bordered()',\n '[attr.role]': \"ariaLabel() ? 'group' : null\",\n '[attr.aria-label]': 'ariaLabel() || null',\n },\n})\nexport class MkToolbar {\n /** Wrap the bar in a themed, bordered surface. */\n readonly bordered = input(false, { transform: booleanAttribute });\n /** Accessible name (also promotes the bar to an ARIA `group`). */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n}\n","<div class=\"mk-toolbar__start\">\n <ng-content />\n</div>\n<div class=\"mk-toolbar__end\">\n <ng-content select=\"[mkToolbarEnd]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core';\n\n/**\n * PageHeader — the standard heading block at the top of an admin/CMS page: an\n * optional breadcrumb, a page title with optional description and inline meta\n * (badges/status), a right-aligned actions cluster, and an optional tab row\n * beneath. Everything but the title/description is projected, so it composes\n * with `mk-breadcrumb`, `mk-tabs`, buttons, badges, etc.\n *\n * Slots: `[mkPageHeaderBreadcrumb]`, `[mkPageHeaderMeta]` (beside the title),\n * `[mkPageHeaderActions]` (right), `[mkPageHeaderTabs]` (below).\n *\n * ```html\n * <mk-page-header heading=\"Articles\" description=\"Manage your published posts.\">\n * <mk-breadcrumb mkPageHeaderBreadcrumb …></mk-breadcrumb>\n * <mk-badge mkPageHeaderMeta tone=\"success\">Live</mk-badge>\n * <div mkPageHeaderActions>\n * <button mkButton variant=\"outline\">Import</button>\n * <button mkButton>New article</button>\n * </div>\n * </mk-page-header>\n * ```\n */\n@Component({\n selector: 'mk-page-header',\n templateUrl: './page-header.html',\n styleUrl: './page-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'mk-page-header' },\n})\nexport class MkPageHeader {\n /** The page title (rendered as an `<h1>`). */\n readonly heading = input<string>('');\n /** Supporting description under the title. */\n readonly description = input<string>('');\n}\n","<div class=\"mk-page-header__breadcrumb\">\n <ng-content select=\"[mkPageHeaderBreadcrumb]\" />\n</div>\n\n<div class=\"mk-page-header__main\">\n <div class=\"mk-page-header__media\">\n <ng-content select=\"[mkPageHeaderMedia]\" />\n </div>\n <div class=\"mk-page-header__heading\">\n <div class=\"mk-page-header__title-row\">\n @if (heading(); as h) {\n <h1 class=\"mk-page-header__title\">{{ h }}</h1>\n }\n <div class=\"mk-page-header__meta\">\n <ng-content select=\"[mkPageHeaderMeta]\" />\n </div>\n </div>\n @if (description(); as d) {\n <p class=\"mk-page-header__description\">{{ d }}</p>\n }\n </div>\n\n <div class=\"mk-page-header__actions\">\n <ng-content select=\"[mkPageHeaderActions]\" />\n </div>\n</div>\n\n<div class=\"mk-page-header__tabs\">\n <ng-content select=\"[mkPageHeaderTabs]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MkFocusTrap } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkIcon } from '@mk-kit/ui/icon';\n\n/** A single actionable entry in the {@link MkCommandPalette}. */\nexport interface MkCommand {\n /** Stable unique id. */\n id: string;\n /** Text shown (and the primary search target). */\n label: string;\n /** Optional section heading this command is grouped under. */\n group?: string;\n /** Secondary text shown after the label. */\n hint?: string;\n /** Name of a registered icon (see `MkIconRegistry`). */\n icon?: string;\n /** Extra search terms (not shown). */\n keywords?: string;\n /** Display-only shortcut hint, e.g. `⌘S`. */\n shortcut?: string;\n /** Disable the command (skipped by keyboard, not runnable). */\n disabled?: boolean;\n /** Invoked when the command is chosen. */\n run?: () => void;\n}\n\ninterface Group {\n name: string;\n items: { cmd: MkCommand; index: number }[];\n}\n\n/**\n * CommandPalette — a modal ⌘K/Ctrl+K menu for fast, keyboard-first actions and\n * navigation. Supply a flat `commands` list (optionally grouped); the palette\n * filters as you type, groups results, and runs the chosen command. Implements\n * the ARIA combobox + listbox pattern with full keyboard support and focus\n * trapping.\n *\n * Mount it once near your app root and bind `open` (the built-in hotkey toggles\n * it, or open it yourself).\n *\n * ```html\n * <mk-command-palette [(open)]=\"paletteOpen\" [commands]=\"commands\"\n * (commandSelected)=\"run($event)\" />\n * ```\n */\n@Component({\n selector: 'mk-command-palette',\n templateUrl: './command-palette.html',\n styleUrl: './command-palette.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkIcon, NgTemplateOutlet],\n host: {\n class: 'mk-command-palette',\n '[class.mk-command-palette--open]': 'open()',\n '[attr.inert]': \"open() ? null : ''\",\n '(document:keydown)': 'onGlobalKey($event)',\n },\n})\nexport class MkCommandPalette {\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n protected readonly i18n = inject(MK_I18N);\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n /** Whether the palette is open (two-way). */\n readonly open = model(false);\n /** The commands to search and run. */\n readonly commands = input<readonly MkCommand[]>([]);\n /** Search field placeholder. */\n readonly placeholder = input(this.i18n.commandPalettePlaceholder);\n /** Message shown when nothing matches. */\n readonly emptyMessage = input(this.i18n.noResults);\n /** Toggle open with ⌘K / Ctrl+K anywhere. */\n readonly hotkey = input(true, { transform: booleanAttribute });\n\n /** Emits the chosen command (its own `run` callback also fires). */\n readonly commandSelected = output<MkCommand>();\n\n protected readonly query = signal('');\n protected readonly activeIndex = signal(0);\n readonly listId = mkUniqueId('mk-cmdk-list');\n\n private focusTrap?: MkFocusTrap;\n private scrollLocked = false;\n private previouslyFocused: HTMLElement | null = null;\n\n /** Commands matching the current query (label + keywords + group). */\n protected readonly filtered = computed<readonly MkCommand[]>(() => {\n const q = this.query().trim().toLowerCase();\n const list = this.commands();\n if (!q) return list;\n return list.filter((c) =>\n `${c.label} ${c.keywords ?? ''} ${c.group ?? ''}`\n .toLowerCase()\n .includes(q),\n );\n });\n\n /** Filtered commands bucketed into ordered groups (flat index preserved). */\n protected readonly grouped = computed<Group[]>(() => {\n const groups: Group[] = [];\n this.filtered().forEach((cmd, index) => {\n const name = cmd.group ?? '';\n let g = groups.find((x) => x.name === name);\n if (!g) {\n g = { name, items: [] };\n groups.push(g);\n }\n g.items.push({ cmd, index });\n });\n return groups;\n });\n\n constructor() {\n effect(() => {\n const isOpen = this.open();\n if (!this.isBrowser) return;\n queueMicrotask(() => this.sync(isOpen));\n });\n // Keep the active option visible while the list scrolls under 70vh.\n // Synchronous on purpose: on an index change the option elements already\n // exist, and the getElementById chain no-ops for the open-with-index-0\n // case where the list has not rendered yet. (A queueMicrotask here raced\n // test schedulers and bought nothing.)\n effect(() => {\n const index = this.activeIndex();\n if (!this.isBrowser || !this.open() || index < 0) return;\n this.document\n .getElementById(this.optionId(index))\n ?.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n protected groupId(index: number): string {\n return `${this.listId}-group-${index}`;\n }\n\n private sync(isOpen: boolean): void {\n const panel = this.panelRef()?.nativeElement;\n if (isOpen) {\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\n this.query.set('');\n this.activeIndex.set(this.firstEnabled());\n this.document.body.style.setProperty('overflow', 'hidden');\n this.scrollLocked = true;\n if (panel) {\n this.focusTrap = new MkFocusTrap(panel);\n this.focusTrap.activate();\n }\n this.inputRef()?.nativeElement.focus();\n } else {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n this.previouslyFocused?.focus?.();\n }\n }\n\n /**\n * Release the scroll lock + focus trap if the palette is destroyed while\n * open (e.g. a command triggered a route navigation).\n */\n ngOnDestroy(): void {\n this.focusTrap?.release();\n this.focusTrap = undefined;\n if (this.scrollLocked) {\n this.document.body.style.removeProperty('overflow');\n this.scrollLocked = false;\n }\n }\n\n protected onGlobalKey(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.hotkey() && (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n this.open.update((v) => !v);\n }\n }\n\n protected onInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(this.firstEnabled());\n }\n\n protected onKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.select(this.activeIndex());\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n }\n }\n\n protected select(index: number): void {\n const cmd = this.filtered()[index];\n if (!cmd || cmd.disabled) return;\n this.commandSelected.emit(cmd);\n cmd.run?.();\n this.close();\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n private move(delta: number): void {\n const list = this.filtered();\n if (!list.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < list.length; step++) {\n i = (i + delta + list.length) % list.length;\n if (!list[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.filtered().findIndex((c) => !c.disabled);\n }\n\n private lastEnabled(): number {\n const list = this.filtered();\n for (let i = list.length - 1; i >= 0; i--) {\n if (!list[i].disabled) return i;\n }\n return -1;\n }\n}\n","<div class=\"mk-cmdk__backdrop\" (click)=\"close()\"></div>\n\n<div\n #panel\n class=\"mk-cmdk__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"i18n.commandPaletteLabel\"\n>\n <div class=\"mk-cmdk__search\">\n <mk-icon class=\"mk-cmdk__search-icon\" name=\"search\" [size]=\"18\" />\n <input\n #input\n type=\"text\"\n class=\"mk-cmdk__input\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-expanded=\"true\"\n [attr.aria-controls]=\"listId\"\n aria-autocomplete=\"list\"\n [attr.aria-activedescendant]=\"\n activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <ul class=\"mk-cmdk__list\" [id]=\"listId\" role=\"listbox\">\n @for (group of grouped(); track group.name; let gi = $index) {\n @if (group.name) {\n <li\n class=\"mk-cmdk__group-section\"\n role=\"group\"\n [attr.aria-labelledby]=\"groupId(gi)\"\n >\n <div class=\"mk-cmdk__group\" [id]=\"groupId(gi)\">{{ group.name }}</div>\n <ul class=\"mk-cmdk__group-items\" role=\"none\">\n @for (entry of group.items; track entry.cmd.id) {\n <ng-container\n [ngTemplateOutlet]=\"optionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n </ul>\n </li>\n } @else {\n @for (entry of group.items; track entry.cmd.id) {\n <ng-container\n [ngTemplateOutlet]=\"optionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n }\n } @empty {\n <li class=\"mk-cmdk__empty\">{{ emptyMessage() }}</li>\n }\n </ul>\n\n <div class=\"mk-cmdk__sr\" role=\"status\">\n {{ i18n.resultsCount(filtered().length) }}\n </div>\n</div>\n\n<ng-template #optionTpl let-entry>\n <li\n class=\"mk-cmdk__option\"\n [id]=\"optionId(entry.index)\"\n role=\"option\"\n [attr.aria-selected]=\"entry.index === activeIndex()\"\n [attr.aria-disabled]=\"entry.cmd.disabled || null\"\n [class.mk-cmdk__option--active]=\"entry.index === activeIndex()\"\n [class.mk-cmdk__option--disabled]=\"entry.cmd.disabled\"\n (mousemove)=\"!entry.cmd.disabled && activeIndex.set(entry.index)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(entry.index)\"\n >\n @if (entry.cmd.icon) {\n <mk-icon class=\"mk-cmdk__option-icon\" [name]=\"entry.cmd.icon\" [size]=\"18\" />\n }\n <span class=\"mk-cmdk__option-label\">\n {{ entry.cmd.label }}\n @if (entry.cmd.hint) {\n <span class=\"mk-cmdk__option-hint\">{{ entry.cmd.hint }}</span>\n }\n </span>\n @if (entry.cmd.shortcut) {\n <kbd class=\"mk-cmdk__shortcut\">{{ entry.cmd.shortcut }}</kbd>\n }\n </li>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n} from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/** Split direction for {@link MkSplitter}. */\nexport type MkSplitterOrientation = 'horizontal' | 'vertical';\n\n/**\n * Splitter — two resizable panes with a draggable, keyboard-operable separator\n * (ARIA `separator` with `aria-valuenow`). `horizontal` places the panes\n * side-by-side (a vertical handle); `vertical` stacks them (a horizontal\n * handle). The start pane's size is a two-way `position` model (percent).\n *\n * Project the panes with `mkSplitterStart` / `mkSplitterEnd`:\n * ```html\n * <mk-splitter [(position)]=\"split\" [min]=\"20\">\n * <nav mkSplitterStart>…</nav>\n * <main mkSplitterEnd>…</main>\n * </mk-splitter>\n * ```\n * Drag the handle, or focus it and use Arrow keys (Home/End jump to min/max).\n */\n@Component({\n selector: 'mk-splitter',\n templateUrl: './splitter.html',\n styleUrl: './splitter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-splitter',\n '[class.mk-splitter--vertical]': \"orientation() === 'vertical'\",\n '[class.mk-splitter--disabled]': 'disabled()',\n },\n})\nexport class MkSplitter {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly i18n = inject(MK_I18N);\n\n /** `horizontal` = side-by-side; `vertical` = stacked. */\n readonly orientation = input<MkSplitterOrientation>('horizontal');\n /** Two-way position of the separator = start-pane size, in percent (0–100). */\n readonly position = model(50);\n /** Minimum start-pane size (percent). */\n readonly min = input(10, { transform: numberAttribute });\n /** Maximum start-pane size (percent). */\n readonly max = input(90, { transform: numberAttribute });\n /** Keyboard resize increment (percent). */\n readonly step = input(5, { transform: numberAttribute });\n /** Disable resizing. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Accessible label for the separator. */\n readonly ariaLabel = input(this.i18n.resizePanes);\n\n private dragging = false;\n\n /** Clamped size actually applied (defends against out-of-range inputs). */\n protected readonly clampedSize = computed(() =>\n Math.min(this.max(), Math.max(this.min(), this.position())),\n );\n\n protected onPointerdown(event: PointerEvent): void {\n if (this.disabled() || event.button !== 0) return;\n event.preventDefault();\n this.dragging = true;\n try {\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n }\n\n protected onPointermove(event: PointerEvent): void {\n if (!this.dragging) return;\n const rect = this.host.nativeElement.getBoundingClientRect();\n const pct =\n this.orientation() === 'vertical'\n ? ((event.clientY - rect.top) / rect.height) * 100\n : ((event.clientX - rect.left) / rect.width) * 100;\n this.setSize(pct);\n }\n\n protected onPointerup(event: PointerEvent): void {\n if (!this.dragging) return;\n this.dragging = false;\n (event.target as HTMLElement).releasePointerCapture?.(event.pointerId);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n const vertical = this.orientation() === 'vertical';\n const dec = vertical ? 'ArrowUp' : 'ArrowLeft';\n const inc = vertical ? 'ArrowDown' : 'ArrowRight';\n switch (event.key) {\n case dec:\n event.preventDefault();\n this.setSize(this.clampedSize() - this.step());\n break;\n case inc:\n event.preventDefault();\n this.setSize(this.clampedSize() + this.step());\n break;\n case 'Home':\n event.preventDefault();\n this.setSize(this.min());\n break;\n case 'End':\n event.preventDefault();\n this.setSize(this.max());\n break;\n }\n }\n\n private setSize(pct: number): void {\n const next = Math.round(Math.min(this.max(), Math.max(this.min(), pct)));\n if (next !== this.position()) this.position.set(next);\n }\n}\n","<div class=\"mk-splitter__pane mk-splitter__pane--start\" [style.flex-basis.%]=\"clampedSize()\">\n <ng-content select=\"[mkSplitterStart]\" />\n</div>\n\n<div\n class=\"mk-splitter__separator\"\n role=\"separator\"\n tabindex=\"0\"\n [attr.aria-orientation]=\"orientation() === 'vertical' ? 'horizontal' : 'vertical'\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuenow]=\"clampedSize()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (pointerdown)=\"onPointerdown($event)\"\n (pointermove)=\"onPointermove($event)\"\n (pointerup)=\"onPointerup($event)\"\n (pointercancel)=\"onPointerup($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"mk-splitter__grip\" aria-hidden=\"true\"></span>\n</div>\n\n<div class=\"mk-splitter__pane mk-splitter__pane--end\">\n <ng-content select=\"[mkSplitterEnd]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport { MK_I18N, mkUniqueId } from '@mk-kit/ui/core';\nimport type { MkSize, MkTone } from '@mk-kit/ui/core';\n\n/** Corner placement for a fixed {@link MkFab}. `static` renders it inline. */\nexport type MkFabPosition =\n | 'bottom-end'\n | 'bottom-start'\n | 'top-end'\n | 'top-start'\n | 'static';\n\n/** A speed-dial action button projected into {@link MkFab}. */\n@Directive({\n selector: '[mkFabAction]',\n host: { class: 'mk-fab__action', type: 'button' },\n})\nexport class MkFabAction {\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * FAB — a floating action button, fixed to a corner (or `static` for inline\n * use). Project the icon as content and set `label` for the accessible name\n * (shown too when `extended`). Add `mkFabAction` buttons to turn it into a\n * speed-dial that reveals them on toggle.\n *\n * ```html\n * <mk-fab label=\"Create\" position=\"bottom-end\">\n * <svg>…</svg>\n * <button mkFabAction (click)=\"newDoc()\">Doc</button>\n * <button mkFabAction (click)=\"newFolder()\">Folder</button>\n * </mk-fab>\n * ```\n */\n@Component({\n selector: 'mk-fab',\n templateUrl: './fab.html',\n styleUrl: './fab.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-fab',\n '[attr.data-position]': 'position()',\n '[class.mk-fab--extended]': 'extended()',\n '[class.mk-fab--open]': 'open()',\n },\n})\nexport class MkFab {\n private readonly actions = contentChildren(MkFabAction);\n private readonly trigger =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly injector = inject(Injector);\n protected readonly i18n = inject(MK_I18N);\n\n /** Id of the actions container, referenced by the trigger's aria-controls. */\n protected readonly actionsId = mkUniqueId('mk-fab-actions');\n\n /** Corner placement (or `static` to render inline). */\n readonly position = input<MkFabPosition>('bottom-end');\n /** Semantic tone. */\n readonly tone = input<MkTone>('primary');\n /** Size scale. */\n readonly size = input<MkSize>('md');\n /** Accessible label (and visible text when `extended`). */\n readonly label = input(this.i18n.fabLabel);\n /** Render as a pill with the label beside the icon. */\n readonly extended = input(false, { transform: booleanAttribute });\n /** Disable the button. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Two-way open state of the speed-dial. */\n readonly open = model(false);\n\n /** Emitted when the FAB is activated (only when it has no actions). */\n readonly action = output<void>();\n\n protected readonly hasActions = computed(() => this.actions().length > 0);\n\n protected onClick(): void {\n if (this.disabled()) return;\n if (this.hasActions()) {\n const opening = !this.open();\n this.open.set(opening);\n if (opening) {\n // The actions container un-hides on the next render (zoneless);\n // only then can the first action receive focus.\n afterNextRender(\n () => this.actions()[0]?.el.nativeElement.focus(),\n { injector: this.injector },\n );\n }\n } else {\n this.action.emit();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault();\n this.open.set(false);\n // Focus may sit on an action inside the now-hidden container —\n // return it to the trigger instead of letting it drop to <body>.\n this.trigger()?.nativeElement.focus();\n }\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"mk-fab__button\"\n [attr.data-tone]=\"tone()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"hasActions() ? open() : null\"\n [attr.aria-controls]=\"hasActions() ? actionsId : null\"\n [disabled]=\"disabled()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"mk-fab__icon\"><ng-content /></span>\n @if (extended()) {\n <span class=\"mk-fab__label\">{{ label() }}</span>\n }\n</button>\n\n<!-- After the trigger in DOM so Tab reaches the revealed actions next;\n the visual stacking is restored with flex column-reverse in fab.scss. -->\n<div\n class=\"mk-fab__actions\"\n [id]=\"actionsId\"\n [attr.hidden]=\"hasActions() && open() ? null : ''\"\n (keydown)=\"onKeydown($event)\"\n>\n <ng-content select=\"[mkFabAction]\" />\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n PLATFORM_ID,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MK_I18N } from '@mk-kit/ui/core';\n\n/**\n * BackToTop — a floating button that appears once the page (or a scroll target)\n * has scrolled past `threshold`, and smooth-scrolls back to the top on click.\n *\n * ```html\n * <mk-back-to-top [threshold]=\"600\" />\n * ```\n * Pass `[target]` to watch/scroll a specific scroll container instead of the\n * window.\n */\n@Component({\n selector: 'mk-back-to-top',\n templateUrl: './back-to-top.html',\n styleUrl: './back-to-top.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-back-to-top',\n '[class.mk-back-to-top--visible]': 'visible()',\n '[attr.hidden]': 'visible() ? null : \"\"',\n },\n})\nexport class MkBackToTop {\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n protected readonly i18n = inject(MK_I18N);\n\n /** Scroll distance (px) before the button appears. */\n readonly threshold = input(400);\n /** Optional scroll container; defaults to the window. */\n readonly target = input<HTMLElement | null>(null);\n /** Accessible label. */\n readonly ariaLabel = input(this.i18n.backToTop);\n /**\n * Smooth-scroll on click. Ignored under `prefers-reduced-motion: reduce`\n * (programmatic `scrollTo` is not toned down by browsers, so the component\n * falls back to an instant jump itself).\n */\n readonly smooth = input(true, { transform: booleanAttribute });\n\n private readonly scrollY = signal(0);\n protected readonly visible = computed(() => this.scrollY() > this.threshold());\n\n private scrollSource?: EventTarget;\n\n private readonly onScroll = (): void => {\n const el = this.target();\n this.scrollY.set(\n el\n ? el.scrollTop\n : (this.document.defaultView?.scrollY ??\n this.document.documentElement.scrollTop),\n );\n };\n\n constructor() {\n // afterNextRender runs after inputs are bound, so `target()` is resolved.\n afterNextRender(() => {\n if (!this.isBrowser) return;\n this.scrollSource = this.target() ?? this.document.defaultView ?? undefined;\n this.scrollSource?.addEventListener('scroll', this.onScroll, {\n passive: true,\n });\n this.onScroll();\n });\n }\n\n protected scrollToTop(): void {\n const el = this.target();\n const behavior: ScrollBehavior =\n this.smooth() && !this.prefersReducedMotion() ? 'smooth' : 'auto';\n if (el) {\n el.scrollTo({ top: 0, behavior });\n this.focusScrollTarget(el);\n } else {\n this.document.defaultView?.scrollTo({ top: 0, behavior });\n const doc = (this.document.scrollingElement ??\n this.document.documentElement) as HTMLElement | null;\n if (doc) this.focusScrollTarget(doc);\n }\n }\n\n /**\n * Once the page is back at the top the button hides itself, which would\n * silently drop keyboard focus on `<body>` (WCAG 2.4.3). Move focus to the\n * scroll container instead, so the tab sequence resumes from the top.\n */\n private focusScrollTarget(el: HTMLElement): void {\n if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '-1');\n el.focus({ preventScroll: true });\n }\n\n /** `prefers-reduced-motion: reduce`, SSR-safe. */\n private prefersReducedMotion(): boolean {\n const win = this.document.defaultView;\n return (\n !!win &&\n typeof win.matchMedia === 'function' &&\n win.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n }\n\n ngOnDestroy(): void {\n this.scrollSource?.removeEventListener('scroll', this.onScroll);\n }\n}\n","<button\n type=\"button\"\n class=\"mk-back-to-top__button\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"scrollToTop()\"\n>\n <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 19V5M5 12l7-7 7 7\" />\n </svg>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n afterNextRender,\n computed,\n inject,\n input,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { mkUniqueId } from '@mk-kit/ui/core';\n\n/** Which axes get a custom scrollbar for {@link MkScrollArea}. */\nexport type MkScrollAreaOrientation = 'vertical' | 'horizontal' | 'both';\n\ntype Axis = 'vertical' | 'horizontal';\n\n/**\n * ScrollArea — a scroll container that hides the native scrollbar and renders\n * its own themed overlay bars (à la Radix ScrollArea). The projected content\n * scrolls inside a real, keyboard-focusable viewport, so native wheel / arrow\n * scrolling keeps working; the custom bars are decorative (`aria-hidden`) and\n * draggable.\n *\n * ```html\n * <mk-scroll-area maxHeight=\"20rem\">\n * <p>…lots of content…</p>\n * </mk-scroll-area>\n * ```\n *\n * Set `orientation` to `horizontal` / `both` for a horizontal bar, and\n * `hideDelay` to auto-hide the bars after inactivity (`0` = always visible).\n */\n@Component({\n selector: 'mk-scroll-area',\n templateUrl: './scroll-area.html',\n styleUrl: './scroll-area.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-scroll-area',\n '(mouseenter)': 'onEnter()',\n '(mouseleave)': 'onLeave()',\n },\n})\nexport class MkScrollArea {\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly viewportRef =\n viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly contentRef =\n viewChild.required<ElementRef<HTMLElement>>('content');\n\n /** Optional CSS max-height for the viewport, e.g. `'20rem'`. */\n readonly maxHeight = input<string>('');\n /**\n * Accessible name for the scrollable viewport. When set, the viewport is\n * exposed as a labelled `region` landmark — recommended, since the viewport\n * is keyboard-focusable (`tabindex=\"0\"`) and a focusable scroll container\n * should have an accessible name. When empty, no role / label is added.\n */\n readonly ariaLabel = input<string>('');\n /** Which axes render a custom bar. */\n readonly orientation = input<MkScrollAreaOrientation>('vertical');\n /** Auto-hide the bars after this many ms of inactivity (`0` = always on). */\n readonly hideDelay = input(1000, { transform: numberAttribute });\n\n protected readonly viewportId = mkUniqueId('mk-scroll-area');\n\n // Live viewport metrics, mirrored into signals so the thumbs recompute.\n protected readonly scrollTop = signal(0);\n protected readonly scrollLeft = signal(0);\n protected readonly scrollHeight = signal(0);\n protected readonly scrollWidth = signal(0);\n protected readonly clientHeight = signal(0);\n protected readonly clientWidth = signal(0);\n\n protected readonly showVertical = computed(\n () => this.orientation() !== 'horizontal',\n );\n protected readonly showHorizontal = computed(\n () => this.orientation() !== 'vertical',\n );\n\n /** The viewport actually overflows on the given axis. */\n protected readonly vScrollable = computed(\n () => this.scrollHeight() - this.clientHeight() > 1,\n );\n protected readonly hScrollable = computed(\n () => this.scrollWidth() - this.clientWidth() > 1,\n );\n\n /** Thumb length as a fraction of the track (`clientHeight / scrollHeight`). */\n protected readonly vThumbSize = computed(() => {\n const sh = this.scrollHeight();\n return sh > 0 ? Math.min(1, this.clientHeight() / sh) : 0;\n });\n protected readonly hThumbSize = computed(() => {\n const sw = this.scrollWidth();\n return sw > 0 ? Math.min(1, this.clientWidth() / sw) : 0;\n });\n\n /** Thumb position as a fraction of the scroll range (0 = start, 1 = end). */\n protected readonly vThumbOffset = computed(() => {\n const range = this.scrollHeight() - this.clientHeight();\n return range > 0 ? Math.min(1, Math.max(0, this.scrollTop() / range)) : 0;\n });\n protected readonly hThumbOffset = computed(() => {\n const range = this.scrollWidth() - this.clientWidth();\n return range > 0 ? Math.min(1, Math.max(0, this.scrollLeft() / range)) : 0;\n });\n\n /** CSS `top` / `left` for the thumb, accounting for its own length. */\n protected readonly vThumbTop = computed(\n () => `calc((100% - ${this.vThumbSize() * 100}%) * ${this.vThumbOffset()})`,\n );\n protected readonly hThumbLeft = computed(\n () => `calc((100% - ${this.hThumbSize() * 100}%) * ${this.hThumbOffset()})`,\n );\n\n private readonly _visible = signal(false);\n /** Whether the bars are currently shown (always true when `hideDelay` is 0). */\n protected readonly barsVisible = computed(\n () => this.hideDelay() === 0 || this._visible(),\n );\n\n private dragAxis: Axis | null = null;\n private dragStartPointer = 0;\n private dragStartScroll = 0;\n private hideTimer?: ReturnType<typeof setTimeout>;\n private resizeObserver?: ResizeObserver;\n private scrollRaf: number | null = null;\n\n constructor() {\n // Runs after the first render (inputs bound, view children resolved).\n afterNextRender(() => {\n if (!this.isBrowser) return;\n this.measure();\n const view = this.viewportRef().nativeElement;\n const content = this.contentRef().nativeElement;\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => this.measure());\n this.resizeObserver.observe(view);\n this.resizeObserver.observe(content);\n }\n });\n }\n\n /** Snapshot the viewport's scroll metrics into signals. */\n private measure(): void {\n const view = this.viewportRef().nativeElement;\n this.scrollTop.set(view.scrollTop);\n this.scrollLeft.set(view.scrollLeft);\n this.scrollHeight.set(view.scrollHeight);\n this.scrollWidth.set(view.scrollWidth);\n this.clientHeight.set(view.clientHeight);\n this.clientWidth.set(view.clientWidth);\n }\n\n /**\n * rAF-coalesced (same pattern as `MkScrollspy`): a burst of scroll events\n * per frame triggers a single batch of layout reads + signal writes, and the\n * auto-hide idle timer restarts once per flushed frame rather than per raw\n * event.\n */\n protected onScroll(): void {\n if (!this.isBrowser || this.scrollRaf != null) return;\n this.scrollRaf = requestAnimationFrame(() => {\n this.scrollRaf = null;\n this.measure();\n this.show();\n this.scheduleHide();\n });\n }\n\n protected onEnter(): void {\n this.show();\n }\n\n protected onLeave(): void {\n this.scheduleHide();\n }\n\n // --- Thumb dragging -------------------------------------------------------\n\n protected onThumbPointerdown(event: PointerEvent, axis: Axis): void {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation(); // don't let the track handler page as well\n const view = this.viewportRef().nativeElement;\n this.dragAxis = axis;\n if (axis === 'vertical') {\n this.dragStartPointer = event.clientY;\n this.dragStartScroll = view.scrollTop;\n } else {\n this.dragStartPointer = event.clientX;\n this.dragStartScroll = view.scrollLeft;\n }\n try {\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n this.show();\n }\n\n protected onThumbPointermove(event: PointerEvent): void {\n if (!this.dragAxis) return;\n const view = this.viewportRef().nativeElement;\n if (this.dragAxis === 'vertical') {\n const delta = event.clientY - this.dragStartPointer;\n // A 1px thumb move maps to scrollHeight/clientHeight px of scroll.\n const scale = this.clientHeight()\n ? this.scrollHeight() / this.clientHeight()\n : 0;\n view.scrollTop = this.dragStartScroll + delta * scale;\n } else {\n const delta = event.clientX - this.dragStartPointer;\n const scale = this.clientWidth()\n ? this.scrollWidth() / this.clientWidth()\n : 0;\n view.scrollLeft = this.dragStartScroll + delta * scale;\n }\n }\n\n protected onThumbPointerup(event: PointerEvent): void {\n if (!this.dragAxis) return;\n this.dragAxis = null;\n (event.target as HTMLElement).releasePointerCapture?.(event.pointerId);\n this.scheduleHide();\n }\n\n // --- Track paging ---------------------------------------------------------\n\n protected onTrackPointerdown(event: PointerEvent, axis: Axis): void {\n if (event.button !== 0) return;\n const view = this.viewportRef().nativeElement;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n if (axis === 'vertical') {\n const clickPos = event.clientY - rect.top;\n const thumbLen = rect.height * this.vThumbSize();\n const thumbStart = this.vThumbOffset() * (rect.height - thumbLen);\n const page = view.clientHeight * 0.9;\n if (clickPos < thumbStart) view.scrollTop -= page;\n else if (clickPos > thumbStart + thumbLen) view.scrollTop += page;\n } else {\n const clickPos = event.clientX - rect.left;\n const thumbLen = rect.width * this.hThumbSize();\n const thumbStart = this.hThumbOffset() * (rect.width - thumbLen);\n const page = view.clientWidth * 0.9;\n if (clickPos < thumbStart) view.scrollLeft -= page;\n else if (clickPos > thumbStart + thumbLen) view.scrollLeft += page;\n }\n }\n\n // --- Auto-hide ------------------------------------------------------------\n\n private show(): void {\n if (!this.isBrowser) return;\n this._visible.set(true);\n this.clearHideTimer();\n }\n\n private scheduleHide(): void {\n const delay = this.hideDelay();\n if (delay === 0 || this.dragAxis) return;\n this.clearHideTimer();\n this.hideTimer = setTimeout(() => this._visible.set(false), delay);\n }\n\n private clearHideTimer(): void {\n if (this.hideTimer !== undefined) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n ngOnDestroy(): void {\n if (this.scrollRaf != null) {\n cancelAnimationFrame(this.scrollRaf);\n this.scrollRaf = null;\n }\n this.resizeObserver?.disconnect();\n this.clearHideTimer();\n }\n}\n","<div\n #viewport\n [id]=\"viewportId\"\n class=\"mk-scroll-area__viewport\"\n tabindex=\"0\"\n [attr.role]=\"ariaLabel() ? 'region' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [style.max-height]=\"maxHeight() || null\"\n (scroll)=\"onScroll()\"\n>\n <div #content class=\"mk-scroll-area__content\">\n <ng-content />\n </div>\n</div>\n\n@if (showVertical() && vScrollable()) {\n <div\n class=\"mk-scroll-area__scrollbar mk-scroll-area__scrollbar--vertical\"\n [class.mk-scroll-area__scrollbar--visible]=\"barsVisible()\"\n aria-hidden=\"true\"\n (pointerdown)=\"onTrackPointerdown($event, 'vertical')\"\n >\n <div\n class=\"mk-scroll-area__thumb\"\n [style.height.%]=\"vThumbSize() * 100\"\n [style.top]=\"vThumbTop()\"\n (pointerdown)=\"onThumbPointerdown($event, 'vertical')\"\n (pointermove)=\"onThumbPointermove($event)\"\n (pointerup)=\"onThumbPointerup($event)\"\n (pointercancel)=\"onThumbPointerup($event)\"\n ></div>\n </div>\n}\n\n@if (showHorizontal() && hScrollable()) {\n <div\n class=\"mk-scroll-area__scrollbar mk-scroll-area__scrollbar--horizontal\"\n [class.mk-scroll-area__scrollbar--visible]=\"barsVisible()\"\n aria-hidden=\"true\"\n (pointerdown)=\"onTrackPointerdown($event, 'horizontal')\"\n >\n <div\n class=\"mk-scroll-area__thumb\"\n [style.width.%]=\"hThumbSize() * 100\"\n [style.left]=\"hThumbLeft()\"\n (pointerdown)=\"onThumbPointerdown($event, 'horizontal')\"\n (pointermove)=\"onThumbPointermove($event)\"\n (pointerup)=\"onThumbPointerup($event)\"\n (pointercancel)=\"onThumbPointerup($event)\"\n ></div>\n </div>\n}\n","/**\n * Navigation & Layout component group barrel.\n *\n * Re-exports every public symbol of the group via each component folder's\n * `index.ts`. Not part of the library `public-api` by itself — consumed by the\n * top-level surface when the group is wired in.\n */\nexport * from './tabs';\nexport * from './accordion';\nexport * from './breadcrumb';\nexport * from './pagination';\nexport * from './menu';\nexport * from './split-button';\nexport * from './app-shell';\nexport * from './nav-list';\nexport * from './stepper';\nexport * from './tree';\nexport * from './drawer';\nexport * from './toolbar';\nexport * from './page-header';\nexport * from './command-palette';\nexport * from './splitter';\nexport * from './fab';\nexport * from './back-to-top';\nexport * from './scroll-area';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|